This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
gold testsuite: line numbers in debug_msg test
- From: Marcin KoÅcielnicki <koriakin at 0x04 dot net>
- To: Binutils <binutils at sourceware dot org>
- Date: Wed, 23 Sep 2015 22:06:35 +0200
- Subject: gold testsuite: line numbers in debug_msg test
- Authentication-results: sourceware.org; auth=none
I'm having problems with the gold debug_msg test on s390, specifically
with the line numbers printed. debug_msg.sh already allows some leeway
for them, but it seems the code emitted for s390 is more unusual than it
expects.
The first problem is with undefined symbol references in testfn. The
testsuite assumes the relocation for the undefined symbol will be inside
an instruction described by .debug_line to be on the exact line of the
undefined reference. However, this doesn't work for s390, which uses
literal pools - the addresses (which are relocated) are stored after the
function code, and .debug_line considers them to belong to the closing
brace of the function.
The second problem is with SometimesInlineFunction in odr_violation2.cc
- while the test checks for first instruction belonging to either the
opening brace or the return statement, gcc on RHEL does one better by
marking the first instruction (which is a multiply instruction) as
belonging to line 29 (the closing brace).
I'm attaching a patch to make the testsuite more open-minded about the
correct line numbers. Does that look OK?
Marcin KoÅcielnicki
>From 359a3cc0ca6943d2486b2825cc569bf94b8eb38d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Ko=C5=9Bcielnicki?= <koriakin@0x04.net>
Date: Wed, 23 Sep 2015 22:02:09 +0200
Subject: [PATCH] gold/testsuite: Make debug_msg.sh more open-minded about line
numbers.
---
gold/testsuite/debug_msg.sh | 38 +++++++++++++++++++-------------------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/gold/testsuite/debug_msg.sh b/gold/testsuite/debug_msg.sh
index 54c72f1..b556d8c 100755
--- a/gold/testsuite/debug_msg.sh
+++ b/gold/testsuite/debug_msg.sh
@@ -64,8 +64,8 @@ check debug_msg.err "debug_msg.o:debug_msg.cc:badref1: error: undefined referenc
# file recorded in the objects.
check debug_msg.err ".*/debug_msg.cc:50: error: undefined reference to 'undef_fn1()'"
check debug_msg.err ".*/debug_msg.cc:55: error: undefined reference to 'undef_fn2()'"
-check debug_msg.err ".*/debug_msg.cc:43: error: undefined reference to 'undef_fn1()'"
-check debug_msg.err ".*/debug_msg.cc:44: error: undefined reference to 'undef_fn2()'"
+check debug_msg.err ".*/debug_msg.cc:4[356]: error: undefined reference to 'undef_fn1()'"
+check debug_msg.err ".*/debug_msg.cc:4[456]: error: undefined reference to 'undef_fn2()'"
if test "$DEFAULT_TARGET" != "powerpc"
then
check debug_msg.err ".*/debug_msg.cc:.*: error: undefined reference to 'undef_int'"
@@ -74,7 +74,7 @@ fi
# Check we detected the ODR (One Definition Rule) violation.
check debug_msg.err ": symbol 'Ordering::operator()(int, int)' defined in multiple places (possible ODR violation):"
check debug_msg.err "odr_violation1.cc:6"
-check debug_msg.err "odr_violation2.cc:1[25]"
+check debug_msg.err "odr_violation2.cc:1[256]"
# Check we don't have ODR false positives:
check_missing debug_msg.err "OdrDerived::~OdrDerived()"
@@ -84,11 +84,11 @@ check_missing debug_msg.err "__adjust_heap"
# still flag it for C++ symbols since those are more likely to be
# unintentional.
check_missing debug_msg.err ": symbol 'OverriddenCFunction' defined in multiple places (possible ODR violation):"
-check_missing debug_msg.err "odr_violation1.cc:16"
-check_missing debug_msg.err "odr_violation2.cc:23"
+check_missing debug_msg.err "odr_violation1.cc:1[6-8]"
+check_missing debug_msg.err "odr_violation2.cc:2[3-5]"
check debug_msg.err ": symbol 'SometimesInlineFunction(int)' defined in multiple places (possible ODR violation):"
-check debug_msg.err "debug_msg.cc:68"
-check debug_msg.err "odr_violation2.cc:2[78]"
+check debug_msg.err "debug_msg.cc:6[89]"
+check debug_msg.err "odr_violation2.cc:2[7-9]"
# Check for the same error messages when using --compressed-debug-sections.
if test -r debug_msg_cdebug.err
@@ -98,23 +98,23 @@ then
check debug_msg_cdebug.err "debug_msg_cdebug.o:debug_msg.cc:badref1: error: undefined reference to 'undef_int'"
check debug_msg_cdebug.err ".*/debug_msg.cc:50: error: undefined reference to 'undef_fn1()'"
check debug_msg_cdebug.err ".*/debug_msg.cc:55: error: undefined reference to 'undef_fn2()'"
- check debug_msg_cdebug.err ".*/debug_msg.cc:43: error: undefined reference to 'undef_fn1()'"
- check debug_msg_cdebug.err ".*/debug_msg.cc:44: error: undefined reference to 'undef_fn2()'"
+ check debug_msg_cdebug.err ".*/debug_msg.cc:4[356]: error: undefined reference to 'undef_fn1()'"
+ check debug_msg_cdebug.err ".*/debug_msg.cc:4[456]: error: undefined reference to 'undef_fn2()'"
if test "$DEFAULT_TARGET" != "powerpc"
then
check debug_msg_cdebug.err ".*/debug_msg.cc:.*: error: undefined reference to 'undef_int'"
fi
check debug_msg_cdebug.err ": symbol 'Ordering::operator()(int, int)' defined in multiple places (possible ODR violation):"
check debug_msg_cdebug.err "odr_violation1.cc:6"
- check debug_msg_cdebug.err "odr_violation2.cc:1[25]"
+ check debug_msg_cdebug.err "odr_violation2.cc:1[256]"
check_missing debug_msg_cdebug.err "OdrDerived::~OdrDerived()"
check_missing debug_msg_cdebug.err "__adjust_heap"
check_missing debug_msg_cdebug.err ": symbol 'OverriddenCFunction' defined in multiple places (possible ODR violation):"
- check_missing debug_msg_cdebug.err "odr_violation1.cc:16"
- check_missing debug_msg_cdebug.err "odr_violation2.cc:23"
+ check_missing debug_msg_cdebug.err "odr_violation1.cc:1[6-8]"
+ check_missing debug_msg_cdebug.err "odr_violation2.cc:2[3-5]"
check debug_msg_cdebug.err ": symbol 'SometimesInlineFunction(int)' defined in multiple places (possible ODR violation):"
- check debug_msg_cdebug.err "debug_msg.cc:68"
- check debug_msg_cdebug.err "odr_violation2.cc:2[78]"
+ check debug_msg_cdebug.err "debug_msg.cc:6[89]"
+ check debug_msg_cdebug.err "odr_violation2.cc:2[7-9]"
fi
# When linking together .so's, we don't catch the line numbers, but we
@@ -124,15 +124,15 @@ check debug_msg_so.err "debug_msg.so: error: undefined reference to 'undef_fn2()
check debug_msg_so.err "debug_msg.so: error: undefined reference to 'undef_int'"
check debug_msg_so.err ": symbol 'Ordering::operator()(int, int)' defined in multiple places (possible ODR violation):"
check debug_msg_so.err "odr_violation1.cc:6"
-check debug_msg_so.err "odr_violation2.cc:1[25]"
+check debug_msg_so.err "odr_violation2.cc:1[256]"
check_missing debug_msg_so.err "OdrDerived::~OdrDerived()"
check_missing debug_msg_so.err "__adjust_heap"
check_missing debug_msg_so.err ": symbol 'OverriddenCFunction' defined in multiple places (possible ODR violation):"
-check_missing debug_msg_so.err "odr_violation1.cc:16"
-check_missing debug_msg_so.err "odr_violation2.cc:23"
+check_missing debug_msg_so.err "odr_violation1.cc:1[6-8]"
+check_missing debug_msg_so.err "odr_violation2.cc:2[3-5]"
check debug_msg_so.err ": symbol 'SometimesInlineFunction(int)' defined in multiple places (possible ODR violation):"
-check debug_msg_so.err "debug_msg.cc:68"
-check debug_msg_so.err "odr_violation2.cc:2[78]"
+check debug_msg_so.err "debug_msg.cc:6[89]"
+check debug_msg_so.err "odr_violation2.cc:2[7-9]"
# These messages shouldn't need any debug info to detect:
check debug_msg_ndebug.err "debug_msg_ndebug.so: error: undefined reference to 'undef_fn1()'"
--
2.5.3