diff options
author | Kai Tietz <kai.tietz@onevision.com> | 2010-09-22 14:20:24 +0000 |
---|---|---|
committer | Kai Tietz <kai.tietz@onevision.com> | 2010-09-22 14:20:24 +0000 |
commit | e4b0fe2fa7c4fae156f5d0bc3e14fcc9c397614f (patch) | |
tree | 2ef39e52fb0583f4b4a03f00f715e540e36ebf62 /ld/ldlang.c | |
parent | 72e4db75e816964c7533b8522a59ec05b7439691 (diff) | |
download | gdb-e4b0fe2fa7c4fae156f5d0bc3e14fcc9c397614f.zip gdb-e4b0fe2fa7c4fae156f5d0bc3e14fcc9c397614f.tar.gz gdb-e4b0fe2fa7c4fae156f5d0bc3e14fcc9c397614f.tar.bz2 |
2010-09-22 Kai Tietz <kai.tietz@onevision.com>
* ldlang.c (lang_add_section): Allow for debugging
section to be marked as noload but to keep content.
(IGNORE_SECTION): Likewise.
(lang_check_section_addresses): Likewise.
* ldwrite.c (build_link_order): Likewise.
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r-- | ld/ldlang.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c index 75fa25c..1c38618 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -2245,7 +2245,15 @@ lang_add_section (lang_statement_list_type *ptr, case noload_section: flags &= ~SEC_LOAD; flags |= SEC_NEVER_LOAD; - if ((flags & SEC_COFF_SHARED_LIBRARY) == 0) + if (((bfd_get_flavour (section->owner) + == bfd_target_ecoff_flavour) + || (bfd_get_flavour (section->owner) + == bfd_target_coff_flavour))) + { + if ((flags & (SEC_COFF_SHARED_LIBRARY | SEC_DEBUGGING)) == 0) + flags &= ~SEC_HAS_CONTENTS; + } + else flags &= ~SEC_HAS_CONTENTS; break; } @@ -4555,8 +4563,11 @@ sort_sections_by_lma (const void *arg1, const void *arg2) return 0; } +/* On ELF, a debugging section must never set SEC_NEVER_LOAD, as no output + would be written for it. So the combination of debugging and never-load + is something which can only happen for pe-coff and must not be ignored. */ #define IGNORE_SECTION(s) \ - ((s->flags & SEC_NEVER_LOAD) != 0 \ + ((s->flags & (SEC_NEVER_LOAD | SEC_DEBUGGING)) == SEC_NEVER_LOAD \ || (s->flags & SEC_ALLOC) == 0 \ || ((s->flags & SEC_THREAD_LOCAL) != 0 \ && (s->flags & SEC_LOAD) == 0)) @@ -4590,7 +4601,7 @@ lang_check_section_addresses (void) for (s = link_info.output_bfd->sections; s != NULL; s = s->next) { /* Only consider loadable sections with real contents. */ - if ((s->flags & SEC_NEVER_LOAD) + if ((s->flags & (SEC_NEVER_LOAD | SEC_DEBUGGING)) == SEC_NEVER_LOAD || !(s->flags & SEC_LOAD) || !(s->flags & SEC_ALLOC) || s->size == 0) |