2009-01-14  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/9727
	* elflink.c (elf_gc_sweep): Exclude the group section if the
	first member of the section group is excluded.

ld/testsuite/

2009-01-14  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/9727
	* ld-elf/group8.s: New.
	* ld-elf/group8a.d: Likewise.
	* ld-elf/group8b.d: Likewise.
	* ld-elf/group9.s: Likewise.
	* ld-elf/group9a.d: Likewise.
	* ld-elf/group9b.d: Likewise.
This commit is contained in:
H.J. Lu 2009-01-14 21:52:49 +00:00
parent adb483feb8
commit a33dafc30d
9 changed files with 94 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2009-01-14 H.J. Lu <hongjiu.lu@intel.com>
PR ld/9727
* elflink.c (elf_gc_sweep): Exclude the group section if the
first member of the section group is excluded.
2009-01-14 Alan Modra <amodra@bigpond.net.au>
PR 9735

View File

@ -11397,10 +11397,21 @@ elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
for (o = sub->sections; o != NULL; o = o->next)
{
/* Keep debug and special sections. */
if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0
|| (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
o->gc_mark = 1;
/* When any section in a section group is kept, we keep all
sections in the section group. If the first member of
the section group is excluded, we will also exclude the
group section. */
if (o->flags & SEC_GROUP)
{
asection *first = elf_next_in_group (o);
o->gc_mark = first->gc_mark;
}
else if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0
|| (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
{
/* Keep debug and special sections. */
o->gc_mark = 1;
}
if (o->gc_mark)
continue;

View File

@ -1,3 +1,13 @@
2009-01-14 H.J. Lu <hongjiu.lu@intel.com>
PR ld/9727
* ld-elf/group8.s: New.
* ld-elf/group8a.d: Likewise.
* ld-elf/group8b.d: Likewise.
* ld-elf/group9.s: Likewise.
* ld-elf/group9a.d: Likewise.
* ld-elf/group9b.d: Likewise.
2009-01-13 Alan Modra <amodra@bigpond.net.au>
* ld-spu/icache1.s: New file.

View File

@ -0,0 +1,10 @@
.section .text.foo,"axG",%progbits,foo,comdat
.globl foo
.type foo,%function
foo:
.byte 0
.section .text.bar,"axG",%progbits,bar,comdat
.globl bar
.type bar,%function
bar:
.byte 0

View File

@ -0,0 +1,8 @@
#source: group8.s
#ld: -r --gc-sections --entry foo
#readelf: -g --wide
#notarget: ia64-*-*
COMDAT group section \[[ 0-9]+\] `.group' \[foo\] contains 1 sections:
\[Index\] Name
\[[ 0-9]+\] .text.foo

View File

@ -0,0 +1,8 @@
#source: group8.s
#ld: -r --gc-sections --entry bar
#readelf: -g --wide
#notarget: ia64-*-*
COMDAT group section \[[ 0-9]+\] `.group' \[bar\] contains 1 sections:
\[Index\] Name
\[[ 0-9]+\] .text.bar

View File

@ -0,0 +1,15 @@
.section .text.foo,"axG",%progbits,foo,comdat
.globl foo
.type foo,%function
foo:
.byte 0
.section .data.foo,"axG",%progbits,foo,comdat
.globl foo.data
.type foo,%object
foo.data:
.byte 0
.section .text.bar,"axG",%progbits,bar,comdat
.globl bar
.type bar,%function
bar:
.byte foo.data

View File

@ -0,0 +1,9 @@
#source: group9.s
#ld: -r --gc-sections --entry foo
#readelf: -g --wide
#notarget: ia64-*-*
COMDAT group section \[[ 0-9]+\] `.group' \[foo\] contains 2 sections:
\[Index\] Name
\[[ 0-9]+\] .text.foo
\[[ 0-9]+\] .data.foo

View File

@ -0,0 +1,13 @@
#source: group9.s
#ld: -r --gc-sections --entry bar
#readelf: -g --wide
#notarget: ia64-*-*
COMDAT group section \[[ 0-9]+\] `.group' \[foo\] contains 2 sections:
\[Index\] Name
\[[ 0-9]+\] .text.foo
\[[ 0-9]+\] .data.foo
COMDAT group section \[[ 0-9]+\] `.group' \[bar\] contains 1 sections:
\[Index\] Name
\[[ 0-9]+\] .text.bar