//===-- source/Host/windows/Host.cpp ----------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // C Includes #include #include "lldb/Host/windows/windows.h" // C++ Includes // Other libraries and framework includes // Project includes #include "lldb/Core/Error.h" #include "lldb/Core/Log.h" #include "lldb/Target/Process.h" #include "lldb/Host/Host.h" #include "lldb/Core/DataBufferHeap.h" #include "lldb/Core/DataExtractor.h" using namespace lldb; using namespace lldb_private; bool Host::GetOSVersion(uint32_t &major, uint32_t &minor, uint32_t &update) { OSVERSIONINFOEX info; ZeroMemory(&info, sizeof(OSVERSIONINFOEX)); info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if (GetVersionEx((LPOSVERSIONINFO) &info) == 0) { return false; } major = (uint32_t) info.dwMajorVersion; minor = (uint32_t) info.dwMinorVersion; update = (uint32_t) info.wServicePackMajor; return true; } Error Host::LaunchProcess (ProcessLaunchInfo &launch_info) { Error error; assert(!"Not implemented yet!!!"); return error; } lldb::DataBufferSP Host::GetAuxvData(lldb_private::Process *process) { return 0; } std::string Host::GetThreadName (lldb::pid_t pid, lldb::tid_t tid) { return std::string(); } lldb::tid_t Host::GetCurrentThreadID() { return lldb::tid_t(::GetCurrentThreadId()); } lldb::thread_t Host::GetCurrentThread () { return lldb::thread_t(::GetCurrentThread()); } bool Host::ThreadCancel (lldb::thread_t thread, Error *error) { int err = ::TerminateThread((HANDLE)thread, 0); return err == 0; } bool Host::ThreadDetach (lldb::thread_t thread, Error *error) { return ThreadCancel(thread, error); } bool Host::ThreadJoin (lldb::thread_t thread, thread_result_t *thread_result_ptr, Error *error) { WaitForSingleObject((HANDLE) thread, INFINITE); return true; } lldb::thread_key_t Host::ThreadLocalStorageCreate(ThreadLocalStorageCleanupCallback callback) { return TlsAlloc(); } void* Host::ThreadLocalStorageGet(lldb::thread_key_t key) { return ::TlsGetValue (key); } void Host::ThreadLocalStorageSet(lldb::thread_key_t key, void *value) { ::TlsSetValue (key, value); } bool Host::SetThreadName (lldb::pid_t pid, lldb::tid_t tid, const char *name) { return false; } bool Host::SetShortThreadName (lldb::pid_t pid, lldb::tid_t tid, const char *thread_name, size_t len) { return false; } void Host::Kill(lldb::pid_t pid, int signo) { TerminateProcess((HANDLE) pid, 1); } uint32_t Host::GetNumberCPUS() { static uint32_t g_num_cores = UINT32_MAX; if (g_num_cores == UINT32_MAX) { SYSTEM_INFO system_info; ::GetSystemInfo(&system_info); g_num_cores = system_info.dwNumberOfProcessors; } return g_num_cores; } size_t Host::GetPageSize() { static long g_pagesize = 0; if (!g_pagesize) { SYSTEM_INFO systemInfo; GetNativeSystemInfo(&systemInfo); g_pagesize = systemInfo.dwPageSize; } return g_pagesize; } const char * Host::GetSignalAsCString(int signo) { return NULL; } FileSpec Host::GetModuleFileSpecForHostAddress (const void *host_addr) { FileSpec module_filespec; return module_filespec; } void * Host::DynamicLibraryOpen(const FileSpec &file_spec, uint32_t options, Error &error) { error.SetErrorString("not implemented"); return NULL; } Error Host::DynamicLibraryClose (void *opaque) { Error error; error.SetErrorString("not implemented"); return error; } void * Host::DynamicLibraryGetSymbol(void *opaque, const char *symbol_name, Error &error) { error.SetErrorString("not implemented"); return NULL; } const char * Host::GetUserName (uint32_t uid, std::string &user_name) { return NULL; } const char * Host::GetGroupName (uint32_t gid, std::string &group_name) { return NULL; } uint32_t Host::GetUserID () { return 0; } uint32_t Host::GetGroupID () { return 0; } uint32_t Host::GetEffectiveUserID () { return 0; } uint32_t Host::GetEffectiveGroupID () { return 0; } lldb::thread_t Host::StartMonitoringChildProcess ( Host::MonitorChildProcessCallback callback, void *callback_baton, lldb::pid_t pid, bool monitor_signals ) { return LLDB_INVALID_HOST_THREAD; }