Fix failure to diagnose GOTOFF relocation to undef symbol in shared lib (i386).
gold/ PR gold/16111 * i386.cc (Target_i386): Add check for fully-resolved symbol for R_386_GOTOFF.
This commit is contained in:
parent
44f9a8af85
commit
ed700649d0
@ -1,3 +1,9 @@
|
||||
2016-03-27 Cary Coutant <ccoutant@gmail.com>
|
||||
|
||||
PR gold/16111
|
||||
* i386.cc (Target_i386): Add check for fully-resolved symbol for
|
||||
R_386_GOTOFF.
|
||||
|
||||
2016-03-22 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* configure: Regenerate.
|
||||
|
17
gold/i386.cc
17
gold/i386.cc
@ -2394,6 +2394,23 @@ Target_i386::Scan::global(Symbol_table* symtab,
|
||||
break;
|
||||
|
||||
case elfcpp::R_386_GOTOFF:
|
||||
// A GOT-relative reference must resolve locally.
|
||||
if (!gsym->is_defined())
|
||||
gold_error(_("%s: relocation R_386_GOTOFF against undefined symbol %s"
|
||||
" cannot be used when making a shared object"),
|
||||
object->name().c_str(), gsym->name());
|
||||
else if (gsym->is_from_dynobj())
|
||||
gold_error(_("%s: relocation R_386_GOTOFF against external symbol %s"
|
||||
" cannot be used when making a shared object"),
|
||||
object->name().c_str(), gsym->name());
|
||||
else if (gsym->is_preemptible())
|
||||
gold_error(_("%s: relocation R_386_GOTOFF against preemptible symbol %s"
|
||||
" cannot be used when making a shared object"),
|
||||
object->name().c_str(), gsym->name());
|
||||
// We need a GOT section.
|
||||
target->got_section(symtab, layout);
|
||||
break;
|
||||
|
||||
case elfcpp::R_386_GOTPC:
|
||||
// We need a GOT section.
|
||||
target->got_section(symtab, layout);
|
||||
|
Loading…
x
Reference in New Issue
Block a user