Bug 26170 - gdb.base/testenv.exp loops on Linux/sparc64
Summary: gdb.base/testenv.exp loops on Linux/sparc64
Status: NEW
Alias: None
Product: gdb
Classification: Unclassified
Component: tdep (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-06-25 08:18 UTC by Rainer Orth
Modified: 2021-04-27 15:01 UTC (History)
3 users (show)

See Also:
Host: sparc64-unknown-linux-gnu
Target: sparc64-unknown-linux-gnu
Build: sparc64-unknown-linux-gnu
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rainer Orth 2020-06-25 08:18:51 UTC
While testing current master on Linux/sparc64, the gdb.base/testenv.exp would
loop:

PASS: gdb.base/testenv.exp: test_inherit_env_var: test1: test passing TEST_GDB_G
LOBAL to GDB
FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: TEST_GDB_GLOBAL, get nu
m vars
FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: TEST_GDB_GLOBAL, confir
med
FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var: %s\n", env
p[0] ? envp[0] : ""
[...]
FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var: %s\n", envp[4443985] ? envp[4443985] : ""

which I only noticed after those 4.4+ million iterations.

The failure mode is like this:
(gdb) run 
Starting program: /home/ro/obj/gdb/master/dist/gdb/testsuite/outputs/gdb.base/testenv/testenv 
Program found 0 variables starting with TEST_GDB

Breakpoint 1, main (argc=<error reading variable: Cannot access memory at address 0x884>, argv=<error reading variable: Cannot access memory at address 0x88c>, envp=<error reading variable: Cannot access memory at address 0x894>) at /home/ro/src/gdb/master/dist/gdb/testsuite/gdb.base/testenv.c:42
42          return 0; /* set breakpoint here.  */
(gdb) print /d j
Cannot access memory at address 0x7fc
(gdb) FAIL: gdb.base/testenv.exp: test_set_unset_env: test1: no TEST_GDB vars, get num vars
FAIL: gdb.base/testenv.exp: test_set_unset_env: test1: no TEST_GDB vars, confirmed

[...]

printf "var: %s\n", envp[4443985] ? envp[4443985] : ""
Cannot access memory at address 0x894
(gdb) FAIL: gdb.base/testenv.exp: test_inherit_env_var: test1: printf "var: %s\n", envp[4443985] ? envp[4443985] : ""
Comment 1 John Paul Adrian Glaubitz 2020-11-23 17:39:08 UTC
Thanks for catching this. This would explain why the gdb testsuite with version 10 never finishes.

I guess we should disable this particular test for the time being.
Comment 2 Anatoly Pugachev 2021-04-27 15:01:31 UTC
i can't reproduce on current gdb-10-branch :

binutils-gdb$ uname -a
Linux ttip 5.12.0 #208 SMP Mon Apr 26 12:44:01 MSK 2021 sparc64 GNU/Linux

binutils-gdb$ git describe
gdb-10.2-release-5-gbcb524549d0

binutils-gdb$ ./gdb/gdb
GNU gdb (GDB) 10.2.90.20210427-git
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "sparc64-unknown-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) file gdb/testsuite/outputs/gdb.base/testenv/testenv
Reading symbols from gdb/testsuite/outputs/gdb.base/testenv/testenv...
(gdb) run
Starting program: /1/mator/binutils-gdb/gdb/testsuite/outputs/gdb.base/testenv/testenv
Program found 0 variables starting with TEST_GDB
[Inferior 1 (process 2332742) exited normally]
(gdb) quit


or running via 'make check' :


binutils-gdb$ make -k check TESTS="gdb.base/testenv.exp"
make[1]: Entering directory '/1/mator/binutils-gdb'
make[2]: Entering directory '/1/mator/binutils-gdb/bfd'
make  check-recursive
make[3]: Entering directory '/1/mator/binutils-gdb/bfd'
Making check in doc
make[4]: Entering directory '/1/mator/binutils-gdb/bfd/doc'
make[4]: Leaving directory '/1/mator/binutils-gdb/bfd/doc'
Making check in po
make[4]: Entering directory '/1/mator/binutils-gdb/bfd/po'
make[4]: Nothing to be done for 'check'.
make[4]: Leaving directory '/1/mator/binutils-gdb/bfd/po'
make[4]: Entering directory '/1/mator/binutils-gdb/bfd'
make[4]: Leaving directory '/1/mator/binutils-gdb/bfd'
make[3]: Leaving directory '/1/mator/binutils-gdb/bfd'
make[2]: Leaving directory '/1/mator/binutils-gdb/bfd'
make[2]: Entering directory '/1/mator/binutils-gdb/opcodes'
Making check in .
make[3]: Entering directory '/1/mator/binutils-gdb/opcodes'
make[3]: Leaving directory '/1/mator/binutils-gdb/opcodes'
Making check in po
make[3]: Entering directory '/1/mator/binutils-gdb/opcodes/po'
make[3]: Nothing to be done for 'check'.
make[3]: Leaving directory '/1/mator/binutils-gdb/opcodes/po'
make[2]: Leaving directory '/1/mator/binutils-gdb/opcodes'
make[2]: Entering directory '/1/mator/binutils-gdb/etc'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/1/mator/binutils-gdb/etc'
make[2]: Entering directory '/1/mator/binutils-gdb/intl'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/1/mator/binutils-gdb/intl'
make[2]: Entering directory '/1/mator/binutils-gdb/libdecnumber'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/1/mator/binutils-gdb/libdecnumber'
make[2]: Entering directory '/1/mator/binutils-gdb/libiberty'
make[3]: Entering directory '/1/mator/binutils-gdb/libiberty/testsuite'
./test-demangle < ./demangle-expected
./test-demangle: 341 tests, 0 failures
./test-demangle < ./d-demangle-expected
./test-demangle: 350 tests, 0 failures
./test-demangle < ./rust-demangle-expected
FAIL at line 222, options --format=rust:
in:  _RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc76_E
out: <const_generic::Char<'
exp: <const_generic::Char<'v'>>
FAIL at line 285, options --format=auto:
in:  _RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc76_E
out: <const_generic::Char<'
exp: <const_generic::Char<'v'>>
./test-demangle: 68 tests, 2 failures
make[3]: *** [Makefile:58: check-rust-demangle] Error 1
./test-pexecute
./test-expandargv
PASS: test-expandargv-0.
PASS: test-expandargv-1.
PASS: test-expandargv-2.
PASS: test-expandargv-3.
PASS: test-expandargv-4.
PASS: test-expandargv-5.
PASS: test-expandargv-6.
./test-strtol
PASS: test-strtol-0.
PASS: test-strtol-1.
PASS: test-strtol-2.
PASS: test-strtol-3.
PASS: test-strtol-4.
PASS: test-strtol-5.
PASS: test-strtol-6.
PASS: test-strtol-7.
PASS: test-strtol-8.
PASS: test-strtol-9.
PASS: test-strtol-10.
PASS: test-strtol-11.
PASS: test-strtol-12.
PASS: test-strtol-13.
PASS: test-strtol-14.
PASS: test-strtol-15.
PASS: test-strtol-16.
PASS: test-strtol-17.
PASS: test-strtol-18.
PASS: test-strtol-19.
PASS: test-strtol-20.
make[3]: Target 'check' not remade because of errors.
make[3]: Leaving directory '/1/mator/binutils-gdb/libiberty/testsuite'
make[2]: *** [Makefile:504: check-subdir] Error 2
make[2]: Target 'check' not remade because of errors.
make[2]: Leaving directory '/1/mator/binutils-gdb/libiberty'
make[1]: *** [Makefile:7170: check-libiberty] Error 2
make[2]: Entering directory '/1/mator/binutils-gdb/readline'
Making check in readline
make[3]: Entering directory '/1/mator/binutils-gdb/readline/readline'
make[3]: Nothing to be done for 'check'.
make[3]: Leaving directory '/1/mator/binutils-gdb/readline/readline'
make[3]: Entering directory '/1/mator/binutils-gdb/readline'
make[3]: Nothing to be done for 'check-am'.
make[3]: Leaving directory '/1/mator/binutils-gdb/readline'
make[2]: Leaving directory '/1/mator/binutils-gdb/readline'
make[2]: Entering directory '/1/mator/binutils-gdb/gnulib'
Making check in import
make[3]: Entering directory '/1/mator/binutils-gdb/gnulib/import'
make  check-recursive
make[4]: Entering directory '/1/mator/binutils-gdb/gnulib/import'
make[5]: Entering directory '/1/mator/binutils-gdb/gnulib/import'
make[5]: Nothing to be done for 'check-am'.
make[5]: Leaving directory '/1/mator/binutils-gdb/gnulib/import'
make[4]: Leaving directory '/1/mator/binutils-gdb/gnulib/import'
make[3]: Leaving directory '/1/mator/binutils-gdb/gnulib/import'
make[3]: Entering directory '/1/mator/binutils-gdb/gnulib'
make[3]: Leaving directory '/1/mator/binutils-gdb/gnulib'
make[2]: Leaving directory '/1/mator/binutils-gdb/gnulib'
make[2]: Entering directory '/1/mator/binutils-gdb/gdbsupport'
make[2]: Leaving directory '/1/mator/binutils-gdb/gdbsupport'
make[2]: Entering directory '/1/mator/binutils-gdb/gdbserver'
make[2]: Nothing to be done for 'check'.
make[2]: Leaving directory '/1/mator/binutils-gdb/gdbserver'
make[2]: Entering directory '/1/mator/binutils-gdb/gdb'
make[3]: Entering directory '/1/mator/binutils-gdb/gdb/testsuite'
Nothing to be done for all...
make check-single
make[4]: Entering directory '/1/mator/binutils-gdb/gdb/testsuite'
rootme=`pwd`; export rootme; srcdir=. ; export srcdir ; EXPECT=`if [ "${READ1}" != "" ] ; then echo ${rootme}/expect-read1; elif [ -f ${rootme}/../../expect/expect ] ; then echo ${rootme}/../../expect/expect ; else echo expect ; fi` ; export EXPECT ; EXEEXT= ; export EXEEXT ;    LD_LIBRARY_PATH=$rootme/../../expect:$rootme/../../libstdc++:$rootme/../../tk/unix:$rootme/../../tcl/unix:$rootme/../../bfd:$rootme/../../opcodes:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; if [ -f ${rootme}/../../expect/expect ] ; then TCL_LIBRARY=${srcdir}/../../tcl/library ; export TCL_LIBRARY ; fi ; runtest --status  gdb.base/testenv.exp
Using /1/mator/binutils-gdb/gdb/testsuite/lib/gdb.exp as tool init file.
NOTE: Dejagnu's default_target_compile is missing support for Go, using local override
NOTE: Dejagnu's default_target_compile is missing support for Rust, using local override
Test run by mator on Tue Apr 27 17:50:04 2021
Native configuration is sparc64-unknown-linux-gnu

                === gdb tests ===

Schedule of variations:
    unix

Running target unix
Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target.
Using /usr/share/dejagnu/config/unix.exp as generic interface file for target.
Using /1/mator/binutils-gdb/gdb/testsuite/config/unix.exp as tool-and-target-specific interface file.
Running /1/mator/binutils-gdb/gdb/testsuite/gdb.base/testenv.exp ...

                === gdb Summary ===

# of expected passes            18
/1/mator/binutils-gdb/gdb/gdb version  10.2.90.20210427-git -nw -nx -data-directory /1/mator/binutils-gdb/gdb/testsuite/../data-directory

make[4]: Leaving directory '/1/mator/binutils-gdb/gdb/testsuite'
make[3]: Leaving directory '/1/mator/binutils-gdb/gdb/testsuite'
make[2]: Leaving directory '/1/mator/binutils-gdb/gdb'
make[1]: Target 'check-host' not remade because of errors.
make[1]: Nothing to be done for 'check-target'.
make[1]: Leaving directory '/1/mator/binutils-gdb'
make: *** [Makefile:2236: do-check] Error 2
make: Target 'check' not remade because of errors.