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

Lancelot SIX
2024-02-15T14:32:21Z

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
>