gold/
authorCary Coutant <ccoutant@google.com>
Mon, 14 May 2012 17:35:43 +0000 (17:35 +0000)
committerCary Coutant <ccoutant@google.com>
Mon, 14 May 2012 17:35:43 +0000 (17:35 +0000)
* layout.cc (Layout::make_output_section): Mark .tdata section
as RELRO.
* testsuite/relro_test.cc: Add a TLS variable.

gold/ChangeLog
gold/layout.cc
gold/testsuite/relro_test.cc

index 7fffe40..80ce49e 100644 (file)
@@ -1,3 +1,9 @@
+2012-05-14  Cary Coutant  <ccoutant@google.com>
+
+       * 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  <hongjiu.lu@intel.com>
 
        PR gold/14091
index b58f9d2..0ac0fbf 100644 (file)
@@ -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)
            {
index d741022..795ad39 100644 (file)
@@ -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;
 }