00c5099111
* elfxx-sparc.c (_bfd_sparc_elf_check_relocs): For R_SPARC_GOTDATA_OP_HIX22 and R_SPARC_GOTDATA_OP_LOX10, only bump the GOT refcount for global symbols. (_bfd_sparc_elf_gc_sweep_hook): Likewise only decrement the GOT count for these relocs on global symbols. (gdopoff): New. (_bfd_sparc_elf_relocate_section): Perform GOTDATA optimizations on local symbol references which are not STT_GNU_IFUNC. Handle relocation of them like R_SPARC_HIX22 and R_SPARC_LOX10 respectively, and deal with negative vs. non-negative values properly. ld/testsuite * ld-sparc/gotop32.s: Add local symbol case. * ld-sparc/gotop64.s: Likewise. * ld-sparc/gotop32.rd: Adjust expected results. * ld-sparc/gotop32.td: Likewise. * ld-sparc/gotop64.dd: Likewise. * ld-sparc/gotop64.rd: Likewise. * ld-sparc/gotop64.td: Likewise.
34 lines
954 B
Text
34 lines
954 B
Text
#source: gotop32.s
|
|
#as: --32 -K PIC
|
|
#ld: -shared -melf32_sparc
|
|
#objdump: -drj.text
|
|
#target: sparc*-*-*
|
|
|
|
.*: +file format elf32-sparc
|
|
|
|
Disassembly of section .text:
|
|
00001000 <foo-0x8>:
|
|
+1000: 81 c3 e0 08 retl *
|
|
+1004: ae 03 c0 17 add %o7, %l7, %l7
|
|
|
|
00001008 <foo>:
|
|
+1008: 9d e3 bf 98 save %sp, -104, %sp
|
|
+100c: 2f 00 00 44 sethi %hi\(0x11000\), %l7
|
|
+1010: 7f ff ff fc call 1000 <_.*>
|
|
+1014: ae 05 e0 60 add %l7, 0x60, %l7 ! 11060 <.*>
|
|
+1018: 01 00 00 00 nop *
|
|
+101c: 23 00 00 00 sethi %hi\(0\), %l1
|
|
+1020: 01 00 00 00 nop *
|
|
+1024: a2 1c 60 04 xor %l1, 4, %l1
|
|
+1028: 01 00 00 00 nop *
|
|
+102c: f0 05 c0 11 ld \[ %l7 \+ %l1 \], %i0
|
|
+1030: 01 00 00 00 nop *
|
|
+1034: 23 00 00 03 sethi %hi\(0xc00\), %l1
|
|
+1038: 01 00 00 00 nop
|
|
+103c: a2 1c 63 94 xor %l1, 0x394, %l1
|
|
+1040: 01 00 00 00 nop
|
|
+1044: b0 05 c0 11 add %l7, %l1, %i0
|
|
+1048: 01 00 00 00 nop
|
|
+104c: 81 c7 e0 08 ret
|
|
+1050: 81 e8 00 00 restore
|
|
#pass
|