mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
54806ffa85
Complement:
commit 1bbce13264
Author: Maciej W. Rozycki <macro@linux-mips.org>
Date: Mon Jun 24 23:55:46 2013 +0000
<https://sourceware.org/ml/binutils/2013-06/msg00077.html>, ("MIPS:
Compressed PLT/stubs support"), and also choose between regular and
compressed PLT entries as appropriate for any branches referring.
bfd/
* elfxx-mips.c (mips_elf_calculate_relocation): Handle branches
in PLT compression selection.
(_bfd_mips_elf_check_relocs): Likewise.
ld/
* testsuite/ld-mips-elf/compressed-plt-1.s: Add branch support.
* testsuite/ld-mips-elf/compressed-plt-1a.s: Likewise.
* testsuite/ld-mips-elf/compressed-plt-1b.s: Likewise.
* testsuite/ld-mips-elf/compressed-plt-1-o32-branch.od: New
test.
* testsuite/ld-mips-elf/compressed-plt-1-o32-branch.rd: New
test.
* testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-bronly.od:
New test.
* testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-bronly.rd:
New test.
* testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-branch.od:
New test.
* testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-branch.rd:
New test.
* testsuite/ld-mips-elf/compressed-plt-1-o32-umips-bronly.od:
New test.
* testsuite/ld-mips-elf/compressed-plt-1-o32-umips-bronly.rd:
New test.
* testsuite/ld-mips-elf/compressed-plt-1-o32-umips-branch.od:
New test.
* testsuite/ld-mips-elf/compressed-plt-1-o32-umips-branch.rd:
New test.
* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
75 lines
1.8 KiB
ArmAsm
75 lines
1.8 KiB
ArmAsm
.macro call_stub, name
|
|
.set push
|
|
.set nomips16
|
|
.section .mips16.call.\name, "ax", @progbits
|
|
.ent __call_stub_\name
|
|
.type __call_stub_\name, @function
|
|
__call_stub_\name:
|
|
la $25, \name
|
|
jr $25
|
|
.set pop
|
|
.endm
|
|
|
|
# Flags to specify how a particular function is referenced
|
|
|
|
.equ DC, 1 # Direct call from "compressed" code
|
|
.equ BC, 2 # Branch from "compressed" code
|
|
.equ IC, 4 # Indirect call from "compressed" code
|
|
.equ DU, 8 # Direct call from "uncompressed" code
|
|
.equ BU, 16 # Branch from "uncompressed" code
|
|
.equ IU, 32 # Indirect call from "uncompressed" code
|
|
.equ LO, 64 # Direct address reference (%lo)
|
|
|
|
# A wrapper around a macro called test_one, which is defined by
|
|
# the file that includes this one. NAME is the name of a function
|
|
# that is referenced in the way described by FLAGS, an inclusive OR
|
|
# of the flags above. The wrapper filters out any functions whose
|
|
# FLAGS are not a subset of FILTER.
|
|
|
|
.macro test_filter, name, flags
|
|
.if (\flags & filter) == \flags
|
|
test_one \name, \flags
|
|
.endif
|
|
.endm
|
|
|
|
.macro test_all_dc, name, flags
|
|
test_filter \name, \flags
|
|
test_filter \name\()_dc, (\flags | DC)
|
|
.endm
|
|
|
|
.macro test_all_bc, name, flags
|
|
test_all_dc \name, \flags
|
|
test_all_dc \name\()_bc, (\flags | BC)
|
|
.endm
|
|
|
|
.macro test_all_ic, name, flags
|
|
test_all_bc \name, \flags
|
|
test_all_bc \name\()_ic, (\flags | IC)
|
|
.endm
|
|
|
|
.macro test_all_du, name, flags
|
|
test_all_ic \name, \flags
|
|
test_all_ic \name\()_du, (\flags | DU)
|
|
.endm
|
|
|
|
.macro test_all_bu, name, flags
|
|
test_all_du \name, \flags
|
|
test_all_du \name\()_bu, (\flags | BU)
|
|
.endm
|
|
|
|
.macro test_all_iu, name, flags
|
|
test_all_bu \name, \flags
|
|
test_all_bu \name\()_iu, (\flags | IU)
|
|
.endm
|
|
|
|
.macro test_all_lo, name, flags
|
|
test_all_iu \name, \flags
|
|
test_all_iu \name\()_lo, (\flags | LO)
|
|
.endm
|
|
|
|
# Test all the combinations of interest.
|
|
|
|
.macro test_all
|
|
test_all_lo f, 0
|
|
.endm
|