gold/
authorCary Coutant <ccoutant@google.com>
Thu, 24 May 2012 01:02:15 +0000 (01:02 +0000)
committerCary Coutant <ccoutant@google.com>
Thu, 24 May 2012 01:02:15 +0000 (01:02 +0000)
* layout.cc (Layout::section_name_mapping): Add rules to handle
exact match on .data.rel.ro.local or .data.rel.ro.
(Layout::output_section_name): Check for exact matches.

gold/ChangeLog
gold/layout.cc

index 9ea9070c910ed21069b1c11f006d3551491e96aa..4ba85c98761083db4522449aba912b1baeedb891 100644 (file)
@@ -1,3 +1,9 @@
+2012-05-23  Cary Coutant  <ccoutant@google.com>
+
+       * layout.cc (Layout::section_name_mapping): Add rules to handle
+       exact match on .data.rel.ro.local or .data.rel.ro.
+       (Layout::output_section_name): Check for exact matches.
+
 2012-05-23  Cary Coutant  <ccoutant@google.com>
 
        * layout.cc (Layout::section_name_mapping): Match .data.rel.ro.*
index e9aeef5cc59df4bd4498ea0cf0a985a2144b86d2..c7ca322fd5856114fb2295cbba88053992b1cb9f 100644 (file)
@@ -4569,12 +4569,15 @@ Layout::set_dynamic_symbol_size(const Symbol_table* symtab)
 // based on the GNU linker default ELF linker script.
 
 #define MAPPING_INIT(f, t) { f, sizeof(f) - 1, t, sizeof(t) - 1 }
+#define MAPPING_INIT_EXACT(f, t) { f, 0, t, sizeof(t) - 1 }
 const Layout::Section_name_mapping Layout::section_name_mapping[] =
 {
   MAPPING_INIT(".text.", ".text"),
   MAPPING_INIT(".rodata.", ".rodata"),
   MAPPING_INIT(".data.rel.ro.local.", ".data.rel.ro.local"),
+  MAPPING_INIT_EXACT(".data.rel.ro.local", ".data.rel.ro.local"),
   MAPPING_INIT(".data.rel.ro.", ".data.rel.ro"),
+  MAPPING_INIT_EXACT(".data.rel.ro", ".data.rel.ro"),
   MAPPING_INIT(".data.", ".data"),
   MAPPING_INIT(".bss.", ".bss"),
   MAPPING_INIT(".tdata.", ".tdata"),
@@ -4613,6 +4616,7 @@ const Layout::Section_name_mapping Layout::section_name_mapping[] =
   MAPPING_INIT(".gnu.linkonce.armexidx.", ".ARM.exidx"),
 };
 #undef MAPPING_INIT
+#undef MAPPING_INIT_EXACT
 
 const int Layout::section_name_mapping_count =
   (sizeof(Layout::section_name_mapping)
@@ -4664,10 +4668,21 @@ Layout::output_section_name(const Relobj* relobj, const char* name,
   const Section_name_mapping* psnm = section_name_mapping;
   for (int i = 0; i < section_name_mapping_count; ++i, ++psnm)
     {
-      if (strncmp(name, psnm->from, psnm->fromlen) == 0)
+      if (psnm->fromlen > 0)
        {
-         *plen = psnm->tolen;
-         return psnm->to;
+         if (strncmp(name, psnm->from, psnm->fromlen) == 0)
+           {
+             *plen = psnm->tolen;
+             return psnm->to;
+           }
+       }
+      else
+       {
+         if (strcmp(name, psnm->from) == 0)
+           {
+             *plen = psnm->tolen;
+             return psnm->to;
+           }
        }
     }