summaryrefslogtreecommitdiffstats
path: root/toolchain-layer/recipes-devtools/binutils/binutils-2.20.1/152_arm_branches_to_weak_symbols.patch
diff options
context:
space:
mode:
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.patch240
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
7if [ $# -ne 1 ]; then
8 echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
9 exit 1
10fi
11
12[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
13patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
14
15case "$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;;
21esac
22
23exit 0
24
25gas/
26
272010-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
332010-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
41gas/testsuite/
42
432010-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@
52diff -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
154diff -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.
165diff -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
189diff -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
211diff -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*
220diff -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
227diff -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