aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2023-06-30 12:03:41 +0100
committerMichael Brown <mcb30@ipxe.org>2023-07-03 13:31:31 +0100
commit6f57d919357a43507935a5ea78a66702ac0f3d54 (patch)
treea4a8cae96746ed0a8f78802004706f96ed3bb045
parente17568ad0642490143d0c6b154c874b9b9e285bf (diff)
downloadipxe-6f57d919357a43507935a5ea78a66702ac0f3d54.zip
ipxe-6f57d919357a43507935a5ea78a66702ac0f3d54.tar.gz
ipxe-6f57d919357a43507935a5ea78a66702ac0f3d54.tar.bz2
[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.housekeeping7
-rw-r--r--src/arch/x86/Makefile.pcbios7
2 files changed, 14 insertions, 0 deletions
diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping
index b32003e..4a90b3c 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 b9f8e6c..38dfa08 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