1b842f2ecSJim Ingham //===-- SBBreakpointName.cpp ----------------------------------------*- C++ -*-===// 2b842f2ecSJim Ingham // 3b842f2ecSJim Ingham // The LLVM Compiler Infrastructure 4b842f2ecSJim Ingham // 5b842f2ecSJim Ingham // This file is distributed under the University of Illinois Open Source 6b842f2ecSJim Ingham // License. See LICENSE.TXT for details. 7b842f2ecSJim Ingham // 8b842f2ecSJim Ingham //===----------------------------------------------------------------------===// 9b842f2ecSJim Ingham 10b842f2ecSJim Ingham // C Includes 11b842f2ecSJim Ingham // C++ Includes 12b842f2ecSJim Ingham // Other libraries and framework includes 13b842f2ecSJim Ingham // Project includes 14b842f2ecSJim Ingham #include "lldb/API/SBBreakpointName.h" 15b842f2ecSJim Ingham #include "lldb/API/SBBreakpointLocation.h" 16b842f2ecSJim Ingham #include "lldb/API/SBDebugger.h" 17b842f2ecSJim Ingham #include "lldb/API/SBEvent.h" 18b842f2ecSJim Ingham #include "lldb/API/SBProcess.h" 19b842f2ecSJim Ingham #include "lldb/API/SBStream.h" 20b842f2ecSJim Ingham #include "lldb/API/SBStringList.h" 21b842f2ecSJim Ingham #include "lldb/API/SBThread.h" 22b842f2ecSJim Ingham 23b842f2ecSJim Ingham #include "lldb/Breakpoint/BreakpointName.h" 24b842f2ecSJim Ingham #include "lldb/Breakpoint/StoppointCallbackContext.h" 25b842f2ecSJim Ingham #include "lldb/Core/Address.h" 26b842f2ecSJim Ingham #include "lldb/Core/Debugger.h" 27b842f2ecSJim Ingham #include "lldb/Core/StreamFile.h" 28b842f2ecSJim Ingham #include "lldb/Interpreter/CommandInterpreter.h" 29b842f2ecSJim Ingham #include "lldb/Interpreter/ScriptInterpreter.h" 30b842f2ecSJim Ingham #include "lldb/Target/Process.h" 31b842f2ecSJim Ingham #include "lldb/Target/Target.h" 32b842f2ecSJim Ingham #include "lldb/Target/Thread.h" 33b842f2ecSJim Ingham #include "lldb/Target/ThreadSpec.h" 34b842f2ecSJim Ingham #include "lldb/Utility/Log.h" 35b842f2ecSJim Ingham #include "lldb/Utility/Stream.h" 36b842f2ecSJim Ingham 37b842f2ecSJim Ingham #include "lldb/lldb-enumerations.h" 38b842f2ecSJim Ingham 39b842f2ecSJim Ingham #include "SBBreakpointOptionCommon.h" 40b842f2ecSJim Ingham 41b842f2ecSJim Ingham #include "llvm/ADT/STLExtras.h" 42b842f2ecSJim Ingham 43b842f2ecSJim Ingham using namespace lldb; 44b842f2ecSJim Ingham using namespace lldb_private; 45b842f2ecSJim Ingham 46b842f2ecSJim Ingham SBBreakpointCallbackBaton::SBBreakpointCallbackBaton(SBBreakpointHitCallback 47b842f2ecSJim Ingham callback, 48b842f2ecSJim Ingham void *baton) 49b842f2ecSJim Ingham : TypedBaton(llvm::make_unique<CallbackData>()) { 50b842f2ecSJim Ingham getItem()->callback = callback; 51b842f2ecSJim Ingham getItem()->callback_baton = baton; 52b842f2ecSJim Ingham } 53b842f2ecSJim Ingham 54b842f2ecSJim Ingham bool SBBreakpointCallbackBaton::PrivateBreakpointHitCallback(void *baton, 55b842f2ecSJim Ingham StoppointCallbackContext *ctx, 56b842f2ecSJim Ingham lldb::user_id_t break_id, 57b842f2ecSJim Ingham lldb::user_id_t break_loc_id) 58b842f2ecSJim Ingham { 59b842f2ecSJim Ingham ExecutionContext exe_ctx(ctx->exe_ctx_ref); 60b842f2ecSJim Ingham BreakpointSP bp_sp( 61b842f2ecSJim Ingham exe_ctx.GetTargetRef().GetBreakpointList().FindBreakpointByID(break_id)); 62b842f2ecSJim Ingham if (baton && bp_sp) { 63b842f2ecSJim Ingham CallbackData *data = (CallbackData *)baton; 64b842f2ecSJim Ingham lldb_private::Breakpoint *bp = bp_sp.get(); 65b842f2ecSJim Ingham if (bp && data->callback) { 66b842f2ecSJim Ingham Process *process = exe_ctx.GetProcessPtr(); 67b842f2ecSJim Ingham if (process) { 68b842f2ecSJim Ingham SBProcess sb_process(process->shared_from_this()); 69b842f2ecSJim Ingham SBThread sb_thread; 70b842f2ecSJim Ingham SBBreakpointLocation sb_location; 71b842f2ecSJim Ingham assert(bp_sp); 72b842f2ecSJim Ingham sb_location.SetLocation(bp_sp->FindLocationByID(break_loc_id)); 73b842f2ecSJim Ingham Thread *thread = exe_ctx.GetThreadPtr(); 74b842f2ecSJim Ingham if (thread) 75b842f2ecSJim Ingham sb_thread.SetThread(thread->shared_from_this()); 76b842f2ecSJim Ingham 77b842f2ecSJim Ingham return data->callback(data->callback_baton, sb_process, sb_thread, 78b842f2ecSJim Ingham sb_location); 79b842f2ecSJim Ingham } 80b842f2ecSJim Ingham } 81b842f2ecSJim Ingham } 82b842f2ecSJim Ingham return true; // Return true if we should stop at this breakpoint 83b842f2ecSJim Ingham } 84b842f2ecSJim Ingham 85*e2564051SDavide Italiano SBBreakpointCallbackBaton::~SBBreakpointCallbackBaton() = default; 86