mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
b314ec0eae
* elfxx-mips.c (mips_elf_calculate_relocation): Allow local stubs to be used for calls from MIPS16 code. gas/ * config/tc-mips.h (TC_SYMFIELD_TYPE): New. * config/tc-mips.c (append_insn): Record which symbols have R_MIPS16_26 relocations against them. (mips_fix_adjustable): Don't reduce relocations against such symbols. ld/testsuite/ * ld-mips-elf/mips16-local-stubs-1.s, * ld-mips-elf/mips16-local-stubs-1.d: New tests. * ld-mips-elf/mips-elf.exp: Run them.
50 lines
726 B
ArmAsm
50 lines
726 B
ArmAsm
.macro makestub,type,func,section
|
|
.text
|
|
.set \type
|
|
.type \func,@function
|
|
.ent \func
|
|
\func:
|
|
jr $31
|
|
.end \func
|
|
|
|
.section \section,"ax",@progbits
|
|
.set nomips16
|
|
.type stub_for_\func,@function
|
|
.ent stub_for_\func
|
|
stub_for_\func:
|
|
.set noat
|
|
la $1,\func
|
|
jr $1
|
|
.set at
|
|
.end stub_for_\func
|
|
.endm
|
|
|
|
.macro makestubs,id
|
|
makestub nomips16,f\id,.mips16.call.F\id
|
|
makestub nomips16,g\id,.mips16.call.fp.G\id
|
|
makestub mips16,h\id,.mips16.fn.H\id
|
|
.endm
|
|
|
|
.macro makecaller,type,func
|
|
.text
|
|
.set \type
|
|
.globl \func
|
|
.type \func,@function
|
|
.ent \func
|
|
\func:
|
|
jal f1
|
|
jal f2
|
|
jal g1
|
|
jal g2
|
|
jal h1
|
|
jal h2
|
|
.end \func
|
|
.endm
|
|
|
|
makestubs 1
|
|
makestubs 2
|
|
makestubs 3
|
|
|
|
makecaller nomips16,caller1
|
|
makecaller mips16,caller2
|