From b2b49fbd7724cf6bede9964e786ecf564d4ab17d Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Tue, 23 Feb 2021 09:23:37 -0700 Subject: [PATCH] Update kernel and makefiles to enable use of GS segment --- kernel | 2 +- mk/kernel.mk | 12 ++++++------ mk/kernel_ld.sh | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 7 deletions(-) create mode 100755 mk/kernel_ld.sh diff --git a/kernel b/kernel index ba330ff..f873fc7 160000 --- a/kernel +++ b/kernel @@ -1 +1 @@ -Subproject commit ba330ffc9abdb07d59ca3c5b386f07e4fb26d870 +Subproject commit f873fc7e1a20ac9a5630ec031a086903d2917792 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 "$@"