[PATCH v5 4/6] firmware: Only default FW_PIC to y if supported
Xiang W
wxjstz at 126.com
Sat Jul 10 21:03:33 PDT 2021
在 2021-07-11星期日的 03:28 +0100,Jessica Clarke写道:
> Bare-metal GNU ld does not support PIE, so if using it this will
> result
> in a failure to build. Instead, default to FW_PIC=n if not supported.
> Note that an explicit FW_PIC=y is not overriden, to ensure the build
> fails rather than silently producing a position-dependent binary.
>
> Signed-off-by: Jessica Clarke <jrtc27 at jrtc27.com>
> ---
> Makefile | 3 +++
> firmware/objects.mk | 2 +-
> 2 files changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/Makefile b/Makefile
> index 6b64205..ba06313 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -106,6 +106,9 @@ ifndef PLATFORM_RISCV_XLEN
> endif
> endif
>
> +# Check whether the linker supports creating PIEs
> +OPENSBI_LD_PIE := $(shell $(CC) -fPIE -nostdlib -Wl,-pie -x c
> /dev/null -o /dev/null >/dev/null 2>&1 && echo y || echo n)
For llvm, --target and -fuse-ld need to be added here. Otherwise, this
will detect the host instead of what you want
> +
> # Setup list of objects.mk files
> ifdef PLATFORM
> platform-object-mks=$(shell if [ -d $(platform_src_dir)/ ]; then
> find $(platform_src_dir) -iname "objects.mk" | sort -r; fi)
> diff --git a/firmware/objects.mk b/firmware/objects.mk
> index 3bc83cd..8da7ca3 100644
> --- a/firmware/objects.mk
> +++ b/firmware/objects.mk
> @@ -14,7 +14,7 @@ firmware-asflags-y +=
> firmware-ldflags-y +=
>
> ifndef FW_PIC
> -FW_PIC := y
> +FW_PIC := $(OPENSBI_LD_PIE)
> endif
>
> ifeq ($(FW_PIC),y)
> --
> 2.31.0
>
>
More information about the opensbi
mailing list