summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Soller <jeremy@system76.com>2021-02-23 09:23:37 -0700
committerJeremy Soller <jeremy@system76.com>2021-02-23 09:23:37 -0700
commitb2b49fbd7724cf6bede9964e786ecf564d4ab17d (patch)
tree6929510c1283701e618c8e878661361139ff2fb0
parent3a9f308db677f1f30d081e18ee568ae3f0c5ecbd (diff)
Update kernel and makefiles to enable use of GS segment
m---------kernel0
-rw-r--r--mk/kernel.mk12
-rwxr-xr-xmk/kernel_ld.sh17
3 files changed, 23 insertions, 6 deletions
diff --git a/kernel b/kernel
-Subproject ba330ffc9abdb07d59ca3c5b386f07e4fb26d87
+Subproject f873fc7e1a20ac9a5630ec031a086903d291779
diff --git a/mk/kernel.mk b/mk/kernel.mk
index b6634bd..1adbfa6 100644
--- a/mk/kernel.mk
+++ b/mk/kernel.mk
@@ -16,21 +16,21 @@ build/libkernel_live.a: kernel/Cargo.toml kernel/src/* kernel/src/*/* kernel/src
cd kernel && \
cargo rustc --lib --target=$(ROOT)/kernel/targets/$(KTARGET).json --release --features live -Z build-std=core,alloc -- -C soft-float -C debuginfo=2 -C lto --emit link=../$@
-build/kernel: kernel/linkers/$(ARCH).ld build/libkernel.a
+build/kernel: kernel/linkers/$(ARCH).ld mk/kernel_ld.sh build/libkernel.a
export PATH="$(PREFIX_PATH):$$PATH" && \
- $(LD) --gc-sections -z max-page-size=0x1000 -T $< -o $@ build/libkernel.a && \
+ $(ROOT)/mk/kernel_ld.sh $(LD) --gc-sections -z max-page-size=0x1000 -T $< -o $@ build/libkernel.a && \
$(OBJCOPY) --only-keep-debug $@ $@.sym && \
$(OBJCOPY) --strip-debug $@
-build/kernel_coreboot: kernel/linkers/$(ARCH).ld build/libkernel_coreboot.a build/live.o
+build/kernel_coreboot: kernel/linkers/$(ARCH).ld mk/kernel_ld.sh build/libkernel_coreboot.a build/live.o
export PATH="$(PREFIX_PATH):$$PATH" && \
- $(LD) --gc-sections -z max-page-size=0x1000 -T $< -o $@ build/libkernel_coreboot.a build/live.o && \
+ $(ROOT)/mk/kernel_ld.sh $(LD) --gc-sections -z max-page-size=0x1000 -T $< -o $@ build/libkernel_coreboot.a build/live.o && \
$(OBJCOPY) --only-keep-debug $@ $@.sym && \
$(OBJCOPY) --strip-debug $@
-build/kernel_live: kernel/linkers/$(ARCH).ld build/libkernel_live.a build/live.o
+build/kernel_live: kernel/linkers/$(ARCH).ld mk/kernel_ld.sh build/libkernel_live.a build/live.o
export PATH="$(PREFIX_PATH):$$PATH" && \
- $(LD) --gc-sections -z max-page-size=0x1000 -T $< -o $@ build/libkernel_live.a build/live.o && \
+ $(ROOT)/mk/kernel_ld.sh $(LD) --gc-sections -z max-page-size=0x1000 -T $< -o $@ build/libkernel_live.a build/live.o && \
$(OBJCOPY) --only-keep-debug $@ $@.sym && \
$(OBJCOPY) --strip-debug $@
diff --git a/mk/kernel_ld.sh b/mk/kernel_ld.sh
new file mode 100755
index 0000000..0f82b89
--- /dev/null
+++ b/mk/kernel_ld.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+set -ex
+
+LD="$1"
+shift
+
+if "${LD}" -z use-gs-for-tls 2>&1 |
+grep "warning: -z use-gs-for-tls ignored" &> /dev/null
+then
+ echo "Please update your prefix:" >&2
+ echo " rm -rf prefix" >&2
+ echo " make prefix" >&2
+ exit 1
+fi
+
+exec "${LD}" -z use-gs-for-tls "$@"