Line 1717... |
Line 1717... |
mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
|
mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
|
{
|
{
|
struct mips_htab_traverse_info *hti;
|
struct mips_htab_traverse_info *hti;
|
|
|
hti = (struct mips_htab_traverse_info *) data;
|
hti = (struct mips_htab_traverse_info *) data;
|
if (h->root.root.type == bfd_link_hash_warning)
|
|
h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
|
|
|
|
if (!hti->info->relocatable)
|
if (!hti->info->relocatable)
|
mips_elf_check_mips16_stubs (hti->info, h);
|
mips_elf_check_mips16_stubs (hti->info, h);
|
|
|
if (mips_elf_local_pic_function_p (h))
|
if (mips_elf_local_pic_function_p (h))
|
{
|
{
|
|
/* PR 12845: If H is in a section that has been garbage
|
|
collected it will have its output section set to *ABS*. */
|
|
if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
|
|
return TRUE;
|
|
|
/* H is a function that might need $25 to be valid on entry.
|
/* H is a function that might need $25 to be valid on entry.
|
If we're creating a non-PIC relocatable object, mark H as
|
If we're creating a non-PIC relocatable object, mark H as
|
being PIC. If we're creating a non-relocatable object with
|
being PIC. If we're creating a non-relocatable object with
|
non-PIC branches and jumps to H, make sure that H has an la25
|
non-PIC branches and jumps to H, make sure that H has an la25
|
stub. */
|
stub. */
|
Line 2402... |
Line 2404... |
{
|
{
|
struct extsym_info *einfo = data;
|
struct extsym_info *einfo = data;
|
bfd_boolean strip;
|
bfd_boolean strip;
|
asection *sec, *output_section;
|
asection *sec, *output_section;
|
|
|
if (h->root.root.type == bfd_link_hash_warning)
|
|
h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
|
|
|
|
if (h->root.indx == -2)
|
if (h->root.indx == -2)
|
strip = FALSE;
|
strip = FALSE;
|
else if ((h->root.def_dynamic
|
else if ((h->root.def_dynamic
|
|| h->root.ref_dynamic
|
|| h->root.ref_dynamic
|
|| h->root.type == bfd_link_hash_new)
|
|| h->root.type == bfd_link_hash_new)
|
Line 3430... |
Line 3429... |
static bfd_boolean
|
static bfd_boolean
|
mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
|
mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
|
{
|
{
|
struct mips_elf_hash_sort_data *hsd = data;
|
struct mips_elf_hash_sort_data *hsd = data;
|
|
|
if (h->root.root.type == bfd_link_hash_warning)
|
|
h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
|
|
|
|
/* Symbols without dynamic symbol table entries aren't interesting
|
/* Symbols without dynamic symbol table entries aren't interesting
|
at all. */
|
at all. */
|
if (h->root.dynindx == -1)
|
if (h->root.dynindx == -1)
|
return TRUE;
|
return TRUE;
|
|
|
Line 8140... |
Line 8136... |
/* VxWorks executables are handled elsewhere; we only need to
|
/* VxWorks executables are handled elsewhere; we only need to
|
allocate relocations in shared objects. */
|
allocate relocations in shared objects. */
|
if (htab->is_vxworks && !info->shared)
|
if (htab->is_vxworks && !info->shared)
|
return TRUE;
|
return TRUE;
|
|
|
/* Ignore indirect and warning symbols. All relocations against
|
/* Ignore indirect symbols. All relocations against such symbols
|
such symbols will be redirected to the target symbol. */
|
will be redirected to the target symbol. */
|
if (h->root.type == bfd_link_hash_indirect
|
if (h->root.type == bfd_link_hash_indirect)
|
|| h->root.type == bfd_link_hash_warning)
|
|
return TRUE;
|
return TRUE;
|
|
|
/* If this symbol is defined in a dynamic object, or we are creating
|
/* If this symbol is defined in a dynamic object, or we are creating
|
a shared library, we will need to copy any R_MIPS_32 or
|
a shared library, we will need to copy any R_MIPS_32 or
|
R_MIPS_REL32 relocs against it into the output file. */
|
R_MIPS_REL32 relocs against it into the output file. */
|