diff options
| author | Michael Brown | 2023-06-30 13:03:41 +0200 |
|---|---|---|
| committer | Michael Brown | 2023-07-03 14:31:31 +0200 |
| commit | 6f57d919357a43507935a5ea78a66702ac0f3d54 (patch) | |
| tree | a4a8cae96746ed0a8f78802004706f96ed3bb045 | |
| parent | [build] Inhibit linker warnings about an implied executable stack (diff) | |
| download | ipxe-6f57d919357a43507935a5ea78a66702ac0f3d54.tar.gz ipxe-6f57d919357a43507935a5ea78a66702ac0f3d54.tar.xz ipxe-6f57d919357a43507935a5ea78a66702ac0f3d54.zip | |
[build] Use separate code segment if supported by linker
Some versions of ld will complain that the automatically created (and
unused by our build process) ELF program headers include a "LOAD
segment with RWX permissions".
Silence this warning by adding "-z separate-code" to the linker
options, where supported.
For BIOS builds, where the prefix will generally require writable
access to its own (tiny) code segment, simply inhibit the warning
completely via "--no-warn-rwx-segments".
Signed-off-by: Michael Brown <mcb30@ipxe.org>
| -rw-r--r-- | src/Makefile.housekeeping | 7 | ||||
| -rw-r--r-- | src/arch/x86/Makefile.pcbios | 7 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping index b32003ea5..4a90b3ca4 100644 --- a/src/Makefile.housekeeping +++ b/src/Makefile.housekeeping @@ -502,6 +502,13 @@ LDFLAGS += --gc-sections # LDFLAGS += -static +# Use separate code segment if supported by linker +# +ZSC_TEST = $(LD) -z separate-code --version 2>&1 > /dev/null +ZSC_FLAGS := $(shell [ -z "`$(ZSC_TEST)`" ] && \ + $(ECHO) '-z separate-code -z max-page-size=4096') +LDFLAGS += $(ZSC_FLAGS) + # compiler.h is needed for our linking and debugging system # CFLAGS += -include include/compiler.h diff --git a/src/arch/x86/Makefile.pcbios b/src/arch/x86/Makefile.pcbios index b9f8e6c28..38dfa087c 100644 --- a/src/arch/x86/Makefile.pcbios +++ b/src/arch/x86/Makefile.pcbios @@ -13,6 +13,13 @@ LDSCRIPT_PREFIX = arch/x86/scripts/prefixonly.lds # LDFLAGS += -N --no-check-sections +# Do not warn about RWX segments (required by most prefixes) +# +WRWX_TEST = $(LD) --warn-rwx-segments --version 2>&1 > /dev/null +WRWX_FLAGS := $(shell [ -z "`$(WRWX_TEST)`" ] && \ + $(ECHO) '--no-warn-rwx-segments') +LDFLAGS += $(WRWX_FLAGS) + # Media types. # MEDIA += rom |
