* elf32-mips.c (_bfd_mips_elf_check_relocs): Don't allocate local

GOT entries for GOT16 relocations; they're not required.
This commit is contained in:
Mark Mitchell 1999-08-27 00:08:50 +00:00
parent 9a09773023
commit 9458945f8f
2 changed files with 17 additions and 6 deletions

View file

@ -1,3 +1,8 @@
1999-08-26 Mark Mitchell <mark@codesourcery.com>
* elf32-mips.c (_bfd_mips_elf_check_relocs): Don't allocate local
GOT entries for GOT16 relocations; they're not required.
1999-08-24 Nick Clifton <nickc@cygnus.com>
From a patch submitted by Roland McGrath <roland@baalperazim.frob.com>

View file

@ -7456,15 +7456,15 @@ _bfd_mips_elf_check_relocs (abfd, info, sec, relocs)
if (!h && (r_type == R_MIPS_CALL_LO16
|| r_type == R_MIPS_GOT_LO16
|| r_type == R_MIPS_GOT_DISP
|| r_type == R_MIPS_GOT16))
|| r_type == R_MIPS_GOT_DISP))
{
/* We may need a local GOT entry for this relocation. We
don't count R_MIPS_GOT_PAGE because we can estimate the
maximum number of pages needed by looking at the size of
the segment. We don't count R_MIPS_GOT_HI16, or
R_MIPS_CALL_HI16 because these are always followed by an
R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.
the segment. Similar comments apply to R_MIPS_GOT16. We
don't count R_MIPS_GOT_HI16, or R_MIPS_CALL_HI16 because
these are always followed by an R_MIPS_GOT_LO16 or
R_MIPS_CALL_LO16.
This estimation is very conservative since we can merge
duplicate entries in the GOT. In order to be less
@ -8003,8 +8003,14 @@ _bfd_mips_elf_size_dynamic_sections (output_bfd, info)
loadable_size += MIPS_FUNCTION_STUB_SIZE;
/* Assume there are two loadable segments consisting of
contiguous sections. Is 5 enough? */
contiguous sections. Is 5 enough? */
local_gotno = (loadable_size >> 16) + 5;
if (IRIX_COMPAT (output_bfd) == ict_irix6)
/* It's possible we will need GOT_PAGE entries as well as
GOT16 entries. Often, these will be able to share GOT
entries, but not always. */
local_gotno *= 2;
g->local_gotno += local_gotno;
s->_raw_size += local_gotno * MIPS_ELF_GOT_SIZE (dynobj);