139de3110SZachary Turner //===-- HostNativeThreadBase.cpp --------------------------------*- C++ -*-===// 239de3110SZachary Turner // 339de3110SZachary Turner // The LLVM Compiler Infrastructure 439de3110SZachary Turner // 539de3110SZachary Turner // This file is distributed under the University of Illinois Open Source 639de3110SZachary Turner // License. See LICENSE.TXT for details. 739de3110SZachary Turner // 839de3110SZachary Turner //===----------------------------------------------------------------------===// 939de3110SZachary Turner 10b9c1b51eSKate Stone #include "lldb/Host/HostNativeThreadBase.h" 1139de3110SZachary Turner #include "lldb/Host/HostInfo.h" 1239de3110SZachary Turner #include "lldb/Host/ThreadLauncher.h" 136f9e6901SZachary Turner #include "lldb/Utility/Log.h" 14*ed96be99SZachary Turner 1539de3110SZachary Turner #include "llvm/ADT/StringExtras.h" 16*ed96be99SZachary Turner #include "llvm/Support/Threading.h" 1739de3110SZachary Turner 1839de3110SZachary Turner using namespace lldb; 1939de3110SZachary Turner using namespace lldb_private; 2039de3110SZachary Turner 2139de3110SZachary Turner HostNativeThreadBase::HostNativeThreadBase() 22b9c1b51eSKate Stone : m_thread(LLDB_INVALID_HOST_THREAD), m_result(0) {} 2339de3110SZachary Turner 2439de3110SZachary Turner HostNativeThreadBase::HostNativeThreadBase(thread_t thread) 25b9c1b51eSKate Stone : m_thread(thread), m_result(0) {} 2639de3110SZachary Turner 27b9c1b51eSKate Stone lldb::thread_t HostNativeThreadBase::GetSystemHandle() const { 2839de3110SZachary Turner return m_thread; 2939de3110SZachary Turner } 3039de3110SZachary Turner 31b9c1b51eSKate Stone lldb::thread_result_t HostNativeThreadBase::GetResult() const { 3239de3110SZachary Turner return m_result; 3339de3110SZachary Turner } 3439de3110SZachary Turner 35b9c1b51eSKate Stone bool HostNativeThreadBase::IsJoinable() const { 36acee96aeSZachary Turner return m_thread != LLDB_INVALID_HOST_THREAD; 37acee96aeSZachary Turner } 38acee96aeSZachary Turner 39b9c1b51eSKate Stone void HostNativeThreadBase::Reset() { 4039de3110SZachary Turner m_thread = LLDB_INVALID_HOST_THREAD; 4139de3110SZachary Turner m_result = 0; 4239de3110SZachary Turner } 4339de3110SZachary Turner 44b9c1b51eSKate Stone lldb::thread_t HostNativeThreadBase::Release() { 4539de3110SZachary Turner lldb::thread_t result = m_thread; 4639de3110SZachary Turner m_thread = LLDB_INVALID_HOST_THREAD; 4739de3110SZachary Turner m_result = 0; 4839de3110SZachary Turner 4939de3110SZachary Turner return result; 5039de3110SZachary Turner } 5139de3110SZachary Turner 5239de3110SZachary Turner lldb::thread_result_t 53b9c1b51eSKate Stone HostNativeThreadBase::ThreadCreateTrampoline(lldb::thread_arg_t arg) { 54b9c1b51eSKate Stone ThreadLauncher::HostThreadCreateInfo *info = 55b9c1b51eSKate Stone (ThreadLauncher::HostThreadCreateInfo *)arg; 56*ed96be99SZachary Turner llvm::set_thread_name(info->thread_name); 5739de3110SZachary Turner 5839de3110SZachary Turner thread_func_t thread_fptr = info->thread_fptr; 5939de3110SZachary Turner thread_arg_t thread_arg = info->thread_arg; 6039de3110SZachary Turner 6139de3110SZachary Turner Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_THREAD)); 6239de3110SZachary Turner if (log) 6339de3110SZachary Turner log->Printf("thread created"); 6439de3110SZachary Turner 6539de3110SZachary Turner delete info; 6639de3110SZachary Turner return thread_fptr(thread_arg); 6739de3110SZachary Turner } 68