Fix handling of relocations against TLS section symbols.

Gold doesn't handle relocations against the section symbol for a TLS
section correctly. Instead of using the offset of the section relative
to the TLS segment, it uses the address of the actual section.  This
patch checks for section symbols for TLS sections, and treats them
the same as TLS symbols.

gold/
	PR gold/16773
	* object.cc (Sized_relobj_file): Compute value of section symbols
	for TLS sections the same as TLS symbols.
This commit is contained in:
Cary Coutant 2014-09-26 13:34:27 -07:00
parent a73c2b56cd
commit 5efeedf61e
2 changed files with 9 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2014-09-26 Cary Coutant <ccoutant@google.com>
PR gold/16773
* object.cc (Sized_relobj_file): Compute value of section symbols
for TLS sections the same as TLS symbols.
2014-09-25 Cary Coutant <ccoutant@google.com>
PR gold/17432

View file

@ -2359,7 +2359,9 @@ Sized_relobj_file<size, big_endian>::compute_final_local_value_internal(
lv_out->set_merged_symbol_value(msv);
}
}
else if (lv_in->is_tls_symbol())
else if (lv_in->is_tls_symbol()
|| (lv_in->is_section_symbol()
&& (os->flags() & elfcpp::SHF_TLS)))
lv_out->set_output_value(os->tls_offset()
+ secoffset
+ lv_in->input_value());