From 9e3313aecd599cca275c602250d928cc6755177b Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Thu, 12 Apr 2007 19:26:09 +0000 Subject: [PATCH] bfd/ * elfxx-mips.c (mips_elf_calculate_relocation): Set DT_TEXTREL when creating a __GOTT_BASE__ or __GOTT_INDEX__ relocation in a read-only section. (_bfd_mips_elf_check_relocs): Likewise. ld/testsuite/ * ld-mips-elf/vxworks1-lib.td: New test. * ld-mips-elf/mips-elf.exp: Run it. --- bfd/ChangeLog | 7 +++++++ bfd/elfxx-mips.c | 11 +++++++++++ ld/testsuite/ChangeLog | 5 +++++ ld/testsuite/ld-mips-elf/mips-elf.exp | 2 +- ld/testsuite/ld-mips-elf/vxworks1-lib.td | 3 +++ 5 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 ld/testsuite/ld-mips-elf/vxworks1-lib.td diff --git a/bfd/ChangeLog b/bfd/ChangeLog index d475ebf92d2..962a288ac6e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2007-04-12 Richard Sandiford + + * elfxx-mips.c (mips_elf_calculate_relocation): Set DT_TEXTREL + when creating a __GOTT_BASE__ or __GOTT_INDEX__ relocation + in a read-only section. + (_bfd_mips_elf_check_relocs): Likewise. + 2007-04-12 Bob Wilson * elf32-xtensa.c (xtensa_is_insntable_section): New. diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index ec651417ad6..5c782de5d5b 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -4275,6 +4275,13 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type); outrel.r_addend = addend; bfd_elf32_swap_reloca_out (abfd, &outrel, loc); + + /* If we've written this relocation for a readonly section, + we need to set DF_TEXTREL again, so that we do not delete the + DT_TEXTREL tag. */ + if (MIPS_ELF_READONLY_SECTION (input_section)) + info->flags |= DF_TEXTREL; + *valuep = 0; return bfd_reloc_ok; } @@ -6493,6 +6500,10 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, return FALSE; } mips_elf_allocate_dynamic_relocations (dynobj, info, 1); + if (MIPS_ELF_READONLY_SECTION (sec)) + /* We tell the dynamic linker that there are + relocations against the text segment. */ + info->flags |= DF_TEXTREL; } } else if (r_type == R_MIPS_CALL_LO16 diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index bea757ea21c..da49ab72005 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-04-12 Richard Sandiford + + * ld-mips-elf/vxworks1-lib.td: New test. + * ld-mips-elf/mips-elf.exp: Run it. + 2007-04-05 H.J. Lu PR ld/4304 diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index 5bb5c38f88b..d022c8ddec9 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -21,7 +21,7 @@ if {[istarget "mips*-*-vxworks"]} { {"VxWorks shared library test 1" "-shared -Tvxworks1.ld" "-mips2" {vxworks1-lib.s} {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd} - {readelf --symbols vxworks1-lib.nd}} + {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}} "libvxworks1.so"} {"VxWorks executable test 1 (dynamic)" \ "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic" diff --git a/ld/testsuite/ld-mips-elf/vxworks1-lib.td b/ld/testsuite/ld-mips-elf/vxworks1-lib.td new file mode 100644 index 00000000000..9f223e38da1 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/vxworks1-lib.td @@ -0,0 +1,3 @@ +#... + 0x0+16 \(TEXTREL\) +0x0 +#pass -- 2.30.2