From a9333eb6a7b8dbda735947cd5bc981ff9352a2c9 Mon Sep 17 00:00:00 2001 From: Nathan Phillip Brink 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 --- 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