[PATCH v3 0/3] Fully support standalone Clang/LLVM toolchains

Xiang W wxjstz at 126.com
Fri Jul 9 07:23:33 PDT 2021


在 2021-07-09星期五的 14:49 +0100,Jessica Clarke写道:
> On 9 Jul 2021, at 14:46, Xiang W <wxjstz at 126.com> wrote:
> > 
> > 在 2021-07-09星期五的 05:12 +0100,Jessica Clarke写道:
> > I tested these patches. Some bugs reported
> > 
> > ld.lld: error: can't create dynamic relocation R_RISCV_32 against
> > symbol: _fw_start in readonly segment; recompile object files with
> > -
> > fPIC or pass '-Wl,-z,notext' to allow text relocations in the
> > output
> > > > > defined in
> > /home/merle/workspaces/opensbi/build/platform/generic/firmware/fw_d
> > ynam
> > ic.elf.ld:9
> > > > > referenced by fw_base.S:502
> > (/home/merle/workspaces/opensbi/firmware/fw_base.S:502)
> > > > > 
> > /home/merle/workspaces/opensbi/build/platform/generic/firmware/fw_d
> > ynam
> > ic.o:(.entry+0x3BC)
> 
> This was reported by Bin. Don’t use a Linux triple for something
> that’s
> neither the Linux kernel nor a Linux userspace executable/library.
> 
> Jess

Linux triple?

> 
> > Data is stored in the code segment of base.S. Can be fix by:
> > 
> > diff --git a/firmware/fw_base.S b/firmware/fw_base.S
> > index ee2a51b..f8aea05 100644
> > --- a/firmware/fw_base.S
> > +++ b/firmware/fw_base.S
> > @@ -501,6 +501,7 @@ _skip_trap_exit_rv32_hyp:
> >        /* We don't expect to reach here hence just hang */
> >        j       _start_hang
> > 
> > +       .data
> >        .align 3
> > #ifdef FW_PIC
> > _runtime_offset:
> > 
> > 
> > 
> > 
> > > This patch series is comprised of three parts.
> > > 
> > > The first patch fixes a warning seen when building with LLVM due
> > > to a
> > > bogus combination of assembly directives.
> > > 
> > > The second patch adds build system support for using Clang and
> > > LLVM
> > > binutils, provided your Clang is able to locate a libgcc.a in its
> > > search
> > > path.
> > > 
> > > However, pure LLVM toolchains do not use libgcc, they use
> > > compiler-rt
> > > (libclang_rt.builtins.<arch>.a). We could change the Makefile to
> > > not
> > > hard-code -lgcc and instead use -print-libgcc-file-name, but that
> > > still
> > > requires a bare metal compiler-rt built for the right -march/-
> > > mabi to
> > > be
> > > present, which is often not the case. Moreover, we need very
> > > little
> > > from
> > > libgcc/compiler-rt; RV64 needs nothing, and RV32 only needs 64-
> > > bit
> > > division. Thus, the third patch vendors part of FreeBSD's libquad
> > > and
> > > stops linking against libgcc entirely, allowing OpenSBI to be
> > > built
> > > with
> > > just a cross-compiler. This means that building with any distro-
> > > provided
> > > LLVM just works, as does compiling with the system Clang compiler
> > > and
> > > LLD linker on FreeBSD without any external packages needed
> > > (beyond
> > > GNU
> > > make).
> > > 
> > > Changes in v3:
> > >   * Fixed the binding warning seen when building with LLVM
> > >   * Provide a default -target when CROSS_COMPILE isn't set so the
> > >     variable isn't normally required to be set when cross-
> > > compiling
> > > with
> > >     LLVM (but is still honoured if set).
> > >   * Pass -fuse=bfd when not using LLD to ensure an ld.bfd gets
> > > correctly
> > >     picked up over a plain ld when ld is LLD. Now we always
> > > explicitly
> > >     request Clang and GCC use the linker type corresponding to
> > > LD.
> > > This
> > >     allows BFD to be used on FreeBSD for testing purposes despite
> > > LLD
> > >     being the system linker.
> > > 
> > > Changes in v2:
> > >   * Add documentation to README.md
> > >   * Pass -fuse-ld=lld to Clang when using LLD
> > >   * Modify commit message of first commit to explain -N -> -Wl,-N
> > > change
> > >   * Bring back the old ?= uses for the non-CROSS_COMPILE (and,
> > > now,
> > >     non-LLVM) case; whilst I still think that's how it should be,
> > > it's
> > >     not required for this patch, just related cleanup I did to
> > > reduce
> > >     the complexity of adding the LLVM case.
> > > 
> > > Jessica Clarke (3):
> > >   fw_base: Don't mark fw_platform_init as both global and weak
> > >   Makefile: Support building with Clang and LLVM binutils
> > >   Drop dependency on libgcc by importing part of FreeBSD's
> > > libquad
> > > 
> > >  Makefile                              |  65 +++++-
> > >  README.md                             |  43 +++-
> > >  firmware/fw_base.S                    |   1 -
> > >  lib/utils/libquad/divdi3.c            |  64 ++++++
> > >  lib/utils/libquad/include/limits.h    |  12 ++
> > >  lib/utils/libquad/include/sys/cdefs.h |  12 ++
> > >  lib/utils/libquad/include/sys/types.h |  25 +++
> > >  lib/utils/libquad/moddi3.c            |  66 ++++++
> > >  lib/utils/libquad/objects.mk          |  14 ++
> > >  lib/utils/libquad/qdivrem.c           | 278
> > > ++++++++++++++++++++++++++
> > >  lib/utils/libquad/quad.h              | 105 ++++++++++
> > >  lib/utils/libquad/udivdi3.c           |  52 +++++
> > >  lib/utils/libquad/umoddi3.c           |  54 +++++
> > >  13 files changed, 782 insertions(+), 9 deletions(-)
> > >  create mode 100644 lib/utils/libquad/divdi3.c
> > >  create mode 100644 lib/utils/libquad/include/limits.h
> > >  create mode 100644 lib/utils/libquad/include/sys/cdefs.h
> > >  create mode 100644 lib/utils/libquad/include/sys/types.h
> > >  create mode 100644 lib/utils/libquad/moddi3.c
> > >  create mode 100644 lib/utils/libquad/objects.mk
> > >  create mode 100644 lib/utils/libquad/qdivrem.c
> > >  create mode 100644 lib/utils/libquad/quad.h
> > >  create mode 100644 lib/utils/libquad/udivdi3.c
> > >  create mode 100644 lib/utils/libquad/umoddi3.c
> > > 
> > > -- 
> > > 2.31.0
> > > 
> > > 
> > 
> > 
> 
> 





More information about the opensbi mailing list