Commit 3024a17a authored by Alan Modra's avatar Alan Modra
Browse files

Mark all weak aliases for copy relocations

bfd/
	PR ld/25458
	* elflink.c (_bfd_elf_gc_mark_rsec): Mark all weak aliases.
ld/
	PR ld/25458
	* testsuite/ld-elf/pr25458.map: New file.
	* testsuite/ld-elf/pr25458.rd: Likewise.
	* testsuite/ld-elf/pr25458a.s: Likewise.
	* testsuite/ld-elf/pr25458b.s: Likewise.
	* testsuite/ld-elf/shared.exp: Run PR ld/25458 test.
parent 27ee3a66
2020-01-27 H.J. Lu <hongjiu.lu@intel.com>
Alan Modra <amodra@gmail.com>
PR ld/25458
* elflink.c (_bfd_elf_gc_mark_rsec): Mark all weak aliases.
2020-01-24 Jim Wilson <jimw@sifive.com>
* elfxx-riscv.c (riscv_get_prefix_class): Format s case like others.
......
......@@ -13123,7 +13123,7 @@ _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
bfd_boolean *start_stop)
{
unsigned long r_symndx;
struct elf_link_hash_entry *h;
struct elf_link_hash_entry *h, *hw;
r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
if (r_symndx == STN_UNDEF)
......@@ -13143,12 +13143,16 @@ _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
|| h->root.type == bfd_link_hash_warning)
h = (struct elf_link_hash_entry *) h->root.u.i.link;
h->mark = 1;
/* If this symbol is weak and there is a non-weak definition, we
keep the non-weak definition because many backends put
dynamic reloc info on the non-weak definition for code
handling copy relocs. */
if (h->is_weakalias)
weakdef (h)->mark = 1;
/* Keep all aliases of the symbol too. If an object symbol
needs to be copied into .dynbss then all of its aliases
should be present as dynamic symbols, not just the one used
on the copy relocation. */
hw = h;
while (hw->is_weakalias)
{
hw = hw->u.alias;
hw->mark = 1;
}
if (start_stop != NULL)
{
......
2020-01-27 H.J. Lu <hongjiu.lu@intel.com>
Alan Modra <amodra@gmail.com>
PR ld/25458
* testsuite/ld-elf/pr25458.map: New file.
* testsuite/ld-elf/pr25458.rd: Likewise.
* testsuite/ld-elf/pr25458a.s: Likewise.
* testsuite/ld-elf/pr25458b.s: Likewise.
* testsuite/ld-elf/shared.exp: Run PR ld/25458 test.
2020-01-22 H.J. Lu <hongjiu.lu@intel.com>
PR ld/25416
......
FOO {
global:
__environ; _environ; environ;
};
#...
Symbol table '\.dynsym' contains [0-9]+ entries:
+Num: +Value +Size Type +Bind +Vis +Ndx Name
#...
+[0-9]+: [0-9a-f]+ +(4|8)+ OBJECT +(WEAK|GLOBAL) +DEFAULT +[0-9]+ _*environ@FOO \(2\)
#...
+[0-9]+: [0-9a-f]+ +(4|8)+ OBJECT +(WEAK|GLOBAL) +DEFAULT +[0-9]+ _*environ@FOO \(2\)
#...
+[0-9]+: [0-9a-f]+ +(4|8)+ OBJECT +(WEAK|GLOBAL) +DEFAULT +[0-9]+ _*environ@FOO \(2\)
#pass
.text
.globl _start
.type _start, %function
_start:
.dc.a environ
.size _start, .-_start
.data
.globl __environ
.type __environ,%object
__environ:
.dc.a 0
.size __environ, .-__environ
.weak _environ
.globl _environ
.set _environ, __environ
.weak environ
.set environ, __environ
......@@ -337,6 +337,38 @@ if { [check_gc_sections_available] } {
"pr22150" \
] \
]
switch -glob $target_triplet {
# exclude targets that don't support copy relocs
bfin-*-* { }
frv-*-* { }
lm32-*-* { }
mips*-*-* { }
tic6x-*-* { }
xtensa-*-* { }
default {
run_ld_link_tests [list \
[list \
"Build pr25458.so" \
"$LFLAGS -shared --version-script=pr25458.map" \
"" \
"$AFLAGS_PIC" \
{pr25458b.s} \
{} \
"pr25458.so" \
] \
[list \
"Build pr25458" \
"$LFLAGS -e _start --gc-sections" \
"tmpdir/pr25458.so" \
"$AFLAGS_PIC" \
{pr25458a.s} \
{{readelf {--dyn-sym --wide} pr25458.rd}} \
"pr25458" \
] \
]
}
}
}
set ASFLAGS $old_ASFLAGS
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment