From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x131.google.com (mail-il1-x131.google.com [IPv6:2607:f8b0:4864:20::131]) by sourceware.org (Postfix) with ESMTPS id EE0A1385772B for ; Fri, 4 Aug 2023 15:51:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EE0A1385772B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com Received: by mail-il1-x131.google.com with SMTP id e9e14a558f8ab-348db491d0eso8363945ab.3 for ; Fri, 04 Aug 2023 08:51:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1691164288; x=1691769088; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=RoSpjpnEltARFHYVhtwdH66TE2yM6Ln9WafFm7WmIqc=; b=fgSB7VZ/p0pe2k/9EuGUJA2AI9+t2HYXQsOyqfON75rRNStgQn/yYhXjfbcH+DlDfv RtJfdElfvVoUK00xGcg49Hna4h1nPJNyuR9Tc5S77HXcWDNxhReRnBXM0nGh1rLflxTw RqnrVrqUXKMKHpkFE8wowX7jsvx3Rlxyyk+IpUmjolv9dBlKGHPSQ6qiMXI3Rd6ZF535 Xa7RMZxZBf/Dl8q5PN37/ahzs0O/lrS6PiWdROK6tPRETcROr1qqPZ1QaS85mgJ4usLA 6lNYCMV0gl2XcsZWeQeJRYeKjGLR2Z/VaC1g7kcyU9B6JGG/dhUWrkyANDKSOuclj1i0 neyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691164288; x=1691769088; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RoSpjpnEltARFHYVhtwdH66TE2yM6Ln9WafFm7WmIqc=; b=WxBVIwhDCSZ8f68+DAdiM1VDeKvjKG2d6seHNBoslnnyG3sVN14FyGshFofU0zm1UR pObgCpRNfPNALvzl0gwG1DBbxQKQKaqBwTUQ1qKlriT8Ll4u9FJVOoP/Nql4XjX+v+PA 2UAsjBGQdi4Ww9jMJuB39g4QST9+drOKgVMPJlBzvZifplj90fPpis0LzVX3m+0JbiH2 cfOjTdwADnMR36+5g0rlv+LJNqa4bkTtO2q+iUFHpiLhsFRbY1GFxklJIzc+LYQGaTUC eJC5UWMXcEV4JtMej4waojW6rorVFy/b2SHfNVd62bjhZGZa/cNbBedshsnh4b0eU3c8 3pqw== X-Gm-Message-State: AOJu0YzvQKplHFADTt2EIvExmU6qelLKR6QjakUn1tkZRIGBpbNSWDZf 6Z3/XypQbguDHikhhLIjrd181F5YUVPWW9ZtHasYBA== X-Google-Smtp-Source: AGHT+IGHsUtvoKcA/wBkdDaatFQePzU+pqPVkBBB8rXSl3ojvljoOZkiIwc91g7+c+HM1NyR9hd4Ag== X-Received: by 2002:a05:6e02:1201:b0:348:d775:a382 with SMTP id a1-20020a056e02120100b00348d775a382mr2202411ilq.28.1691164288256; Fri, 04 Aug 2023 08:51:28 -0700 (PDT) Received: from localhost.localdomain (71-211-152-221.hlrn.qwest.net. [71.211.152.221]) by smtp.gmail.com with ESMTPSA id q7-20020a92c007000000b00345ffd35a29sm743820ild.68.2023.08.04.08.51.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Aug 2023 08:51:27 -0700 (PDT) From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH] Implement DAP module-removed event Date: Fri, 4 Aug 2023 09:51:18 -0600 Message-Id: <20230804155118.4102396-1-tromey@adacore.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: DAP specifies an event that should be sent when a module is removed. This patch implements this. --- gdb/python/lib/gdb/dap/events.py | 13 +++++++++++++ gdb/testsuite/gdb.dap/modules.c | 3 +++ gdb/testsuite/gdb.dap/modules.exp | 15 +++++++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) 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 -- 2.40.1