mirror of
https://github.com/golang/go
synced 2024-11-12 06:40:22 -07:00
runtime: fix windows build
Add osyield and usleep as required by recent GC changes. R=golang-dev, r, dsymonds, rsc, r CC=golang-dev https://golang.org/cl/5156042
This commit is contained in:
parent
a7a7cc5a55
commit
38d3f58528
@ -31,6 +31,20 @@ enum {
|
||||
// Types
|
||||
#pragma pack on
|
||||
|
||||
typedef struct SystemInfo SystemInfo;
|
||||
struct SystemInfo {
|
||||
byte Pad_godefs_0[4];
|
||||
uint32 dwPageSize;
|
||||
void *lpMinimumApplicationAddress;
|
||||
void *lpMaximumApplicationAddress;
|
||||
uint32 dwActiveProcessorMask;
|
||||
uint32 dwNumberOfProcessors;
|
||||
uint32 dwProcessorType;
|
||||
uint32 dwAllocationGranularity;
|
||||
uint16 wProcessorLevel;
|
||||
uint16 wProcessorRevision;
|
||||
};
|
||||
|
||||
typedef struct ExceptionRecord ExceptionRecord;
|
||||
struct ExceptionRecord {
|
||||
uint32 ExceptionCode;
|
||||
|
@ -31,6 +31,20 @@ enum {
|
||||
// Types
|
||||
#pragma pack on
|
||||
|
||||
typedef struct SystemInfo SystemInfo;
|
||||
struct SystemInfo {
|
||||
byte Pad_godefs_0[4];
|
||||
uint32 dwPageSize;
|
||||
void *lpMinimumApplicationAddress;
|
||||
void *lpMaximumApplicationAddress;
|
||||
uint64 dwActiveProcessorMask;
|
||||
uint32 dwNumberOfProcessors;
|
||||
uint32 dwProcessorType;
|
||||
uint32 dwAllocationGranularity;
|
||||
uint16 wProcessorLevel;
|
||||
uint16 wProcessorRevision;
|
||||
};
|
||||
|
||||
typedef struct ExceptionRecord ExceptionRecord;
|
||||
struct ExceptionRecord {
|
||||
uint32 ExceptionCode;
|
||||
|
@ -38,6 +38,7 @@ enum {
|
||||
$EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW,
|
||||
};
|
||||
|
||||
typedef SYSTEM_INFO $SystemInfo;
|
||||
typedef EXCEPTION_RECORD $ExceptionRecord;
|
||||
#ifdef _X86_
|
||||
typedef FLOATING_SAVE_AREA $FloatingSaveArea;
|
||||
|
@ -17,6 +17,7 @@
|
||||
#pragma dynimport runtime·GetEnvironmentStringsW GetEnvironmentStringsW "kernel32.dll"
|
||||
#pragma dynimport runtime·GetProcAddress GetProcAddress "kernel32.dll"
|
||||
#pragma dynimport runtime·GetStdHandle GetStdHandle "kernel32.dll"
|
||||
#pragma dynimport runtime·GetSystemInfo GetSystemInfo "kernel32.dll"
|
||||
#pragma dynimport runtime·GetThreadContext GetThreadContext "kernel32.dll"
|
||||
#pragma dynimport runtime·LoadLibraryEx LoadLibraryExA "kernel32.dll"
|
||||
#pragma dynimport runtime·QueryPerformanceCounter QueryPerformanceCounter "kernel32.dll"
|
||||
@ -26,6 +27,7 @@
|
||||
#pragma dynimport runtime·SetEvent SetEvent "kernel32.dll"
|
||||
#pragma dynimport runtime·SetThreadPriority SetThreadPriority "kernel32.dll"
|
||||
#pragma dynimport runtime·SetWaitableTimer SetWaitableTimer "kernel32.dll"
|
||||
#pragma dynimport runtime·Sleep Sleep "kernel32.dll"
|
||||
#pragma dynimport runtime·SuspendThread SuspendThread "kernel32.dll"
|
||||
#pragma dynimport runtime·timeBeginPeriod timeBeginPeriod "winmm.dll"
|
||||
#pragma dynimport runtime·WaitForSingleObject WaitForSingleObject "kernel32.dll"
|
||||
@ -41,6 +43,7 @@ extern void *runtime·FreeEnvironmentStringsW;
|
||||
extern void *runtime·GetEnvironmentStringsW;
|
||||
extern void *runtime·GetProcAddress;
|
||||
extern void *runtime·GetStdHandle;
|
||||
extern void *runtime·GetSystemInfo;
|
||||
extern void *runtime·GetThreadContext;
|
||||
extern void *runtime·LoadLibraryEx;
|
||||
extern void *runtime·QueryPerformanceCounter;
|
||||
@ -50,6 +53,7 @@ extern void *runtime·SetConsoleCtrlHandler;
|
||||
extern void *runtime·SetEvent;
|
||||
extern void *runtime·SetThreadPriority;
|
||||
extern void *runtime·SetWaitableTimer;
|
||||
extern void *runtime·Sleep;
|
||||
extern void *runtime·SuspendThread;
|
||||
extern void *runtime·timeBeginPeriod;
|
||||
extern void *runtime·WaitForSingleObject;
|
||||
@ -57,6 +61,15 @@ extern void *runtime·WriteFile;
|
||||
|
||||
static int64 timerfreq;
|
||||
|
||||
static int32
|
||||
getproccount(void)
|
||||
{
|
||||
SystemInfo info;
|
||||
|
||||
runtime·stdcall(runtime·GetSystemInfo, 1, &info);
|
||||
return info.dwNumberOfProcessors;
|
||||
}
|
||||
|
||||
void
|
||||
runtime·osinit(void)
|
||||
{
|
||||
@ -67,6 +80,7 @@ runtime·osinit(void)
|
||||
runtime·stdcall(runtime·QueryPerformanceFrequency, 1, &timerfreq);
|
||||
runtime·stdcall(runtime·SetConsoleCtrlHandler, 2, runtime·ctrlhandler, (uintptr)1);
|
||||
runtime·stdcall(runtime·timeBeginPeriod, 1, (uintptr)1);
|
||||
runtime·ncpu = getproccount();
|
||||
}
|
||||
|
||||
void
|
||||
@ -126,6 +140,21 @@ runtime·write(int32 fd, void *buf, int32 n)
|
||||
return written;
|
||||
}
|
||||
|
||||
void
|
||||
runtime·osyield(void)
|
||||
{
|
||||
runtime·stdcall(runtime·Sleep, 1, (uintptr)0);
|
||||
}
|
||||
|
||||
void
|
||||
runtime·usleep(uint32 us)
|
||||
{
|
||||
us /= 1000;
|
||||
if(us == 0)
|
||||
us = 1;
|
||||
runtime·stdcall(runtime·Sleep, 1, (uintptr)us);
|
||||
}
|
||||
|
||||
// Thread-safe allocation of an event.
|
||||
static void
|
||||
initevent(void **pevent)
|
||||
|
Loading…
Reference in New Issue
Block a user