summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2018-04-09 20:32:54 +0200
committerRichard Braun <rbraun@sceen.net>2018-04-09 20:32:54 +0200
commit25b89e773603f7c479b731f82d2d8189e0455fcd (patch)
tree64620d392b8210514bb712c9ed2b15b24bdd7429
parent2e2f5a495e8204c85e929e0f4088bae55fb81989 (diff)
Make linking with libgcc a per-architecture option
-rw-r--r--Makefile2
-rw-r--r--arch/x86/Makefile9
2 files changed, 10 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 8b37270..17de695 100644
--- a/Makefile
+++ b/Makefile
@@ -272,7 +272,7 @@ XBUILD_CFLAGS += -Wno-unneeded-internal-declaration
XBUILD_CFLAGS += $(call xbuild_check_cc_option,-fno-PIE)
XBUILD_CFLAGS += $(call xbuild_check_cc_option,-Qunused-arguments)
-XBUILD_LDFLAGS += -static -nostdlib -lgcc
+XBUILD_LDFLAGS += -static -nostdlib
# Disable the build ID feature of the linker
XBUILD_LDFLAGS += -Wl,--build-id=none
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index f0640f7..9866d93 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -20,11 +20,20 @@ XBUILD_LDFLAGS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096
ifeq ($(CONFIG_X86_32),y)
biarch := $(call cc-option,-m32)
+
XBUILD_CPPFLAGS += -m32
+
+ XBUILD_LDFLAGS += -lgcc
else
biarch := -m64
+
XBUILD_CPPFLAGS += -m64
+ # XXX The kernel isn't linked with libgcc on amd64, because libgcc
+ # uses red zones. But since there are actually very few functions
+ # provided by libgcc on amd64, it was decided to just not link with
+ # it. If it turns out that libgcc is really needed some day, the
+ # kernel can somewhat easily be changed to support red zones.
XBUILD_CFLAGS += -mno-red-zone
XBUILD_CFLAGS += -mcmodel=kernel
endif