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 1039de3110SZachary Turner #include "lldb/Core/Log.h" 1139de3110SZachary Turner #include "lldb/Host/HostInfo.h" 1239de3110SZachary Turner #include "lldb/Host/HostNativeThreadBase.h" 1339de3110SZachary Turner #include "lldb/Host/ThisThread.h" 1439de3110SZachary Turner #include "lldb/Host/ThreadLauncher.h" 1539de3110SZachary Turner #include "llvm/ADT/StringExtras.h" 1639de3110SZachary Turner 1739de3110SZachary Turner using namespace lldb; 1839de3110SZachary Turner using namespace lldb_private; 1939de3110SZachary Turner 2039de3110SZachary Turner HostNativeThreadBase::HostNativeThreadBase() 2139de3110SZachary Turner : m_thread(LLDB_INVALID_HOST_THREAD) 2239de3110SZachary Turner , m_result(0) 2339de3110SZachary Turner { 2439de3110SZachary Turner } 2539de3110SZachary Turner 2639de3110SZachary Turner HostNativeThreadBase::HostNativeThreadBase(thread_t thread) 2739de3110SZachary Turner : m_thread(thread) 2839de3110SZachary Turner , m_result(0) 2939de3110SZachary Turner { 3039de3110SZachary Turner } 3139de3110SZachary Turner 3239de3110SZachary Turner lldb::thread_t 3339de3110SZachary Turner HostNativeThreadBase::GetSystemHandle() const 3439de3110SZachary Turner { 3539de3110SZachary Turner return m_thread; 3639de3110SZachary Turner } 3739de3110SZachary Turner 3839de3110SZachary Turner lldb::thread_result_t 3939de3110SZachary Turner HostNativeThreadBase::GetResult() const 4039de3110SZachary Turner { 4139de3110SZachary Turner return m_result; 4239de3110SZachary Turner } 4339de3110SZachary Turner 44*acee96aeSZachary Turner bool 45*acee96aeSZachary Turner HostNativeThreadBase::IsJoinable() const 46*acee96aeSZachary Turner { 47*acee96aeSZachary Turner return m_thread != LLDB_INVALID_HOST_THREAD; 48*acee96aeSZachary Turner } 49*acee96aeSZachary Turner 5039de3110SZachary Turner void 5139de3110SZachary Turner HostNativeThreadBase::Reset() 5239de3110SZachary Turner { 5339de3110SZachary Turner m_thread = LLDB_INVALID_HOST_THREAD; 5439de3110SZachary Turner m_result = 0; 5539de3110SZachary Turner } 5639de3110SZachary Turner 5739de3110SZachary Turner lldb::thread_t 5839de3110SZachary Turner HostNativeThreadBase::Release() 5939de3110SZachary Turner { 6039de3110SZachary Turner lldb::thread_t result = m_thread; 6139de3110SZachary Turner m_thread = LLDB_INVALID_HOST_THREAD; 6239de3110SZachary Turner m_result = 0; 6339de3110SZachary Turner 6439de3110SZachary Turner return result; 6539de3110SZachary Turner } 6639de3110SZachary Turner 6739de3110SZachary Turner lldb::thread_result_t 6839de3110SZachary Turner HostNativeThreadBase::ThreadCreateTrampoline(lldb::thread_arg_t arg) 6939de3110SZachary Turner { 7039de3110SZachary Turner ThreadLauncher::HostThreadCreateInfo *info = (ThreadLauncher::HostThreadCreateInfo *)arg; 7139de3110SZachary Turner ThisThread::SetName(info->thread_name.c_str(), HostInfo::GetMaxThreadNameLength()); 7239de3110SZachary Turner 7339de3110SZachary Turner thread_func_t thread_fptr = info->thread_fptr; 7439de3110SZachary Turner thread_arg_t thread_arg = info->thread_arg; 7539de3110SZachary Turner 7639de3110SZachary Turner Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_THREAD)); 7739de3110SZachary Turner if (log) 7839de3110SZachary Turner log->Printf("thread created"); 7939de3110SZachary Turner 8039de3110SZachary Turner delete info; 8139de3110SZachary Turner return thread_fptr(thread_arg); 8239de3110SZachary Turner } 83