aboutsummaryrefslogtreecommitdiff
path: root/gold/x86_64.cc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2011-07-09 00:47:12 +0000
committerIan Lance Taylor <ian@airs.com>2011-07-09 00:47:12 +0000
commit191f1a2dccbc09da4c6cf7dc9b3ad5fa8520a4e8 (patch)
tree7896a4e6a125ecfba82f94c0b590ebd78aab92d5 /gold/x86_64.cc
parent2fbb75826aefed6034a6e9a785ee8503e93d2aef (diff)
downloadgdb-191f1a2dccbc09da4c6cf7dc9b3ad5fa8520a4e8.zip
gdb-191f1a2dccbc09da4c6cf7dc9b3ad5fa8520a4e8.tar.gz
gdb-191f1a2dccbc09da4c6cf7dc9b3ad5fa8520a4e8.tar.bz2
PR gold/11317
* target-reloc.h (issue_undefined_symbol_error): New inline function, broken out of relocate_section. (relocate_section): Call issue_undefined_symbol_error. * i386.cc (Target_i386::Relocate::relocate_tls): Don't crash if there is no TLS segment if we are about to issue an undefined symbol error. * x86_64.cc (Target_x86_64::relocate_tls): Likewise.
Diffstat (limited to 'gold/x86_64.cc')
-rw-r--r--gold/x86_64.cc27
1 files changed, 18 insertions, 9 deletions
diff --git a/gold/x86_64.cc b/gold/x86_64.cc
index 182429e..de204cb 100644
--- a/gold/x86_64.cc
+++ b/gold/x86_64.cc
@@ -3112,7 +3112,8 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo,
{
if (tls_segment == NULL)
{
- gold_assert(parameters->errors()->error_count() > 0);
+ gold_assert(parameters->errors()->error_count() > 0
+ || issue_undefined_symbol_error(gsym));
return;
}
this->tls_gd_to_le(relinfo, relnum, tls_segment,
@@ -3142,7 +3143,8 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo,
{
if (tls_segment == NULL)
{
- gold_assert(parameters->errors()->error_count() > 0);
+ gold_assert(parameters->errors()->error_count() > 0
+ || issue_undefined_symbol_error(gsym));
return;
}
value = target->got_plt_section()->address() + got_offset;
@@ -3175,7 +3177,8 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo,
{
if (tls_segment == NULL)
{
- gold_assert(parameters->errors()->error_count() > 0);
+ gold_assert(parameters->errors()->error_count() > 0
+ || issue_undefined_symbol_error(gsym));
return;
}
this->tls_desc_gd_to_le(relinfo, relnum, tls_segment,
@@ -3214,7 +3217,8 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo,
{
if (tls_segment == NULL)
{
- gold_assert(parameters->errors()->error_count() > 0);
+ gold_assert(parameters->errors()->error_count() > 0
+ || issue_undefined_symbol_error(gsym));
return;
}
value = target->got_plt_section()->address() + got_offset;
@@ -3250,7 +3254,8 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo,
{
if (tls_segment == NULL)
{
- gold_assert(parameters->errors()->error_count() > 0);
+ gold_assert(parameters->errors()->error_count() > 0
+ || issue_undefined_symbol_error(gsym));
return;
}
this->tls_ld_to_le(relinfo, relnum, tls_segment, rela, r_type,
@@ -3284,7 +3289,8 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo,
{
if (tls_segment == NULL)
{
- gold_assert(parameters->errors()->error_count() > 0);
+ gold_assert(parameters->errors()->error_count() > 0
+ || issue_undefined_symbol_error(gsym));
return;
}
value -= tls_segment->memsz();
@@ -3298,7 +3304,8 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo,
{
if (tls_segment == NULL)
{
- gold_assert(parameters->errors()->error_count() > 0);
+ gold_assert(parameters->errors()->error_count() > 0
+ || issue_undefined_symbol_error(gsym));
return;
}
value -= tls_segment->memsz();
@@ -3311,7 +3318,8 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo,
{
if (tls_segment == NULL)
{
- gold_assert(parameters->errors()->error_count() > 0);
+ gold_assert(parameters->errors()->error_count() > 0
+ || issue_undefined_symbol_error(gsym));
return;
}
Target_x86_64::Relocate::tls_ie_to_le(relinfo, relnum, tls_segment,
@@ -3350,7 +3358,8 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo,
case elfcpp::R_X86_64_TPOFF32: // Local-exec
if (tls_segment == NULL)
{
- gold_assert(parameters->errors()->error_count() > 0);
+ gold_assert(parameters->errors()->error_count() > 0
+ || issue_undefined_symbol_error(gsym));
return;
}
value -= tls_segment->memsz();