This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] 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.

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



Attachment: binutils-master-ELF-file-syms-order.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]