ELF: don't re-order SHF_FILE symbols

.file directives may be used to identify the scope of local symbols,
the purpose of which gets subverted when re-ordering them. Only allow
the first of them to be moved to the first position.
This commit is contained in:
Jan Beulich 2015-12-08 10:11:58 +01:00 committed by Jan Beulich
parent 3685b09fb8
commit fbdf9406b0
8 changed files with 61 additions and 24 deletions

View File

@ -1,3 +1,8 @@
2015-12-08 Jan Beulich <jbeulich@suse.com>
* config/obj-elf.c (elf_file_symbol): Tighten condition for
moving BSF_FILE symbols.
2015-12-08 DJ Delorie <dj@redhat.com>
* config/rl78-parse.y: Make all branches relaxable via

View File

@ -282,14 +282,17 @@ elf_file_symbol (const char *s, int appfile)
symbol_get_bfdsym (sym)->flags |= BSF_FILE;
if (symbol_rootP != sym)
if (symbol_rootP != sym
&& (symbol_rootP->bsym == NULL
|| !(symbol_rootP->bsym->flags & BSF_FILE)))
{
symbol_remove (sym, &symbol_rootP, &symbol_lastP);
symbol_insert (sym, symbol_rootP, &symbol_rootP, &symbol_lastP);
#ifdef DEBUG
verify_symbol_chain (symbol_rootP, symbol_lastP);
#endif
}
#ifdef DEBUG
verify_symbol_chain (symbol_rootP, symbol_lastP);
#endif
}
#ifdef NEED_ECOFF_DEBUG

View File

@ -1,3 +1,10 @@
2015-12-08 Jan Beulich <jbeulich@suse.com>
* gas/elf/file-2.s, gas/elf/file-2.d: New.
* gas/elf/elf.exp: Run new test.
* gas/elf/file.d: Adjust expectations.
* gas/i386/ilp32/elf/file.d: Likewise.
2015-12-04 Nick Clifton <nickc@redhat.com>
PR gas/19276

View File

@ -111,6 +111,7 @@ if { [is_elf_format] } then {
run_dump_test "file"
}
}
run_dump_test "file-2"
setup_xfail "nds32*-*-*"
run_dump_test "group0a"
run_dump_test "group0b"

View File

@ -0,0 +1,14 @@
#objdump: -t
#name: .file file names ordering
.*: .*
SYMBOL TABLE:
0+ l[ ]*df \*ABS\*[ ]+0+ file-2\.s
#...
0+ l[ ]*\.text[ ]+0+ local1
0+ l[ ]*df \*ABS\*[ ]+0+ aux-1\.s
0+ l[ ]*\.text[ ]+0+ local2
0+ l[ ]*df \*ABS\*[ ]+0+ aux-2\.s
0+ l[ ]*\.text[ ]+0+ local3
#pass

View File

@ -0,0 +1,7 @@
.file "file-2.s"
.text
local1:
.file "aux-1.s"
local2:
.file "aux-2.s"
local3:

View File

@ -4,15 +4,15 @@
.*: .*
SYMBOL TABLE:
#...
0+ l[ ]*df \*ABS\*[ ]+0+ file\.s
0+ l[ ]*df \*ABS\*[ ]+0+ slash/data
0+ l[ ]*df \*ABS\*[ ]+0+ \{braces\}
0+ l[ ]*df \*ABS\*[ ]+0+ \[brackets\]
0+ l[ ]*df \*ABS\*[ ]+0+ /dir/file\.s
0+ l[ ]*df \*ABS\*[ ]+0+ :colon
0+ l[ ]*df \*ABS\*[ ]+0+ UPPER
0+ l[ ]*df \*ABS\*[ ]+0+ lower
0+ l[ ]*df \*ABS\*[ ]+0+ hash\#
0+ l[ ]*df \*ABS\*[ ]+0+ ~tilde
#...
0+ l[ ]*df \*ABS\*[ ]+0+ hash\#
0+ l[ ]*df \*ABS\*[ ]+0+ lower
0+ l[ ]*df \*ABS\*[ ]+0+ UPPER
0+ l[ ]*df \*ABS\*[ ]+0+ :colon
0+ l[ ]*df \*ABS\*[ ]+0+ /dir/file\.s
0+ l[ ]*df \*ABS\*[ ]+0+ \[brackets\]
0+ l[ ]*df \*ABS\*[ ]+0+ \{braces\}
0+ l[ ]*df \*ABS\*[ ]+0+ slash/data
0+ l[ ]*df \*ABS\*[ ]+0+ file\.s
#pass

View File

@ -5,15 +5,15 @@
.*: .*
SYMBOL TABLE:
#...
0+ l[ ]*df \*ABS\*[ ]+0+ file\.s
0+ l[ ]*df \*ABS\*[ ]+0+ slash/data
0+ l[ ]*df \*ABS\*[ ]+0+ \{braces\}
0+ l[ ]*df \*ABS\*[ ]+0+ \[brackets\]
0+ l[ ]*df \*ABS\*[ ]+0+ /dir/file\.s
0+ l[ ]*df \*ABS\*[ ]+0+ :colon
0+ l[ ]*df \*ABS\*[ ]+0+ UPPER
0+ l[ ]*df \*ABS\*[ ]+0+ lower
0+ l[ ]*df \*ABS\*[ ]+0+ hash\#
0+ l[ ]*df \*ABS\*[ ]+0+ ~tilde
#...
0+ l[ ]*df \*ABS\*[ ]+0+ hash\#
0+ l[ ]*df \*ABS\*[ ]+0+ lower
0+ l[ ]*df \*ABS\*[ ]+0+ UPPER
0+ l[ ]*df \*ABS\*[ ]+0+ :colon
0+ l[ ]*df \*ABS\*[ ]+0+ /dir/file\.s
0+ l[ ]*df \*ABS\*[ ]+0+ \[brackets\]
0+ l[ ]*df \*ABS\*[ ]+0+ \{braces\}
0+ l[ ]*df \*ABS\*[ ]+0+ slash/data
0+ l[ ]*df \*ABS\*[ ]+0+ file\.s
#pass