_bfd_elf_link_hash_hide_symbol calls in generic ELF code
This function shouldn't be called directly, except from backend code. bfd/ * elflink.c (_bfd_elf_adjust_dynamic_symbol): Call elf_backend_hide_symbol, not _bfd_elf_link_hash_hide_symbol. (bfd_elf_define_start_stop): Likewise. ld/ * emultempl/elf32.em (before_allocation): Call elf_backend_hide_symbol, not _bfd_elf_link_hash_hide_symbol. Formatting.
This commit is contained in:
parent
f5233a1611
commit
559192d89d
@ -1,3 +1,9 @@
|
||||
2017-10-12 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elflink.c (_bfd_elf_adjust_dynamic_symbol): Call
|
||||
elf_backend_hide_symbol, not _bfd_elf_link_hash_hide_symbol.
|
||||
(bfd_elf_define_start_stop): Likewise.
|
||||
|
||||
2017-10-12 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf32-nds32.c (nds32_elf_size_dynamic_sections): Set .interp
|
||||
|
@ -2808,7 +2808,7 @@ static bfd_boolean
|
||||
_bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
|
||||
{
|
||||
struct elf_info_failed *eif = (struct elf_info_failed *) data;
|
||||
bfd *dynobj;
|
||||
struct elf_link_hash_table *htab;
|
||||
const struct elf_backend_data *bed;
|
||||
|
||||
if (! is_elf_hash_table (eif->info->hash))
|
||||
@ -2822,10 +2822,13 @@ _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
|
||||
if (! _bfd_elf_fix_symbol_flags (h, eif))
|
||||
return FALSE;
|
||||
|
||||
htab = elf_hash_table (eif->info);
|
||||
bed = get_elf_backend_data (htab->dynobj);
|
||||
|
||||
if (h->root.type == bfd_link_hash_undefweak)
|
||||
{
|
||||
if (eif->info->dynamic_undefined_weak == 0)
|
||||
_bfd_elf_link_hash_hide_symbol (eif->info, h, TRUE);
|
||||
(*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
|
||||
else if (eif->info->dynamic_undefined_weak > 0
|
||||
&& h->ref_regular
|
||||
&& ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||
@ -2921,9 +2924,6 @@ _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
|
||||
(_("warning: type and size of dynamic symbol `%s' are not defined"),
|
||||
h->root.root.string);
|
||||
|
||||
dynobj = elf_hash_table (eif->info)->dynobj;
|
||||
bed = get_elf_backend_data (dynobj);
|
||||
|
||||
if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
|
||||
{
|
||||
eif->failed = TRUE;
|
||||
@ -14284,7 +14284,9 @@ bfd_elf_define_start_stop (struct bfd_link_info *info,
|
||||
if (symbol[0] == '.')
|
||||
{
|
||||
/* .startof. and .sizeof. symbols are local. */
|
||||
_bfd_elf_link_hash_hide_symbol (info, h, TRUE);
|
||||
const struct elf_backend_data *bed;
|
||||
bed = get_elf_backend_data (info->output_bfd);
|
||||
(*bed->elf_backend_hide_symbol) (info, h, TRUE);
|
||||
}
|
||||
else if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
|
||||
h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_PROTECTED;
|
||||
|
@ -1,3 +1,9 @@
|
||||
2017-10-12 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* emultempl/elf32.em (before_allocation): Call
|
||||
elf_backend_hide_symbol, not _bfd_elf_link_hash_hide_symbol.
|
||||
Formatting.
|
||||
|
||||
2017-10-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* PR ld/22269
|
||||
|
@ -527,7 +527,7 @@ gld${EMULATION_NAME}_search_needed (const char *path,
|
||||
|
||||
/* PR 20535: Support the same pseudo-environment variables that
|
||||
are supported by ld.so. Namely, $ORIGIN, $LIB and $PLATFORM.
|
||||
Since there can be more than one occurrence of these tokens in
|
||||
Since there can be more than one occurrence of these tokens in
|
||||
the path we loop until no more are found. Since we might not
|
||||
be able to substitute some of the tokens we maintain an offset
|
||||
into the filename for where we should begin our scan. */
|
||||
@ -664,8 +664,8 @@ gld${EMULATION_NAME}_search_needed (const char *path,
|
||||
/* Restore the path separator. */
|
||||
* end = '/';
|
||||
|
||||
/* PR 20784: Make sure that we resume the scan
|
||||
*after* the token that we could not replace. */
|
||||
/* PR 20784: Make sure that we resume the scan *after*
|
||||
the token that we could not replace. */
|
||||
offset = (var + 1) - filename;
|
||||
}
|
||||
|
||||
@ -1701,34 +1701,36 @@ gld${EMULATION_NAME}_before_allocation (void)
|
||||
/* Make __ehdr_start hidden if it has been referenced, to
|
||||
prevent the symbol from being dynamic. */
|
||||
if (!bfd_link_relocatable (&link_info))
|
||||
{
|
||||
struct elf_link_hash_entry *h
|
||||
= elf_link_hash_lookup (elf_hash_table (&link_info), "__ehdr_start",
|
||||
FALSE, FALSE, TRUE);
|
||||
{
|
||||
struct elf_link_hash_table *htab = elf_hash_table (&link_info);
|
||||
struct elf_link_hash_entry *h
|
||||
= elf_link_hash_lookup (htab, "__ehdr_start", FALSE, FALSE, TRUE);
|
||||
|
||||
/* Only adjust the export class if the symbol was referenced
|
||||
and not defined, otherwise leave it alone. */
|
||||
if (h != NULL
|
||||
&& (h->root.type == bfd_link_hash_new
|
||||
|| h->root.type == bfd_link_hash_undefined
|
||||
|| h->root.type == bfd_link_hash_undefweak
|
||||
|| h->root.type == bfd_link_hash_common))
|
||||
{
|
||||
_bfd_elf_link_hash_hide_symbol (&link_info, h, TRUE);
|
||||
if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
|
||||
h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
|
||||
/* Don't leave the symbol undefined. Undefined hidden
|
||||
symbols typically won't have dynamic relocations, but
|
||||
we most likely will need dynamic relocations for
|
||||
__ehdr_start if we are building a PIE or shared
|
||||
library. */
|
||||
ehdr_start = h;
|
||||
ehdr_start_save = h->root;
|
||||
h->root.type = bfd_link_hash_defined;
|
||||
h->root.u.def.section = bfd_abs_section_ptr;
|
||||
h->root.u.def.value = 0;
|
||||
}
|
||||
}
|
||||
/* Only adjust the export class if the symbol was referenced
|
||||
and not defined, otherwise leave it alone. */
|
||||
if (h != NULL
|
||||
&& (h->root.type == bfd_link_hash_new
|
||||
|| h->root.type == bfd_link_hash_undefined
|
||||
|| h->root.type == bfd_link_hash_undefweak
|
||||
|| h->root.type == bfd_link_hash_common))
|
||||
{
|
||||
const struct elf_backend_data *bed;
|
||||
bed = get_elf_backend_data (link_info.output_bfd);
|
||||
(*bed->elf_backend_hide_symbol) (&link_info, h, TRUE);
|
||||
if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
|
||||
h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
|
||||
/* Don't leave the symbol undefined. Undefined hidden
|
||||
symbols typically won't have dynamic relocations, but
|
||||
we most likely will need dynamic relocations for
|
||||
__ehdr_start if we are building a PIE or shared
|
||||
library. */
|
||||
ehdr_start = h;
|
||||
ehdr_start_save = h->root;
|
||||
h->root.type = bfd_link_hash_defined;
|
||||
h->root.u.def.section = bfd_abs_section_ptr;
|
||||
h->root.u.def.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* If we are going to make any variable assignments, we need to
|
||||
let the ELF backend know about them in case the variables are
|
||||
@ -1931,7 +1933,7 @@ gld${EMULATION_NAME}_open_dynamic_archive
|
||||
filename we recorded earlier. */
|
||||
|
||||
if (!entry->flags.full_name_provided)
|
||||
filename = lbasename (entry->filename);
|
||||
filename = lbasename (entry->filename);
|
||||
bfd_elf_set_dt_needed_name (entry->the_bfd, filename);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user