aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf.c2
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/emultempl/elf32.em7
-rw-r--r--ld/ldlang.c29
5 files changed, 26 insertions, 23 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c7562b6..d74795f 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2004-05-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf.c (_bfd_elf_make_section_from_shdr): Undo the last
+ change.
+
2004-05-27 Alexandre Oliva <aoliva@redhat.com>
* elf-m10300.c (mn10300_elf_relax_section): Don't test isym within
diff --git a/bfd/elf.c b/bfd/elf.c
index 61f5f57..93a3d3a 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -677,7 +677,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
if (hdr->sh_type != SHT_NOBITS)
flags |= SEC_HAS_CONTENTS;
if (hdr->sh_type == SHT_GROUP)
- flags |= SEC_GROUP;
+ flags |= SEC_GROUP | SEC_EXCLUDE;
if ((hdr->sh_flags & SHF_ALLOC) != 0)
{
flags |= SEC_ALLOC;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 6c34103..b0b7158 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2004-05-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Clear
+ SEC_EXCLUDE on non-SEC_DEBUGGING sections for relocatable link.
+ * ldlang.c (lang_add_section): Likewise.
+
2004-05-26 Alan Modra <amodra@bigpond.net.au>
* ldlang.c (lang_add_section): Set SEC_EXCLUDE for SEC_GROUP
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index 89c5d5d..9950649 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -1182,9 +1182,10 @@ gld${EMULATION_NAME}_place_orphan (lang_input_statement_type *file, asection *s)
#define HAVE_SECTION(hold, name) \
(hold.os != NULL || (hold.os = lang_output_section_find (name)) != NULL)
- if (((s->flags & (SEC_EXCLUDE | SEC_GROUP)) != 0 && !link_info.relocatable)
- || ((s->flags & (SEC_EXCLUDE | SEC_DEBUGGING))
- == (SEC_EXCLUDE | SEC_DEBUGGING)))
+ if (link_info.relocatable && (s->flags & SEC_DEBUGGING) == 0)
+ s->flags &= ~SEC_EXCLUDE;
+
+ if ((s->flags & SEC_EXCLUDE) != 0)
{
if (s->output_section == NULL)
s->output_section = bfd_abs_section_ptr;
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 34cff0f..b4c2559 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -1094,29 +1094,20 @@ lang_add_section (lang_statement_list_type *ptr,
flags = bfd_get_section_flags (section->owner, section);
- discard = FALSE;
-
- if (link_info.relocatable)
- {
- /* SEC_EXCLUDE is ignored when doing a relocatable link,
- except in the special case of debug info. (See bfd/stabs.c) */
- if ((flags & SEC_DEBUGGING) == 0)
- flags &= ~SEC_EXCLUDE;
- }
- else
+ /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
+ the special case of debug info. (See bfd/stabs.c) */
+ if (link_info.relocatable && (flags & SEC_DEBUGGING) == 0)
{
- /* SEC_GROUP sections should be dropped on a final link. */
- if ((flags & SEC_GROUP) != 0)
- flags |= SEC_EXCLUDE;
- }
+ flags &= ~SEC_EXCLUDE;
- /* Write SEC_EXCLUDE flag back, to simplify later linker code. */
- if (section->owner != NULL)
- bfd_set_section_flags (section->owner, section, flags);
+ /* Write the modified flag back, to simplify later linker
+ code. */
+ if (section->owner != NULL)
+ bfd_set_section_flags (section->owner, section, flags);
+ }
/* Discard sections marked with SEC_EXCLUDE. */
- if ((flags & SEC_EXCLUDE) != 0)
- discard = TRUE;
+ discard = (flags & SEC_EXCLUDE) != 0;
/* Discard input sections which are assigned to a section named
DISCARD_SECTION_NAME. */