diff options
Diffstat (limited to 'recipes-devtools/binutils/files/0001-9f0cfcdd4c342cc2a97bb4591c5542507f073435.patch')
| -rw-r--r-- | recipes-devtools/binutils/files/0001-9f0cfcdd4c342cc2a97bb4591c5542507f073435.patch | 243 |
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 @@ | |||
| 1 | From 9f0cfcdd4c342cc2a97bb4591c5542507f073435 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Michael Eager <eager@eagercon.com> | ||
| 3 | Date: Wed, 31 Oct 2012 15:27:35 +0000 | ||
| 4 | Subject: 2012-10-31 David Holsgrove <david.holsgrove@xilinx.com> | ||
| 5 | |||
| 6 | * config/tc-microblaze.c: Check for weak symbols before | ||
| 7 | emitting relocation. | ||
| 8 | |||
| 9 | 2012-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 | |||
| 17 | Upstream-Status: Backport | ||
| 18 | |||
| 19 | diff --git a/gas/config/tc-microblaze.c b/gas/config/tc-microblaze.c | ||
| 20 | index 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. */ | ||
| 33 | diff --git a/gas/testsuite/gas/microblaze/reloc_strongsym.s b/gas/testsuite/gas/microblaze/reloc_strongsym.s | ||
| 34 | new file mode 100644 | ||
| 35 | index 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 | ||
| 59 | diff --git a/gas/testsuite/gas/microblaze/reloc_sym.d b/gas/testsuite/gas/microblaze/reloc_sym.d | ||
| 60 | new file mode 100644 | ||
| 61 | index 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 | ||
| 110 | diff --git a/gas/testsuite/gas/microblaze/reloc_sym.exp b/gas/testsuite/gas/microblaze/reloc_sym.exp | ||
| 111 | new file mode 100644 | ||
| 112 | index 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 | +} | ||
| 143 | diff --git a/gas/testsuite/gas/microblaze/reloc_weaksym.s b/gas/testsuite/gas/microblaze/reloc_weaksym.s | ||
| 144 | new file mode 100644 | ||
| 145 | index 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 | ||
| 201 | diff --git a/gas/testsuite/gas/microblaze/special_reg.d b/gas/testsuite/gas/microblaze/special_reg.d | ||
| 202 | new file mode 100644 | ||
| 203 | index 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 | ||
| 221 | diff --git a/gas/testsuite/gas/microblaze/special_reg.exp b/gas/testsuite/gas/microblaze/special_reg.exp | ||
| 222 | new file mode 100644 | ||
| 223 | index 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 | +} | ||
| 232 | diff --git a/gas/testsuite/gas/microblaze/special_reg.s b/gas/testsuite/gas/microblaze/special_reg.s | ||
| 233 | new file mode 100644 | ||
| 234 | index 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 | -- | ||
| 242 | 1.7.5.4 | ||
| 243 | |||
