aboutsummaryrefslogtreecommitdiff
path: root/ld/ldlang.c
diff options
context:
space:
mode:
authorKai Tietz <kai.tietz@onevision.com>2010-09-22 14:20:24 +0000
committerKai Tietz <kai.tietz@onevision.com>2010-09-22 14:20:24 +0000
commite4b0fe2fa7c4fae156f5d0bc3e14fcc9c397614f (patch)
tree2ef39e52fb0583f4b4a03f00f715e540e36ebf62 /ld/ldlang.c
parent72e4db75e816964c7533b8522a59ec05b7439691 (diff)
downloadgdb-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.c17
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)