* 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:
parent
9a09773023
commit
9458945f8f
2 changed files with 17 additions and 6 deletions
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue