forked from Imagelibrary/binutils-gdb
bfd/
* elfxx-mips.c (mips_got_info): Add a "reloc_only_gotno" field. (mips_elf_got_section): Delete. (mips_elf_sort_hash_table): Use g->reloc_only_gotno to decide how many reloc-only entries there are. (mips_elf_count_got_symbols): Adjust g->reloc_only_gotno as well as g->global_gotno. (mips_elf_make_got_per_bfd): Initialize reloc_only_gotno. (mips_elf_multi_got): Likewise. Use gg->reloc_only_gotno rather than gg->assigned_gotno to store the number of reloc-only GOT entries. (mips_elf_create_got_section): Remove the MAYBE_EXCLUDE parameter. Initialize reloc_only_gotno. (mips_elf_calculate_relocation): Check htab->got_info instead of dynobj when deciding whether to call mips_elf_adjust_gp, (_bfd_mips_elf_create_dynamic_sections): Adjust the call to mips_elf_create_got_section. (mips_elf_record_relocs): Likewise. Remove redundant "dynobj == NULL" code. Do not use mips_elf_create_got_section or mips_elf_record_global_got_symbol for R_MIPS_32, R_MIPS_REL32 and R_MIPS_64; limit global_got_area to GGA_RELOC_ONLY instead. (_bfd_mips_elf_finish_dynamic_symbol): Use htab->sgot instead of mips_elf_got_section. (_bfd_mips_vxworks_finish_dynamic_symbol): Likewise. (_bfd_mips_elf_finish_dynamic_sections): Likewise. Move the initial assignment of G to the block that uses it; it is used for an unrelated purpose later. ld/testsuite/ * ld-mips-elf/tls-hidden4.got, ld-mips-elf/tls-hidden4.r: We have removed an unused GOT entry that was allocated for the R_MIPS_32 relocation against "undef", so adjust addresses down by 4 bytes. * ld-mips-elf/got-dump-1.d, ld-mips-elf/got-dump-2.d: We have changed the order of the GOT entries so that reloc-only ones come last. "undef" is only referred to by dynamic relocations, so it now comes after "glob". * ld-mips-elf/mips16-pic-2.dd, ld-mips-elf/mips16-pic-2.gd, ld-mips-elf/mips16-pic-2.nd, ld-mips-elf/mips16-pic-2.rd: We have removed two unused local GOT entries that were originally created as global entries for the hidden symbols "used2" and "used3". "used4" and "used5" are only referred to by relocations, so they now come after "used6" and "used7".
This commit is contained in:
@@ -1,3 +1,32 @@
|
|||||||
|
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
|
* elfxx-mips.c (mips_got_info): Add a "reloc_only_gotno" field.
|
||||||
|
(mips_elf_got_section): Delete.
|
||||||
|
(mips_elf_sort_hash_table): Use g->reloc_only_gotno to decide
|
||||||
|
how many reloc-only entries there are.
|
||||||
|
(mips_elf_count_got_symbols): Adjust g->reloc_only_gotno as
|
||||||
|
well as g->global_gotno.
|
||||||
|
(mips_elf_make_got_per_bfd): Initialize reloc_only_gotno.
|
||||||
|
(mips_elf_multi_got): Likewise. Use gg->reloc_only_gotno
|
||||||
|
rather than gg->assigned_gotno to store the number of
|
||||||
|
reloc-only GOT entries.
|
||||||
|
(mips_elf_create_got_section): Remove the MAYBE_EXCLUDE parameter.
|
||||||
|
Initialize reloc_only_gotno.
|
||||||
|
(mips_elf_calculate_relocation): Check htab->got_info instead of
|
||||||
|
dynobj when deciding whether to call mips_elf_adjust_gp,
|
||||||
|
(_bfd_mips_elf_create_dynamic_sections): Adjust the call
|
||||||
|
to mips_elf_create_got_section.
|
||||||
|
(mips_elf_record_relocs): Likewise. Remove redundant
|
||||||
|
"dynobj == NULL" code. Do not use mips_elf_create_got_section
|
||||||
|
or mips_elf_record_global_got_symbol for R_MIPS_32, R_MIPS_REL32
|
||||||
|
and R_MIPS_64; limit global_got_area to GGA_RELOC_ONLY instead.
|
||||||
|
(_bfd_mips_elf_finish_dynamic_symbol): Use htab->sgot instead
|
||||||
|
of mips_elf_got_section.
|
||||||
|
(_bfd_mips_vxworks_finish_dynamic_symbol): Likewise.
|
||||||
|
(_bfd_mips_elf_finish_dynamic_sections): Likewise.
|
||||||
|
Move the initial assignment of G to the block that uses it;
|
||||||
|
it is used for an unrelated purpose later.
|
||||||
|
|
||||||
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
|
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
* elfxx-mips.c (count_section_dynsyms): Move before the new first use.
|
* elfxx-mips.c (count_section_dynsyms): Move before the new first use.
|
||||||
|
|||||||
@@ -145,6 +145,8 @@ struct mips_got_info
|
|||||||
struct elf_link_hash_entry *global_gotsym;
|
struct elf_link_hash_entry *global_gotsym;
|
||||||
/* The number of global .got entries. */
|
/* The number of global .got entries. */
|
||||||
unsigned int global_gotno;
|
unsigned int global_gotno;
|
||||||
|
/* The number of global .got entries that are in the GGA_RELOC_ONLY area. */
|
||||||
|
unsigned int reloc_only_gotno;
|
||||||
/* The number of .got slots used for TLS. */
|
/* The number of .got slots used for TLS. */
|
||||||
unsigned int tls_gotno;
|
unsigned int tls_gotno;
|
||||||
/* The first unused TLS .got entry. Used only during
|
/* The first unused TLS .got entry. Used only during
|
||||||
@@ -2280,19 +2282,6 @@ mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
|
|||||||
return sreloc;
|
return sreloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns the GOT section, if it hasn't been excluded. */
|
|
||||||
|
|
||||||
static asection *
|
|
||||||
mips_elf_got_section (struct bfd_link_info *info)
|
|
||||||
{
|
|
||||||
struct mips_elf_link_hash_table *htab;
|
|
||||||
|
|
||||||
htab = mips_elf_hash_table (info);
|
|
||||||
if (htab->sgot == NULL || (htab->sgot->flags & SEC_EXCLUDE) != 0)
|
|
||||||
return NULL;
|
|
||||||
return htab->sgot;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Count the number of relocations needed for a TLS GOT entry, with
|
/* Count the number of relocations needed for a TLS GOT entry, with
|
||||||
access types from TLS_TYPE, and symbol H (or a local symbol if H
|
access types from TLS_TYPE, and symbol H (or a local symbol if H
|
||||||
is NULL). */
|
is NULL). */
|
||||||
@@ -2423,12 +2412,14 @@ mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset,
|
|||||||
struct mips_elf_link_hash_entry *h,
|
struct mips_elf_link_hash_entry *h,
|
||||||
bfd_vma value)
|
bfd_vma value)
|
||||||
{
|
{
|
||||||
|
struct mips_elf_link_hash_table *htab;
|
||||||
int indx;
|
int indx;
|
||||||
asection *sreloc, *sgot;
|
asection *sreloc, *sgot;
|
||||||
bfd_vma offset, offset2;
|
bfd_vma offset, offset2;
|
||||||
bfd_boolean need_relocs = FALSE;
|
bfd_boolean need_relocs = FALSE;
|
||||||
|
|
||||||
sgot = mips_elf_got_section (info);
|
htab = mips_elf_hash_table (info);
|
||||||
|
sgot = htab->sgot;
|
||||||
|
|
||||||
indx = 0;
|
indx = 0;
|
||||||
if (h != NULL)
|
if (h != NULL)
|
||||||
@@ -2954,16 +2945,9 @@ mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
hsd.low = NULL;
|
hsd.low = NULL;
|
||||||
hsd.max_unref_got_dynindx =
|
hsd.max_unref_got_dynindx
|
||||||
hsd.min_got_dynindx = elf_hash_table (info)->dynsymcount
|
= hsd.min_got_dynindx
|
||||||
/* In the multi-got case, assigned_gotno of the master got_info
|
= (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
|
||||||
indicate the number of entries that aren't referenced in the
|
|
||||||
primary GOT, but that must have entries because there are
|
|
||||||
dynamic relocations that reference it. Since they aren't
|
|
||||||
referenced, we move them to the end of the GOT, so that they
|
|
||||||
don't prevent other entries that are referenced from getting
|
|
||||||
too large offsets. */
|
|
||||||
- (g->next ? g->assigned_gotno : 0);
|
|
||||||
hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
|
hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
|
||||||
mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
|
mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
|
||||||
elf_hash_table (info)),
|
elf_hash_table (info)),
|
||||||
@@ -3413,7 +3397,11 @@ mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
|
|||||||
h->global_got_area = GGA_NONE;
|
h->global_got_area = GGA_NONE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
g->global_gotno++;
|
g->global_gotno++;
|
||||||
|
if (h->global_got_area == GGA_RELOC_ONLY)
|
||||||
|
g->reloc_only_gotno++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -3492,6 +3480,7 @@ mips_elf_get_got_for_bfd (struct htab *bfd2got, bfd *output_bfd,
|
|||||||
|
|
||||||
g->global_gotsym = NULL;
|
g->global_gotsym = NULL;
|
||||||
g->global_gotno = 0;
|
g->global_gotno = 0;
|
||||||
|
g->reloc_only_gotno = 0;
|
||||||
g->local_gotno = 0;
|
g->local_gotno = 0;
|
||||||
g->page_gotno = 0;
|
g->page_gotno = 0;
|
||||||
g->assigned_gotno = -1;
|
g->assigned_gotno = -1;
|
||||||
@@ -3912,6 +3901,7 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
|
|||||||
|
|
||||||
g->next->global_gotsym = NULL;
|
g->next->global_gotsym = NULL;
|
||||||
g->next->global_gotno = 0;
|
g->next->global_gotno = 0;
|
||||||
|
g->next->reloc_only_gotno = 0;
|
||||||
g->next->local_gotno = 0;
|
g->next->local_gotno = 0;
|
||||||
g->next->page_gotno = 0;
|
g->next->page_gotno = 0;
|
||||||
g->next->tls_gotno = 0;
|
g->next->tls_gotno = 0;
|
||||||
@@ -3964,7 +3954,7 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
|
|||||||
/* Every symbol that is referenced in a dynamic relocation must be
|
/* Every symbol that is referenced in a dynamic relocation must be
|
||||||
present in the primary GOT, so arrange for them to appear after
|
present in the primary GOT, so arrange for them to appear after
|
||||||
those that are actually referenced. */
|
those that are actually referenced. */
|
||||||
gg->assigned_gotno = gg->global_gotno - g->global_gotno;
|
gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
|
||||||
g->global_gotno = gg->global_gotno;
|
g->global_gotno = gg->global_gotno;
|
||||||
|
|
||||||
set_got_offset_arg.g = NULL;
|
set_got_offset_arg.g = NULL;
|
||||||
@@ -4224,8 +4214,7 @@ mips_elf_create_compact_rel_section
|
|||||||
/* Create the .got section to hold the global offset table. */
|
/* Create the .got section to hold the global offset table. */
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info,
|
mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
|
||||||
bfd_boolean maybe_exclude)
|
|
||||||
{
|
{
|
||||||
flagword flags;
|
flagword flags;
|
||||||
register asection *s;
|
register asection *s;
|
||||||
@@ -4238,20 +4227,12 @@ mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info,
|
|||||||
htab = mips_elf_hash_table (info);
|
htab = mips_elf_hash_table (info);
|
||||||
|
|
||||||
/* This function may be called more than once. */
|
/* This function may be called more than once. */
|
||||||
s = htab->sgot;
|
if (htab->sgot)
|
||||||
if (s)
|
|
||||||
{
|
|
||||||
if (! maybe_exclude)
|
|
||||||
s->flags &= ~SEC_EXCLUDE;
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
|
||||||
|
|
||||||
flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
|
flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
|
||||||
| SEC_LINKER_CREATED);
|
| SEC_LINKER_CREATED);
|
||||||
|
|
||||||
if (maybe_exclude)
|
|
||||||
flags |= SEC_EXCLUDE;
|
|
||||||
|
|
||||||
/* We have to use an alignment of 2**4 here because this is hardcoded
|
/* We have to use an alignment of 2**4 here because this is hardcoded
|
||||||
in the function stub generation and in the linker script. */
|
in the function stub generation and in the linker script. */
|
||||||
s = bfd_make_section_with_flags (abfd, ".got", flags);
|
s = bfd_make_section_with_flags (abfd, ".got", flags);
|
||||||
@@ -4285,6 +4266,7 @@ mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
g->global_gotsym = NULL;
|
g->global_gotsym = NULL;
|
||||||
g->global_gotno = 0;
|
g->global_gotno = 0;
|
||||||
|
g->reloc_only_gotno = 0;
|
||||||
g->tls_gotno = 0;
|
g->tls_gotno = 0;
|
||||||
g->local_gotno = MIPS_RESERVED_GOTNO (info);
|
g->local_gotno = MIPS_RESERVED_GOTNO (info);
|
||||||
g->page_gotno = 0;
|
g->page_gotno = 0;
|
||||||
@@ -4642,7 +4624,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
|||||||
|
|
||||||
gp0 = _bfd_get_gp_value (input_bfd);
|
gp0 = _bfd_get_gp_value (input_bfd);
|
||||||
gp = _bfd_get_gp_value (abfd);
|
gp = _bfd_get_gp_value (abfd);
|
||||||
if (dynobj)
|
if (htab->got_info)
|
||||||
gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
|
gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
|
||||||
|
|
||||||
if (gnu_local_gp_p)
|
if (gnu_local_gp_p)
|
||||||
@@ -6417,7 +6399,7 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* We need to create .got section. */
|
/* We need to create .got section. */
|
||||||
if (! mips_elf_create_got_section (abfd, info, FALSE))
|
if (!mips_elf_create_got_section (abfd, info))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (! mips_elf_rel_dyn_section (info, TRUE))
|
if (! mips_elf_rel_dyn_section (info, TRUE))
|
||||||
@@ -7039,7 +7021,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
|||||||
case R_MIPS_TLS_LDM:
|
case R_MIPS_TLS_LDM:
|
||||||
if (dynobj == NULL)
|
if (dynobj == NULL)
|
||||||
elf_hash_table (info)->dynobj = dynobj = abfd;
|
elf_hash_table (info)->dynobj = dynobj = abfd;
|
||||||
if (! mips_elf_create_got_section (dynobj, info, FALSE))
|
if (!mips_elf_create_got_section (dynobj, info))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (htab->is_vxworks && !info->shared)
|
if (htab->is_vxworks && !info->shared)
|
||||||
{
|
{
|
||||||
@@ -7301,12 +7283,11 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
|||||||
between global GOT entries and .dynsym entries. */
|
between global GOT entries and .dynsym entries. */
|
||||||
if (h != NULL && !htab->is_vxworks)
|
if (h != NULL && !htab->is_vxworks)
|
||||||
{
|
{
|
||||||
if (dynobj == NULL)
|
struct mips_elf_link_hash_entry *hmips;
|
||||||
elf_hash_table (info)->dynobj = dynobj = abfd;
|
|
||||||
if (! mips_elf_create_got_section (dynobj, info, TRUE))
|
hmips = (struct mips_elf_link_hash_entry *) h;
|
||||||
return FALSE;
|
if (hmips->global_got_area > GGA_RELOC_ONLY)
|
||||||
if (!mips_elf_record_global_got_symbol (h, abfd, info, 0))
|
hmips->global_got_area = GGA_RELOC_ONLY;
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8818,8 +8799,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
|
|||||||
BFD_ASSERT (h->dynindx != -1
|
BFD_ASSERT (h->dynindx != -1
|
||||||
|| h->forced_local);
|
|| h->forced_local);
|
||||||
|
|
||||||
sgot = mips_elf_got_section (info);
|
sgot = htab->sgot;
|
||||||
BFD_ASSERT (sgot != NULL);
|
|
||||||
g = htab->got_info;
|
g = htab->got_info;
|
||||||
BFD_ASSERT (g != NULL);
|
BFD_ASSERT (g != NULL);
|
||||||
|
|
||||||
@@ -9089,8 +9069,7 @@ _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
|
|||||||
|
|
||||||
BFD_ASSERT (h->dynindx != -1 || h->forced_local);
|
BFD_ASSERT (h->dynindx != -1 || h->forced_local);
|
||||||
|
|
||||||
sgot = mips_elf_got_section (info);
|
sgot = htab->sgot;
|
||||||
BFD_ASSERT (sgot != NULL);
|
|
||||||
g = htab->got_info;
|
g = htab->got_info;
|
||||||
BFD_ASSERT (g != NULL);
|
BFD_ASSERT (g != NULL);
|
||||||
|
|
||||||
@@ -9252,15 +9231,8 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
|
|||||||
|
|
||||||
sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
|
sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
|
||||||
|
|
||||||
sgot = mips_elf_got_section (info);
|
sgot = htab->sgot;
|
||||||
if (sgot == NULL)
|
|
||||||
gg = g = NULL;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gg = htab->got_info;
|
gg = htab->got_info;
|
||||||
g = mips_elf_got_for_ibfd (gg, output_bfd);
|
|
||||||
BFD_ASSERT (g != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (elf_hash_table (info)->dynamic_sections_created)
|
if (elf_hash_table (info)->dynamic_sections_created)
|
||||||
{
|
{
|
||||||
@@ -9268,6 +9240,9 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
|
|||||||
int dyn_to_skip = 0, dyn_skipped = 0;
|
int dyn_to_skip = 0, dyn_skipped = 0;
|
||||||
|
|
||||||
BFD_ASSERT (sdyn != NULL);
|
BFD_ASSERT (sdyn != NULL);
|
||||||
|
BFD_ASSERT (gg != NULL);
|
||||||
|
|
||||||
|
g = mips_elf_got_for_ibfd (gg, output_bfd);
|
||||||
BFD_ASSERT (g != NULL);
|
BFD_ASSERT (g != NULL);
|
||||||
|
|
||||||
for (b = sdyn->contents;
|
for (b = sdyn->contents;
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
|
* ld-mips-elf/tls-hidden4.got, ld-mips-elf/tls-hidden4.r: We have
|
||||||
|
removed an unused GOT entry that was allocated for the R_MIPS_32
|
||||||
|
relocation against "undef", so adjust addresses down by 4 bytes.
|
||||||
|
* ld-mips-elf/got-dump-1.d, ld-mips-elf/got-dump-2.d: We have
|
||||||
|
changed the order of the GOT entries so that reloc-only ones
|
||||||
|
come last. "undef" is only referred to by dynamic relocations,
|
||||||
|
so it now comes after "glob".
|
||||||
|
* ld-mips-elf/mips16-pic-2.dd, ld-mips-elf/mips16-pic-2.gd,
|
||||||
|
ld-mips-elf/mips16-pic-2.nd, ld-mips-elf/mips16-pic-2.rd: We have
|
||||||
|
removed two unused local GOT entries that were originally created
|
||||||
|
as global entries for the hidden symbols "used2" and "used3".
|
||||||
|
"used4" and "used5" are only referred to by relocations, so they
|
||||||
|
now come after "used6" and "used7".
|
||||||
|
|
||||||
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
|
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
|
||||||
|
|
||||||
* ld-mips-elf/got-vers-1a.s, ld-mips-elf/got-vers-1b.s,
|
* ld-mips-elf/got-vers-1a.s, ld-mips-elf/got-vers-1b.s,
|
||||||
|
|||||||
@@ -20,6 +20,6 @@ Primary GOT:
|
|||||||
Global entries:
|
Global entries:
|
||||||
Address Access Initial Sym.Val. Type Ndx Name
|
Address Access Initial Sym.Val. Type Ndx Name
|
||||||
00060020 -32736\(gp\) 00050020 00050020 FUNC UND extern
|
00060020 -32736\(gp\) 00050020 00050020 FUNC UND extern
|
||||||
00060024 -32732\(gp\) 00000000 00000000 NOTYPE UND undef
|
00060024 -32732\(gp\) 00050000 00050000 FUNC 7 glob
|
||||||
00060028 -32728\(gp\) 00050000 00050000 FUNC 7 glob
|
00060028 -32728\(gp\) 00000000 00000000 NOTYPE UND undef
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,6 @@ Primary GOT:
|
|||||||
Global entries:
|
Global entries:
|
||||||
Address Access Initial Sym.Val. Type Ndx Name
|
Address Access Initial Sym.Val. Type Ndx Name
|
||||||
0001236000000030 -32720\(gp\) 0001235000000020 0001235000000020 FUNC UND extern
|
0001236000000030 -32720\(gp\) 0001235000000020 0001235000000020 FUNC UND extern
|
||||||
0001236000000038 -32712\(gp\) 0000000000000000 0000000000000000 NOTYPE UND undef
|
0001236000000038 -32712\(gp\) 0001235000000000 0001235000000000 FUNC 7 glob
|
||||||
0001236000000040 -32704\(gp\) 0001235000000000 0001235000000000 FUNC 7 glob
|
0001236000000040 -32704\(gp\) 0000000000000000 0000000000000000 NOTYPE UND undef
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ Disassembly of section \.text:
|
|||||||
.*: [^\t]* move t9,v0
|
.*: [^\t]* move t9,v0
|
||||||
.*: [^\t]* lw v0,16\(sp\)
|
.*: [^\t]* lw v0,16\(sp\)
|
||||||
.*: [^\t]* move gp,v0
|
.*: [^\t]* move gp,v0
|
||||||
.*: [^\t]* lw v0,-32708\(v0\)
|
.*: [^\t]* lw v0,-32716\(v0\)
|
||||||
.*: [^\t]* jalr v0
|
.*: [^\t]* jalr v0
|
||||||
.*: [^\t]* move t9,v0
|
.*: [^\t]* move t9,v0
|
||||||
.*: [^\t]* lw v0,16\(sp\)
|
.*: [^\t]* lw v0,16\(sp\)
|
||||||
@@ -101,7 +101,7 @@ Disassembly of section \.text:
|
|||||||
.*: [^\t]* move t9,v0
|
.*: [^\t]* move t9,v0
|
||||||
.*: [^\t]* lw v0,16\(sp\)
|
.*: [^\t]* lw v0,16\(sp\)
|
||||||
.*: [^\t]* move gp,v0
|
.*: [^\t]* move gp,v0
|
||||||
.*: [^\t]* lw v0,-32696\(v0\)
|
.*: [^\t]* lw v0,-32712\(v0\)
|
||||||
.*: [^\t]* jalr v0
|
.*: [^\t]* jalr v0
|
||||||
.*: [^\t]* move t9,v0
|
.*: [^\t]* move t9,v0
|
||||||
.*: [^\t]* lw v0,16\(sp\)
|
.*: [^\t]* lw v0,16\(sp\)
|
||||||
|
|||||||
@@ -16,13 +16,11 @@ Primary GOT:
|
|||||||
00050018 -32728\(gp\) 00000000
|
00050018 -32728\(gp\) 00000000
|
||||||
0005001c -32724\(gp\) 00000000
|
0005001c -32724\(gp\) 00000000
|
||||||
00050020 -32720\(gp\) 00000000
|
00050020 -32720\(gp\) 00000000
|
||||||
00050024 -32716\(gp\) 00000000
|
|
||||||
00050028 -32712\(gp\) 00000000
|
|
||||||
|
|
||||||
Global entries:
|
Global entries:
|
||||||
Address Access Initial Sym\.Val\. Type Ndx Name
|
Address Access Initial Sym\.Val\. Type Ndx Name
|
||||||
0005002c -32708\(gp\) 00040574 00040574 FUNC 6 used6
|
00050024 -32716\(gp\) 00040574 00040574 FUNC 6 used6
|
||||||
|
00050028 -32712\(gp\) 00040598 00040598 FUNC 6 used7
|
||||||
|
0005002c -32708\(gp\) 00040550 00040550 FUNC 6 used5
|
||||||
00050030 -32704\(gp\) 0004052c 0004052c FUNC 6 used4
|
00050030 -32704\(gp\) 0004052c 0004052c FUNC 6 used4
|
||||||
00050034 -32700\(gp\) 00040550 00040550 FUNC 6 used5
|
|
||||||
00050038 -32696\(gp\) 00040598 00040598 FUNC 6 used7
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
4: 000405bc 36 FUNC GLOBAL DEFAULT .* used8
|
4: 000405bc 36 FUNC GLOBAL DEFAULT .* used8
|
||||||
5: .* _GLOBAL_OFFSET_TABLE_
|
5: .* _GLOBAL_OFFSET_TABLE_
|
||||||
6: 00040574 36 FUNC GLOBAL DEFAULT .* used6
|
6: 00040574 36 FUNC GLOBAL DEFAULT .* used6
|
||||||
7: 0004052c 36 FUNC GLOBAL DEFAULT .* used4
|
7: 00040598 36 FUNC GLOBAL DEFAULT .* used7
|
||||||
8: 00040550 36 FUNC GLOBAL DEFAULT .* used5
|
8: 00040550 36 FUNC GLOBAL DEFAULT .* used5
|
||||||
9: 00040598 36 FUNC GLOBAL DEFAULT .* used7
|
9: 0004052c 36 FUNC GLOBAL DEFAULT .* used4
|
||||||
|
|
||||||
#pass
|
#pass
|
||||||
|
|||||||
@@ -5,5 +5,5 @@ Relocation section '\.rel\.dyn' .*:
|
|||||||
0+50400 * [0-9]+ * R_MIPS_REL32 *
|
0+50400 * [0-9]+ * R_MIPS_REL32 *
|
||||||
0+50404 * [0-9]+ * R_MIPS_REL32 *
|
0+50404 * [0-9]+ * R_MIPS_REL32 *
|
||||||
0+50410 * [0-9]+ * R_MIPS_REL32 *
|
0+50410 * [0-9]+ * R_MIPS_REL32 *
|
||||||
0+50408 * [0-9]+ * R_MIPS_REL32 * 0004052c * used4
|
|
||||||
0+50414 * [0-9]+ * R_MIPS_REL32 * 00040550 * used5
|
0+50414 * [0-9]+ * R_MIPS_REL32 * 00040550 * used5
|
||||||
|
0+50408 * [0-9]+ * R_MIPS_REL32 * 0004052c * used4
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ Contents of section \.got:
|
|||||||
# entry for each symbol.
|
# entry for each symbol.
|
||||||
#
|
#
|
||||||
#...
|
#...
|
||||||
1c4010 00000000 00000000 0000abc8 0000abcc .*
|
1c4010 00000000 0000abc8 0000abcc 0000abc0 .*
|
||||||
1c4020 0000abc0 0000abc4 00000000 80000000 .*
|
1c4020 0000abc4 00000000 80000000 00000000 .*
|
||||||
#
|
#
|
||||||
# Likewise, but the order of the entries in this GOT is:
|
# Likewise, but the order of the entries in this GOT is:
|
||||||
#
|
#
|
||||||
@@ -25,4 +25,5 @@ Contents of section \.got:
|
|||||||
# foo0
|
# foo0
|
||||||
# foo1
|
# foo1
|
||||||
#...
|
#...
|
||||||
1d0030 0000abcc 0000abc8 0000abc0 0000abc4 .*
|
1d0020 00000000 00000000 00000000 0000abcc .*
|
||||||
|
1d0030 0000abc8 0000abc0 0000abc4 .*
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ Relocation section '\.rel\.dyn' at offset .* contains .* entries:
|
|||||||
# important thing is that there is exactly one entry per GOT TLS slot
|
# important thing is that there is exactly one entry per GOT TLS slot
|
||||||
# and that the addresses match those in the .got dump.
|
# and that the addresses match those in the .got dump.
|
||||||
#
|
#
|
||||||
|
001c4014 0000002f R_MIPS_TLS_TPREL3
|
||||||
001c4018 0000002f R_MIPS_TLS_TPREL3
|
001c4018 0000002f R_MIPS_TLS_TPREL3
|
||||||
001c401c 0000002f R_MIPS_TLS_TPREL3
|
001c401c 0000002f R_MIPS_TLS_TPREL3
|
||||||
001c4020 0000002f R_MIPS_TLS_TPREL3
|
001c4020 0000002f R_MIPS_TLS_TPREL3
|
||||||
001c4024 0000002f R_MIPS_TLS_TPREL3
|
001d002c 0000002f R_MIPS_TLS_TPREL3
|
||||||
001d0030 0000002f R_MIPS_TLS_TPREL3
|
001d0030 0000002f R_MIPS_TLS_TPREL3
|
||||||
001d0034 0000002f R_MIPS_TLS_TPREL3
|
001d0034 0000002f R_MIPS_TLS_TPREL3
|
||||||
001d0038 0000002f R_MIPS_TLS_TPREL3
|
001d0038 0000002f R_MIPS_TLS_TPREL3
|
||||||
001d003c 0000002f R_MIPS_TLS_TPREL3
|
|
||||||
.* R_MIPS_REL32 .*
|
.* R_MIPS_REL32 .*
|
||||||
#pass
|
#pass
|
||||||
|
|||||||
Reference in New Issue
Block a user