diff --git a/sys-apps/busybox/files/busybox-1.18.1-ldflags.patch b/sys-apps/busybox/files/busybox-1.18.1-ldflags.patch new file mode 100644 --- /dev/null +++ b/sys-apps/busybox/files/busybox-1.18.1-ldflags.patch @@ -0,0 +1,89 @@ +diff --git a/Makefile b/Makefile +index d9204f4..e9b4700 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_r = -r -nostdlib ++LDFLAGS_MODULE = $(LDFLAGS_r) + 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_r LDFLAGS_MODULE CHECK CHECKFLAGS + + export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS + export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE +diff --git a/scripts/Makefile.build b/scripts/Makefile.build +index 5685b5b..a3926ab 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) $(LDFLAGS) $(LDFLAGS_r) -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) $(LDFLAGS) $(LDFLAGS_r) -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) $(LDFLAGS) $(LDFLAGS_r) -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) +diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib +index 3e54ea7..fbdf2a6 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) $(ld_flags) $(LDFLAGS_$(@F)) \ + $(filter-out FORCE,$^) -o $@ + + # Objcopy