mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
Properly check undefined symbols when gc_sections is active.
bfd/ 2010-01-26 Alan Modra <amodra@gmail.com> H.J. Lu <hongjiu.lu@intel.com> PR ld/11218 * elflink.c (elf_link_output_extsym): Do not ignore undefined symbols with ref_regular set when gc_sections is active. ld/testsuite/ 2010-01-26 H.J. Lu <hongjiu.lu@intel.com> PR ld/11218 * ld-gc/dummy.s: New. * ld-gc/pr11218-1.c: Likewise. * ld-gc/pr11218-2.c: Likewise. * ld-gc/pr11218.d: Likewise.
This commit is contained in:
parent
571f7b5e51
commit
98da7939e1
@ -1,3 +1,10 @@
|
||||
2010-01-26 Alan Modra <amodra@gmail.com>
|
||||
H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/11218
|
||||
* elflink.c (elf_link_output_extsym): Do not ignore undefined
|
||||
symbols with ref_regular set when gc_sections is active.
|
||||
|
||||
2010-01-25 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR ld/11217
|
||||
|
@ -8579,7 +8579,9 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
|
||||
{
|
||||
/* If we have an undefined symbol reference here then it must have
|
||||
come from a shared library that is being linked in. (Undefined
|
||||
references in regular files have already been handled). */
|
||||
references in regular files have already been handled unless
|
||||
they are in unreferenced sections which are removed by garbage
|
||||
collection). */
|
||||
bfd_boolean ignore_undef = FALSE;
|
||||
|
||||
/* Some symbols may be special in that the fact that they're
|
||||
@ -8590,12 +8592,13 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
|
||||
/* If we are reporting errors for this situation then do so now. */
|
||||
if (ignore_undef == FALSE
|
||||
&& h->ref_dynamic
|
||||
&& ! h->ref_regular
|
||||
&& (!h->ref_regular || finfo->info->gc_sections)
|
||||
&& ! elf_link_check_versioned_symbol (finfo->info, bed, h)
|
||||
&& finfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
|
||||
{
|
||||
if (! (finfo->info->callbacks->undefined_symbol
|
||||
(finfo->info, h->root.root.string, h->root.u.undef.abfd,
|
||||
(finfo->info, h->root.root.string,
|
||||
h->ref_regular ? NULL : h->root.u.undef.abfd,
|
||||
NULL, 0, finfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR)))
|
||||
{
|
||||
eoinfo->failed = TRUE;
|
||||
|
@ -1,3 +1,11 @@
|
||||
2010-01-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/11218
|
||||
* ld-gc/dummy.s: New.
|
||||
* ld-gc/pr11218-1.c: Likewise.
|
||||
* ld-gc/pr11218-2.c: Likewise.
|
||||
* ld-gc/pr11218.d: Likewise.
|
||||
|
||||
2010-01-23 Richard Sandiford <r.sandiford@uk.ibm.com>
|
||||
|
||||
* ld-powerpc/aix-ref-1-32.od, ld-powerpc/aix-ref-1-64.od,
|
||||
|
1
ld/testsuite/ld-gc/dummy.s
Normal file
1
ld/testsuite/ld-gc/dummy.s
Normal file
@ -0,0 +1 @@
|
||||
# Dummy
|
@ -92,3 +92,11 @@ test_gc "Check --gc-section/-r/-u" "gcrel" $ld "-r --gc-sections -u used_func"
|
||||
run_dump_test "noent"
|
||||
run_dump_test "abi-note"
|
||||
run_dump_test "start"
|
||||
if { [is_remote host] || [which $CC] != 0 } {
|
||||
if { [istarget "*-*-linux*"] } {
|
||||
ld_compile "$CC -fPIC $CFLAGS $cflags" $srcdir/$subdir/pr11218-1.c tmpdir/pr11218-1.o
|
||||
ld_simple_link $ld tmpdir/pr11218-1.so "-shared tmpdir/pr11218-1.o"
|
||||
ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/pr11218-2.c tmpdir/pr11218-2.o
|
||||
run_dump_test "pr11218"
|
||||
}
|
||||
}
|
||||
|
5
ld/testsuite/ld-gc/pr11218-1.c
Normal file
5
ld/testsuite/ld-gc/pr11218-1.c
Normal file
@ -0,0 +1,5 @@
|
||||
extern void unresolved_detected_at_runtime_not_at_linktime(void);
|
||||
void foo_in_so(void)
|
||||
{
|
||||
unresolved_detected_at_runtime_not_at_linktime();
|
||||
}
|
13
ld/testsuite/ld-gc/pr11218-2.c
Normal file
13
ld/testsuite/ld-gc/pr11218-2.c
Normal file
@ -0,0 +1,13 @@
|
||||
extern void foo_in_so(void);
|
||||
|
||||
void call_unresolved(void)
|
||||
{
|
||||
unresolved_detected_at_runtime_not_at_linktime();
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
foo_in_so();
|
||||
|
||||
return 0;
|
||||
}
|
5
ld/testsuite/ld-gc/pr11218.d
Normal file
5
ld/testsuite/ld-gc/pr11218.d
Normal file
@ -0,0 +1,5 @@
|
||||
# name: --gc-sections with shared library
|
||||
# source: dummy.s
|
||||
# ld: --gc-sections -e main tmpdir/pr11218-2.o tmpdir/pr11218-1.so
|
||||
# target: *-*-linux*
|
||||
# error: undefined reference to `unresolved_detected_at_runtime_not_at_linktime'
|
Loading…
Reference in New Issue
Block a user