]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/testsuite] Handle asm frame in gdb.python/py-missing-objfile.exp
authorTom de Vries <tdevries@suse.de>
Wed, 30 Apr 2025 11:41:20 +0000 (13:41 +0200)
committerTom de Vries <tdevries@suse.de>
Wed, 30 Apr 2025 11:41:20 +0000 (13:41 +0200)
On arm-linux, with test-case gdb.python/py-missing-objfile.exp I get:
...
(gdb) whatis global_exec_var^M
type = volatile exec_type^M
(gdb) FAIL: $exp: initial sanity check: whatis global_exec_var
...
instead of the expected "type = volatile struct exec_type".

The problem is that the current language is ASM instead of C, because the
inner frame at the point of the core dump has language ASM:
...
 #0  __libc_do_syscall () at libc-do-syscall.S:47
 #1  0xf7882920 in __pthread_kill_implementation () at pthread_kill.c:43
 #2  0xf784df22 in __GI_raise (sig=sig@entry=6) at raise.c:26
 #3  0xf783f03e in __GI_abort () at abort.c:73
 #4  0x009b0538 in dump_core () at py-missing-objfile.c:34
 #5  0x009b0598 in main () at py-missing-objfile.c:46
...

Fix this by manually setting the language to C.

Tested on arm-linux and x86_64-linux.

PR testsuite/32445
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32445

gdb/testsuite/gdb.python/py-missing-objfile.exp

index e4a1b3fd2ec1e0ae0f15f3ae36372be7920d9540..29bc555d88fa77bbcaa4130396cfc152e6a99aa8 100644 (file)
@@ -79,6 +79,16 @@ proc setup_debugdir { dirname files } {
 # executable (when EXEC_LOADED is true) and/or the library (when LIB_LOADED
 # is true).
 proc check_loaded_debug { exec_loaded lib_loaded } {
+    set re_warn \
+       [string_to_regexp \
+            "Warning: the current language does not match this frame."]
+    set cmd "set lang c"
+    gdb_test_multiple $cmd "" {
+       -re -wrap "${cmd}(\r\n$re_warn)?" {
+           pass $gdb_test_name
+       }
+    }
+
     if { $exec_loaded } {
        gdb_test "whatis global_exec_var" "^type = volatile struct exec_type"