xref: /llvm-project/lldb/source/Host/common/HostNativeThreadBase.cpp (revision 28c878aeb29a7e7a9ae8f748de6a3c41482b97be)
180814287SRaphael Isemann //===-- HostNativeThreadBase.cpp ------------------------------------------===//
239de3110SZachary Turner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
639de3110SZachary Turner //
739de3110SZachary Turner //===----------------------------------------------------------------------===//
839de3110SZachary Turner 
9b9c1b51eSKate Stone #include "lldb/Host/HostNativeThreadBase.h"
1039de3110SZachary Turner #include "lldb/Host/HostInfo.h"
1139de3110SZachary Turner #include "lldb/Host/ThreadLauncher.h"
12c34698a8SPavel Labath #include "lldb/Utility/LLDBLog.h"
136f9e6901SZachary Turner #include "lldb/Utility/Log.h"
14ed96be99SZachary Turner 
1539de3110SZachary Turner #include "llvm/ADT/StringExtras.h"
16ed96be99SZachary Turner #include "llvm/Support/Threading.h"
1739de3110SZachary Turner 
1839de3110SZachary Turner using namespace lldb;
1939de3110SZachary Turner using namespace lldb_private;
2039de3110SZachary Turner 
HostNativeThreadBase(thread_t thread)2139de3110SZachary Turner HostNativeThreadBase::HostNativeThreadBase(thread_t thread)
22*28c878aeSShafik Yaghmour     : m_thread(thread) {}
2339de3110SZachary Turner 
GetSystemHandle() const24b9c1b51eSKate Stone lldb::thread_t HostNativeThreadBase::GetSystemHandle() const {
2539de3110SZachary Turner   return m_thread;
2639de3110SZachary Turner }
2739de3110SZachary Turner 
GetResult() const28b9c1b51eSKate Stone lldb::thread_result_t HostNativeThreadBase::GetResult() const {
2939de3110SZachary Turner   return m_result;
3039de3110SZachary Turner }
3139de3110SZachary Turner 
IsJoinable() const32b9c1b51eSKate Stone bool HostNativeThreadBase::IsJoinable() const {
33acee96aeSZachary Turner   return m_thread != LLDB_INVALID_HOST_THREAD;
34acee96aeSZachary Turner }
35acee96aeSZachary Turner 
Reset()36b9c1b51eSKate Stone void HostNativeThreadBase::Reset() {
3739de3110SZachary Turner   m_thread = LLDB_INVALID_HOST_THREAD;
388b649f98SKazu Hirata   m_result = 0; // NOLINT(modernize-use-nullptr)
3939de3110SZachary Turner }
4039de3110SZachary Turner 
EqualsThread(lldb::thread_t thread) const4164c92df7SAleksandr Urakov bool HostNativeThreadBase::EqualsThread(lldb::thread_t thread) const {
4264c92df7SAleksandr Urakov   return m_thread == thread;
4364c92df7SAleksandr Urakov }
4464c92df7SAleksandr Urakov 
Release()45b9c1b51eSKate Stone lldb::thread_t HostNativeThreadBase::Release() {
4639de3110SZachary Turner   lldb::thread_t result = m_thread;
4739de3110SZachary Turner   m_thread = LLDB_INVALID_HOST_THREAD;
488b649f98SKazu Hirata   m_result = 0; // NOLINT(modernize-use-nullptr)
4939de3110SZachary Turner 
5039de3110SZachary Turner   return result;
5139de3110SZachary Turner }
5239de3110SZachary Turner 
5339de3110SZachary Turner lldb::thread_result_t
ThreadCreateTrampoline(lldb::thread_arg_t arg)54b9c1b51eSKate Stone HostNativeThreadBase::ThreadCreateTrampoline(lldb::thread_arg_t arg) {
55d0810779SPavel Labath   std::unique_ptr<ThreadLauncher::HostThreadCreateInfo> info_up(
56d0810779SPavel Labath       (ThreadLauncher::HostThreadCreateInfo *)arg);
57d0810779SPavel Labath   llvm::set_thread_name(info_up->thread_name);
5839de3110SZachary Turner 
59a007a6d8SPavel Labath   Log *log = GetLog(LLDBLog::Thread);
6063e5fb76SJonas Devlieghere   LLDB_LOGF(log, "thread created");
6139de3110SZachary Turner 
62d0810779SPavel Labath   return info_up->impl();
6339de3110SZachary Turner }
64