139de3110SZachary Turner //===-- HostNativeThreadBase.cpp --------------------------------*- C++ -*-===//
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"
126f9e6901SZachary Turner #include "lldb/Utility/Log.h"
13ed96be99SZachary Turner 
1439de3110SZachary Turner #include "llvm/ADT/StringExtras.h"
15ed96be99SZachary Turner #include "llvm/Support/Threading.h"
1639de3110SZachary Turner 
1739de3110SZachary Turner using namespace lldb;
1839de3110SZachary Turner using namespace lldb_private;
1939de3110SZachary Turner 
2039de3110SZachary Turner HostNativeThreadBase::HostNativeThreadBase()
21ecd11153SJonas Devlieghere     : m_thread(LLDB_INVALID_HOST_THREAD), m_result(0) {}
2239de3110SZachary Turner 
2339de3110SZachary Turner HostNativeThreadBase::HostNativeThreadBase(thread_t thread)
24ecd11153SJonas Devlieghere     : m_thread(thread), m_result(0) {}
2539de3110SZachary Turner 
26b9c1b51eSKate Stone lldb::thread_t HostNativeThreadBase::GetSystemHandle() const {
2739de3110SZachary Turner   return m_thread;
2839de3110SZachary Turner }
2939de3110SZachary Turner 
30b9c1b51eSKate Stone lldb::thread_result_t HostNativeThreadBase::GetResult() const {
3139de3110SZachary Turner   return m_result;
3239de3110SZachary Turner }
3339de3110SZachary Turner 
34b9c1b51eSKate Stone bool HostNativeThreadBase::IsJoinable() const {
35acee96aeSZachary Turner   return m_thread != LLDB_INVALID_HOST_THREAD;
36acee96aeSZachary Turner }
37acee96aeSZachary Turner 
38b9c1b51eSKate Stone void HostNativeThreadBase::Reset() {
3939de3110SZachary Turner   m_thread = LLDB_INVALID_HOST_THREAD;
40ecd11153SJonas Devlieghere   m_result = 0;
4139de3110SZachary Turner }
4239de3110SZachary Turner 
4364c92df7SAleksandr Urakov bool HostNativeThreadBase::EqualsThread(lldb::thread_t thread) const {
4464c92df7SAleksandr Urakov   return m_thread == thread;
4564c92df7SAleksandr Urakov }
4664c92df7SAleksandr Urakov 
47b9c1b51eSKate Stone lldb::thread_t HostNativeThreadBase::Release() {
4839de3110SZachary Turner   lldb::thread_t result = m_thread;
4939de3110SZachary Turner   m_thread = LLDB_INVALID_HOST_THREAD;
50ecd11153SJonas Devlieghere   m_result = 0;
5139de3110SZachary Turner 
5239de3110SZachary Turner   return result;
5339de3110SZachary Turner }
5439de3110SZachary Turner 
5539de3110SZachary Turner lldb::thread_result_t
56b9c1b51eSKate Stone HostNativeThreadBase::ThreadCreateTrampoline(lldb::thread_arg_t arg) {
57b9c1b51eSKate Stone   ThreadLauncher::HostThreadCreateInfo *info =
58b9c1b51eSKate Stone       (ThreadLauncher::HostThreadCreateInfo *)arg;
59ed96be99SZachary Turner   llvm::set_thread_name(info->thread_name);
6039de3110SZachary Turner 
6139de3110SZachary Turner   thread_func_t thread_fptr = info->thread_fptr;
6239de3110SZachary Turner   thread_arg_t thread_arg = info->thread_arg;
6339de3110SZachary Turner 
6439de3110SZachary Turner   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_THREAD));
65*63e5fb76SJonas Devlieghere   LLDB_LOGF(log, "thread created");
6639de3110SZachary Turner 
6739de3110SZachary Turner   delete info;
6839de3110SZachary Turner   return thread_fptr(thread_arg);
6939de3110SZachary Turner }
70