From: Tom Tromey Date: Fri, 4 Aug 2023 15:50:01 +0000 (-0600) Subject: Implement DAP module-removed event X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=100dbc6de52e6d4bfaf4b330ee923267e56e936c;p=binutils-gdb.git Implement DAP module-removed event DAP specifies an event that should be sent when a module is removed. This patch implements this. Tested-By: Alexandra Petlanova Hajkova --- diff --git a/gdb/python/lib/gdb/dap/events.py b/gdb/python/lib/gdb/dap/events.py index aca25120ca0..e9ddcab135f 100644 --- a/gdb/python/lib/gdb/dap/events.py +++ b/gdb/python/lib/gdb/dap/events.py @@ -68,6 +68,18 @@ def _new_objfile(event): ) +@in_gdb_thread +def _objfile_removed(event): + if is_module(event.objfile): + send_event( + "module", + { + "reason": "removed", + "module": make_module(event.objfile), + }, + ) + + _suppress_cont = False @@ -150,3 +162,4 @@ gdb.events.new_thread.connect(_new_thread) gdb.events.thread_exited.connect(_thread_exited) gdb.events.cont.connect(_cont) gdb.events.new_objfile.connect(_new_objfile) +gdb.events.free_objfile.connect(_objfile_removed) diff --git a/gdb/testsuite/gdb.dap/modules.c b/gdb/testsuite/gdb.dap/modules.c index 6ef8a600c5d..7a4b9f0d898 100644 --- a/gdb/testsuite/gdb.dap/modules.c +++ b/gdb/testsuite/gdb.dap/modules.c @@ -36,5 +36,8 @@ main (void) func = (int (*)(void (*) (void))) dlsym (handle, "call_me"); func (stop); + dlclose (handle); + stop (); + return 0; } diff --git a/gdb/testsuite/gdb.dap/modules.exp b/gdb/testsuite/gdb.dap/modules.exp index e75ae578c78..949a3cfccf0 100644 --- a/gdb/testsuite/gdb.dap/modules.exp +++ b/gdb/testsuite/gdb.dap/modules.exp @@ -42,7 +42,7 @@ if {[dap_launch $testfile] == ""} { return } -set obj [dap_check_request_and_response "set breakpoint on two functions" \ +set obj [dap_check_request_and_response "set breakpoint on stop function" \ setFunctionBreakpoints \ {o breakpoints [a [o name [s stop]]]}] set fn_bpno [dap_get_breakpoint_number $obj] @@ -53,7 +53,7 @@ dap_wait_for_event_and_check "stopped at function breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $fn_bpno -dap_check_request_and_response "continue to next stop" continue \ +dap_check_request_and_response "continue to second stop" continue \ {o threadId [i 1]} @@ -78,4 +78,15 @@ set frame_id [dict get [lindex [dict get $bt body stackFrames] 1] moduleId] gdb_assert {[string match *$libname* $frame_id]} "module.id in stack trace" + +dap_check_request_and_response "continue to third stop" continue \ + {o threadId [i 1]} + +dap_wait_for_event_and_check "module removed event" module \ + "body reason" removed + +dap_wait_for_event_and_check "third stop at function breakpoint" stopped \ + "body reason" breakpoint \ + "body hitBreakpointIds" $fn_bpno + dap_shutdown