[PATCH v3 0/3] Fully support standalone Clang/LLVM toolchains
Jessica Clarke
jrtc27 at jrtc27.com
Fri Jul 9 06:49:03 PDT 2021
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_dynam
> 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_dynam
> 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
> 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