llvm-project/lldb/source/Host/windows/Host.cpp

245 lines
4.5 KiB
C++

//===-- 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 <stdio.h>
#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;
}