2010-10-23 Mark Mitchell <mark@codesourcery.com>

* config/obj-elf.c (elf_adjust_symtab): New.  Move group section
	processing here from elf_frob_file.  Ensure that group signature
	symbols have the name of the group.
	(elf_frob_file): Move group section processing to
	elf_adjust_symtab.
	* config/obj-elf.h (elf_adjust_symtab): Declare.
	(obj_adjust_symtab): Define.
	* config/tc-arm.c (arm_adjust_symtab): Call elf_adjust_symtab.

2010-10-23  Mark Mitchell  <mark@codesourcery.com>

	* gas/elf/elf.exp: Add group0c test.
	* gas/elf/group0c.d: New.
	* gas/elf/group0a.d: Expect ".group" for the name of group
	sections.
	* gas/elf/group0b.d: Likewise.
	* gas/elf/group1a.d: Likewise.
	* gas/elf/group1b.d: Likewise.
	* gas/elf/groupautoa.d: Likewise.
	* gas/elf/groupautob.d: Likewise.
	* gas/elf/section4.d: Likewise.
	* gas/ia64/group-1.d: Likewise.  Adjust hard-coded constants.

2010-10-22  Mark Mitchell  <mark@codesourcery.com>

	* binutils-all/group-5.d: Expect ".group" for the name of group
	sections.
	* binutils-all/strip-2.d: Likewise.

2010-10-23  Mark Mitchell  <mark@codesourcery.com>

	* ld-elf/group10.d: Expect ".group" for the name of group
	sections.
	* ld-elf/group2.d: Likewise.
	* ld-elf/group7.d: Likewise.
This commit is contained in:
Mark Mitchell 2010-10-23 18:05:10 +00:00
parent 0c480dea72
commit 709001e957
22 changed files with 103 additions and 45 deletions

View File

@ -1,3 +1,9 @@
2010-10-22 Mark Mitchell <mark@codesourcery.com>
* binutils-all/group-5.d: Expect ".group" for the name of group
sections.
* binutils-all/strip-2.d: Likewise.
2010-10-12 Andreas Schwab <schwab@linux-m68k.org> 2010-10-12 Andreas Schwab <schwab@linux-m68k.org>
* binutils-all/m68k/objdump.exp: Add fnop test. * binutils-all/m68k/objdump.exp: Add fnop test.

View File

@ -6,13 +6,13 @@
#readelf: -Sg --wide #readelf: -Sg --wide
#... #...
\[[ 0-9]+\] foo_group[ \t]+GROUP[ \t]+.* \[[ 0-9]+\] \.group[ \t]+GROUP[ \t]+.*
#... #...
\[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG.* \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG.*
#... #...
\[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG.* \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG.*
#... #...
COMDAT group section \[[ 0-9]+\] `foo_group' \[foo_group\] contains 2 sections: COMDAT group section \[[ 0-9]+\] `\.group' \[foo_group\] contains 2 sections:
\[Index\] Name \[Index\] Name
\[[ 0-9]+\] .text.* \[[ 0-9]+\] .text.*
\[[ 0-9]+\] .data.* \[[ 0-9]+\] .data.*

View File

@ -5,13 +5,13 @@
#name: strip with section group 2 #name: strip with section group 2
#... #...
\[[ 0-9]+\] foo_group[ \t]+GROUP[ \t]+.* \[[ 0-9]+\] \.group[ \t]+GROUP[ \t]+.*
#... #...
\[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG[ \t]+.* \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG[ \t]+.*
#... #...
\[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG[ \t]+.* \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG[ \t]+.*
#... #...
COMDAT group section \[[ 0-9]+\] `foo_group' \[foo_group\] contains 2 sections: COMDAT group section \[[ 0-9]+\] `\.group' \[foo_group\] contains 2 sections:
\[Index\] Name \[Index\] Name
\[[ 0-9]+\] .text.* \[[ 0-9]+\] .text.*
\[[ 0-9]+\] .data.* \[[ 0-9]+\] .data.*

View File

@ -1,3 +1,14 @@
2010-10-23 Mark Mitchell <mark@codesourcery.com>
* config/obj-elf.c (elf_adjust_symtab): New. Move group section
processing here from elf_frob_file. Ensure that group signature
symbols have the name of the group.
(elf_frob_file): Move group section processing to
elf_adjust_symtab.
* config/obj-elf.h (elf_adjust_symtab): Declare.
(obj_adjust_symtab): Define.
* config/tc-arm.c (arm_adjust_symtab): Call elf_adjust_symtab.
2010-10-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> 2010-10-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* config/tc-sparc.h [TE_SOLARIS] (ELF_TARGET_FORMAT): Define as * config/tc-sparc.h [TE_SOLARIS] (ELF_TARGET_FORMAT): Define as

View File

@ -2081,32 +2081,29 @@ static void free_section_idx (const char *key ATTRIBUTE_UNUSED, void *val)
} }
void void
elf_frob_file (void) elf_adjust_symtab (void)
{ {
struct group_list list; struct group_list list;
unsigned int i; unsigned int i;
bfd_map_over_sections (stdoutput, adjust_stab_sections, NULL);
/* Go find section groups. */ /* Go find section groups. */
list.num_group = 0; list.num_group = 0;
list.head = NULL; list.head = NULL;
list.elt_count = NULL; list.elt_count = NULL;
list.indexes = hash_new (); list.indexes = hash_new ();
bfd_map_over_sections (stdoutput, build_group_lists, &list); bfd_map_over_sections (stdoutput, build_group_lists, &list);
/* Make the SHT_GROUP sections that describe each section group. We /* Make the SHT_GROUP sections that describe each section group. We
can't set up the section contents here yet, because elf section can't set up the section contents here yet, because elf section
indices have yet to be calculated. elf.c:set_group_contents does indices have yet to be calculated. elf.c:set_group_contents does
the rest of the work. */ the rest of the work. */
for (i = 0; i < list.num_group; i++) for (i = 0; i < list.num_group; i++)
{ {
const char *group_name = elf_group_name (list.head[i]); const char *group_name = elf_group_name (list.head[i]);
const char *sec_name; const char *sec_name;
asection *s; asection *s;
flagword flags; flagword flags;
struct symbol *sy; struct symbol *sy;
int has_sym;
bfd_size_type size; bfd_size_type size;
flags = SEC_READONLY | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_GROUP; flags = SEC_READONLY | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_GROUP;
@ -2122,17 +2119,7 @@ elf_frob_file (void)
} }
} }
sec_name = group_name; sec_name = ".group";
sy = symbol_find_exact (group_name);
has_sym = 0;
if (sy != NULL
&& (sy == symbol_lastP
|| (sy->sy_next != NULL
&& sy->sy_next->sy_previous == sy)))
{
has_sym = 1;
sec_name = ".group";
}
s = subseg_force_new (sec_name, 0); s = subseg_force_new (sec_name, 0);
if (s == NULL if (s == NULL
|| !bfd_set_section_flags (stdoutput, s, flags) || !bfd_set_section_flags (stdoutput, s, flags)
@ -2145,8 +2132,20 @@ elf_frob_file (void)
/* Pass a pointer to the first section in this group. */ /* Pass a pointer to the first section in this group. */
elf_next_in_group (s) = list.head[i]; elf_next_in_group (s) = list.head[i];
if (has_sym) /* Make sure that the signature symbol for the group has the
elf_group_id (s) = sy->bsym; name of the group. */
sy = symbol_find_exact (group_name);
if (!sy
|| (sy != symbol_lastP
&& (sy->sy_next == NULL
|| sy->sy_next->sy_previous != sy)))
{
/* Create the symbol now. */
sy = symbol_new (group_name, now_seg, (valueT) 0, frag_now);
symbol_get_obj (sy)->local = 1;
symbol_table_insert (sy);
}
elf_group_id (s) = symbol_get_bfdsym (sy);
size = 4 * (list.elt_count[i] + 1); size = 4 * (list.elt_count[i] + 1);
bfd_set_section_size (stdoutput, s, size); bfd_set_section_size (stdoutput, s, size);
@ -2155,15 +2154,21 @@ elf_frob_file (void)
frag_wane (frag_now); frag_wane (frag_now);
} }
#ifdef elf_tc_final_processing
elf_tc_final_processing ();
#endif
/* Cleanup hash. */ /* Cleanup hash. */
hash_traverse (list.indexes, free_section_idx); hash_traverse (list.indexes, free_section_idx);
hash_die (list.indexes); hash_die (list.indexes);
} }
void
elf_frob_file (void)
{
bfd_map_over_sections (stdoutput, adjust_stab_sections, NULL);
#ifdef elf_tc_final_processing
elf_tc_final_processing ();
#endif
}
/* It removes any unneeded versioned symbols from the symbol table. */ /* It removes any unneeded versioned symbols from the symbol table. */
void void

