hc
2023-05-26 a23f51ed7a39e452c1037343a84d7db1ca2c5bd7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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