diff options
Diffstat (limited to 'toolchain-layer/recipes-devtools/binutils/binutils-2.20.1/152_arm_branches_to_weak_symbols.patch')
-rw-r--r-- | toolchain-layer/recipes-devtools/binutils/binutils-2.20.1/152_arm_branches_to_weak_symbols.patch | 240 |
1 files changed, 0 insertions, 240 deletions
diff --git a/toolchain-layer/recipes-devtools/binutils/binutils-2.20.1/152_arm_branches_to_weak_symbols.patch b/toolchain-layer/recipes-devtools/binutils/binutils-2.20.1/152_arm_branches_to_weak_symbols.patch deleted file mode 100644 index 48523f889..000000000 --- a/toolchain-layer/recipes-devtools/binutils/binutils-2.20.1/152_arm_branches_to_weak_symbols.patch +++ /dev/null | |||
@@ -1,240 +0,0 @@ | |||
1 | #!/bin/sh -e | ||
2 | ## 152_arm_branches_to_weak_symbols.dpatch | ||
3 | ## | ||
4 | ## DP: Description: http://sourceware.org/ml/binutils/2010-04/msg00446.html | ||
5 | ## DP: Description: taken from the trunk | ||
6 | |||
7 | if [ $# -ne 1 ]; then | ||
8 | echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" | ||
9 | exit 1 | ||
10 | fi | ||
11 | |||
12 | [ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts | ||
13 | patch_opts="${patch_opts:--f --no-backup-if-mismatch}" | ||
14 | |||
15 | case "$1" in | ||
16 | -patch) patch $patch_opts -p0 < $0;; | ||
17 | -unpatch) patch $patch_opts -p0 -R < $0;; | ||
18 | *) | ||
19 | echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" | ||
20 | exit 1;; | ||
21 | esac | ||
22 | |||
23 | exit 0 | ||
24 | |||
25 | gas/ | ||
26 | |||
27 | 2010-05-04 Nick Clifton <nickc@redhat.com> | ||
28 | |||
29 | * write.c (fixup_segment): Revert previous delta. | ||
30 | * config/tc-arm.h (TC_FORCE_RELOCATION_LOCAL): Also force the | ||
31 | generation of relocations for fixups against weak symbols. | ||
32 | |||
33 | 2010-04-29 Nathan Sidwell <nathan@codesourcery.com> | ||
34 | |||
35 | * write.c (fixup_segment): Do not assume we know the section a | ||
36 | defined weak symbol is in. | ||
37 | * config/tc-arm.c (relax_adr, relax_branch, md_apply_fix): Treat | ||
38 | weak symbols as not known to be in the same section, even if they | ||
39 | are defined. | ||
40 | |||
41 | gas/testsuite/ | ||
42 | |||
43 | 2010-04-29 Nathan Sidwell <nathan@codesourcery.com> | ||
44 | |||
45 | * gas/arm/weakdef-1.s: New. | ||
46 | * gas/arm/weakdef-1.d: New. | ||
47 | * gas/arm/weakdef-2.s: New. | ||
48 | * gas/arm/weakdef-2.d: New. | ||
49 | * gas/arm/weakdef-2.l: New. | ||
50 | |||
51 | @DPATCH@ | ||
52 | diff -urN gas.orig/config/tc-arm.c gas/config/tc-arm.c | ||
53 | --- a/gas/config/tc-arm.c 2010-02-22 08:06:52.000000000 +0000 | ||
54 | +++ b/gas/config/tc-arm.c 2010-05-06 12:52:25.391085365 +0000 | ||
55 | @@ -18207,7 +18207,8 @@ | ||
56 | |||
57 | /* Assume worst case for symbols not known to be in the same section. */ | ||
58 | if (!S_IS_DEFINED (fragp->fr_symbol) | ||
59 | - || sec != S_GET_SEGMENT (fragp->fr_symbol)) | ||
60 | + || sec != S_GET_SEGMENT (fragp->fr_symbol) | ||
61 | + || S_IS_WEAK (fragp->fr_symbol)) | ||
62 | return 4; | ||
63 | |||
64 | val = relaxed_symbol_addr (fragp, stretch); | ||
65 | @@ -18250,7 +18251,8 @@ | ||
66 | |||
67 | /* Assume worst case for symbols not known to be in the same section. */ | ||
68 | if (!S_IS_DEFINED (fragp->fr_symbol) | ||
69 | - || sec != S_GET_SEGMENT (fragp->fr_symbol)) | ||
70 | + || sec != S_GET_SEGMENT (fragp->fr_symbol) | ||
71 | + || S_IS_WEAK (fragp->fr_symbol)) | ||
72 | return 4; | ||
73 | |||
74 | #ifdef OBJ_ELF | ||
75 | @@ -19463,22 +19465,23 @@ | ||
76 | not have a reloc for it, so tc_gen_reloc will reject it. */ | ||
77 | fixP->fx_done = 1; | ||
78 | |||
79 | - if (fixP->fx_addsy | ||
80 | - && ! S_IS_DEFINED (fixP->fx_addsy)) | ||
81 | + if (fixP->fx_addsy) | ||
82 | { | ||
83 | - as_bad_where (fixP->fx_file, fixP->fx_line, | ||
84 | - _("undefined symbol %s used as an immediate value"), | ||
85 | - S_GET_NAME (fixP->fx_addsy)); | ||
86 | - break; | ||
87 | - } | ||
88 | + const char *msg = 0; | ||
89 | |||
90 | - if (fixP->fx_addsy | ||
91 | - && S_GET_SEGMENT (fixP->fx_addsy) != seg) | ||
92 | - { | ||
93 | - as_bad_where (fixP->fx_file, fixP->fx_line, | ||
94 | - _("symbol %s is in a different section"), | ||
95 | - S_GET_NAME (fixP->fx_addsy)); | ||
96 | - break; | ||
97 | + if (! S_IS_DEFINED (fixP->fx_addsy)) | ||
98 | + msg = _("undefined symbol %s used as an immediate value"); | ||
99 | + else if (S_GET_SEGMENT (fixP->fx_addsy) != seg) | ||
100 | + msg = _("symbol %s is in a different section"); | ||
101 | + else if (S_IS_WEAK (fixP->fx_addsy)) | ||
102 | + msg = _("symbol %s is weak and may be overridden later"); | ||
103 | + | ||
104 | + if (msg) | ||
105 | + { | ||
106 | + as_bad_where (fixP->fx_file, fixP->fx_line, | ||
107 | + msg, S_GET_NAME (fixP->fx_addsy)); | ||
108 | + break; | ||
109 | + } | ||
110 | } | ||
111 | |||
112 | newimm = encode_arm_immediate (value); | ||
113 | @@ -19504,24 +19507,25 @@ | ||
114 | unsigned int highpart = 0; | ||
115 | unsigned int newinsn = 0xe1a00000; /* nop. */ | ||
116 | |||
117 | - if (fixP->fx_addsy | ||
118 | - && ! S_IS_DEFINED (fixP->fx_addsy)) | ||
119 | + if (fixP->fx_addsy) | ||
120 | { | ||
121 | - as_bad_where (fixP->fx_file, fixP->fx_line, | ||
122 | - _("undefined symbol %s used as an immediate value"), | ||
123 | - S_GET_NAME (fixP->fx_addsy)); | ||
124 | - break; | ||
125 | - } | ||
126 | + const char *msg = 0; | ||
127 | |||
128 | - if (fixP->fx_addsy | ||
129 | - && S_GET_SEGMENT (fixP->fx_addsy) != seg) | ||
130 | - { | ||
131 | - as_bad_where (fixP->fx_file, fixP->fx_line, | ||
132 | - _("symbol %s is in a different section"), | ||
133 | - S_GET_NAME (fixP->fx_addsy)); | ||
134 | - break; | ||
135 | + if (! S_IS_DEFINED (fixP->fx_addsy)) | ||
136 | + msg = _("undefined symbol %s used as an immediate value"); | ||
137 | + else if (S_GET_SEGMENT (fixP->fx_addsy) != seg) | ||
138 | + msg = _("symbol %s is in a different section"); | ||
139 | + else if (S_IS_WEAK (fixP->fx_addsy)) | ||
140 | + msg = _("symbol %s is weak and may be overridden later"); | ||
141 | + | ||
142 | + if (msg) | ||
143 | + { | ||
144 | + as_bad_where (fixP->fx_file, fixP->fx_line, | ||
145 | + msg, S_GET_NAME (fixP->fx_addsy)); | ||
146 | + break; | ||
147 | + } | ||
148 | } | ||
149 | - | ||
150 | + | ||
151 | newimm = encode_arm_immediate (value); | ||
152 | temp = md_chars_to_number (buf, INSN_SIZE); | ||
153 | |||
154 | diff -urN gas.orig/config/tc-arm.h gas/config/tc-arm.h | ||
155 | --- a/gas/config/tc-arm.h 2009-09-01 00:24:01.000000000 +0000 | ||
156 | +++ b/gas/config/tc-arm.h 2010-05-06 12:53:42.784835970 +0000 | ||
157 | @@ -183,6 +183,7 @@ | ||
158 | (!(FIX)->fx_pcrel \ | ||
159 | || (FIX)->fx_r_type == BFD_RELOC_ARM_GOT32 \ | ||
160 | || (FIX)->fx_r_type == BFD_RELOC_32 \ | ||
161 | + || ((FIX)->fx_addsy != NULL && S_IS_WEAK ((FIX)->fx_addsy)) \ | ||
162 | || TC_FORCE_RELOCATION (FIX)) | ||
163 | |||
164 | /* Force output of R_ARM_REL32 relocations against thumb function symbols. | ||
165 | diff -urN gas.orig/testsuite/gas/arm/weakdef-1.d gas/testsuite/gas/arm/weakdef-1.d | ||
166 | --- a/gas/testsuite/gas/arm/weakdef-1.d 1970-01-01 00:00:00.000000000 +0000 | ||
167 | +++ b/gas/testsuite/gas/arm/weakdef-1.d 2010-05-06 12:52:25.391085365 +0000 | ||
168 | @@ -0,0 +1,20 @@ | ||
169 | +# name: Thumb branch to weak | ||
170 | +# as: | ||
171 | +# objdump: -dr | ||
172 | +# This test is only valid on ELF based ports. | ||
173 | +#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* | ||
174 | + | ||
175 | +.*: +file format .*arm.* | ||
176 | + | ||
177 | + | ||
178 | +Disassembly of section .text: | ||
179 | + | ||
180 | +0+000 <Weak>: | ||
181 | + 0: e7fe b.n 2 <Strong> | ||
182 | + 0: R_ARM_THM_JUMP11 Strong | ||
183 | + | ||
184 | +0+002 <Strong>: | ||
185 | + 2: f7ff bffe b.w 0 <Random> | ||
186 | + 2: R_ARM_THM_JUMP24 Random | ||
187 | + 6: f7ff bffe b.w 0 <Weak> | ||
188 | + 6: R_ARM_THM_JUMP24 Weak | ||
189 | diff -urN gas.orig/testsuite/gas/arm/weakdef-1.s gas/testsuite/gas/arm/weakdef-1.s | ||
190 | --- a/gas/testsuite/gas/arm/weakdef-1.s 1970-01-01 00:00:00.000000000 +0000 | ||
191 | +++ b/gas/testsuite/gas/arm/weakdef-1.s 2010-05-06 12:52:25.391085365 +0000 | ||
192 | @@ -0,0 +1,18 @@ | ||
193 | + .syntax unified | ||
194 | + .text | ||
195 | + .thumb | ||
196 | + | ||
197 | + .globl Weak | ||
198 | + .weak Weak | ||
199 | + .thumb_func | ||
200 | + .type Weak, %function | ||
201 | +Weak: | ||
202 | + b Strong | ||
203 | + .size Weak, .-Weak | ||
204 | + | ||
205 | + .globl Strong | ||
206 | + .type Strong, %function | ||
207 | +Strong: | ||
208 | + b Random | ||
209 | + b Weak | ||
210 | + .size Strong, .-Strong | ||
211 | diff -urN gas.orig/testsuite/gas/arm/weakdef-2.d gas/testsuite/gas/arm/weakdef-2.d | ||
212 | --- a/gas/testsuite/gas/arm/weakdef-2.d 1970-01-01 00:00:00.000000000 +0000 | ||
213 | +++ b/gas/testsuite/gas/arm/weakdef-2.d 2010-05-06 12:52:25.391085365 +0000 | ||
214 | @@ -0,0 +1,5 @@ | ||
215 | +# name: adr of weak | ||
216 | +# as: | ||
217 | +# error-output: weakdef-2.l | ||
218 | +# This test is only valid on ELF based ports. | ||
219 | +#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* | ||
220 | diff -urN gas.orig/testsuite/gas/arm/weakdef-2.l gas/testsuite/gas/arm/weakdef-2.l | ||
221 | --- a/gas/testsuite/gas/arm/weakdef-2.l 1970-01-01 00:00:00.000000000 +0000 | ||
222 | +++ b/gas/testsuite/gas/arm/weakdef-2.l 2010-05-06 12:52:25.391085365 +0000 | ||
223 | @@ -0,0 +1,3 @@ | ||
224 | +[^:]*: Assembler messages: | ||
225 | +[^:]*:9: Error: symbol Weak is weak and may be overridden later | ||
226 | +[^:]*:10: Error: symbol Weak is weak and may be overridden later | ||
227 | diff -urN gas.orig/testsuite/gas/arm/weakdef-2.s gas/testsuite/gas/arm/weakdef-2.s | ||
228 | --- a/gas/testsuite/gas/arm/weakdef-2.s 1970-01-01 00:00:00.000000000 +0000 | ||
229 | +++ b/gas/testsuite/gas/arm/weakdef-2.s 2010-05-06 12:52:25.391085365 +0000 | ||
230 | @@ -0,0 +1,10 @@ | ||
231 | + .syntax unified | ||
232 | + .text | ||
233 | + .globl Strong | ||
234 | +Strong: | ||
235 | + adrl r0,Strong | ||
236 | + adr r0,Strong | ||
237 | + .globl Weak | ||
238 | + .weak Weak | ||
239 | +Weak: adrl r0,Weak | ||
240 | + adr r0,Weak | ||