forked from brl/citadel
115 lines
4.7 KiB
Diff
115 lines
4.7 KiB
Diff
From a9333eb6a7b8dbda735947cd5bc981ff9352a2c9 Mon Sep 17 00:00:00 2001
|
|
From: Nathan Phillip Brink <ohnobinki@ohnopublishing.net>
|
|
Date: Thu, 10 Mar 2011 00:27:08 -0500
|
|
Subject: [PATCH 1/2] Use $(CC) when linking instead of $(LD) and use $(CFLAGS)
|
|
and $(EXTRA_CFLAGS) when linking.
|
|
|
|
This fixes the issue where LDFLAGS escaped with -Wl are ignored during
|
|
compilation. It also simplifies using CFLAGS or EXTRA_CFLAGS (such as
|
|
-m32 on x86_64 or -flto) which apply to both compilation and linking
|
|
situations.
|
|
|
|
Signed-off-by: Nathan Phillip Brink <ohnobinki@ohnopublishing.net>
|
|
---
|
|
Upstream-Status: Pending
|
|
|
|
Makefile | 7 ++++---
|
|
scripts/Makefile.build | 8 ++++----
|
|
scripts/Makefile.lib | 13 +++----------
|
|
3 files changed, 11 insertions(+), 17 deletions(-)
|
|
|
|
Index: busybox-1.23.2/Makefile
|
|
===================================================================
|
|
--- busybox-1.23.2.orig/Makefile
|
|
+++ busybox-1.23.2/Makefile
|
|
@@ -309,7 +309,8 @@ CHECKFLAGS := -D__linux__ -Dlinux -D
|
|
MODFLAGS = -DMODULE
|
|
CFLAGS_MODULE = $(MODFLAGS)
|
|
AFLAGS_MODULE = $(MODFLAGS)
|
|
-LDFLAGS_MODULE = -r
|
|
+LDFLAGS_RELOCATABLE = -r -nostdlib
|
|
+LDFLAGS_MODULE = $(LDFLAGS_RELOCATABLE)
|
|
CFLAGS_KERNEL =
|
|
AFLAGS_KERNEL =
|
|
|
|
@@ -331,7 +332,7 @@ KERNELVERSION = $(VERSION).$(PATCHLEVEL)
|
|
export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION \
|
|
ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
|
|
CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \
|
|
- HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
|
|
+ HOSTCXX HOSTCXXFLAGS LDFLAGS_RELOCATABLE LDFLAGS_MODULE CHECK CHECKFLAGS
|
|
|
|
export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
|
|
export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
|
|
@@ -610,7 +611,7 @@ quiet_cmd_busybox__ ?= LINK $@
|
|
cmd_busybox__ ?= $(srctree)/scripts/trylink \
|
|
"$@" \
|
|
"$(CC)" \
|
|
- "$(CFLAGS) $(CFLAGS_busybox)" \
|
|
+ "$(CFLAGS) $(CFLAGS_busybox) $(EXTRA_CFLAGS)" \
|
|
"$(LDFLAGS) $(EXTRA_LDFLAGS)" \
|
|
"$(core-y)" \
|
|
"$(libs-y)" \
|
|
Index: busybox-1.23.2/scripts/Makefile.build
|
|
===================================================================
|
|
--- busybox-1.23.2.orig/scripts/Makefile.build
|
|
+++ busybox-1.23.2/scripts/Makefile.build
|
|
@@ -174,7 +174,7 @@ cmd_modversions = \
|
|
| $(GENKSYMS) -a $(ARCH) \
|
|
> $(@D)/.tmp_$(@F:.o=.ver); \
|
|
\
|
|
- $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
|
|
+ $(CC) $(ld_flags_partial) $(LDFLAGS_RELOCATABLE) -o $@ $(@D)/.tmp_$(@F) \
|
|
-T $(@D)/.tmp_$(@F:.o=.ver); \
|
|
rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver); \
|
|
else \
|
|
@@ -257,7 +257,7 @@ quiet_cmd_link_o_target = LD $@
|
|
# If the list of objects to link is empty, just create an empty built-in.o
|
|
# -nostdlib is added to make "make LD=gcc ..." work (some people use that)
|
|
cmd_link_o_target = $(if $(strip $(obj-y)),\
|
|
- $(LD) -nostdlib $(ld_flags) -r -o $@ $(filter $(obj-y), $^),\
|
|
+ $(CC) $(ld_flags_partial) $(LDFLAGS_RELOCATABLE) -o $@ $(filter $(obj-y), $^),\
|
|
rm -f $@; $(AR) rcs $@)
|
|
|
|
$(builtin-target): $(obj-y) FORCE
|
|
@@ -292,10 +292,10 @@ $($(subst $(obj)/,,$(@:.o=-objs))) \
|
|
$($(subst $(obj)/,,$(@:.o=-y)))), $^)
|
|
|
|
quiet_cmd_link_multi-y = LD $@
|
|
-cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps)
|
|
+cmd_link_multi-y = $(CC) $(ld_flags_partial) $(LDFLAGS_RELOCATABLE) -o $@ $(link_multi_deps)
|
|
|
|
quiet_cmd_link_multi-m = LD [M] $@
|
|
-cmd_link_multi-m = $(LD) $(ld_flags) $(LDFLAGS_MODULE) -o $@ $(link_multi_deps)
|
|
+cmd_link_multi-m = $(CC) $(ld_flags) $(LDFLAGS_MODULE) -o $@ $(link_multi_deps)
|
|
|
|
# We would rather have a list of rules like
|
|
# foo.o: $(foo-objs)
|
|
Index: busybox-1.23.2/scripts/Makefile.lib
|
|
===================================================================
|
|
--- busybox-1.23.2.orig/scripts/Makefile.lib
|
|
+++ busybox-1.23.2/scripts/Makefile.lib
|
|
@@ -121,7 +121,8 @@ cpp_flags = -Wp,-MD,$(depfile) $(NO
|
|
# yet ld_flags is fed to ld.
|
|
#ld_flags = $(LDFLAGS) $(EXTRA_LDFLAGS)
|
|
# Remove the -Wl, prefix from linker options normally passed through gcc
|
|
-ld_flags = $(filter-out -Wl$(comma)%,$(LDFLAGS) $(EXTRA_LDFLAGS))
|
|
+ld_flags = $(filter-out -Wl$(comma)%,$(LDFLAGS) $(EXTRA_LDFLAGS) $(CFLAGS) $(EXTRA_CFLAGS))
|
|
+ld_flags_partial = $($(filter-out -shared%, $(filter-out -pie%,$(ld_flags))))
|
|
|
|
|
|
# Finds the multi-part object the current object will be linked into
|
|
@@ -151,10 +152,8 @@ $(obj)/%:: $(src)/%_shipped
|
|
# Linking
|
|
# ---------------------------------------------------------------------------
|
|
|
|
-# TODO: LDFLAGS usually is supposed to contain gcc's flags, not ld's.
|
|
-# but here we feed them to ld!
|
|
-quiet_cmd_ld = LD $@
|
|
-cmd_ld = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_$(@F)) \
|
|
+quiet_cmd_ld = CC $@
|
|
+cmd_ld = $(CC) $(ld_flags) $(LDFLAGS_$(@F)) \
|
|
$(filter-out FORCE,$^) -o $@
|
|
|
|
# Objcopy
|