xref: /freebsd-src/contrib/llvm-project/lldb/source/Plugins/Process/FreeBSDKernel/ThreadFreeBSDKernel.h (revision 04eeddc0aa8e0a417a16eaf9d7d095207f4a8623)
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