diff options
author | Cary Coutant <ccoutant@google.com> | 2008-08-15 04:57:46 +0000 |
---|---|---|
committer | Cary Coutant <ccoutant@google.com> | 2008-08-15 04:57:46 +0000 |
commit | d85c80a35397436352e65447cc42e5a0cde9c51a (patch) | |
tree | dc027ecf78d4c7f25bf8a3cec0d33d63499e2fff | |
parent | 56c2003cdefd26149d2524efdf68cf51f5ed8c89 (diff) | |
download | gdb-d85c80a35397436352e65447cc42e5a0cde9c51a.zip gdb-d85c80a35397436352e65447cc42e5a0cde9c51a.tar.gz gdb-d85c80a35397436352e65447cc42e5a0cde9c51a.tar.bz2 |
2008-08-14 Cary Coutant <ccoutant@google.com>
* x86_64.cc (Target_x86_64::Relocate::relocat_tls):
Use addend for DTPOFF32, DTPOFF64, and TPOFF32 relocs.
* testsuite/tls_test.cc (struct int128): 128-bit struct
for testing TLS relocs with non-zero addend.
(v12): New TLS variable.
(t12): New test.
(t_last): Add check for v12.
* testsuite/tls_test.h (t12): New function.
* testsuite/tls_test_main.cc (thread_routine): Call new test.
-rw-r--r-- | gold/ChangeLog | 12 | ||||
-rw-r--r-- | gold/testsuite/tls_test.cc | 20 | ||||
-rw-r--r-- | gold/testsuite/tls_test.h | 2 | ||||
-rw-r--r-- | gold/testsuite/tls_test_main.cc | 1 | ||||
-rw-r--r-- | gold/x86_64.cc | 6 |
5 files changed, 38 insertions, 3 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index aec50a5..21867d2 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,15 @@ +2008-08-14 Cary Coutant <ccoutant@google.com> + + * x86_64.cc (Target_x86_64::Relocate::relocat_tls): + Use addend for DTPOFF32, DTPOFF64, and TPOFF32 relocs. + * testsuite/tls_test.cc (struct int128): 128-bit struct + for testing TLS relocs with non-zero addend. + (v12): New TLS variable. + (t12): New test. + (t_last): Add check for v12. + * testsuite/tls_test.h (t12): New function. + * testsuite/tls_test_main.cc (thread_routine): Call new test. + 2008-08-13 Ian Lance Taylor <iant@google.com> * layout.cc (Layout::attach_allocated_section_to_segment): Don't diff --git a/gold/testsuite/tls_test.cc b/gold/testsuite/tls_test.cc index e859f8c..880bf23 100644 --- a/gold/testsuite/tls_test.cc +++ b/gold/testsuite/tls_test.cc @@ -73,6 +73,14 @@ static __thread int v4 = 4; __thread int v5; static __thread int v6; +struct int128 +{ + long long hi; + long long lo; +}; + +static __thread struct int128 v12 = { 115, 125 }; + bool t1() { @@ -187,6 +195,16 @@ t10() } bool +t12() +{ + struct int128 newval = { 335, 345 }; + CHECK_EQ_OR_RETURN((int) v12.hi, 115); + CHECK_EQ_OR_RETURN((int) v12.lo, 125); + v12 = newval; + return true; +} + +bool t_last() { CHECK_EQ_OR_RETURN(v1, 10); @@ -195,6 +213,8 @@ t_last() CHECK_EQ_OR_RETURN(v4, 40); CHECK_EQ_OR_RETURN(v5, 50); CHECK_EQ_OR_RETURN(v6, 60); + CHECK_EQ_OR_RETURN((int) v12.hi, 335); + CHECK_EQ_OR_RETURN((int) v12.lo, 345); CHECK_EQ_OR_RETURN(o1, -10); CHECK_EQ_OR_RETURN(o2, -20); CHECK_EQ_OR_RETURN(o3, -30); diff --git a/gold/testsuite/tls_test.h b/gold/testsuite/tls_test.h index 0aaec73..1c98b17 100644 --- a/gold/testsuite/tls_test.h +++ b/gold/testsuite/tls_test.h @@ -46,6 +46,8 @@ extern bool t10(); extern "C" int t11(); extern "C" int t11_last(); +extern bool t12(); + extern bool t_last(); // These variables are defined in tls_test_file2.cc diff --git a/gold/testsuite/tls_test_main.cc b/gold/testsuite/tls_test_main.cc index 993cc7e..0ff02c6 100644 --- a/gold/testsuite/tls_test_main.cc +++ b/gold/testsuite/tls_test_main.cc @@ -100,6 +100,7 @@ thread_routine(void* arg) f10b(f10a()); check("t10", t10()); check("t11", t11() != 0); + check("t12", t12()); check("t_last", t_last()); // Unlock the second mutex. diff --git a/gold/x86_64.cc b/gold/x86_64.cc index cbbd5cc..2daa9bf 100644 --- a/gold/x86_64.cc +++ b/gold/x86_64.cc @@ -2054,7 +2054,7 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo, if (this->saw_tls_block_reloc_) value -= tls_segment->memsz(); } - Relocate_functions<64, false>::rela32(view, value, 0); + Relocate_functions<64, false>::rela32(view, value, addend); break; case elfcpp::R_X86_64_DTPOFF64: @@ -2065,7 +2065,7 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo, if (this->saw_tls_block_reloc_) value -= tls_segment->memsz(); } - Relocate_functions<64, false>::rela64(view, value, 0); + Relocate_functions<64, false>::rela64(view, value, addend); break; case elfcpp::R_X86_64_GOTTPOFF: // Initial-exec @@ -2107,7 +2107,7 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo, case elfcpp::R_X86_64_TPOFF32: // Local-exec value -= tls_segment->memsz(); - Relocate_functions<64, false>::rela32(view, value, 0); + Relocate_functions<64, false>::rela32(view, value, addend); break; } } |