View File

@ -197,6 +197,11 @@ void elf_copy_symbol_attributes (symbolS *, symbolS *);
(elf_copy_symbol_attributes (DEST, SRC)) (elf_copy_symbol_attributes (DEST, SRC))
#endif #endif
void elf_adjust_symtab (void);
#ifndef obj_adjust_symtab
#define obj_adjust_symtab elf_adjust_symtab
#endif
#ifndef SEPARATE_STAB_SECTIONS #ifndef SEPARATE_STAB_SECTIONS
/* Avoid ifndef each separate macro setting by wrapping the whole of the /* Avoid ifndef each separate macro setting by wrapping the whole of the
stab group on the assumption that whoever sets SEPARATE_STAB_SECTIONS stab group on the assumption that whoever sets SEPARATE_STAB_SECTIONS

View File

@ -21957,6 +21957,8 @@ arm_adjust_symtab (void)
/* Remove any overlapping mapping symbols generated by alignment frags. */ /* Remove any overlapping mapping symbols generated by alignment frags. */
bfd_map_over_sections (stdoutput, check_mapping_symbols, (char *) 0); bfd_map_over_sections (stdoutput, check_mapping_symbols, (char *) 0);
/* Now do generic ELF adjustments. */
elf_adjust_symtab ();
#endif #endif
} }

View File

@ -1,3 +1,17 @@
2010-10-23 Mark Mitchell <mark@codesourcery.com>
* gas/elf/elf.exp: Add group0c test.
* gas/elf/group0c.d: New.
* gas/elf/group0a.d: Expect ".group" for the name of group
sections.
* gas/elf/group0b.d: Likewise.
* gas/elf/group1a.d: Likewise.
* gas/elf/group1b.d: Likewise.
* gas/elf/groupautoa.d: Likewise.
* gas/elf/groupautob.d: Likewise.
* gas/elf/section4.d: Likewise.
* gas/ia64/group-1.d: Likewise. Adjust hard-coded constants.
2010-10-22 Nick Clifton <nickc@redhat.com> 2010-10-22 Nick Clifton <nickc@redhat.com>
* gas/all/fwdexp.d: Also look for f8ffffff. * gas/all/fwdexp.d: Also look for f8ffffff.

View File

@ -104,6 +104,7 @@ if { ([istarget "*-*-*elf*"]
} }
run_dump_test "group0a" run_dump_test "group0a"
run_dump_test "group0b" run_dump_test "group0b"
run_dump_test "group0c"
run_dump_test "group1a" run_dump_test "group1a"
run_dump_test "group1b" run_dump_test "group1b"
run_dump_test "groupautoa" run_dump_test "groupautoa"

View File

@ -3,7 +3,7 @@
#source: group0.s #source: group0.s
#... #...
[ ]*\[.*\][ ]+\.foo_group[ ]+GROUP.* [ ]*\[.*\][ ]+\.group[ ]+GROUP.*
#... #...
[ ]*\[.*\][ ]+\.foo[ ]+PROGBITS.*[ ]+AXG[ ]+.* [ ]*\[.*\][ ]+\.foo[ ]+PROGBITS.*[ ]+AXG[ ]+.*
[ ]*\[.*\][ ]+\.bar[ ]+PROGBITS.*[ ]+AG[ ]+.* [ ]*\[.*\][ ]+\.bar[ ]+PROGBITS.*[ ]+AG[ ]+.*

