ld/x86: Remove hidden _edata, __bss_start, and _end
There is no need to put hidden _edata, __bss_start, and _end in dynamic symbol table in shared libraries. bfd/ PR ld/23161 * elfxx-x86.c (elf_x86_hide_linker_defined): New function. (_bfd_x86_elf_link_check_relocs): Use it to hide hidden __bss_start, _end and _edata in shared libraries. ld/ PR ld/23161 * testsuite/ld-elf/pr23161d.rd: Remove local _edata, __bss_start, and _end from dynamic symbol table.
This commit is contained in:
parent
aeab512851
commit
ecf99cc092
@ -1,3 +1,10 @@
|
||||
2018-06-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/23161
|
||||
* elfxx-x86.c (elf_x86_hide_linker_defined): New function.
|
||||
(_bfd_x86_elf_link_check_relocs): Use it to hide hidden
|
||||
__bss_start, _end and _edata in shared libraries.
|
||||
|
||||
2018-06-07 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf32-tic6x.c (elf32_tic6x_check_relocs): Reference
|
||||
|
@ -876,6 +876,27 @@ elf_x86_linker_defined (struct bfd_link_info *info, const char *name)
|
||||
}
|
||||
}
|
||||
|
||||
/* Hide a linker-defined symbol, NAME, with hidden visibility. */
|
||||
|
||||
static void
|
||||
elf_x86_hide_linker_defined (struct bfd_link_info *info,
|
||||
const char *name)
|
||||
{
|
||||
struct elf_link_hash_entry *h;
|
||||
|
||||
h = elf_link_hash_lookup (elf_hash_table (info), name,
|
||||
FALSE, FALSE, FALSE);
|
||||
if (h == NULL)
|
||||
return;
|
||||
|
||||
while (h->root.type == bfd_link_hash_indirect)
|
||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
|
||||
if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
|
||||
|| ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
|
||||
_bfd_elf_link_hash_hide_symbol (info, h, TRUE);
|
||||
}
|
||||
|
||||
bfd_boolean
|
||||
_bfd_x86_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
|
||||
{
|
||||
@ -916,6 +937,14 @@ _bfd_x86_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
|
||||
elf_x86_linker_defined (info, "_end");
|
||||
elf_x86_linker_defined (info, "_edata");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Hide hidden __bss_start, _end and _edata in shared
|
||||
libraries. */
|
||||
elf_x86_hide_linker_defined (info, "__bss_start");
|
||||
elf_x86_hide_linker_defined (info, "_end");
|
||||
elf_x86_hide_linker_defined (info, "_edata");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,9 @@
|
||||
2018-06-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/23161
|
||||
* testsuite/ld-elf/pr23161d.rd: Remove local _edata, __bss_start,
|
||||
and _end from dynamic symbol table.
|
||||
|
||||
2018-06-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||
Alan Modra <amodra@gmail.com>
|
||||
|
||||
|
@ -3,10 +3,4 @@ There are no relocations in this file.
|
||||
Symbol table '\.dynsym' contains [0-9]+ entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
+0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND +
|
||||
#...
|
||||
+[0-9]+: +[a-f0-9]+ +0 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +__bss_start
|
||||
#...
|
||||
+[0-9]+: +[a-f0-9]+ +0 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +_edata
|
||||
#...
|
||||
+[0-9]+: +[a-f0-9]+ +0 +NOTYPE +LOCAL +DEFAULT +[0-9]+ +_end
|
||||
#...
|
||||
+1: +[a-f0-9]+ +[0-9]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ +foo
|
||||
|
Loading…
Reference in New Issue
Block a user