2008-08-08 Sterling Augustine <sterling@tensilica.com>
authorBob Wilson <bob.wilson@acm.org>
Fri, 8 Aug 2008 18:21:26 +0000 (18:21 +0000)
committerBob Wilson <bob.wilson@acm.org>
Fri, 8 Aug 2008 18:21:26 +0000 (18:21 +0000)
* config/tc-xtensa.c (exclude_section_from_property_tables): New.
(xtensa_create_property_segments): Use it.
(xtensa_create_xproperty_segments): Likewise.

gas/ChangeLog
gas/config/tc-xtensa.c

index 9847ea2c7fb0f56fcb30b23fa4acf62dc4345f28..a62f032398f9cf48d632ce15dec0da78d147e726 100644 (file)
@@ -1,3 +1,9 @@
+2008-08-08  Sterling Augustine  <sterling@tensilica.com>
+       
+       * config/tc-xtensa.c (exclude_section_from_property_tables): New.
+       (xtensa_create_property_segments): Use it.
+       (xtensa_create_xproperty_segments): Likewise.
+       
 2008-08-08  Alan Modra  <amodra@bigpond.net.au>
 
        * doc/internals.texi (DWARF2_FORMAT): Update for 2008-08-04 change.
index ace81a87b56ceb1d4c74b23e028e1d259193d47e..d2753bbb35bf8e7685ca6f7d6ccedb91113b74b8 100644 (file)
@@ -10320,6 +10320,7 @@ static void xtensa_create_property_segments
   (frag_predicate, frag_predicate, const char *, xt_section_type);
 static void xtensa_create_xproperty_segments
   (frag_flags_fn, const char *, xt_section_type);
+static bfd_boolean exclude_section_from_property_tables (segT);
 static bfd_boolean section_has_property (segT, frag_predicate);
 static bfd_boolean section_has_xproperty (segT, frag_flags_fn);
 static void add_xt_block_frags
@@ -10383,12 +10384,8 @@ xtensa_create_property_segments (frag_predicate property_function,
        seclist = &(*seclist)->next)
     {
       segT sec = *seclist;
-      flagword flags;
 
-      flags = bfd_get_section_flags (stdoutput, sec);
-      if (flags & SEC_DEBUGGING)
-       continue;
-      if (!(flags & SEC_ALLOC))
+      if (exclude_section_from_property_tables (sec))
        continue;
 
       if (section_has_property (sec, property_function))
@@ -10485,12 +10482,8 @@ xtensa_create_xproperty_segments (frag_flags_fn flag_fn,
        seclist = &(*seclist)->next)
     {
       segT sec = *seclist;
-      flagword flags;
 
-      flags = bfd_get_section_flags (stdoutput, sec);
-      if ((flags & SEC_DEBUGGING)
-         || !(flags & SEC_ALLOC)
-         || (flags & SEC_MERGE))
+      if (exclude_section_from_property_tables (sec))
        continue;
 
       if (section_has_xproperty (sec, flag_fn))
@@ -10573,6 +10566,27 @@ xtensa_create_xproperty_segments (frag_flags_fn flag_fn,
 }
 
 
+static bfd_boolean
+exclude_section_from_property_tables (segT sec)
+{
+  flagword flags = bfd_get_section_flags (stdoutput, sec);
+
+  /* Sections that don't contribute to the memory footprint are excluded.  */
+  if ((flags & SEC_DEBUGGING)
+      || !(flags & SEC_ALLOC)
+      || (flags & SEC_MERGE))
+    return TRUE;
+
+  /* Linker cie and fde optimizations mess up property entries for
+     eh_frame sections, but there is nothing inside them relevant to
+     property tables anyway.  */
+  if (strcmp (sec->name, ".eh_frame") == 0)
+    return TRUE;
+
+  return FALSE;
+}
+
+
 static bfd_boolean
 section_has_property (segT sec, frag_predicate property_function)
 {