diff options
author | Bob Wilson <bob.wilson@acm.org> | 2008-08-08 18:21:26 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@acm.org> | 2008-08-08 18:21:26 +0000 |
commit | cee4e9ec80a4b7aa3cebb72f6f8ee4ae84350000 (patch) | |
tree | a9629d75f2099197deb435703befdbd20683e94f /gas/config/tc-xtensa.c | |
parent | 5ca7b623077c45a85d67ce217ec73747d80cdc38 (diff) | |
download | binutils-redhat-cee4e9ec80a4b7aa3cebb72f6f8ee4ae84350000.tar.gz |
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.
Diffstat (limited to 'gas/config/tc-xtensa.c')
-rw-r--r-- | gas/config/tc-xtensa.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index ace81a87b5..d2753bbb35 100644 --- a/gas/config/tc-xtensa.c +++ b/gas/config/tc-xtensa.c @@ -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)) @@ -10574,6 +10567,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) { segment_info_type *seginfo = seg_info (sec); |