xref: /freebsd-src/contrib/llvm-project/lldb/include/lldb/Host/HostNativeThreadBase.h (revision 04eeddc0aa8e0a417a16eaf9d7d095207f4a8623)
10b57cec5SDimitry Andric //===-- HostNativeThreadBase.h ----------------------------------*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
95ffd83dbSDimitry Andric #ifndef LLDB_HOST_HOSTNATIVETHREADBASE_H
105ffd83dbSDimitry Andric #define LLDB_HOST_HOSTNATIVETHREADBASE_H
110b57cec5SDimitry Andric 
120b57cec5SDimitry Andric #include "lldb/Utility/Status.h"
130b57cec5SDimitry Andric #include "lldb/lldb-defines.h"
140b57cec5SDimitry Andric #include "lldb/lldb-types.h"
150b57cec5SDimitry Andric 
160b57cec5SDimitry Andric namespace lldb_private {
170b57cec5SDimitry Andric 
180b57cec5SDimitry Andric #if defined(_WIN32)
190b57cec5SDimitry Andric #define THREAD_ROUTINE __stdcall
200b57cec5SDimitry Andric #else
210b57cec5SDimitry Andric #define THREAD_ROUTINE
220b57cec5SDimitry Andric #endif
230b57cec5SDimitry Andric 
240b57cec5SDimitry Andric class HostNativeThreadBase {
250b57cec5SDimitry Andric   friend class ThreadLauncher;
265ffd83dbSDimitry Andric   HostNativeThreadBase(const HostNativeThreadBase &) = delete;
275ffd83dbSDimitry Andric   const HostNativeThreadBase &operator=(const HostNativeThreadBase &) = delete;
280b57cec5SDimitry Andric 
290b57cec5SDimitry Andric public:
30fe6060f1SDimitry Andric   HostNativeThreadBase() = default;
310b57cec5SDimitry Andric   explicit HostNativeThreadBase(lldb::thread_t thread);
32fe6060f1SDimitry Andric   virtual ~HostNativeThreadBase() = default;
330b57cec5SDimitry Andric 
340b57cec5SDimitry Andric   virtual Status Join(lldb::thread_result_t *result) = 0;
350b57cec5SDimitry Andric   virtual Status Cancel() = 0;
360b57cec5SDimitry Andric   virtual bool IsJoinable() const;
370b57cec5SDimitry Andric   virtual void Reset();
380b57cec5SDimitry Andric   virtual bool EqualsThread(lldb::thread_t thread) const;
390b57cec5SDimitry Andric   lldb::thread_t Release();
400b57cec5SDimitry Andric 
410b57cec5SDimitry Andric   lldb::thread_t GetSystemHandle() const;
420b57cec5SDimitry Andric   lldb::thread_result_t GetResult() const;
430b57cec5SDimitry Andric 
440b57cec5SDimitry Andric protected:
450b57cec5SDimitry Andric   static lldb::thread_result_t THREAD_ROUTINE
460b57cec5SDimitry Andric   ThreadCreateTrampoline(lldb::thread_arg_t arg);
470b57cec5SDimitry Andric 
48fe6060f1SDimitry Andric   lldb::thread_t m_thread = LLDB_INVALID_HOST_THREAD;
49*04eeddc0SDimitry Andric   lldb::thread_result_t m_result = 0; // NOLINT(modernize-use-nullptr)
500b57cec5SDimitry Andric };
510b57cec5SDimitry Andric }
520b57cec5SDimitry Andric 
530b57cec5SDimitry Andric #endif
54