On SLE-11, with a gdb-13.2-based package, I ran into: ... Running /usr/src/packages/BUILD/gdb-13.2/gdb/testsuite/gdb.ada/mi_prot.exp ... UNRESOLVED: gdb.ada/mi_prot.exp: testcase aborted due to invalid command name: gdb_find_gnatmake ERROR: tcl error sourcing /usr/src/packages/BUILD/gdb-13.2/gdb/testsuite/gdb.ada/mi_prot.exp. ERROR: invalid command name "gdb_find_gnatmake" while executing "::gdb_tcl_unknown gdb_find_gnatmake" ("uplevel" body line 1) invoked from within "uplevel 1 ::gdb_tcl_unknown $args" (procedure "::unknown" line 5) invoked from within "gdb_find_gnatmake" (procedure "gnatmake_version_at_least" line 2) invoked from within "gnatmake_version_at_least 8" invoked from within "if { ![gnatmake_version_at_least 8] } { return -1 }" ... The problem is that gdb_find_gnatmake is a backup for find_gnatmake: ... if {[info procs find_gnatmake] == ""} { rename gdb_find_gnatmake find_gnatmake set use_gdb_compile(ada) 1 gdb_note [join [list $note_prefix "Ada" $note_suffix] ""] } ... so gnatmake_version_at_least should use find_gnatmake instead. We normally don't run into this because dejagnu is recent enough to include a find_gnatmake, so gdb_find_gnatmake is kept. With SLE-11, an old dejagnu is used, find_gnatmake is not found so gdb_find_gnatmake is renamed to find_gnatmake, and we run into the error. It's confusing that we're using the gdb_ prefix here, it seems something legitimate to use. Maybe we should use future_ or gdb_future_ prefix instead to make this more clear. Also, we could do: ... if {[info procs find_gnatmake] == ""} { rename gdb_find_gnatmake find_gnatmake set use_gdb_compile(ada) 1 gdb_note [join [list $note_prefix "Ada" $note_suffix] ""] } else { rename gdb_find_gnatmake "" } ... to prevent it being used by accident with a newer dejagnu.
https://sourceware.org/pipermail/gdb-patches/2024-April/208256.html
The master branch has been updated by Tom de Vries <vries@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=4c8fc167568d60a44f5a1f98bcb788a65af7a7ae commit 4c8fc167568d60a44f5a1f98bcb788a65af7a7ae Author: Tom de Vries <tdevries@suse.de> Date: Thu Apr 18 17:02:13 2024 +0200 [gdb/testsuite] Use find_gnatmake instead of gdb_find_gnatmake On SLE-11, with an older dejagnu version, I ran into: ... Running gdb.ada/mi_prot.exp ... UNRESOLVED: gdb.ada/mi_prot.exp: \ testcase aborted due to invalid command name: gdb_find_gnatmake ERROR: tcl error sourcing gdb.ada/mi_prot.exp. ERROR: invalid command name "gdb_find_gnatmake" while executing "::gdb_tcl_unknown gdb_find_gnatmake" ("uplevel" body line 1) invoked from within "uplevel 1 ::gdb_tcl_unknown $args" (procedure "::unknown" line 5) invoked from within "gdb_find_gnatmake" (procedure "gnatmake_version_at_least" line 2) invoked from within ... Proc gdb_find_gnatmake is actually a backup for find_gnatmake: ... if {[info procs find_gnatmake] == ""} { rename gdb_find_gnatmake find_gnatmake ... so gnatmake_version_at_least should use find_gnatmake instead. For a recent dejagnu with find_gnatmake, gdb_find_gnatmake is kept, and we don't run into this error. For an older dejagnu without find_gnatmake, gdb_find_gnatmake is renamed to find_gnatmake, and we do run into the error. It's confusing that we're using the gdb_ prefix for gdb_find_gnatmake, it seems something legitimate to use. Maybe we should use future_ or gdb_future_ prefix instead to make this more clear, but I've left that alone for now. Fix this by: - triggering the same error with a recent dejagnu by removing gdb_find_gnatmake unless used (and likewise for other procs in future.exp), and - using find_gnatmake in gnatmake_version_at_least. Tested on x86_64-linux. Approved-By: Tom Tromey <tom@tromey.com> PR testsuite/31647 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31647
Fixed.