From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Subject: [PATCH][gdb/testsuite] Fix local-static.exp with g++-4.8
Date: Fri, 04 Oct 2019 14:26:00 -0000 [thread overview]
Message-ID: <20191004142616.GA11097@delia> (raw)
Hi,
With g++-4.8, I see:
...
(gdb) PASS: gdb.cp/local-static.exp: c++: print free_inline_func(void)
print 'S::method()'::S_M_s_var_int^M
No symbol "S_M_s_var_int" in specified context.^M
(gdb) FAIL: gdb.cp/local-static.exp: c++: print 'S::method()'::S_M_s_var_int
...
The variable is declared like this (showing pruned .ii):
...
void S::method ()
{
static int S_M_s_var_int = 4;
}
...
But the DWARF generated for the variable is encapsulated in an unnamed lexical
block:
...
<1><121>: Abbrev Number: 5 (DW_TAG_structure_type)
<122> DW_AT_name : S
...
<2><14f>: Abbrev Number: 6 (DW_TAG_subprogram)
...
<150> DW_AT_name : (indirect string, offset: 0x599): method
<156> DW_AT_linkage_name: (indirect string, offset: 0x517): \
_ZN1S6methodEv /* demangled: dS::method() */
...
<1><3f8>: Abbrev Number: 21 (DW_TAG_subprogram)
<3f9> DW_AT_specification: <0x14f>
...
<3fe> DW_AT_low_pc : 0x4004fc
<406> DW_AT_high_pc : 0x2c /* 0x400528 */
...
<2><418>: Abbrev Number: 17 (DW_TAG_formal_parameter)
<419> DW_AT_name : (indirect string, offset: 0x68a): this
...
<2><424>: Abbrev Number: 18 (DW_TAG_lexical_block)
<425> DW_AT_low_pc : 0x400508
<42d> DW_AT_high_pc : 0x1e /* 0x400526 */
<3><435>: Abbrev Number: 22 (DW_TAG_variable)
<436> DW_AT_name : (indirect string, offset: 0x29d): S_M_s_var_int
...
which has the effect that the variable is not addressable unless the program
counter is in the range of the lexical block.
This is caused by gcc PR debug/55541, which was fixed in gcc 5.
Mark in total 225 FAILs as XFAIL.
Tested on x86_64-linux.
OK for trunk?
Thanks,
- Tom
[gdb/testsuite] Fix local-static.exp with g++-4.8
gdb/testsuite/ChangeLog:
2019-10-04 Tom de Vries <tdevries@suse.de>
* gdb.cp/local-static.exp (do_test): Add xfails for gcc PR debug/55541.
---
gdb/testsuite/gdb.cp/local-static.exp | 40 ++++++++++++++++++++++++++++++++---
1 file changed, 37 insertions(+), 3 deletions(-)
diff --git a/gdb/testsuite/gdb.cp/local-static.exp b/gdb/testsuite/gdb.cp/local-static.exp
index fe0e2dc0f3a..9905ffb7948 100644
--- a/gdb/testsuite/gdb.cp/local-static.exp
+++ b/gdb/testsuite/gdb.cp/local-static.exp
@@ -130,6 +130,7 @@ proc do_test {lang} {
global cxx_scopes_list
global vars_list
global srcfile testfile
+ global gdb_prompt
set options {debug}
@@ -201,12 +202,45 @@ proc do_test {lang} {
set var [lindex $var_line 0]
set print_re [lindex $var_line 1]
- gdb_test "print '${scope}'::${var_prefix}_${var}" $print_re
- gdb_test "print ${scope}::${var_prefix}_${var}" $print_re
+ # The gcc PR debug/55541 has the effect that local statics are
+ # wrapped in a DW_TAG_lexical_block, making them unaddressable from
+ # outside the function. XFAIL the relevant tests.
+ set test "print '${scope}'::${var_prefix}_${var}"
+ set xfail_pattern "No symbol \".*\" in specified context."
+ gdb_test_multiple $test $test {
+ -re "\[\r\n\]*(?:$print_re)\[\r\n\]+$gdb_prompt $" {
+ pass $test
+ }
+ -re "\[\r\n\]*(?:$xfail_pattern)\[\r\n\]+$gdb_prompt $" {
+ xfail $test
+ }
+ }
+ set test "print ${scope}::${var_prefix}_${var}"
+ gdb_test_multiple $test $test {
+ -re "\[\r\n\]*(?:$print_re)\[\r\n\]+$gdb_prompt $" {
+ pass $test
+ }
+ -re "\[\r\n\]*(?:$xfail_pattern)\[\r\n\]+$gdb_prompt $" {
+ xfail $test
+ }
+ }
set sym "${scope}::${var_prefix}_${var}"
if {$lang == "c++"} {
- gdb_test "print '${sym}'" $print_re
+ set test "print '${sym}'"
+ set xfail_pattern "No symbol .* in current context."
+ set xfail_pattern2 "has unknown type; cast it to its declared type"
+ gdb_test_multiple $test $test {
+ -re "\[\r\n\]*(?:$print_re)\[\r\n\]+$gdb_prompt $" {
+ pass $test
+ }
+ -re "\[\r\n\]*(?:$xfail_pattern)\[\r\n\]+$gdb_prompt $" {
+ xfail $test
+ }
+ -re "\[\r\n\]*(?:$xfail_pattern2)\[\r\n\]+$gdb_prompt $" {
+ xfail $test
+ }
+ }
} else {
gdb_test "print '${sym}'" "No symbol \"$sym\" in current context\\."
}
reply other threads:[~2019-10-04 14:26 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191004142616.GA11097@delia \
--to=tdevries@suse.de \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox