mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
13db6b44ea
* elfxx-mips.c (mips_got_page_ref): New structure. (mips_got_page_entry): Use a section rather than a (bfd, symndx) pair to represent the anchor point. (mips_got_info): Add a got_page_refs field. (mips_elf_link_hash_table): Add a sym_cache field. (mips_got_page_ref_hash, mips_got_page_ref_eq): New functions. (mips_got_page_entry_hash, mips_got_page_entry_eq): Update for new anchor representation. (mips_elf_create_got_info): Create got_page_refs rather than got_page_entries. (mips_elf_record_got_page_ref): New function. (mips_elf_pages_for_range): Move further down file. (mips_elf_record_got_page_entry): Likewise. Take a got as argument. Use a section rather than a (bfd, symndx) pair to represent the anchor point. (mips_elf_resolve_got_page_ref): New function. (mips_elf_resolve_final_got_entries): Use it to populate got_page_entries. (_bfd_mips_elf_check_relocs): Call mips_elf_record_got_page_ref rather than mips_elf_record_got_page_entry. Only nullify h afterwards. (mips_elf_lay_out_got): Call mips_elf_resolve_final_got_entries earlier. ld/testsuite/ * ld-mips-elf/mips16-pic-2.dd, ld-mips-elf/mips16-pic-2.gd: Remove 3 unused local GOT entries. * ld-mips-elf/got-page-4a.s, ld-mips-elf/got-page-4b.s, ld-mips-elf/got-page-4a.d, ld-mips-elf/got-page-4a.got, ld-mips-elf/got-page-4b.d, ld-mips-elf/got-page-4b.got, ld-mips-elf/got-page-5.s, ld-mips-elf/got-page-5.d, ld-mips-elf/got-page-5.got, ld-mips-elf/got-page-6.s, ld-mips-elf/got-page-6.d, ld-mips-elf/got-page-6.got, ld-mips-elf/got-page-7a.s, ld-mips-elf/got-page-7b.s, ld-mips-elf/got-page-7c.s, ld-mips-elf/got-page-7d.s, ld-mips-elf/got-page-7e.s, ld-mips-elf/got-page-7.d, ld-mips-elf/got-page-7.got: New tests. * ld-mips-elf/mips-elf.exp: Run them.
32 lines
761 B
ArmAsm
32 lines
761 B
ArmAsm
# Create a mergeable section full of a single value,
|
|
# and page references relative to one entry called "data".
|
|
#
|
|
# The mergeable entries collapse to one, but the offsets
|
|
# from "data" must still be retained, and need 3 page entries.
|
|
#
|
|
# Technically this isn't valid, because it creates out-of-section
|
|
# page references. It's still a useful way of making sure that
|
|
# offsets in mergeable sections are handled correctly.
|
|
.globl foo
|
|
.ent foo
|
|
foo:
|
|
.set y,0
|
|
.rept 4
|
|
lw $4,%got_page(data + y)($gp)
|
|
addiu $4,$4,%got_ofst(data + y)
|
|
.set y,y+0x8000
|
|
.endr
|
|
.end foo
|
|
|
|
.section .rodata.cst4,"aM",@progbits,4
|
|
data:
|
|
.rept 0x8000*4
|
|
.word 123456
|
|
.endr
|
|
|
|
# Make sure the loadable size of the library is large.
|
|
.section .bss
|
|
.globl g
|
|
g:
|
|
.space 0x800000
|