From 519155c9f6804988e35c8537c4506e877176c9b1 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Mon, 14 Dec 2020 17:05:11 +0100 Subject: [PATCH] [gdb/testsuite] Handle no glibc debuginfo in gdb.base/solib-corrupted.exp When running test-case gdb.base/solib-corrupted.exp on SLE-11, I get: ... (gdb) PASS: gdb.base/solib-corrupted.exp: normal list p/x _r_debug->r_map->l_next = _r_debug->r_map^M '_r_debug' has unknown type; cast it to its declared type^M (gdb) FAIL: gdb.base/solib-corrupted.exp: make solibs looping ... The reason that _r_debug has unknown type is that glibc debuginfo is not installed. The test-case attempts to detect this but doesn't handle this particular error string. Fix this by adding the "unknown type" line to the regexp detecting missing glibc debuginfo. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-12-14 Tom de Vries PR testsuite/26962 * gdb.base/solib-corrupted.exp: Handle "'_r_debug' has unknown type; cast it to its declared type". --- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.base/solib-corrupted.exp | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 4bd45211c7..9a20e7ec65 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2020-12-14 Tom de Vries + + PR testsuite/26962 + * gdb.base/solib-corrupted.exp: Handle "'_r_debug' has unknown type; + cast it to its declared type". + 2020-12-14 Tom de Vries PR testsuite/26951 diff --git a/gdb/testsuite/gdb.base/solib-corrupted.exp b/gdb/testsuite/gdb.base/solib-corrupted.exp index 5ee943cae1..902ef9cc7a 100644 --- a/gdb/testsuite/gdb.base/solib-corrupted.exp +++ b/gdb/testsuite/gdb.base/solib-corrupted.exp @@ -64,10 +64,20 @@ if { [llength $probes] == 0 } { gdb_test "info sharedlibrary" "From * To .*" "normal list" +set no_glibc_debuginfo_re1 "No symbol \"_r_debug\" in current context\\." +set no_glibc_debuginfo_re2 \ + [concat \ + "Attempt to extract a component of a value that is not a structure" \ + " pointer\\."] +set no_glibc_debuginfo_re3 \ + "'_r_debug' has unknown type; cast it to its declared type" +set no_glibc_debuginfo_re \ + "($no_glibc_debuginfo_re1|$no_glibc_debuginfo_re2|$no_glibc_debuginfo_re3)" + # GDB checks there for matching L_PREV. set test "make solibs looping" gdb_test_multiple "p/x _r_debug->r_map->l_next = _r_debug->r_map" $test { - -re "(No symbol \"_r_debug\" in current context\\.|Attempt to extract a component of a value that is not a structure pointer\\.)\r\n$gdb_prompt $" { + -re "$no_glibc_debuginfo_re\r\n$gdb_prompt $" { # glibc debug info is not available and it is too difficult to find and # parse it from this testcase without the gdb supporting functions. xfail $test -- 2.34.1