* 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> 1999-08-24 Nick Clifton <nickc@cygnus.com>
From a patch submitted by Roland McGrath <roland@baalperazim.frob.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 if (!h && (r_type == R_MIPS_CALL_LO16
|| r_type == R_MIPS_GOT_LO16 || r_type == R_MIPS_GOT_LO16
|| r_type == R_MIPS_GOT_DISP || r_type == R_MIPS_GOT_DISP))
|| r_type == R_MIPS_GOT16))
{ {
/* We may need a local GOT entry for this relocation. We /* We may need a local GOT entry for this relocation. We
don't count R_MIPS_GOT_PAGE because we can estimate the don't count R_MIPS_GOT_PAGE because we can estimate the
maximum number of pages needed by looking at the size of maximum number of pages needed by looking at the size of
the segment. We don't count R_MIPS_GOT_HI16, or the segment. Similar comments apply to R_MIPS_GOT16. We
R_MIPS_CALL_HI16 because these are always followed by an don't count R_MIPS_GOT_HI16, or R_MIPS_CALL_HI16 because
R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. these are always followed by an R_MIPS_GOT_LO16 or
R_MIPS_CALL_LO16.
This estimation is very conservative since we can merge This estimation is very conservative since we can merge
duplicate entries in the GOT. In order to be less 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; loadable_size += MIPS_FUNCTION_STUB_SIZE;
/* Assume there are two loadable segments consisting of /* Assume there are two loadable segments consisting of
contiguous sections. Is 5 enough? */ contiguous sections. Is 5 enough? */
local_gotno = (loadable_size >> 16) + 5; 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; g->local_gotno += local_gotno;
s->_raw_size += local_gotno * MIPS_ELF_GOT_SIZE (dynobj); s->_raw_size += local_gotno * MIPS_ELF_GOT_SIZE (dynobj);