From 4473d4f9096d75b24e5dc0225791d7c32fdbec47 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Thu, 11 May 2023 14:35:49 +0100 Subject: gdb/testsuite: make gdb_supported_languages a caching proc Rewrite gdb_supported_languages as a caching proc that actually queries GDB for the list of supported languages, rather than just containing a hard-coded list of languages. There's only one test that uses this proc right now, gdb.python/py-function.exp, and that still passes after this change, with no changes in the test names. --- gdb/testsuite/lib/gdb.exp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index c3579670296..133d914aff8 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -8610,11 +8610,29 @@ proc cd { dir } { } # Return a list of all languages supported by GDB, suitable for use in -# 'set language NAME'. This doesn't include either the 'local' or -# 'auto' keywords. -proc gdb_supported_languages {} { - return [list c objective-c c++ d go fortran modula-2 asm pascal \ - opencl rust minimal ada] +# 'set language NAME'. This doesn't include the languages auto, +# local, or unknown. +gdb_caching_proc gdb_supported_languages {} { + # The extra space after 'complete set language ' in the command below is + # critical. Only with that space will GDB complete the next level of + # the command, i.e. fill in the actual language names. + set output [remote_exec host $::GDB "$::INTERNAL_GDBFLAGS -batch -ex \"complete set language \""] + + if {[lindex $output 0] != 0} { + error "failed to get list of supported languages" + } + + set langs {} + foreach line [split [lindex $output 1] \n] { + if {[regexp "set language (\[^\r\]+)" $line full_match lang]} { + # If LANG is not one of the languages that we ignore, then + # add it to our list of languages. + if {[lsearch -exact {auto local unknown} $lang] == -1} { + lappend langs $lang + } + } + } + return $langs } # Check if debugging is enabled for gdb. -- cgit v1.2.1