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.
28 lines
592 B
ArmAsm
28 lines
592 B
ArmAsm
# Create a mergeable section full of a single value.
|
|
# Create page references relative to instances of the value
|
|
# that are large distances apart.
|
|
#
|
|
# The mergeable entries collapse to one, so even with the
|
|
# large distances in the original file, we should end
|
|
# up with a single page entry.
|
|
.globl foo
|
|
.ent foo
|
|
foo:
|
|
.rept 4
|
|
lw $4,%got_page(1f)($gp)
|
|
addiu $4,$4,%got_ofst(1f)
|
|
.section .rodata.cst4,"aM",@progbits,4
|
|
1:
|
|
.rept 0x8000
|
|
.word 123456
|
|
.endr
|
|
.text
|
|
.endr
|
|
.end foo
|
|
|
|
# Make sure the loadable size of the library is large.
|
|
.section .bss
|
|
.globl g
|
|
g:
|
|
.space 0x800000
|