[V3] testsuite: support mold linker

Message ID 2eb01f7a-2430-b0bc-9c58-d15d06ca6bf9@suse.cz
State Repeat Merge
Headers
Series [V3] testsuite: support mold linker |

Checks

Context Check Description
snail/binutils-gdb-check warning Git am fail log

Commit Message

Martin Liška Dec. 5, 2022, 2:41 p.m. UTC
  Mold linker demotes symbols like main to be local and the patch
adjusts expected output from nm.

Moreover, simplify the regex patterns.
---
 binutils/testsuite/binutils-all/addr2line.exp | 4 ++--
 binutils/testsuite/binutils-all/objcopy.exp   | 6 ++----
 libbacktrace/Makefile.am                      | 2 +-
 libbacktrace/Makefile.in                      | 2 +-
 4 files changed, 6 insertions(+), 8 deletions(-)
  

Comments

Jan Beulich Dec. 5, 2022, 2:50 p.m. UTC | #1
On 05.12.2022 15:41, Martin Liška wrote:
> Mold linker demotes symbols like main to be local and the patch
> adjusts expected output from nm.
> 
> Moreover, simplify the regex patterns.

Okay.

Jan
  
Fangrui Song Dec. 7, 2022, 12:36 a.m. UTC | #2
On 2022-12-05, Jan Beulich via Binutils wrote:
>On 05.12.2022 15:41, Martin Liška wrote:
>> Mold linker demotes symbols like main to be local and the patch
>> adjusts expected output from nm.
>>
>> Moreover, simplify the regex patterns.
>
>Okay.
>
>Jan
>

Not okai to me.  mold seems to wrongly make `main` STB_LOCAL while it
has default visibility which should stay STB_GLOBAL.
  
Fangrui Song Dec. 7, 2022, 12:42 a.m. UTC | #3
On 2022-12-06, Fangrui Song wrote:
>On 2022-12-05, Jan Beulich via Binutils wrote:
>>On 05.12.2022 15:41, Martin Liška wrote:
>>>Mold linker demotes symbols like main to be local and the patch
>>>adjusts expected output from nm.
>>>
>>>Moreover, simplify the regex patterns.
>>
>>Okay.
>>
>>Jan
>>
>
>Not okai to me.  mold seems to wrongly make `main` STB_LOCAL while it
>has default visibility which should stay STB_GLOBAL.

Filed https://github.com/rui314/mold/issues/906
  
Martin Liška Dec. 7, 2022, 1:01 p.m. UTC | #4
On 12/7/22 01:36, Fangrui Song wrote:
> On 2022-12-05, Jan Beulich via Binutils wrote:
>> On 05.12.2022 15:41, Martin Liška wrote:
>>> Mold linker demotes symbols like main to be local and the patch
>>> adjusts expected output from nm.
>>>
>>> Moreover, simplify the regex patterns.
>>
>> Okay.
>>
>> Jan
>>
> 
> Not okai to me.  mold seems to wrongly make `main` STB_LOCAL while it
> has default visibility which should stay STB_GLOBAL.

Sure, I noticed that but thought it's a correct optimization a linker can do.

Anyway, I'm ready to revert this once the mold issue is somehow resolved.

Thanks for heads up,
Martin
  

Patch

diff --git a/binutils/testsuite/binutils-all/addr2line.exp b/binutils/testsuite/binutils-all/addr2line.exp
index 66a2d5d32a0..957ae55df33 100644
--- a/binutils/testsuite/binutils-all/addr2line.exp
+++ b/binutils/testsuite/binutils-all/addr2line.exp
@@ -34,7 +34,7 @@  if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog executable debug
 #testcase for default option.
 #Run nm command and input the main symbol address to addr2line.
 set output [binutils_run $NM "$opts tmpdir/testprog$exe"]
