Browse Source
The R_ARC_SDA32 is wrongly described as a ME relocation, fix it. Offset the __SDATA_BEGIN__ to take advantage of the signed 9-bit field of the load/store instructions. include/ 2016-07-08 Claudiu Zissulescu <claziss@synopsys.com> * elf/arc-reloc.def (ARC_SDA32): Don't use ME transformation. ld/ 2016-07-08 Claudiu Zissulescu <claziss@synopsys.com> * emulparams/arcelf.sh (SDATA_START_SYMBOLS): Add offset. * testsuite/ld-arc/sda-relocs.dd: New file. * testsuite/ld-arc/sda-relocs.ld: Likewise. * testsuite/ld-arc/sda-relocs.rd: Likewise. * testsuite/ld-arc/sda-relocs.s: Likewise. * testsuite/ld-arc/arc.exp: Add SDA tests.users/ARM/sve
9 changed files with 113 additions and 2 deletions
@ -0,0 +1,23 @@ |
|||
|
|||
.*: file format .* |
|||
architecture: ARCv2, flags 0x00000113: |
|||
HAS_RELOC, EXEC_P, HAS_SYMS, D_PAGED |
|||
start address 0x00010000 |
|||
|
|||
|
|||
Disassembly of section .text: |
|||
|
|||
[0-9a-f]+ <__SDATA_BEGIN__>: |
|||
[0-9a-f]+: c8[0-9a-f]+ ld_s r0,\[gp,[0-9]+\] |
|||
[0-9a-f]+: cc[0-9a-f]+ ld(h|w)_s r0,\[gp,[0-9]+\] |
|||
[0-9a-f]+: ca[0-9a-f]+ ldb_s r0,\[gp,[0-9]+\] |
|||
[0-9a-f]+: 12[0-9a-f]+ 3600 ld.as r0,\[gp,[0-9]+\] |
|||
[0-9a-f]+: 1a[0-9a-f]+ 3018 st.as r0,\[gp,[0-9]+\] |
|||
[0-9a-f]+: 12[0-9a-f]+ 3000 ld r0,\[gp,[0-9]+\] |
|||
[0-9a-f]+: 12[0-9a-f]+ 3080 ldb r0,\[gp,[0-9]+\] |
|||
[0-9a-f]+: 12[0-9a-f]+ 3100 ld(h|w) r0,\[gp,[0-9]+\] |
|||
[0-9a-f]+: 1a[0-9a-f]+ 301c sth.as r0,\[gp,[0-9]+\] |
|||
[0-9a-f]+: 50[0-9a-f]+ ld_s r1,\[gp,[0-9]+\] |
|||
[0-9a-f]+: 50[0-9a-f]+ st_s r0,\[gp,[0-9]+\] |
|||
[0-9a-f]+: 2200 3f82 0000 002c add r2,gp,0x[0-9a-f]+ |
|||
[0-9a-f]+: 78e0 nop_s |
|||
@ -0,0 +1,20 @@ |
|||
/* Default linker script, for normal executables */ |
|||
OUTPUT_FORMAT("elf32-littlearc", "elf32-bigarc", |
|||
"elf32-littlearc") |
|||
|
|||
OUTPUT_ARCH(arc) |
|||
ENTRY(__start) |
|||
|
|||
SECTIONS |
|||
{ |
|||
/* Read-only sections, merged into text segment: */ |
|||
PROVIDE (__start = 0x10000); |
|||
. = 0x10000 + SIZEOF_HEADERS; |
|||
|
|||
.text : {__SDATA_BEGIN__ = .; *(.text .stub .text.*)} =0 |
|||
.sdata : {*(.sdata .sdata.*)} |
|||
.sbss : {*(.sbss .sbss.*)} |
|||
|
|||
/DISCARD/ : { *(.__arc_profile_*) } |
|||
/DISCARD/ : { *(.note.GNU-stack) } |
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
|
|||
Relocation section '\.rela\.text' .*: |
|||
Offset +Info +Type +Sym.Value +Sym. Name \+ Addend |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA16_LD2 [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA16_LD1 [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA16_LD [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA_LDST2 [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA_LDST2 [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA_LDST [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA_LDST [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA_LDST [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA_LDST1 [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA16_ST2 [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA16_ST2 [0-9a-f]+ a \+ 0 |
|||
[0-9a-f]+ [0-9a-f]+ R_ARC_SDA32_ME [0-9a-f]+ a \+ 0 |
|||
@ -0,0 +1,32 @@ |
|||
.section .text |
|||
.align 4 |
|||
;;; all the ops should have the same offset. |
|||
ld_s r0,[gp,@a@sda] |
|||
;; BFD_RELOC_ARC_SDA16_LD2 |
|||
ldh_s r0,[gp,@a@sda] |
|||
;; BFD_RELOC_ARC_SDA16_LD1 |
|||
ldb_s r0,[gp,@a@sda] |
|||
;; BFD_RELOC_ARC_SDA16_LD |
|||
ld.as r0,[gp,@a@sda] |
|||
st.as r0,[gp,@a@sda] |
|||
;; BFD_RELOC_ARC_SDA_LDST2 |
|||
ld r0,[gp,@a@sda] |
|||
ldb r0,[gp,@a@sda] |
|||
ldh r0,[gp,@a@sda] |
|||
;; ldd r0,[gp,@a@sda] |
|||
;; BFD_RELOC_ARC_SDA_LDST |
|||
sth.as r0,[gp,@a@sda] |
|||
;; BFD_RELOC_ARC_SDA_LDST1 |
|||
ld_s r1,[gp,@a@sda] |
|||
st_s r0,[gp,@a@sda] |
|||
;; BFD_ARC_SDA16_ST2 |
|||
add r2, gp, @a@sda |
|||
;; BFD_ARC_SDA32_ME |
|||
|
|||
.global a |
|||
.section .sbss,"aw",@nobits |
|||
.align 4 |
|||
.type a, @object |
|||
.size a, 4 |
|||
a: |
|||
.zero 4 |
|||
Loading…
Reference in new issue