summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/testsuite/lib/gdb.exp28
1 files 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.