15ffd83dbSDimitry Andric //===-- HostNativeThreadBase.cpp ------------------------------------------===// 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 90b57cec5SDimitry Andric #include "lldb/Host/HostNativeThreadBase.h" 100b57cec5SDimitry Andric #include "lldb/Host/HostInfo.h" 110b57cec5SDimitry Andric #include "lldb/Host/ThreadLauncher.h" 12*81ad6265SDimitry Andric #include "lldb/Utility/LLDBLog.h" 130b57cec5SDimitry Andric #include "lldb/Utility/Log.h" 140b57cec5SDimitry Andric 150b57cec5SDimitry Andric #include "llvm/ADT/StringExtras.h" 160b57cec5SDimitry Andric #include "llvm/Support/Threading.h" 170b57cec5SDimitry Andric 180b57cec5SDimitry Andric using namespace lldb; 190b57cec5SDimitry Andric using namespace lldb_private; 200b57cec5SDimitry Andric HostNativeThreadBase(thread_t thread)210b57cec5SDimitry AndricHostNativeThreadBase::HostNativeThreadBase(thread_t thread) 22*81ad6265SDimitry Andric : m_thread(thread) {} 230b57cec5SDimitry Andric GetSystemHandle() const240b57cec5SDimitry Andriclldb::thread_t HostNativeThreadBase::GetSystemHandle() const { 250b57cec5SDimitry Andric return m_thread; 260b57cec5SDimitry Andric } 270b57cec5SDimitry Andric GetResult() const280b57cec5SDimitry Andriclldb::thread_result_t HostNativeThreadBase::GetResult() const { 290b57cec5SDimitry Andric return m_result; 300b57cec5SDimitry Andric } 310b57cec5SDimitry Andric IsJoinable() const320b57cec5SDimitry Andricbool HostNativeThreadBase::IsJoinable() const { 330b57cec5SDimitry Andric return m_thread != LLDB_INVALID_HOST_THREAD; 340b57cec5SDimitry Andric } 350b57cec5SDimitry Andric Reset()360b57cec5SDimitry Andricvoid HostNativeThreadBase::Reset() { 370b57cec5SDimitry Andric m_thread = LLDB_INVALID_HOST_THREAD; 3804eeddc0SDimitry Andric m_result = 0; // NOLINT(modernize-use-nullptr) 390b57cec5SDimitry Andric } 400b57cec5SDimitry Andric EqualsThread(lldb::thread_t thread) const410b57cec5SDimitry Andricbool HostNativeThreadBase::EqualsThread(lldb::thread_t thread) const { 420b57cec5SDimitry Andric return m_thread == thread; 430b57cec5SDimitry Andric } 440b57cec5SDimitry Andric Release()450b57cec5SDimitry Andriclldb::thread_t HostNativeThreadBase::Release() { 460b57cec5SDimitry Andric lldb::thread_t result = m_thread; 470b57cec5SDimitry Andric m_thread = LLDB_INVALID_HOST_THREAD; 4804eeddc0SDimitry Andric m_result = 0; // NOLINT(modernize-use-nullptr) 490b57cec5SDimitry Andric 500b57cec5SDimitry Andric return result; 510b57cec5SDimitry Andric } 520b57cec5SDimitry Andric 530b57cec5SDimitry Andric lldb::thread_result_t ThreadCreateTrampoline(lldb::thread_arg_t arg)540b57cec5SDimitry AndricHostNativeThreadBase::ThreadCreateTrampoline(lldb::thread_arg_t arg) { 55*81ad6265SDimitry Andric std::unique_ptr<ThreadLauncher::HostThreadCreateInfo> info_up( 56*81ad6265SDimitry Andric (ThreadLauncher::HostThreadCreateInfo *)arg); 57*81ad6265SDimitry Andric llvm::set_thread_name(info_up->thread_name); 580b57cec5SDimitry Andric 59*81ad6265SDimitry Andric Log *log = GetLog(LLDBLog::Thread); 609dba64beSDimitry Andric LLDB_LOGF(log, "thread created"); 610b57cec5SDimitry Andric 62*81ad6265SDimitry Andric return info_up->impl(); 630b57cec5SDimitry Andric } 64