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