summaryrefslogtreecommitdiffstats
path: root/recipes-devtools/binutils/files/0001-9f0cfcdd4c342cc2a97bb4591c5542507f073435.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-devtools/binutils/files/0001-9f0cfcdd4c342cc2a97bb4591c5542507f073435.patch')
-rw-r--r--recipes-devtools/binutils/files/0001-9f0cfcdd4c342cc2a97bb4591c5542507f073435.patch243
1 files changed, 243 insertions, 0 deletions
diff --git a/recipes-devtools/binutils/files/0001-9f0cfcdd4c342cc2a97bb4591c5542507f073435.patch b/recipes-devtools/binutils/files/0001-9f0cfcdd4c342cc2a97bb4591c5542507f073435.patch
new file mode 100644
index 00000000..4f0993eb
--- /dev/null
+++ b/recipes-devtools/binutils/files/0001-9f0cfcdd4c342cc2a97bb4591c5542507f073435.patch
@@ -0,0 +1,243 @@
1From 9f0cfcdd4c342cc2a97bb4591c5542507f073435 Mon Sep 17 00:00:00 2001
2From: Michael Eager <eager@eagercon.com>
3Date: Wed, 31 Oct 2012 15:27:35 +0000
4Subject: 2012-10-31 David Holsgrove <david.holsgrove@xilinx.com>
5
6 * config/tc-microblaze.c: Check for weak symbols before
7 emitting relocation.
8
92012-10-31 David Holsgrove <david.holsgrove@xilinx.com>
10
11 * gas/microblaze: New.
12 * gas/microblaze/reloc_sym.exp: Add test case.
13 * gas/microblaze/reloc_strongsym.s: Likewise.
14 * gas/microblaze/reloc_weaksym.s: Likewise.
15 * gas/microblaze/reloc_sym.d: Likewise.
16
17Upstream-Status: Backport
18
19diff --git a/gas/config/tc-microblaze.c b/gas/config/tc-microblaze.c
20index 3ab854f..86ac90b 100644
21--- a/gas/config/tc-microblaze.c
22+++ b/gas/config/tc-microblaze.c
23@@ -2065,7 +2065,8 @@ md_estimate_size_before_relax (fragS * fragP,
24 as_bad (_("Absolute PC-relative value in relaxation code. Assembler error....."));
25 abort ();
26 }
27- else if ((S_GET_SEGMENT (fragP->fr_symbol) == segment_type))
28+ else if (S_GET_SEGMENT (fragP->fr_symbol) == segment_type &&
29+ !S_IS_WEAK (fragP->fr_symbol))
30 {
31 fragP->fr_subtype = DEFINED_PC_OFFSET;
32 /* Don't know now whether we need an imm instruction. */
33diff --git a/gas/testsuite/gas/microblaze/reloc_strongsym.s b/gas/testsuite/gas/microblaze/reloc_strongsym.s
34new file mode 100644
35index 0000000..8f34028
36--- /dev/null
37+++ b/gas/testsuite/gas/microblaze/reloc_strongsym.s
38@@ -0,0 +1,20 @@
39+ .section ".testsection"
40+ .align 2
41+ .globl test_start
42+ .ent test_start
43+ .type test_start, @function
44+test_start:
45+ .frame r19,8,r15 # vars= 0, regs= 1, args= 0
46+ .mask 0x00080000
47+ addik r1,r1,-8
48+ swi r19,r1,4
49+ addk r19,r1,r0
50+ addk r1,r19,r0
51+ lwi r19,r1,4
52+ addik r1,r1,8
53+ rtsd r15,8
54+ nop # Unfilled delay slot
55+
56+ .end test_start
57+$Lfe1:
58+ .size test_start,$Lfe1-test_start
59diff --git a/gas/testsuite/gas/microblaze/reloc_sym.d b/gas/testsuite/gas/microblaze/reloc_sym.d
60new file mode 100644
61index 0000000..212d0bb
62--- /dev/null
63+++ b/gas/testsuite/gas/microblaze/reloc_sym.d
64@@ -0,0 +1,45 @@
65+
66+reloc_sym.x: file format elf32-microblaze
67+
68+
69+Disassembly of section .text:
70+
71+10000054 <__def_start>:
72+10000054: 3021fff8 addik r1, r1, -8
73+10000058: fa610004 swi r19, r1, 4
74+1000005c: 12610000 addk r19, r1, r0
75+10000060: 10330000 addk r1, r19, r0
76+10000064: ea610004 lwi r19, r1, 4
77+10000068: 30210008 addik r1, r1, 8
78+1000006c: b60f0008 rtsd r15, 8
79+10000070: 80000000 or r0, r0, r0
80+
81+10000074 <main>:
82+10000074: 3021ffe0 addik r1, r1, -32
83+10000078: f9e10000 swi r15, r1, 0
84+1000007c: fa61001c swi r19, r1, 28
85+10000080: 12610000 addk r19, r1, r0
86+10000084: b000efff imm -4097
87+10000088: b9f4ff7c brlid r15, -132 // 4 <test_start>
88+1000008c: 80000000 or r0, r0, r0
89+10000090: b9f4ffc4 brlid r15, -60 // 10000054 <__def_start>
90+10000094: 80000000 or r0, r0, r0
91+10000098: 10600000 addk r3, r0, r0
92+1000009c: e9e10000 lwi r15, r1, 0
93+100000a0: 10330000 addk r1, r19, r0
94+100000a4: ea61001c lwi r19, r1, 28
95+100000a8: 30210020 addik r1, r1, 32
96+100000ac: b60f0008 rtsd r15, 8
97+100000b0: 80000000 or r0, r0, r0
98+
99+Disassembly of section .testsection:
100+
101+00000004 <test_start>:
102+ 4: 3021fff8 addik r1, r1, -8
103+ 8: fa610004 swi r19, r1, 4
104+ c: 12610000 addk r19, r1, r0
105+ 10: 10330000 addk r1, r19, r0
106+ 14: ea610004 lwi r19, r1, 4
107+ 18: 30210008 addik r1, r1, 8
108+ 1c: b60f0008 rtsd r15, 8
109+ 20: 80000000 or r0, r0, r0
110diff --git a/gas/testsuite/gas/microblaze/reloc_sym.exp b/gas/testsuite/gas/microblaze/reloc_sym.exp
111new file mode 100644
112index 0000000..c7f7322
113--- /dev/null
114+++ b/gas/testsuite/gas/microblaze/reloc_sym.exp
115@@ -0,0 +1,27 @@
116+# Relocation test.
117+
118+proc ld_test { objects ldflags dest test } {
119+ set ld_output [target_link $objects $dest $ldflags]
120+ if [string match "" $ld_output] then { pass $test } else { fail $test }
121+}
122+
123+proc objdump_test { exec flags dest test } {
124+ set objcopy [find_binutils_prog objdump]
125+ verbose -log "$objcopy $flags $exec > $dest"
126+ catch "exec $objcopy $flags $exec > $dest" objdump_output
127+ if [string match "" $objdump_output] then { pass $test } else { fail $test }
128+}
129+
130+proc regexp_test { file1 file2 test } {
131+ if [regexp_diff $file1 $file2] then { fail $test } else { pass $test }
132+}
133+
134+
135+global srcdir subdir
136+if [istarget microblaze*-*-*] {
137+ gas_test "reloc_strongsym.s" {-o reloc_strongsym.o} {} {assembling reloc_strongsym}
138+ gas_test "reloc_weaksym.s" {-o reloc_weaksym.o} {} {assembling reloc_weaksym}
139+ ld_test {reloc_strongsym.o reloc_weaksym.o} {-e 0 -section-start .text=0x10000054 -section-start .testsection=0x4} {reloc_sym.x} {linking reloc_sym.x}
140+ objdump_test {reloc_sym.x} {-d --section=.text --section=.testsection} {reloc_sym.dump} {disassembling reloc_sym.x}
141+ regexp_test {reloc_sym.dump} "$srcdir/$subdir/reloc_sym.d" {matching disassembly}
142+}
143diff --git a/gas/testsuite/gas/microblaze/reloc_weaksym.s b/gas/testsuite/gas/microblaze/reloc_weaksym.s
144new file mode 100644
145index 0000000..7dd9b98
146--- /dev/null
147+++ b/gas/testsuite/gas/microblaze/reloc_weaksym.s
148@@ -0,0 +1,52 @@
149+ .text
150+ .align 2
151+ .globl __def_start
152+ .ent __def_start
153+ .type __def_start, @function
154+__def_start:
155+ .frame r19,8,r15 # vars= 0, regs= 1, args= 0
156+ .mask 0x00080000
157+ addik r1,r1,-8
158+ swi r19,r1,4
159+ addk r19,r1,r0
160+ addk r1,r19,r0
161+ lwi r19,r1,4
162+ addik r1,r1,8
163+ rtsd r15,8
164+ nop # Unfilled delay slot
165+
166+ .end __def_start
167+$Lfe1:
168+ .size __def_start,$Lfe1-__def_start
169+ .align 2
170+ .globl main
171+ .ent main
172+ .type main, @function
173+main:
174+ .frame r19,32,r15 # vars= 0, regs= 1, args= 24
175+ .mask 0x00088000
176+ addik r1,r1,-32
177+ swi r15,r1,0
178+ swi r19,r1,28
179+ addk r19,r1,r0
180+ brlid r15,test_start
181+ nop # Unfilled delay slot
182+
183+ brlid r15,test_start_strong
184+ nop # Unfilled delay slot
185+
186+ addk r3,r0,r0
187+ lwi r15,r1,0
188+ addk r1,r19,r0
189+ lwi r19,r1,28
190+ addik r1,r1,32
191+ rtsd r15,8
192+ nop # Unfilled delay slot
193+
194+ .end main
195+$Lfe2:
196+ .size main,$Lfe2-main
197+ .weakext test_start
198+ test_start = __def_start
199+ .globl test_start_strong
200+ test_start_strong = __def_start
201diff --git a/gas/testsuite/gas/microblaze/special_reg.d b/gas/testsuite/gas/microblaze/special_reg.d
202new file mode 100644
203index 0000000..aad0131
204--- /dev/null
205+++ b/gas/testsuite/gas/microblaze/special_reg.d
206@@ -0,0 +1,14 @@
207+#as:
208+#objdump: -ds
209+
210+.*: file format .*
211+
212+Contents of section .text:
213+ 0000 9409d000 6c00d000 001ff800 ....l.......
214+
215+Disassembly of section .text:
216+
217+00000000 <.text>:
218+ 0: 9409d000 mts rpid, r9
219+ 4: 6c00d000 tnput rfsl0
220+ 8: 001ff800 add r0, r31, r31
221diff --git a/gas/testsuite/gas/microblaze/special_reg.exp b/gas/testsuite/gas/microblaze/special_reg.exp
222new file mode 100644
223index 0000000..4824f76
224--- /dev/null
225+++ b/gas/testsuite/gas/microblaze/special_reg.exp
226@@ -0,0 +1,5 @@
227+# MicroBlaze test for special register.
228+
229+if [istarget microblaze*-*-*] {
230+ run_dump_test "special_reg"
231+}
232diff --git a/gas/testsuite/gas/microblaze/special_reg.s b/gas/testsuite/gas/microblaze/special_reg.s
233new file mode 100644
234index 0000000..d92ee4d
235--- /dev/null
236+++ b/gas/testsuite/gas/microblaze/special_reg.s
237@@ -0,0 +1,3 @@
238+ mts rpid, r9
239+ tnput rfsl0
240+ add r0, r31, r31
241--
2421.7.5.4
243