* elfxx-mips.c (MIPS_ELF_GNU_GOT1_MASK): New macro.
	(_bfd_mips_elf_finish_dynamic_sections): Use it instead of 0x80000000.

ld/testsuite/
	* ld-mips-elf/elf-rel-got-n64-linux.d: Expect bit 63 rather than
	bit 31 of the second GOT entry to be set.
	* ld-mips-elf/elf-rel-got-n64.d: Likewise.
	* ld-mips-elf/elf-rel-xgot-n64-linux.d: Likewise.
	* ld-mips-elf/elf-rel-xgot-n64.d: Likewise.
This commit is contained in:
Richard Sandiford 2008-03-20 10:52:14 +00:00
parent c65be8d78a
commit 51e38d6878
7 changed files with 30 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2008-03-20 Richard Sandiford <rsandifo@nildram.co.uk>
* elfxx-mips.c (MIPS_ELF_GNU_GOT1_MASK): New macro.
(_bfd_mips_elf_finish_dynamic_sections): Use it instead of 0x80000000.
2008-03-20 Alan Modra <amodra@bigpond.net.au>
* elf32-spu.c (spu_elf_create_sections): Remove output_bfd parameter.

View File

@ -648,6 +648,12 @@ static bfd *reldyn_sorting_bfd;
#define MIPS_RESERVED_GOTNO(INFO) \
(mips_elf_hash_table (INFO)->is_vxworks ? 3 : 2)
/* The value to write into got[1] for SVR4 targets, to identify it is
a GNU object. The dynamic linker can then use got[1] to store the
module pointer. */
#define MIPS_ELF_GNU_GOT1_MASK(abfd) \
((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
/* The offset of $gp from the beginning of the .got section. */
#define ELF_MIPS_GP_OFFSET(INFO) \
(mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
@ -9230,7 +9236,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
runtime. The second entry will be used by some runtime loaders.
This isn't the case of IRIX rld. */
MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000,
MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
}
@ -9254,7 +9260,8 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
+ index++ * MIPS_ELF_GOT_SIZE (output_bfd));
MIPS_ELF_PUT_WORD (output_bfd, 0x80000000, sgot->contents
MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
sgot->contents
+ index++ * MIPS_ELF_GOT_SIZE (output_bfd));
if (! info->shared)

View File

@ -1,3 +1,11 @@
2008-03-20 Richard Sandiford <rsandifo@nildram.co.uk>
* ld-mips-elf/elf-rel-got-n64-linux.d: Expect bit 63 rather than
bit 31 of the second GOT entry to be set.
* ld-mips-elf/elf-rel-got-n64.d: Likewise.
* ld-mips-elf/elf-rel-xgot-n64-linux.d: Likewise.
* ld-mips-elf/elf-rel-xgot-n64.d: Likewise.
2008-03-17 Richard Sandiford <rsandifo@nildram.co.uk>
* ld-mips-elf/eh-frame1-n32.d: Expect a warning about .eh_frame_hdr.

View File

@ -294,7 +294,8 @@ Disassembly of section \.got:
00000001200105e0 <_GLOBAL_OFFSET_TABLE_>:
\.\.\.
1200105ec: 80000000 .*
1200105e8: 80000000 .*
1200105ec: 00000000 .*
1200105f0: 00000001 .*
1200105f4: 20010000 .*
1200105f8: 00000001 .*

View File

@ -293,7 +293,8 @@ Disassembly of section \.got:
00000000101005e0 <_GLOBAL_OFFSET_TABLE_>:
\.\.\.
101005ec: 80000000 .*
101005e8: 80000000 .*
101005ec: 00000000 .*
101005f0: 00000000 .*
101005f4: 1010052c .*
101005f8: 00000000 .*

View File

@ -418,7 +418,8 @@ Disassembly of section \.got:
00000001200107d0 <_GLOBAL_OFFSET_TABLE_>:
\.\.\.
1200107dc: 80000000 .*
1200107d8: 80000000 .*
1200107dc: 00000000 .*
1200107e0: 00000001 .*
1200107e4: 20010000 .*
1200107e8: 00000001 .*

View File

@ -417,7 +417,8 @@ Disassembly of section \.got:
00000000101007d0 <_GLOBAL_OFFSET_TABLE_>:
\.\.\.
101007dc: 80000000 .*
101007d8: 80000000 .*
101007dc: 00000000 .*
101007e0: 00000000 .*
101007e4: 10100000 .*
101007e8: 00000000 .*