View File

@ -3,7 +3,7 @@
#source: group0.s #source: group0.s
#... #...
COMDAT group section \[ 1\] `.foo_group' \[.foo_group\] contains 2 sections: COMDAT group section \[ 1\] `\.group' \[.foo_group\] contains 2 sections:
[ ]+\[Index\][ ]+Name [ ]+\[Index\][ ]+Name
[ ]+\[.*\][ ]+.foo [ ]+\[.*\][ ]+.foo
[ ]+\[.*\][ ]+.bar [ ]+\[.*\][ ]+.bar

View File

@ -0,0 +1,7 @@
#readelf: -sW
#name: group section name
#source: group0.s
#...
.*NOTYPE[ ]+LOCAL[ ]+DEFAULT[ ]+[0-9]+[ ]+\.foo_group
#pass

View File

@ -3,7 +3,7 @@
#source: group1.s #source: group1.s
#... #...
[ ]*\[.*\][ ]+\.foo_group[ ]+GROUP.* [ ]*\[.*\][ ]+\.group[ ]+GROUP.*
#... #...
[ ]*\[.*\][ ]+\.text[ ]+PROGBITS.*[ ]+AX[ ]+.* [ ]*\[.*\][ ]+\.text[ ]+PROGBITS.*[ ]+AX[ ]+.*
#... #...

View File

@ -3,7 +3,7 @@
#source: group1.s #source: group1.s
#... #...
COMDAT group section \[ 1\] `.foo_group' \[.foo_group\] contains 1 sections: COMDAT group section \[ 1\] `\.group' \[.foo_group\] contains 1 sections:
[ ]+\[Index\][ ]+Name [ ]+\[Index\][ ]+Name
[ ]+\[.*\][ ]+.text [ ]+\[.*\][ ]+.text
#pass #pass

View File

@ -3,7 +3,7 @@
#source: groupauto.s #source: groupauto.s
#... #...
[ ]*\[.*\][ ]+some_group[ ]+GROUP.* [ ]*\[.*\][ ]+\.group[ ]+GROUP.*
#... #...
[ ]*\[.*\][ ]+\.text[ ]+PROGBITS.*[ ]+AX[ ]+.* [ ]*\[.*\][ ]+\.text[ ]+PROGBITS.*[ ]+AX[ ]+.*
#... #...

View File

@ -3,7 +3,7 @@
#source: groupauto.s #source: groupauto.s
#... #...
COMDAT group section \[ 1\] `some_group' \[some_group\] contains 2 sections: COMDAT group section \[ 1\] `\.group' \[some_group\] contains 2 sections:
[ ]+\[Index\][ ]+Name [ ]+\[Index\][ ]+Name
[ ]+\[.*\][ ]+.text [ ]+\[.*\][ ]+.text
[ ]+\[.*\][ ]+.note.bar [ ]+\[.*\][ ]+.note.bar

View File

@ -2,7 +2,7 @@
#name: label arithmetic with multiple same-name sections #name: label arithmetic with multiple same-name sections
#... #...
[ ]*\[.*\][ ]+foo[ ]+GROUP.* [ ]*\[.*\][ ]+\.group[ ]+GROUP.*
#... #...
[ ]*\[.*\][ ]+\.text[ ]+PROGBITS.* [ ]*\[.*\][ ]+\.text[ ]+PROGBITS.*
#... #...

View File

