From 1007b5031a2719a1a40737e501e808df12ed7e02 Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Mon, 14 May 2012 17:35:43 +0000 Subject: gold/ * layout.cc (Layout::make_output_section): Mark .tdata section as RELRO. * testsuite/relro_test.cc: Add a TLS variable. --- gold/ChangeLog | 6 ++++++ gold/layout.cc | 4 +++- gold/testsuite/relro_test.cc | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 7fffe40..80ce49e 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2012-05-14 Cary Coutant + + * layout.cc (Layout::make_output_section): Mark .tdata section + as RELRO. + * testsuite/relro_test.cc: Add a TLS variable. + 2012-05-10 H.J. Lu PR gold/14091 diff --git a/gold/layout.cc b/gold/layout.cc index b58f9d2..0ac0fbf 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -1430,7 +1430,9 @@ Layout::make_output_section(const char* name, elfcpp::Elf_Word type, { if (type == elfcpp::SHT_PROGBITS) { - if (strcmp(name, ".data.rel.ro") == 0) + if ((flags & elfcpp::SHF_TLS) != 0) + is_relro = true; + else if (strcmp(name, ".data.rel.ro") == 0) is_relro = true; else if (strcmp(name, ".data.rel.ro.local") == 0) { diff --git a/gold/testsuite/relro_test.cc b/gold/testsuite/relro_test.cc index d741022..795ad39 100644 --- a/gold/testsuite/relro_test.cc +++ b/gold/testsuite/relro_test.cc @@ -45,6 +45,9 @@ int* const p1 __attribute__ ((aligned(64))) = &i1; // P2 is a local relro variable. int* const p2 __attribute__ ((aligned(64))) = &i2; +// Add a TLS variable to make sure -z relro works correctly with TLS. +__thread int i3 = 1; + // Test symbol addresses. bool @@ -76,6 +79,7 @@ t1() assert(i1page != p2page); assert(i2page != p1page); assert(i2page != p2page); + assert(i3 == 1); return true; } -- cgit v1.1