[v2,1/2] gdb/testsuite: fix gdb.threads/threadcrash.exp on 32-bit arm targets

Message ID 20240213110924.123394-3-blarsen@redhat.com
State New
Headers
Series Fixes to gdb.threads/threadcrash.exp |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_gdb_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-arm fail Testing failed
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 fail Testing failed

Commit Message

Guinevere Larsen Feb. 13, 2024, 11:09 a.m. UTC
  There are 2 issues with the test gdb.threads/threadcrash.exp on arm
targets, both relating to issues in how the targets handles gcores. The
first is that the test fails to cout the number of threads in the
inferior and the second is that GDB can't properly backtrace from a
gcore.

The first error is fixed on this commit by getting the convenience
variable _inferior_thread_count as opposed to calculating it based on
the output of "info threads"

For the second, this test just emits a single xfail referring back to PR
corefiles/31294, which tracks the issues with gcores in 32-bit arm
targets.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31294
---
 gdb/testsuite/gdb.threads/threadcrash.exp | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)
  

Comments

Lancelot SIX Feb. 15, 2024, 2:31 p.m. UTC | #1
Hi Gwen,

On Tue, Feb 13, 2024 at 12:09:24PM +0100, Guinevere Larsen wrote:
> There are 2 issues with the test gdb.threads/threadcrash.exp on arm
> targets, both relating to issues in how the targets handles gcores. The
> first is that the test fails to cout the number of threads in the
> inferior and the second is that GDB can't properly backtrace from a
> gcore.
> 
> The first error is fixed on this commit by getting the convenience
> variable _inferior_thread_count as opposed to calculating it based on
> the output of "info threads"
> 
> For the second, this test just emits a single xfail referring back to PR
> corefiles/31294, which tracks the issues with gcores in 32-bit arm
> targets.
> 
> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31294
> ---
>  gdb/testsuite/gdb.threads/threadcrash.exp | 15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/gdb/testsuite/gdb.threads/threadcrash.exp b/gdb/testsuite/gdb.threads/threadcrash.exp
> index 996e020d1e8..6c638838043 100644
> --- a/gdb/testsuite/gdb.threads/threadcrash.exp
> +++ b/gdb/testsuite/gdb.threads/threadcrash.exp
> @@ -27,12 +27,9 @@
>  proc test_thread_count {} {
>      set thread_count 0
>  
> -    gdb_test_multiple "info threads" "getting thread count" -lbl {
> -	-re "Thread" {
> -	    incr thread_count
> -	    exp_continue
> -	}
> -	-re "$::gdb_prompt " {
> +    gdb_test_multiple "print \$_inferior_thread_count" "getting thread count" {
> +	-re ".* = (\[0-9]+).*" {
> +	    set thread_count $expect_out(1,string)
>  	    gdb_assert {$thread_count == 7}
>  	}
>      }

Out of the box, this fails for me

    Running /home/lancesix/src/worktrees/gdb/upstream-master/_build/gdb/testsuite/../../../gdb/testsuite/gdb.threads/threadcrash.exp ...
    FAIL: gdb.threads/threadcrash.exp: test_live_inferior: $thread_count == [llength $test_list]
    FAIL: gdb.threads/threadcrash.exp: test_corefile: $thread_count == [llength $test_list]
    FAIL: gdb.threads/threadcrash.exp: test_gcore: $thread_count == [llength $test_list]

Also, I think you could use get_valueof here, to make things simpler,
and avoid the issue of not not consuming the entire exp buffer:

    proc test_thread_count {} {
        set thread_count [get_valueof /d \$_inferior_thread_count 0]
        gdb_assert {$thread_count == 7}
        return $thread_count
    }

Best,
Lancelot.

> @@ -230,4 +227,8 @@ test_live_inferior
>  
>  test_corefile
>  
> -test_gcore
> +if { [is_aarch32_target] } {
> +    kfail "gcore tests fail on 32-bit arm, see PR corefiles/31294"
> +} else {
> +    test_gcore
> +}
> 
> -- 
> 2.43.0
>
  

Patch

diff --git a/gdb/testsuite/gdb.threads/threadcrash.exp b/gdb/testsuite/gdb.threads/threadcrash.exp
index 996e020d1e8..6c638838043 100644
--- a/gdb/testsuite/gdb.threads/threadcrash.exp
+++ b/gdb/testsuite/gdb.threads/threadcrash.exp
@@ -27,12 +27,9 @@ 
 proc test_thread_count {} {
     set thread_count 0
 
-    gdb_test_multiple "info threads" "getting thread count" -lbl {
-	-re "Thread" {
-	    incr thread_count
-	    exp_continue
-	}
-	-re "$::gdb_prompt " {
+    gdb_test_multiple "print \$_inferior_thread_count" "getting thread count" {
+	-re ".* = (\[0-9]+).*" {
+	    set thread_count $expect_out(1,string)
 	    gdb_assert {$thread_count == 7}
 	}
     }
@@ -230,4 +227,8 @@  test_live_inferior
 
 test_corefile
 
-test_gcore
+if { [is_aarch32_target] } {
+    kfail "gcore tests fail on 32-bit arm, see PR corefiles/31294"
+} else {
+    test_gcore
+}