[PATCH] ELF: don't re-order SHF_FILE symbols
Jan Beulich
JBeulich@suse.com
Mon Dec 7 14:11:00 GMT 2015
.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.
gas/
2015-12-07 Jan Beulich <jbeulich@suse.com>
* config/obj-elf.c (elf_file_symbol): Tighten condition for
moving BSF_FILE symbols.
gas/testsuite/
2015-12-07 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-07/gas/config/obj-elf.c
+++ 2015-12-07/gas/config/obj-elf.c
@@ -282,14 +282,17 @@ elf_file_symbol (const char *s, int appf
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);
+ verify_symbol_chain (symbol_rootP, symbol_lastP);
#endif
- }
}
#ifdef NEED_ECOFF_DEBUG
--- 2015-12-07/gas/testsuite/gas/elf/elf.exp
+++ 2015-12-07/gas/testsuite/gas/elf/elf.exp
@@ -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"
--- 2015-12-07/gas/testsuite/gas/elf/file-2.d
+++ 2015-12-07/gas/testsuite/gas/elf/file-2.d
@@ -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
--- 2015-12-07/gas/testsuite/gas/elf/file-2.s
+++ 2015-12-07/gas/testsuite/gas/elf/file-2.s
@@ -0,0 +1,7 @@
+ .file "file-2.s"
+ .text
+local1:
+ .file "aux-1.s"
+local2:
+ .file "aux-2.s"
+local3:
--- 2015-12-07/gas/testsuite/gas/elf/file.d
+++ 2015-12-07/gas/testsuite/gas/elf/file.d
@@ -4,15 +4,15 @@
.*: .*
SYMBOL TABLE:
+0+ l[ ]*df \*ABS\*[ ]+0+ ~tilde
#...
-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+ 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
--- 2015-12-07/gas/testsuite/gas/i386/ilp32/elf/file.d
+++ 2015-12-07/gas/testsuite/gas/i386/ilp32/elf/file.d
@@ -5,15 +5,15 @@
.*: .*
SYMBOL TABLE:
+0+ l[ ]*df \*ABS\*[ ]+0+ ~tilde
#...
-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+ 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
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: binutils-master-ELF-file-syms-order.patch
URL: <https://sourceware.org/pipermail/binutils/attachments/20151207/fc2f9504/attachment.ksh>
More information about the Binutils
mailing list