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 <[email protected]>
---
 Makefile               |    7 ++++---
 scripts/Makefile.build |    8 ++++----
 scripts/Makefile.lib   |   13 +++----------
 3 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/Makefile b/Makefile
index d9204f4..c9a96e4 100644
--- a/Makefile
+++ b/Makefile
@@ -308,7 +308,8 @@ CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix 
-D__unix__ -Wbitwise $(C
 MODFLAGS       = -DMODULE
 CFLAGS_MODULE   = $(MODFLAGS)
 AFLAGS_MODULE   = $(MODFLAGS)
-LDFLAGS_MODULE  = -r
+LDFLAGS_RELOCATABLE = -r -nostdlib
+LDFLAGS_MODULE  = $(LDFLAGS_RELOCATABLE)
 CFLAGS_KERNEL  =
 AFLAGS_KERNEL  =
 
@@ -330,7 +331,7 @@ KERNELVERSION = 
$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 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
@@ -605,7 +606,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)" \
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 5685b5b..9316538 100644
--- a/scripts/Makefile.build
+++ b/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) $(CFLAGS) $(EXTRA_CFLAGS) $(LDFLAGS) 
$(LDFLAGS_RELOCATABLE) -o $@ $(@D)/.tmp_$(@F)        \
                        -T $(@D)/.tmp_$(@F:.o=.ver);                    \
                rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver);        \
        else                                                            \
@@ -256,7 +256,7 @@ ifdef builtin-target
 quiet_cmd_link_o_target = LD      $@
 # If the list of objects to link is empty, just create an empty built-in.o
 cmd_link_o_target = $(if $(strip $(obj-y)),\
-               $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^),\
+               $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(ld_flags) 
$(LDFLAGS_RELOCATABLE) -o $@ $(filter $(obj-y), $^),\
                rm -f $@; $(AR) rcs $@)
 
 $(builtin-target): $(obj-y) FORCE
@@ -291,10 +291,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) $(CFLAGS) $(EXTRA_CFLAGS) $(ld_flags) 
$(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) $(CFLAGS) $(EXTRA_CFLAGS) $(ld_flags) 
$(LDFLAGS_MODULE) -o $@ $(link_multi_deps)
 
 # We would rather have a list of rules like
 #      foo.o: $(foo-objs)
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 3e54ea7..879b918 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -117,12 +117,7 @@ a_flags        = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) 
$(CPPFLAGS) \
 
 cpp_flags      = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(__cpp_flags)
 
-# Seems to be a wrong thing to do. LDFLAGS contains gcc's flags,
-# 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       = $(LDFLAGS) $(EXTRA_LDFLAGS)
 
 # Finds the multi-part object the current object will be linked into
 modname-multi = $(sort $(foreach m,$(multi-used),\
@@ -151,10 +146,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 = CCLD    $@
+cmd_ld = $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(ld_flags) $(LDFLAGS_$(@F)) \
               $(filter-out FORCE,$^) -o $@
 
 # Objcopy
-- 
1.7.3.4

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to