mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-11 13:02:10 +08:00
The x86 relax relocations introduced in binutils 2.26 aren't supported by linker on Solaris older than Solaris 12. To use x86 assembler with older Solaris linker, this patch adds 1. A command line option -mrelax-relocations= to x86 assembler to control whether to generate relax relocations. 2. A configure option --enable-x86-relax-relocations to decide whether x86 assembler should generate relax relocations by default. It is defaulted to yes, except for x86 Solaris targets older than Solaris 12. gas/ PR gas/19520 * NEWS: Mention new command line option -mrelax-relocations and new configure option --enable-x86-relax-relocations for x86 target. * config.in: Regenerated. * configure.ac: Add --enable-x86-relax-relocations. (ac_default_x86_relax_relocations): New. Default to 1 except for x86 Solaris targets older than Solaris 12. (DEFAULT_GENERATE_X86_RELAX_RELOCATIONS): Define. * configure: Likewise. * config/tc-i386.c (generate_relax_relocations): New. (OPTION_MRELAX_RELOCATIONS): Likewise. (output_disp): Don't generate relax relocations if generate_relax_relocations is 0. (md_longopts): Add -mrelax-relocations. (md_show_usage): Likewise. (md_parse_option): Handle OPTION_MRELAX_RELOCATIONS. * doc/c-i386.texi: Document -mrelax-relocations=. * testsuite/gas/i386/got-no-relax.d: New file. * testsuite/gas/i386/x86-64-gotpcrel-no-relax.d: Likewise. * testsuite/gas/i386/got.d: Pass -mrelax-relocations=yes to as. * testsuite/gas/i386/localpic.d: Likewise. * testsuite/gas/i386/mixed-mode-reloc32.d: Likewise. * testsuite/gas/i386/reloc32.d: Likewise. * testsuite/gas/i386/x86-64-gotpcrel.d: Likewise. * testsuite/gas/i386/x86-64-localpic.d: Likewise. * testsuite/gas/i386/ilp32/x86-64-gotpcrel.d: Likewise. * testsuite/gas/i386/ilp32/x86-64-localpic.d: Likewise. * testsuite/gas/i386/i386.exp: Run got-no-relax and x86-64-gotpcrel-no-relax. ld/ PR gas/19520 * testsuite/ld-i386/branch1.d: Pass -mrelax-relocations=yes to as. * testsuite/ld-i386/call1.d: Likewise. * testsuite/ld-i386/call2.d: Likewise. * testsuite/ld-i386/call3a.d: Likewise. * testsuite/ld-i386/call3b.d: Likewise. * testsuite/ld-i386/call3c.d: Likewise. * testsuite/ld-i386/call3d.d: Likewise. * testsuite/ld-i386/call3e.d: Likewise. * testsuite/ld-i386/call3f.d: Likewise. * testsuite/ld-i386/call3g.d: Likewise. * testsuite/ld-i386/call3h.d: Likewise. * testsuite/ld-i386/jmp1.d: Likewise. * testsuite/ld-i386/jmp2.d: Likewise. * testsuite/ld-i386/lea1c.d: Likewise. * testsuite/ld-i386/load1.d: Likewise. * testsuite/ld-i386/load2.d: Likewise. * testsuite/ld-i386/load3.d: Likewise. * testsuite/ld-i386/load4a.d: Likewise. * testsuite/ld-i386/load5a.d: Likewise. * testsuite/ld-i386/mov2b.d: Likewise. * testsuite/ld-i386/mov3.d: Likewise. * testsuite/ld-ifunc/ifunc-21-x86-64.d: Likewise. * testsuite/ld-ifunc/ifunc-22-x86-64.d: Likewise. * testsuite/ld-ifunc/ifunc-5r-local-x86-64.d: Likewise. * testsuite/ld-x86-64/call1a.d: Likewise. * testsuite/ld-x86-64/call1b.d: Likewise. * testsuite/ld-x86-64/call1c.d: Likewise. * testsuite/ld-x86-64/call1d.d: Likewise. * testsuite/ld-x86-64/call1e.d: Likewise. * testsuite/ld-x86-64/call1f.d: Likewise. * testsuite/ld-x86-64/call1h.d: Likewise. * testsuite/ld-x86-64/call1i.d: Likewise. * testsuite/ld-x86-64/load1a.d: Likewise. * testsuite/ld-x86-64/load1b.d: Likewise. * testsuite/ld-i386/got1a.S: Load GOT into %ecx and use it. * testsuite/ld-i386/got1.dd: Updated. * testsuite/ld-i386/got1d.S (1): Removed. * testsuite/ld-i386/i386.exp: Add -Wa,-mrelax-relocations=yes. * testsuite/ld-x86-64/x86-64.exp: Likewise.
54 lines
1.2 KiB
ArmAsm
54 lines
1.2 KiB
ArmAsm
.globl bar
|
|
.type bar, @function
|
|
bar:
|
|
pushl %ebx
|
|
call __x86.get_pc_thunk.cx
|
|
addl $_GLOBAL_OFFSET_TABLE_, %ecx
|
|
subl $24, %esp
|
|
leal __FUNCTION__.1862@GOTOFF(%ecx), %eax
|
|
movl %eax, (%esp)
|
|
call *puts@GOT(%ecx)
|
|
addl $24, %esp
|
|
popl %ebx
|
|
ret
|
|
.size bar, .-bar
|
|
|
|
.globl plt
|
|
.type plt, @function
|
|
plt:
|
|
pushl %esi
|
|
pushl %ebx
|
|
call __x86.get_pc_thunk.bx
|
|
addl $_GLOBAL_OFFSET_TABLE_, %ebx
|
|
subl $20, %esp
|
|
leal __FUNCTION__.1866@GOTOFF(%ebx), %esi
|
|
movl %esi, (%esp)
|
|
call *puts@GOT(%ebx)
|
|
addl $20, %esp
|
|
popl %ebx
|
|
popl %esi
|
|
ret
|
|
.section .rodata
|
|
.type __FUNCTION__.1866, @object
|
|
.size __FUNCTION__.1866, 4
|
|
__FUNCTION__.1866:
|
|
.string "plt"
|
|
.type __FUNCTION__.1862, @object
|
|
.size __FUNCTION__.1862, 4
|
|
__FUNCTION__.1862:
|
|
.string "bar"
|
|
.section .text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
|
|
.globl __x86.get_pc_thunk.bx
|
|
.hidden __x86.get_pc_thunk.bx
|
|
.type __x86.get_pc_thunk.bx, @function
|
|
__x86.get_pc_thunk.bx:
|
|
movl (%esp), %ebx
|
|
ret
|
|
.section .text.__x86.get_pc_thunk.cx,"axG",@progbits,__x86.get_pc_thunk.cx,comdat
|
|
.globl __x86.get_pc_thunk.cx
|
|
.hidden __x86.get_pc_thunk.cx
|
|
.type __x86.get_pc_thunk.cx, @function
|
|
__x86.get_pc_thunk.cx:
|
|
movl (%esp), %ecx
|
|
ret
|