Don't complain undefined weak dynamic reference
When undefined non-weak references in IR objects are optimized out by LTO, we can have weak dynamic referencs to symbols marked with bfd_link_hash_undefined. We shouldn't complain such undefined weak dynamic references. bfd/ PR ld/24486 * elflink.c (elf_link_output_extsym): Don't complain undefined weak dynamic reference. ld/ PR ld/24486 * testsuite/ld-plugin/lto.exp: Run PR ld/24486 tests. * testsuite/ld-plugin/pr24486a.c: New file. * testsuite/ld-plugin/pr24486b.c: Likewise. * testsuite/ld-plugin/pr24486c.c: Likewise.
This commit is contained in:
parent
8e1920d611
commit
c54f15248e
@ -1,3 +1,9 @@
|
||||
2019-04-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/24486
|
||||
* elflink.c (elf_link_output_extsym): Don't complain undefined
|
||||
weak dynamic reference.
|
||||
|
||||
2019-04-25 Sudakshina Das <sudi.das@arm.com>
|
||||
|
||||
* elfnn-aarch64.c (PLT_BTI_ENTRY_SIZE): Remove.
|
||||
|
@ -9776,7 +9776,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
|
||||
|
||||
/* If we are reporting errors for this situation then do so now. */
|
||||
if (!ignore_undef
|
||||
&& h->ref_dynamic
|
||||
&& h->ref_dynamic_nonweak
|
||||
&& (!h->ref_regular || flinfo->info->gc_sections)
|
||||
&& !elf_link_check_versioned_symbol (flinfo->info, bed, h)
|
||||
&& flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
|
||||
|
@ -1,3 +1,11 @@
|
||||
2019-04-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/24486
|
||||
* testsuite/ld-plugin/lto.exp: Run PR ld/24486 tests.
|
||||
* testsuite/ld-plugin/pr24486a.c: New file.
|
||||
* testsuite/ld-plugin/pr24486b.c: Likewise.
|
||||
* testsuite/ld-plugin/pr24486c.c: Likewise.
|
||||
|
||||
2019-04-26 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* po/ru.po: Updated Russian translation.
|
||||
|
@ -325,6 +325,18 @@ set lto_link_elf_tests [list \
|
||||
[list {Build pr22220main.o} \
|
||||
{} {-flto} \
|
||||
{pr22220main.cc} {} {} {c++}] \
|
||||
[list "Build pr24486a.o" \
|
||||
"$plug_opt" "-flto -O2" \
|
||||
{pr24486a.c} {} "" "c"] \
|
||||
[list "Build pr24486b.so" \
|
||||
"-shared" "-O2 -fpic" \
|
||||
{pr24486b.c} {} "pr24486b.so" "c"] \
|
||||
[list "Build pr24486c.so" \
|
||||
"-shared -Wl,--no-as-needed tmpdir/pr24486b.so" "-O2 -fpic" \
|
||||
{pr24486c.c} {} "pr24486c.so" "c"] \
|
||||
[list "PR ld/24486" \
|
||||
"-O2 -flto tmpdir/pr24486a.o tmpdir/pr24486c.so -Wl,--as-needed tmpdir/pr24486b.so" "" \
|
||||
{dummy.c} {} "pr24486.exe"] \
|
||||
]
|
||||
|
||||
# PR 14918 checks that libgcc is not spuriously included in a shared link of
|
||||
|
8
ld/testsuite/ld-plugin/pr24486a.c
Normal file
8
ld/testsuite/ld-plugin/pr24486a.c
Normal file
@ -0,0 +1,8 @@
|
||||
extern int FLAGS_verbose;
|
||||
extern void bar (void);
|
||||
int
|
||||
a(void) {
|
||||
return FLAGS_verbose;
|
||||
}
|
||||
void unused (void) { bar(); }
|
||||
int main() { return a (); }
|
8
ld/testsuite/ld-plugin/pr24486b.c
Normal file
8
ld/testsuite/ld-plugin/pr24486b.c
Normal file
@ -0,0 +1,8 @@
|
||||
extern void bar (void) __attribute__((weak));
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
if (bar)
|
||||
bar ();
|
||||
}
|
1
ld/testsuite/ld-plugin/pr24486c.c
Normal file
1
ld/testsuite/ld-plugin/pr24486c.c
Normal file
@ -0,0 +1 @@
|
||||
int FLAGS_verbose;
|
Loading…
Reference in New Issue
Block a user