-if ![regexp -line "^(\[0-9a-fA-F\]+)? +T ${dot}main" $output contents] then {
+if ![regexp -line "^(\[0-9a-fA-F\]+)? +\[Tt\] ${dot}main" $output contents] then {
     fail "$testname"
 } else {
     set list [regexp -inline -all -- {\S+} $contents]
@@ -49,7 +49,7 @@  if ![regexp -line "^(\[0-9a-fA-F\]+)? +T ${dot}main" $output contents] then {
 
 #testcase for -f option.
 #Run nm command and input the fn function symbol address to addr2line.
-if ![regexp -line "^(\[0-9a-fA-F\]+)? +T ${dot}fn" $output contents] then {
+if ![regexp -line "^(\[0-9a-fA-F\]+)? +\[Tt\] ${dot}fn" $output contents] then {
     fail "$testname -f option"
 } else {
     set list [regexp -inline -all -- {\S+} $contents]
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
index de6f3aaaef2..e3388597f56 100644
--- a/binutils/testsuite/binutils-all/objcopy.exp
+++ b/binutils/testsuite/binutils-all/objcopy.exp
@@ -652,8 +652,7 @@  proc strip_test_with_saving_a_symbol { } {
 
     set exec_output [binutils_run $NM "$NMFLAGS $objfile"]
     set exec_output [prune_warnings $exec_output]
-    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
-         && ![regexp {^([0-9a-fA-F]+)?[ ]+T _main} $exec_output]} {
+    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TtDd] _?main} $exec_output]} {
 	fail $test
 	return
     }
@@ -902,8 +901,7 @@  proc strip_executable_with_saving_a_symbol { prog flags test1 test2 } {
 	regsub "^\[0-9a-fA-F\]+\[ \]+T Main\[\n\r\]+" $exec_output "" exec_output
     }
 
-    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
-         && ![regexp {^([0-9a-fA-F]+)?[ ]+[TD] _main} $exec_output]} {
+    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TtDd] _?main} $exec_output]} {
 	fail $test1
 	return
     }
diff --git a/libbacktrace/Makefile.am b/libbacktrace/Makefile.am
index 8874f41338a..bf9d30a382c 100644
--- a/libbacktrace/Makefile.am
+++ b/libbacktrace/Makefile.am
@@ -498,7 +498,7 @@  TESTS += mtest_minidebug
 
 %_minidebug: %
 	$(NM) -D $< -P --defined-only | $(AWK) '{ print $$1 }' | sort > $<.dsyms
-	$(NM) $< -P --defined-only | $(AWK) '{ if ($$2 == "T" || $$2 == "t" || $$2 == "D") print $$1 }' | sort > $<.fsyms
+	$(NM) $< -P --defined-only | $(AWK) '{ if ($$2 == "T" || $$2 == "t" || $$2 == "D" || $$2 == "d") print $$1 }' | sort > $<.fsyms
 	$(COMM) -13 $<.dsyms $<.fsyms > $<.keepsyms
 	$(OBJCOPY) --only-keep-debug $< $<.dbg
 	$(OBJCOPY) -S --remove-section .gdb_index --remove-section .comment --keep-symbols=$<.keepsyms $<.dbg $<.mdbg
diff --git a/libbacktrace/Makefile.in b/libbacktrace/Makefile.in
index 2ba8dfa8428..5167ca80ad1 100644
--- a/libbacktrace/Makefile.in
+++ b/libbacktrace/Makefile.in
@@ -2459,7 +2459,7 @@  uninstall-am:
 
 @HAVE_MINIDEBUG_TRUE@@NATIVE_TRUE@%_minidebug: %
 @HAVE_MINIDEBUG_TRUE@@NATIVE_TRUE@	$(NM) -D $< -P --defined-only | $(AWK) '{ print $$1 }' | sort > $<.dsyms
-@HAVE_MINIDEBUG_TRUE@@NATIVE_TRUE@	$(NM) $< -P --defined-only | $(AWK) '{ if ($$2 == "T" || $$2 == "t" || $$2 == "D") print $$1 }' | sort > $<.fsyms
+@HAVE_MINIDEBUG_TRUE@@NATIVE_TRUE@	$(NM) $< -P --defined-only | $(AWK) '{ if ($$2 == "T" || $$2 == "t" || $$2 == "D" || $$2 == "d") print $$1 }' | sort > $<.fsyms
 @HAVE_MINIDEBUG_TRUE@@NATIVE_TRUE@	$(COMM) -13 $<.dsyms $<.fsyms > $<.keepsyms
 @HAVE_MINIDEBUG_TRUE@@NATIVE_TRUE@	$(OBJCOPY) --only-keep-debug $< $<.dbg
 @HAVE_MINIDEBUG_TRUE@@NATIVE_TRUE@	$(OBJCOPY) -S --remove-section .gdb_index --remove-section .comment --keep-symbols=$<.keepsyms $<.dbg $<.mdbg