@ -8,7 +8,7 @@ Section Headers:
Size EntSize Flags Link Info Align Size EntSize Flags Link Info Align
\[ 0\] NULL 0000000000000000 00000000 \[ 0\] NULL 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0 0000000000000000 0000000000000000 0 0 0
\[ 1\] \._foo GROUP 0000000000000000 00000040 \[ 1\] \.group GROUP 0000000000000000 00000040
0000000000000008 0000000000000004 7 6 4 0000000000000008 0000000000000004 7 6 4
\[ 2\] \.text PROGBITS 0000000000000000 00000050 \[ 2\] \.text PROGBITS 0000000000000000 00000050
0000000000000000 0000000000000000 AX 0 0 16 0000000000000000 0000000000000000 AX 0 0 16
@ -19,14 +19,14 @@ Section Headers:
\[ 5\] \.text PROGBITS 0000000000000000 00000050 \[ 5\] \.text PROGBITS 0000000000000000 00000050
0000000000000010 0000000000000000 AXG 0 0 16 0000000000000010 0000000000000000 AXG 0 0 16
\[ 6\] \.shstrtab STRTAB 0000000000000000 00000060 \[ 6\] \.shstrtab STRTAB 0000000000000000 00000060
0000000000000032 0000000000000000 0 0 1 0000000000000033 0000000000000000 0 0 1
\[ 7\] \.symtab SYMTAB 0000000000000000 000002d8 \[ 7\] \.symtab SYMTAB 0000000000000000 000002d8
00000000000000a8 0000000000000018 8 7 8 00000000000000c0 0000000000000018 8 8 8
\[ 8\] \.strtab STRTAB 0000000000000000 00000380 \[ 8\] \.strtab STRTAB 0000000000000000 00000398
0000000000000006 0000000000000000 0 0 1 000000000000000c 0000000000000000 0 0 1
Key to Flags: Key to Flags:
#... #...
COMDAT group section \[ 1\] `\._foo' \[\._foo\] contains 1 sections: COMDAT group section \[ 1\] `\.group' \[\._foo\] contains 1 sections:
\[Index\] Name \[Index\] Name
\[ 5\] \.text \[ 5\] \.text

View File

@ -1,3 +1,10 @@
2010-10-23 Mark Mitchell <mark@codesourcery.com>
* ld-elf/group10.d: Expect ".group" for the name of group
sections.
* ld-elf/group2.d: Likewise.
* ld-elf/group7.d: Likewise.
2010-10-21 Joseph Myers <joseph@codesourcery.com> 2010-10-21 Joseph Myers <joseph@codesourcery.com>
* ld-tic6x/attr-arch-c62x-c62x.d, ld-tic6x/attr-arch-c62x-c64x+.d, * ld-tic6x/attr-arch-c62x-c62x.d, ld-tic6x/attr-arch-c62x-c64x+.d,

View File

@ -3,7 +3,7 @@
#readelf: -Sg --wide #readelf: -Sg --wide
#... #...
group section \[[ 0-9]+\] `foo_group' \[foo_group\] contains 4 sections: group section \[[ 0-9]+\] `\.group' \[foo_group\] contains 4 sections:
\[Index\] Name \[Index\] Name
\[[ 0-9]+\] \.text.* \[[ 0-9]+\] \.text.*
\[[ 0-9]+\] \.rodata\.str.* \[[ 0-9]+\] \.rodata\.str.*

View File

@ -7,13 +7,13 @@
# xstormy also uses a non-standard script, putting .data before .text. # xstormy also uses a non-standard script, putting .data before .text.
#... #...
\[[ 0-9]+\] foo_group[ \t]+GROUP[ \t]+.* \[[ 0-9]+\] \.group[ \t]+GROUP[ \t]+.*
#... #...
\[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG.* \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG.*
#... #...
\[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG.* \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG.*
#... #...
COMDAT group section \[[ 0-9]+\] `foo_group' \[foo_group\] contains 2 sections: COMDAT group section \[[ 0-9]+\] `\.group' \[foo_group\] contains 2 sections:
\[Index\] Name \[Index\] Name
\[[ 0-9]+\] .text.* \[[ 0-9]+\] .text.*
\[[ 0-9]+\] .data.* \[[ 0-9]+\] .data.*

View File

@ -9,7 +9,7 @@
# well with unique group sections under ld -r. # well with unique group sections under ld -r.
#... #...
COMDAT group section \[[ 0-9]+\] `foo_group' \[foo_group\] contains 2 sections: COMDAT group section \[[ 0-9]+\] `\.group' \[foo_group\] contains 2 sections:
\[Index\] Name \[Index\] Name
\[[ 0-9]+\] .text.foo \[[ 0-9]+\] .text.foo
\[[ 0-9]+\] .data.foo \[[ 0-9]+\] .data.foo