From 51e38d68782784e67211a66c5408d1c1943f1aa9 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Thu, 20 Mar 2008 10:52:14 +0000 Subject: [PATCH] bfd/ * 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. --- bfd/ChangeLog | 5 +++++ bfd/elfxx-mips.c | 11 +++++++++-- ld/testsuite/ChangeLog | 8 ++++++++ ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d | 3 ++- ld/testsuite/ld-mips-elf/elf-rel-got-n64.d | 3 ++- ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d | 3 ++- ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d | 3 ++- 7 files changed, 30 insertions(+), 6 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c6157add39d..333cd1f69aa 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2008-03-20 Richard Sandiford + + * 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 * elf32-spu.c (spu_elf_create_sections): Remove output_bfd parameter. diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 4f141402b0b..930fc4bd415 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -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) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 6ff1af70b81..2068cb9a1e5 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2008-03-20 Richard Sandiford + + * 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 * ld-mips-elf/eh-frame1-n32.d: Expect a warning about .eh_frame_hdr. diff --git a/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d b/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d index 94c3097435d..946751ef037 100644 --- a/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d +++ b/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d @@ -294,7 +294,8 @@ Disassembly of section \.got: 00000001200105e0 <_GLOBAL_OFFSET_TABLE_>: \.\.\. - 1200105ec: 80000000 .* + 1200105e8: 80000000 .* + 1200105ec: 00000000 .* 1200105f0: 00000001 .* 1200105f4: 20010000 .* 1200105f8: 00000001 .* diff --git a/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d b/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d index 3047911cc15..8ebfdf8101d 100644 --- a/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d +++ b/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d @@ -293,7 +293,8 @@ Disassembly of section \.got: 00000000101005e0 <_GLOBAL_OFFSET_TABLE_>: \.\.\. - 101005ec: 80000000 .* + 101005e8: 80000000 .* + 101005ec: 00000000 .* 101005f0: 00000000 .* 101005f4: 1010052c .* 101005f8: 00000000 .* diff --git a/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d b/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d index 8baa1952284..4eb41a60b25 100644 --- a/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d +++ b/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d @@ -418,7 +418,8 @@ Disassembly of section \.got: 00000001200107d0 <_GLOBAL_OFFSET_TABLE_>: \.\.\. - 1200107dc: 80000000 .* + 1200107d8: 80000000 .* + 1200107dc: 00000000 .* 1200107e0: 00000001 .* 1200107e4: 20010000 .* 1200107e8: 00000001 .* diff --git a/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d b/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d index b07c8611769..0111f787522 100644 --- a/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d +++ b/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d @@ -417,7 +417,8 @@ Disassembly of section \.got: 00000000101007d0 <_GLOBAL_OFFSET_TABLE_>: \.\.\. - 101007dc: 80000000 .* + 101007d8: 80000000 .* + 101007dc: 00000000 .* 101007e0: 00000000 .* 101007e4: 10100000 .* 101007e8: 00000000 .* -- 2.30.2