https://github.com/jimingham created https://github.com/llvm/llvm-project/pull/137410
stop-hooks are supposed to trigger every time the process stops, but as initially implemented they would only fire when control was returned to the user. So for instance when a process was launched the stop hook would only trigger when the process hit a breakpoint or crashed. However, it would be really useful to be able to trigger a stop hook when lldb first gains control over the process. One way to do that would be to implement general "target lifecycle events" and then send process created events that users could bind actions to. OTOH, extending the stop hooks to fire when lldb first gains control over the process is a pretty natural extension to the notion of a stop hook. So this patch takes the shorter route to that ability by making stop-hooks fire when lldb first gains control over the process. I also added the ability to specify whether to trigger the stop hook "on gaining control". I'm on the fence about whether to set the default to be "trigger on gaining control" or "don't trigger on gaining control". Since I think it's a generally useful feature, I've set the default to "trigger on gaining control". >From 8a5e25a6e850222fcbb94f685d46895d2666041f Mon Sep 17 00:00:00 2001 From: Jim Ingham <jing...@apple.com> Date: Fri, 25 Apr 2025 15:35:12 -0700 Subject: [PATCH] Make stop-hooks fire when lldb first gains control of a process. --- lldb/include/lldb/Target/Target.h | 11 +- lldb/source/Commands/CommandObjectTarget.cpp | 16 + lldb/source/Commands/Options.td | 7 +- lldb/source/Target/Process.cpp | 6 + lldb/source/Target/Target.cpp | 37 +- .../target/stop-hooks/TestStopHookScripted.py | 6 +- .../target/stop-hooks/TestStopHooks.py | 3 +- .../on-core-load/TestStopHookOnCoreLoad.py | 55 + .../stop-hooks/on-core-load/linux-x86_64.core | Bin 0 -> 32768 bytes .../stop-hooks/on-core-load/stop_hook.py | 28 + .../stop-hooks/on-core-load/test.core.yaml | 1056 +++++++++++++++++ lldb/test/API/python_api/event/TestEvents.py | 3 +- 12 files changed, 1218 insertions(+), 10 deletions(-) create mode 100644 lldb/test/API/commands/target/stop-hooks/on-core-load/TestStopHookOnCoreLoad.py create mode 100644 lldb/test/API/commands/target/stop-hooks/on-core-load/linux-x86_64.core create mode 100644 lldb/test/API/commands/target/stop-hooks/on-core-load/stop_hook.py create mode 100644 lldb/test/API/commands/target/stop-hooks/on-core-load/test.core.yaml diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h index 29183cc267721..7aa1fd18233c2 100644 --- a/lldb/include/lldb/Target/Target.h +++ b/lldb/include/lldb/Target/Target.h @@ -1369,6 +1369,12 @@ class Target : public std::enable_shared_from_this<Target>, } bool GetAutoContinue() const { return m_auto_continue; } + + void SetRunAtFirstStop(bool at_first_stop) { + m_at_first_stop = at_first_stop; + } + + bool GetRunAtFirstStop() const { return m_at_first_stop; } void GetDescription(Stream &s, lldb::DescriptionLevel level) const; virtual void GetSubclassDescription(Stream &s, @@ -1380,6 +1386,7 @@ class Target : public std::enable_shared_from_this<Target>, std::unique_ptr<ThreadSpec> m_thread_spec_up; bool m_active = true; bool m_auto_continue = false; + bool m_at_first_stop = true; StopHook(lldb::TargetSP target_sp, lldb::user_id_t uid); }; @@ -1446,7 +1453,9 @@ class Target : public std::enable_shared_from_this<Target>, // Runs the stop hooks that have been registered for this target. // Returns true if the stop hooks cause the target to resume. - bool RunStopHooks(); + // Pass at_initial_stop if this is the stop where lldb gains + // control over the process for the first time. + bool RunStopHooks(bool at_initial_stop = false); size_t GetStopHookSize(); diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp index 3f7d3007ed168..3f73157155a02 100644 --- a/lldb/source/Commands/CommandObjectTarget.cpp +++ b/lldb/source/Commands/CommandObjectTarget.cpp @@ -4795,6 +4795,17 @@ class CommandObjectTargetStopHookAdd : public CommandObjectParsed, m_use_one_liner = true; m_one_liner.push_back(std::string(option_arg)); break; + + case 'F': { + bool value, success; + value = OptionArgParser::ToBoolean(option_arg, false, &success); + if (success) { + m_at_first_stop = value; + } else + error = Status::FromErrorStringWithFormat( + "invalid boolean value '%s' passed for -F option", + option_arg.str().c_str()); + } break; default: llvm_unreachable("Unimplemented option"); @@ -4822,6 +4833,7 @@ class CommandObjectTargetStopHookAdd : public CommandObjectParsed, m_use_one_liner = false; m_one_liner.clear(); m_auto_continue = false; + m_at_first_stop = true; } std::string m_class_name; @@ -4842,6 +4854,7 @@ class CommandObjectTargetStopHookAdd : public CommandObjectParsed, // Instance variables to hold the values for one_liner options. bool m_use_one_liner = false; std::vector<std::string> m_one_liner; + bool m_at_first_stop; bool m_auto_continue = false; }; @@ -5006,6 +5019,9 @@ Filter Options: if (specifier_up) new_hook_sp->SetSpecifier(specifier_up.release()); + + // Should we run at first stop: + new_hook_sp->SetRunAtFirstStop(m_options.m_at_first_stop); // Next see if any of the thread options have been entered: diff --git a/lldb/source/Commands/Options.td b/lldb/source/Commands/Options.td index 53864ff29327d..50313ac2cacbc 100644 --- a/lldb/source/Commands/Options.td +++ b/lldb/source/Commands/Options.td @@ -1050,8 +1050,13 @@ let Command = "target stop hook add" in { Arg<"FunctionName">, Desc<"Set the function name within which the stop hook" " will be run.">, Completion<"Symbol">; def target_stop_hook_add_auto_continue : Option<"auto-continue", "G">, - Arg<"Boolean">, Desc<"The breakpoint will auto-continue after running its" + Arg<"Boolean">, Desc<"The stop-hook will auto-continue after running its" " commands.">; + def target_stop_hook_add_at_first_stop : Option<"at-first-stop", "F">, + Arg<"Boolean">, Desc<"Whether the stop-hook will trigger when lldb first " + "gains control of the process. For a process launch, this first stop " + "may happen very early on - before the loader has run. You might not want " + "some stop-hooks to run then. Defaults to true.">; } let Command = "thread backtrace" in { diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index 73557eb767c72..f68bfa504f2c0 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -2830,6 +2830,9 @@ Status Process::LoadCore() { "Did not get stopped event after loading the core file."); } RestoreProcessEvents(); + // Since we hijacked the event stream, we will have we won't have run the + // stop hooks. Make sure we do that here: + GetTarget().RunStopHooks(true /* at_initial_stop */); } return error; } @@ -3200,6 +3203,9 @@ void Process::CompleteAttach() { : "<none>"); } } + // Since we hijacked the event stream, we will have we won't have run the + // stop hooks. Make sure we do that here: + GetTarget().RunStopHooks(true /* at_initial_stop */); } Status Process::ConnectRemote(llvm::StringRef remote_url) { diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp index 0fa61b20e19b9..3b31f6d0406a5 100644 --- a/lldb/source/Target/Target.cpp +++ b/lldb/source/Target/Target.cpp @@ -3038,7 +3038,7 @@ void Target::SetAllStopHooksActiveState(bool active_state) { } } -bool Target::RunStopHooks() { +bool Target::RunStopHooks(bool at_initial_stop) { if (m_suppress_stop_hooks) return false; @@ -3047,14 +3047,18 @@ bool Target::RunStopHooks() { // Somebody might have restarted the process: // Still return false, the return value is about US restarting the target. - if (m_process_sp->GetState() != eStateStopped) + lldb::StateType state = m_process_sp->GetState(); + if (!(state == eStateStopped || state == eStateAttaching)) return false; if (m_stop_hooks.empty()) return false; bool no_active_hooks = - llvm::none_of(m_stop_hooks, [](auto &p) { return p.second->IsActive(); }); + llvm::none_of(m_stop_hooks, [at_initial_stop](auto &p) { + bool should_run_now = !at_initial_stop || p.second->GetRunAtFirstStop(); + return p.second->IsActive() && should_run_now; + }); if (no_active_hooks) return false; @@ -3084,9 +3088,22 @@ bool Target::RunStopHooks() { } // If no threads stopped for a reason, don't run the stop-hooks. + // However, if this is the FIRST stop for this process, then we are in the + // state where an attach or a core file load was completed without designating + // a particular thread as responsible for the stop. In that case, we do + // want to run the stop hooks, but do so just on one thread. size_t num_exe_ctx = exc_ctx_with_reasons.size(); - if (num_exe_ctx == 0) - return false; + if (num_exe_ctx == 0) { + if (at_initial_stop && num_threads > 0) { + lldb::ThreadSP thread_to_use_sp = cur_threadlist.GetThreadAtIndex(0); + exc_ctx_with_reasons.emplace_back(m_process_sp.get(), + thread_to_use_sp.get(), + thread_to_use_sp->GetStackFrameAtIndex(0).get()); + num_exe_ctx = 1; + } else + return false; + } + StreamSP output_sp = m_debugger.GetAsyncOutputStream(); auto on_exit = llvm::make_scope_exit([output_sp] { output_sp->Flush(); }); @@ -3100,6 +3117,8 @@ bool Target::RunStopHooks() { StopHookSP cur_hook_sp = stop_entry.second; if (!cur_hook_sp->IsActive()) continue; + if (at_initial_stop && !cur_hook_sp->GetRunAtFirstStop()) + continue; bool any_thread_matched = false; for (auto exc_ctx : exc_ctx_with_reasons) { @@ -3426,10 +3445,14 @@ Status Target::Launch(ProcessLaunchInfo &launch_info, Stream *stream) { m_process_sp->RestoreProcessEvents(); if (rebroadcast_first_stop) { + // We don't need to run the stop hooks by hand here, they will get + // triggered when this rebroadcast event gets fetched. assert(first_stop_event_sp); m_process_sp->BroadcastEvent(first_stop_event_sp); return error; } + // Run the stop hooks that want to run at entry. + RunStopHooks(true /* at entry point */); switch (state) { case eStateStopped: { @@ -3581,6 +3604,10 @@ Status Target::Attach(ProcessAttachInfo &attach_info, Stream *stream) { std::nullopt, nullptr, false, attach_info.GetHijackListener(), stream, true, SelectMostRelevantFrame); process_sp->RestoreProcessEvents(); + + // Run the stop hooks here. Since we were hijacking the events, they + // wouldn't have gotten run as part of event delivery. + RunStopHooks(true /* at_initial_stop */); if (state != eStateStopped) { const char *exit_desc = process_sp->GetExitDescription(); diff --git a/lldb/test/API/commands/target/stop-hooks/TestStopHookScripted.py b/lldb/test/API/commands/target/stop-hooks/TestStopHookScripted.py index 7c10669442b1c..38d8815e8ff50 100644 --- a/lldb/test/API/commands/target/stop-hooks/TestStopHookScripted.py +++ b/lldb/test/API/commands/target/stop-hooks/TestStopHookScripted.py @@ -50,7 +50,11 @@ def test_bad_handler(self): def test_stop_hooks_scripted(self): """Test that a scripted stop hook works with no specifiers""" - self.stop_hooks_scripted(5) + self.stop_hooks_scripted(5, "-F false") + + def test_stop_hooks_scripted_no_entry(self): + """Test that a scripted stop hook works with no specifiers""" + self.stop_hooks_scripted(10) def test_stop_hooks_scripted_right_func(self): """Test that a scripted stop hook fires when there is a function match""" diff --git a/lldb/test/API/commands/target/stop-hooks/TestStopHooks.py b/lldb/test/API/commands/target/stop-hooks/TestStopHooks.py index 7d52676121827..2d13b06d09c1a 100644 --- a/lldb/test/API/commands/target/stop-hooks/TestStopHooks.py +++ b/lldb/test/API/commands/target/stop-hooks/TestStopHooks.py @@ -55,7 +55,7 @@ def step_out_test(self): def after_expr_test(self): interp = self.dbg.GetCommandInterpreter() result = lldb.SBCommandReturnObject() - interp.HandleCommand("target stop-hook add -o 'expr g_var++'", result) + interp.HandleCommand("target stop-hook add -o 'expr g_var++' -F false", result) self.assertTrue(result.Succeeded(), "Set the target stop hook") (target, process, thread, first_bkpt) = lldbutil.run_to_source_breakpoint( @@ -109,3 +109,4 @@ def before_and_after_target(self): self.expect( "target stop-hook list", substrs=["expr g_var++", "thread backtrace"] ) + diff --git a/lldb/test/API/commands/target/stop-hooks/on-core-load/TestStopHookOnCoreLoad.py b/lldb/test/API/commands/target/stop-hooks/on-core-load/TestStopHookOnCoreLoad.py new file mode 100644 index 0000000000000..364a85fdd84ae --- /dev/null +++ b/lldb/test/API/commands/target/stop-hooks/on-core-load/TestStopHookOnCoreLoad.py @@ -0,0 +1,55 @@ +""" +Test that stop hooks fire on core load (first stop) +""" + + +import lldb +import os +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class TestStopOnCoreLoad(TestBase): + NO_DEBUG_INFO_TESTCASE = True + + # This was originally marked as expected failure on Windows, but it has + # started timing out instead, so the expectedFailure attribute no longer + # correctly tracks it: llvm.org/pr37371 + @skipIfWindows + def test_hook_runs_no_threads(self): + # Create core form YAML. + core_path = self.getBuildArtifact("test.core") + self.yaml2obj("test.core.yaml", core_path) + + # Since mach core files don't have stop reasons, we should choose + # the first thread: + self.do_test(core_path, 1) + + def test_hook_one_thread(self): + core_path = os.path.join(self.getSourceDir(), "linux-x86_64.core") + self.do_test(core_path, 3) + + + def do_test(self, core_path, stop_thread): + # Set debugger into synchronous mode + self.dbg.SetAsync(False) + + # Create a target by the debugger. + target = self.dbg.CreateTarget("") + + # load the stop hook module and add the stop hook: + stop_hook_path = os.path.join(self.getSourceDir(), "stop_hook.py") + self.runCmd(f"command script import {stop_hook_path}") + self.runCmd("target stop-hook add -P stop_hook.stop_handler") + + # Load core. + process = target.LoadCore(core_path) + self.assertTrue(process, PROCESS_IS_VALID) + # Now run our report command and make sure we get the right answer. + + result = lldb.SBCommandReturnObject() + self.dbg.GetCommandInterpreter().HandleCommand("report_command", result) + print(f"Command Output: '{result.GetOutput}'") + self.assertIn(f"Stop Threads: {stop_thread}", result.GetOutput(), "Ran the stop hook") + diff --git a/lldb/test/API/commands/target/stop-hooks/on-core-load/linux-x86_64.core b/lldb/test/API/commands/target/stop-hooks/on-core-load/linux-x86_64.core new file mode 100644 index 0000000000000000000000000000000000000000..fc27e5810ee589fc810bdda01d6c227c734f34a3 GIT binary patch literal 32768 zcmeHP4RBP|6~3E40+MdD2C;%{3pz#0W)mO<qIFjSzOAXIU>rIUH_PsZq-3*k_bm`> zB@hCxYn)8gR&-kJ_*18~K*!FMcBYsRM#aGzeyVn?N)aqSj;2zHg0em5y>pg*Z+B-A zt%}~8d3)YD_ndpr{qDW*p8MwIuAEytFVA8ToC?JE#3@b)CugKkr<f@w6JJ1d=ExL< zl-u5mQ<#)ntfLTl2Me8iW2Bs4s*BN1tCQunMx#D+q%TtJiZGAu9F44Lq`B;d#^f0d zh_mJEH!1ZQ+GiWSd+W*!mV+0i*=YjybLhN#GTI4Snw<fcp~}p5PTed!F4HpGQFU4E z>ay5nsLy~)Zx*{w8igr%YMwJLr86@7nG2WF`pkAzPuBL?&d|=0#V!{v?OE&^bKo*~ zL+17kP0-*=ZJ%Mh^exM5mkXD{)3-D9``#>eom3$aYVE0c+qf>XpSjvs_nXXix!Tuw z`gVr)wP&&GydbR~4C8ueOJ+ZFjq9P;GTS|*SC`uFhUZ}K>zVCrIqWuNv2&)|8E_fO zVpm6x)s%iW_&Jow>}OqieVW8Ua$&hQ<MT6Dzn5mQYtK<%XBN9$_4Q`4dnmm=!@PCm zomu;wXJ}V<hIY=`l_xW;f1NqnH)OK2kv>zx6`vE@IIE-l(rROUtk2YJ*G_h#F@cFW zo;PNSb=5(oSnr(c=FdfatzYm4QtG`f5n}cELj1m1h$f;e&qW&#n>2n({BnKF^mXX; z!F!EZ^|tBq_L8yM<eEoQ3|!Dsdoc5uyYkWLhPlRi9Qb^V>{)Lb@m&5vDt8LW1^LNr zE{d39LX2;R3nMGWIIjj6NCgE>C(?tEi5Fwa)N2n#RaBs4FV`eC=07P#-#X!PU+rGN zzHy%)r}2Znpl_d5LZ2J}9zHkOr*CrQG#_Z#i^Pezwh(F0Sk$46b4lM%l-+j<rzYVx z&ZK;-6BCF3BXm{>dd~A$V=?QMj&y3Gb0~vx8g1fBOgxW0)~D5!w1l{j?*6=9p9>WA zh@q!+-b(q~DL-jQH`tzsp%HUy-SZg3Z?F=BM_34llXG-xYt$+2EqJ~N-fKAZe8yDp zp1>UAGfy%6UwJ}sOz+TR=A@i>K{0qg>vL>vj+L3GSa_`NHH-m@IVsjn$~pF>Se7vs z9HW|JPUb159K+>vj7c$L8Ou3_q?j<N&oQDo=3|~>x?*lG$9NR8jbJ&)a1@gz^*Kf} z$6U-)Otpf`;TVfzrlg#Bu}P0@Rwwl-)^YALJWmC$*|Y{vVjOr)rZx5wl9vYq{uXa} zq{-9V9B6Ir2!zX*hr&zC+d}?8d26eGu_qV^hQb}5ptn5&f@Q&SH56*aTmRzncCT-# zcS#^pUe}>EhuSn@B-)||%GE$bEpLjp`P7zBo42(^Z2_(JP(+2o)IhL2(AqTB7Yc)7 zb2#AjdwgMUq*;HC3hC2n;?&x*xO~OTDo@q)sjV$-(G^pdv_;E7=$l$;ubgg=gamS* zuS&b#!MQ#992J-Ne4YrvWv|E%*k`E|%#GHkt`d!evksPs>i12Vf&f+79rnsfQU1lz z&OE^Vxe)vq3VQ4h3ofp?yl$^dF0}lB)oCXL1t}4}G4nIzw2el}kEqet_0C&#iedh3 zaN)M86Rx4zx|}J;ModA)kWz})ZZURCy<WabFOR9g_)EZGZ0m$EkOzaJ)_raLLg3|? zFpi4U@qqU{7MOm~he2|`ahi@M_dBPlFV&0);Qr|2zW3lgIa6ba*}1ImJxnH>exdK} zcu(2+bK`puod1{x={<@0eFTT=OnFaBX8PI!_IWgQ-W~14;)MCVhm-2%_a4sSEblBe z>+~N({ZKj9f3~b;X|0iKSsEmtL~u5)Wohk|V<HWbRDoQ}QqlPT-=E1^w(8S<hd)g3 z@IT1>4!`|vU2Yq#zr*i~9@oAjc#ZcqWG{%0t!UJMGpr>b$+nigm1Qk+P`$jCarvj) zD~9^zT4sRF7=b4eXL}58XxwQqaxF^->B}}I<XV>A$5J8@kO)WwBmxoviGV~vA|Mfv z2uK7Z0ulj<fJ8tdAQ6xVNCYGT5&?;TL_i`S5s(N-1SA3y0f~S_Kq4R!kO)WwBmxov ziGW1l(?DRQ>HNQZI{(i>2X#29lD&NJ2Jm?PUjh7{3x|f_ci#N}Qlx4iBgu{_pEH8r zqvLna3Vp|Jrls@&Ia5AIguj)(k3KLp)61!Lrl^mp?ttpY`#of5rmWAD?a;kZa3PQP zssBI7-?$=FsW@QU*k824JiO3$)pUntUO=p3eJta)`d4oj&t0@>?KRzRmfUsm>U&oF z>edS%p3`>6Wlvvv>88bj;KFsM&LaZ-)P(hXON<sn)L+xEa!7cF#(5xj(19v$tPs+8 zxKQ6LzYOH4-%0;W%x7~{kiJ=t#i72r-s?eruJ})yzg49F5S2d}cuZHoh5nf3!sA)y zkAytF){t+hXGuU+TY>==5*uprdplTW%J;QLg?`=w7NegVp#2Z9r_zqT<fZ+gH`q`5 z->;u~y9EB#LyUu~1~VXGoAcoJSad@^=3&D2V&dt+y2+zr^lWYX;H{1N;k}cI5b}-0 z^BlU5`j5xi<CKqM5YtUM5qxeApV9JRLNBkB=F>;SQ*mO5_+u=fawL%mNCduk2;ltZ zHK-QPjX@WS3p5!%dvKaxeQmwic(mb_zx~&G>+0SeCtlj}NcaygyjyCyD8G6p<YO6& z;Q4{is5^n)3UnOI|3^>`h3^OY1Uz`ohrAs?rvv5Zn&p=H!m<L28a<-87vz)B7A|=F ziHS&EUn^akH>afNN28tw71ud6NOZj#$i_34VoANalA^pIDY`X9TxVP1Y6m@S&C<%7 zS5h>$C;!fZuEM<eqXw?pan<uKz4W{%4XhB~0oy0g9)Qr+HulF&_Rkv)(D#4B)eG&` z);3N52PH-GbiXnGL(13ICM{nnDe~y~kfo)1C3e8N;h?ob>ECBlMh+_RGS^FqgfeUE z^1OxtB{tYFV4WbE?A8fubp3eA`ZpoJXU0Y(u>)QII_Zi%d#uQ!`cliWZYk?Qg(-z$ zAhDh9SpV=p+`A9Ob}GB~cJGRpEd{aLs`M+v`xNUFgEpwR4n*;i+3@R{^=$Mp#WJYO zDtz)qD8)Lb@OMBP1}gfV(V`UesuLZmcg0SC7p{8O^$Tiyg8P-8@f~Q<^;T(D!lJfV z?-~ZJu0)|)-IXY^cJBc$p8vST+Wl|nDX8=T)Q*jTyY<@L4aL>@(N~qOZKV}`H@X(N z8X5+U_M%1feb8x0YTuaDR(BnF{b+AZe4^{vHcRxqc;SbChZfJ>ufz*4)|86kWrsji z8!sCJeAjV{bxj#mUeVWeJkPoYM`^rdFDTShPmFG^g;wuAs9cfQet)%fZ8hrcQl^UM z?yv6JYSG2Z-%%`Ml-RuD_}u;7eb(;l;GeDBz7w1GL))x{=sG#xoj^#UZ;)@+?&H|{ z!bM5{mcgA81OME*e>VXE|J3>9+iy|7qz0rlv(kKf5HfT5w#E;>9oldbtBJmR@Ge-! zm3Z`J7#6SWfzB>F0Kdw_!WWTPH*P)hGfi#DDYZXpYFl)*jih#H2NYNvdq-3LF)1I} z$&!UExvyf^p`D<5wD(Z4PTmD#9M3#>aKtFx3G158(5%{?OQu0xh@Lxk!WADk>DT}a znIjr};~_`y-tWSlJC+|W8->d8vI#)6?tK!W!R}R8#!Cu8>Y6ofQuI%$eXGR!t!w*G zZ<i8#7W=m6c2O1BrmXq^yMFm$=v=qu>+aY!#n8uV?f^~DQ~vV8@PaoUePEkS89t1B z|NB=e{l`ZrlefBK3yLfHl<s5EYg2{*V^RYF6(R54jnix?`~vcekXSeNAG#hoO2hN; z30?EZ9)QgP(s<cAP>PL-mvte%q2S1an;XHM+Su#X!XtMB#y<oto{xYb4E*s}Z0vxV zuf#?)4D_B#^_zd9wd8;`AAC)yqhecE?MuKZhOrC4b+xen;OJOUMPI|fQgFiosyB=L z{QR4MxfGZ%GV6iC$D5XOCot!6j&;KjK7+L1tLMy_ZToip;%J*1wN=?G?T)E4q8e9G zIawFjDjgM76%NM?A?%Unh#FSCi-jG|GqX3t!EnOv?`Vs31a+#0^_*paa0E`5GcX>% zrsEB^_=G(i@_SXUu(yTOfUpOeJxyV6FyLwSLjlYQyBb)b3cI&eZE1sgquPmeky8Rs zIMCke^#y`~Hc<10g4zu<^AjgLFA`&O4x2fCXL>o+Kw)=s-v`T#mM~5~2C+BWbG*+~ zAw9D_iM6!~%V2xn4=^1fMXV2=eaZTHUx52PESv3lf5DXZ6QH6cEF(2t0t}4Sr2o8s zV9N0V`_J_-tps~`yd>>;f5H^w6inzp+VH*^Wtd!WVI0HdXM0b;c(Xn4zrGK)*e14L zNQz9IoB=wR*q-Tpkl_l-?aB7O0c|m{A37(*Lb$>D**@EQ2i7;+H<|29$uXv5O&!L5 zb9wD#j~HU&_c~11n<`}7bZsG)!A+|F+iCyKbUG^%HMt|!kv-S{5!o}P*AvN7%=W(| zdq+}3zv1^uQ%!QVPo<_V)-0-M!~R$ndy`nQ5&?;TL_i`S5s(N-1SA3y0f~S_;H*bL zd8V%s8euIQ*ddcdKqBxJLjdOgb~*pQVx2CVD-j?BVE)g5ccpUumm@+VAQ6xVNCYGT IUm*nk2i#1bF8}}l literal 0 HcmV?d00001 diff --git a/lldb/test/API/commands/target/stop-hooks/on-core-load/stop_hook.py b/lldb/test/API/commands/target/stop-hooks/on-core-load/stop_hook.py new file mode 100644 index 0000000000000..ba8215e69dc42 --- /dev/null +++ b/lldb/test/API/commands/target/stop-hooks/on-core-load/stop_hook.py @@ -0,0 +1,28 @@ +import lldb + +def report_command(debugger, command, exe_ctx, result, internal_dict): + global stop_thread + print(f"About to report out stop_thread: {stop_thread}") + mssg = f"Stop Threads: {stop_thread}" + result.AppendMessage(mssg) + + result.SetStatus(lldb.eReturnStatusSuccessFinishResult) + +class stop_handler: + def __init__(self, target, extra_args, dict): + global stop_thread + stop_thead = 0 + self.target = target + + def handle_stop(self, exe_ctx, stream): + global stop_thread + thread = exe_ctx.thread + stop_thread = thread.idx + +def __lldb_init_module(debugger, internal_dict): + global stop_thread + stop_thread = 0 + debugger.HandleCommand( + f"command script add -o -f '{__name__}.report_command' report_command" +) + diff --git a/lldb/test/API/commands/target/stop-hooks/on-core-load/test.core.yaml b/lldb/test/API/commands/target/stop-hooks/on-core-load/test.core.yaml new file mode 100644 index 0000000000000..009c44aa1d1ad --- /dev/null +++ b/lldb/test/API/commands/target/stop-hooks/on-core-load/test.core.yaml @@ -0,0 +1,1056 @@ +--- !mach-o +FileHeader: + magic: 0xFEEDFACF + cputype: 0x01000007 + cpusubtype: 0x00000003 + filetype: 0x00000004 + ncmds: 59 + sizeofcmds: 4384 + flags: 0x00000000 + reserved: 0x00000000 +LoadCommands: + - cmd: LC_THREAD + cmdsize: 208 + PayloadBytes: + - 0x04 + - 0x00 + - 0x00 + - 0x00 + - 0x2A + - 0x00 + - 0x00 + - 0x00 + - 0x01 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x80 + - 0xF7 + - 0xBF + - 0xEF + - 0xFE + - 0x7F + - 0x00 + - 0x00 + - 0x20 + - 0xF6 + - 0xBF + - 0xEF + - 0xFE + - 0x7F + - 0x00 + - 0x00 + - 0x01 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x10 + - 0xF6 + - 0xBF + - 0xEF + - 0xFE + - 0x7F + - 0x00 + - 0x00 + - 0xF0 + - 0xF5 + - 0xBF + - 0xEF + - 0xFE + - 0x7F + - 0x00 + - 0x00 + - 0xF0 + - 0xF5 + - 0xBF + - 0xEF + - 0xFE + - 0x7F + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0xFF + - 0xFF + - 0xFF + - 0xFF + - 0xC8 + - 0xB0 + - 0x70 + - 0xA7 + - 0xFF + - 0x7F + - 0x00 + - 0x00 + - 0xD0 + - 0xB0 + - 0x70 + - 0xA7 + - 0xFF + - 0x7F + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0xA0 + - 0x0F + - 0x00 + - 0x00 + - 0x01 + - 0x00 + - 0x00 + - 0x00 + - 0x46 + - 0x02 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x2B + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x06 + - 0x00 + - 0x00 + - 0x00 + - 0x04 + - 0x00 + - 0x00 + - 0x00 + - 0x03 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x10 + - 0x00 + - 0x02 + - 0xA7 + - 0xFF + - 0x7F + - 0x00 + - 0x00 + - cmd: LC_THREAD + cmdsize: 208 + PayloadBytes: + - 0x04 + - 0x00 + - 0x00 + - 0x00 + - 0x2A + - 0x00 + - 0x00 + - 0x00 + - 0x01 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x80 + - 0xF7 + - 0xBF + - 0xEF + - 0xFE + - 0x7F + - 0x00 + - 0x00 + - 0x20 + - 0xF6 + - 0xBF + - 0xEF + - 0xFE + - 0x7F + - 0x00 + - 0x00 + - 0x01 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x10 + - 0xF6 + - 0xBF + - 0xEF + - 0xFE + - 0x7F + - 0x00 + - 0x00 + - 0xF0 + - 0xF5 + - 0xBF + - 0xEF + - 0xFE + - 0x7F + - 0x00 + - 0x00 + - 0xF0 + - 0xF5 + - 0xBF + - 0xEF + - 0xFE + - 0x7F + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0xFF + - 0xFF + - 0xFF + - 0xFF + - 0xC8 + - 0xB0 + - 0x70 + - 0xA7 + - 0xFF + - 0x7F + - 0x00 + - 0x00 + - 0xD0 + - 0xB0 + - 0x70 + - 0xA7 + - 0xFF + - 0x7F + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0xA0 + - 0x0F + - 0x00 + - 0x00 + - 0x01 + - 0x00 + - 0x00 + - 0x00 + - 0x46 + - 0x02 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x2B + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x06 + - 0x00 + - 0x00 + - 0x00 + - 0x04 + - 0x00 + - 0x00 + - 0x00 + - 0x03 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x00 + - 0x10 + - 0x00 + - 0x02 + - 0xA7 + - 0xFF + - 0x7F + - 0x00 + - 0x00 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4294967296 + vmsize: 4096 + fileoff: 8192 + filesize: 4096 + maxprot: 5 + initprot: 5 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4294971392 + vmsize: 4096 + fileoff: 12288 + filesize: 4096 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4294975488 + vmsize: 307200 + fileoff: 16384 + filesize: 307200 + maxprot: 5 + initprot: 5 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295282688 + vmsize: 12288 + fileoff: 323584 + filesize: 12288 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295294976 + vmsize: 217088 + fileoff: 335872 + filesize: 217088 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295512064 + vmsize: 110592 + fileoff: 552960 + filesize: 110592 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295622656 + vmsize: 8192 + fileoff: 663552 + filesize: 8192 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295630848 + vmsize: 8192 + fileoff: 671744 + filesize: 8192 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295639040 + vmsize: 4096 + fileoff: 679936 + filesize: 4096 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295643136 + vmsize: 4096 + fileoff: 684032 + filesize: 4096 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295651328 + vmsize: 24576 + fileoff: 688128 + filesize: 24576 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295684096 + vmsize: 24576 + fileoff: 712704 + filesize: 24576 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295712768 + vmsize: 4096 + fileoff: 737280 + filesize: 4096 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4295716864 + vmsize: 8192 + fileoff: 741376 + filesize: 8192 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4296015872 + vmsize: 1048576 + fileoff: 749568 + filesize: 1048576 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4297064448 + vmsize: 1048576 + fileoff: 1798144 + filesize: 1048576 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4298113024 + vmsize: 1048576 + fileoff: 2846720 + filesize: 1048576 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 4303355904 + vmsize: 8388608 + fileoff: 3895296 + filesize: 8388608 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140732912369664 + vmsize: 8388608 + fileoff: 12283904 + filesize: 8388608 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140734252867584 + vmsize: 811999232 + fileoff: 20672512 + filesize: 811999232 + maxprot: 5 + initprot: 5 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735863480320 + vmsize: 20553728 + fileoff: 832671744 + filesize: 20553728 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735884034048 + vmsize: 2097152 + fileoff: 853225472 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735886131200 + vmsize: 2097152 + fileoff: 855322624 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735888228352 + vmsize: 2097152 + fileoff: 857419776 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735890325504 + vmsize: 2097152 + fileoff: 859516928 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735892422656 + vmsize: 2097152 + fileoff: 861614080 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735894519808 + vmsize: 2097152 + fileoff: 863711232 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735896616960 + vmsize: 2097152 + fileoff: 865808384 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735898714112 + vmsize: 2097152 + fileoff: 867905536 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735900811264 + vmsize: 2097152 + fileoff: 870002688 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735902908416 + vmsize: 10485760 + fileoff: 872099840 + filesize: 10485760 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735913394176 + vmsize: 4194304 + fileoff: 882585600 + filesize: 4194304 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735917588480 + vmsize: 2097152 + fileoff: 886779904 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735919685632 + vmsize: 2097152 + fileoff: 888877056 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735921782784 + vmsize: 4194304 + fileoff: 890974208 + filesize: 4194304 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735925977088 + vmsize: 4194304 + fileoff: 895168512 + filesize: 4194304 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735930171392 + vmsize: 6291456 + fileoff: 899362816 + filesize: 6291456 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735936462848 + vmsize: 2097152 + fileoff: 905654272 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735938560000 + vmsize: 2097152 + fileoff: 907751424 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735940657152 + vmsize: 2097152 + fileoff: 909848576 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735942754304 + vmsize: 2097152 + fileoff: 911945728 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735944851456 + vmsize: 6291456 + fileoff: 914042880 + filesize: 6291456 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735951142912 + vmsize: 2097152 + fileoff: 920334336 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735953240064 + vmsize: 4194304 + fileoff: 922431488 + filesize: 4194304 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735957434368 + vmsize: 2097152 + fileoff: 926625792 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735959531520 + vmsize: 2097152 + fileoff: 928722944 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735961628672 + vmsize: 20971520 + fileoff: 930820096 + filesize: 20971520 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735982600192 + vmsize: 6291456 + fileoff: 951791616 + filesize: 6291456 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735988891648 + vmsize: 2097152 + fileoff: 958083072 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735990988800 + vmsize: 2097152 + fileoff: 960180224 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735993085952 + vmsize: 2097152 + fileoff: 962277376 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735995183104 + vmsize: 2097152 + fileoff: 964374528 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735997280256 + vmsize: 2097152 + fileoff: 966471680 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140735999377408 + vmsize: 2097152 + fileoff: 968568832 + filesize: 2097152 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140736001474560 + vmsize: 1302528 + fileoff: 970665984 + filesize: 1302528 + maxprot: 3 + initprot: 3 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140736937222144 + vmsize: 219267072 + fileoff: 971968512 + filesize: 219267072 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140737486258176 + vmsize: 4096 + fileoff: 1191235584 + filesize: 4096 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: '' + vmaddr: 140737487028224 + vmsize: 4096 + fileoff: 1191239680 + filesize: 4096 + maxprot: 5 + initprot: 5 + nsects: 0 + flags: 0 +... diff --git a/lldb/test/API/python_api/event/TestEvents.py b/lldb/test/API/python_api/event/TestEvents.py index fb1a7e3bc6d3a..9b73a0e2e1e04 100644 --- a/lldb/test/API/python_api/event/TestEvents.py +++ b/lldb/test/API/python_api/event/TestEvents.py @@ -411,8 +411,9 @@ def test_shadow_listener(self): self.runCmd(f"command script import {stop_hook_path}") import stop_hook + # Add our stop hook here, don't report on the initial attach: self.runCmd( - f"target stop-hook add -P stop_hook.StopHook -k instance -v {self.instance}" + f"target stop-hook add -P stop_hook.StopHook -k instance -v {self.instance} -F false" ) self.stop_counter = 0 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits