bd5e6e7e3a
R_SPARC_DISP32. Support R_SPARC_PLT32. (sparc_reloc_map): Add BFD_RELOC_16_PCREL and BFD_RELOC_SPARC_PLT32. (elf32_sparc_check_relocs): Handle R_SPARC_PLT32. (elf32_sparc_relocate_section): Likewise. * elf64-sparc.c (sparc64_elf_howto_table): Fix dst_mask for R_SPARC_DISP32. Support R_SPARC_PLT32 and R_SPARC_PLT64. (sparc_reloc_map): Add BFD_RELOC_16_PCREL, BFD_RELOC_64_PCREL and BFD_RELOC_SPARC_PLT32. (sparc64_elf_check_relocs): Handle R_SPARC_PLT32 and R_SPARC_PLT64. (sparc64_elf_relocate_section): Likewise. * reloc.c (bfd_reloc_code_type): Add BFD_RELOC_SPARC_PLT32. * bfd-in2.h, libbfd.h: Rebuilt. * config/tc-sparc.h (TC_PARSE_CONS_EXPRESSION): Define. (sparc_cons): Provide prototype. * config/tc-sparc.c (tc_gen_reloc): Handle BFD_RELOC_*_PCREL and BFD_RELOC_SPARC_PLT{32,64}. Enumerate for which relocs reloc->addend = fixp->fx_addnumber shouldn't be done instead of enumarating for which pc relative ones it should be done. (sparc_cons_special_reloc): New variable. (sparc_cons): New function. (cons_fix_new_sparc): Use sparc_cons_special_reloc. * testsuite/gas/sparc/pcrel.s: New test. * testsuite/gas/sparc/pcrel.d: Expected output. * testsuite/gas/sparc/pcrel64.s: New test. * testsuite/gas/sparc/pcrel64.d: Expected output. * testsuite/gas/sparc/plt.s: New test. * testsuite/gas/sparc/plt.d: Expected output. * testsuite/gas/sparc/plt64.s: New test. * testsuite/gas/sparc/plt64.d: Expected output. * testsuite/gas/sparc/sparc.exp: Add pcrel, pcrel64, plt and plt64 tests.
23 lines
446 B
Makefile
23 lines
446 B
Makefile
#as: -K PIC
|
|
#objdump: -Dr
|
|
#name: plt relocs
|
|
|
|
.*: +file format .*sparc.*
|
|
|
|
Disassembly of section .text:
|
|
|
|
0+ <.text>:
|
|
0: 40 00 00 00 call 0x0
|
|
0: R_SPARC_WPLT30 foo
|
|
4: 01 00 00 00 nop
|
|
8: 40 00 00 00 call 0x8
|
|
8: R_SPARC_WPLT30 bar\+0x4
|
|
Disassembly of section .data:
|
|
|
|
0+ <.data>:
|
|
...
|
|
0: R_SPARC_PLT32 foo
|
|
4: R_SPARC_PLT32 bar\+0x4
|
|
8: 01 00 00 00 nop
|
|
9: R_SPARC_PLT32 foo
|
|
c: 00 02 03 04 (unimp|illtrap) 0x20304
|