10eae32dcSDimitry Andric //===-- ThreadFreeBSDKernel.h ------------------------------------- C++ -*-===// 20eae32dcSDimitry Andric // 30eae32dcSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40eae32dcSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50eae32dcSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60eae32dcSDimitry Andric // 70eae32dcSDimitry Andric //===----------------------------------------------------------------------===// 80eae32dcSDimitry Andric 90eae32dcSDimitry Andric #ifndef LLDB_SOURCE_PLUGINS_PROCESS_FREEBSDKERNEL_THREADFREEBSDKERNEL_H 100eae32dcSDimitry Andric #define LLDB_SOURCE_PLUGINS_PROCESS_FREEBSDKERNEL_THREADFREEBSDKERNEL_H 110eae32dcSDimitry Andric 120eae32dcSDimitry Andric #include "lldb/Target/Thread.h" 130eae32dcSDimitry Andric 140eae32dcSDimitry Andric class ThreadFreeBSDKernel : public lldb_private::Thread { 150eae32dcSDimitry Andric public: 160eae32dcSDimitry Andric ThreadFreeBSDKernel(lldb_private::Process &process, lldb::tid_t tid, 17*04eeddc0SDimitry Andric lldb::addr_t pcb_addr, std::string thread_name); 180eae32dcSDimitry Andric 190eae32dcSDimitry Andric ~ThreadFreeBSDKernel() override; 200eae32dcSDimitry Andric 210eae32dcSDimitry Andric void RefreshStateAfterStop() override; 220eae32dcSDimitry Andric 230eae32dcSDimitry Andric lldb::RegisterContextSP GetRegisterContext() override; 240eae32dcSDimitry Andric 250eae32dcSDimitry Andric lldb::RegisterContextSP 260eae32dcSDimitry Andric CreateRegisterContextForFrame(lldb_private::StackFrame *frame) override; 270eae32dcSDimitry Andric GetName()28*04eeddc0SDimitry Andric const char *GetName() override { 29*04eeddc0SDimitry Andric if (m_thread_name.empty()) 30*04eeddc0SDimitry Andric return nullptr; 31*04eeddc0SDimitry Andric return m_thread_name.c_str(); 32*04eeddc0SDimitry Andric } 33*04eeddc0SDimitry Andric SetName(const char * name)34*04eeddc0SDimitry Andric void SetName(const char *name) override { 35*04eeddc0SDimitry Andric if (name && name[0]) 36*04eeddc0SDimitry Andric m_thread_name.assign(name); 37*04eeddc0SDimitry Andric else 38*04eeddc0SDimitry Andric m_thread_name.clear(); 39*04eeddc0SDimitry Andric } 40*04eeddc0SDimitry Andric 410eae32dcSDimitry Andric protected: 420eae32dcSDimitry Andric bool CalculateStopInfo() override; 430eae32dcSDimitry Andric 440eae32dcSDimitry Andric private: 45*04eeddc0SDimitry Andric std::string m_thread_name; 460eae32dcSDimitry Andric lldb::RegisterContextSP m_thread_reg_ctx_sp; 470eae32dcSDimitry Andric lldb::addr_t m_pcb_addr; 480eae32dcSDimitry Andric }; 490eae32dcSDimitry Andric 500eae32dcSDimitry Andric #endif // LLDB_SOURCE_PLUGINS_PROCESS_FREEBSDKERNEL_THREADFREEBSDKERNEL_H 51