245 lines
4.5 KiB
C++
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;
|
|
} |