From 5499724a85d9cb03d56bb3aa7ef6519c00cfece8 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Tue, 10 Aug 1999 06:43:11 +0000 Subject: [PATCH] * elf32-mips.c (_bfd_mips_elf_size_dynamic_sections): Always output DT_MIPS_GOTSYM. (_bfd_mips_elf_finish_dynamic_sections): Use the same value as DT_MIPS_SYMTABNO if there are no global GOT symbols. --- bfd/ChangeLog | 8 ++++++++ bfd/elf32-mips.c | 33 +++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index cbd32f1abe2..b1f6a394217 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +Tue Aug 10 00:34:29 1999 Mark P. Mitchell + Ralf Baechle + + * elf32-mips.c (_bfd_mips_elf_size_dynamic_sections): Always + output DT_MIPS_GOTSYM. + (_bfd_mips_elf_finish_dynamic_sections): Use the same value as + DT_MIPS_SYMTABNO if there are no global GOT symbols. + Tue Aug 10 00:21:08 1999 Mark P. Mitchell * elf32-mips.c (mips_elf_create_dynamic_relocation): Change diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index 9eafe7296d3..f1526918a95 100644 --- a/bfd/elf32-mips.c +++ b/bfd/elf32-mips.c @@ -7557,7 +7557,7 @@ _bfd_mips_elf_check_relocs (abfd, info, sec, relocs) /* Even though we don't directly need a GOT entry for this symbol, a symbol must have a dynamic symbol - table index greater that DT_GOTSYM if there are + table index greater that DT_MIPS_GOTSYM if there are dynamic relocations against it. */ if (h != NULL && !mips_elf_record_global_got_symbol (h, info, g)) @@ -8163,8 +8163,7 @@ _bfd_mips_elf_size_dynamic_sections (output_bfd, info) if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0)) return false; - if (g != NULL && g->global_gotsym != NULL - && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0)) + if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0)) return false; if (IRIX_COMPAT (dynobj) == ict_irix5 @@ -8559,6 +8558,23 @@ _bfd_mips_elf_finish_dynamic_sections (output_bfd, info) dyn.d_un.d_val = g->local_gotno; break; + case DT_MIPS_UNREFEXTNO: + /* The index into the dynamic symbol table which is the + entry of the first external symbol that is not + referenced within the same object. */ + dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1; + break; + + case DT_MIPS_GOTSYM: + if (g->global_gotsym) + { + dyn.d_un.d_val = g->global_gotsym->dynindx; + break; + } + /* In case if we don't have global got symbols we default + to setting DT_MIPS_GOTSYM to the same value as + DT_MIPS_SYMTABNO, so we just fall through. */ + case DT_MIPS_SYMTABNO: name = ".dynsym"; elemsize = MIPS_ELF_SYM_SIZE (output_bfd); @@ -8571,17 +8587,6 @@ _bfd_mips_elf_finish_dynamic_sections (output_bfd, info) dyn.d_un.d_val = s->_raw_size / elemsize; break; - case DT_MIPS_UNREFEXTNO: - /* The index into the dynamic symbol table which is the - entry of the first external symbol that is not - referenced within the same object. */ - dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1; - break; - - case DT_MIPS_GOTSYM: - dyn.d_un.d_val = g->global_gotsym->dynindx; - break; - case DT_MIPS_HIPAGENO: dyn.d_un.d_val = g->local_gotno - MIPS_RESERVED_GOTNO; break; -- 2.30.2