mirror of
https://github.com/golang/go
synced 2024-09-25 01:20:13 -06: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
|
// Types
|
||||||
#pragma pack on
|
#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;
|
typedef struct ExceptionRecord ExceptionRecord;
|
||||||
struct ExceptionRecord {
|
struct ExceptionRecord {
|
||||||
uint32 ExceptionCode;
|
uint32 ExceptionCode;
|
||||||
|
@ -31,6 +31,20 @@ enum {
|
|||||||
// Types
|
// Types
|
||||||
#pragma pack on
|
#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;
|
typedef struct ExceptionRecord ExceptionRecord;
|
||||||
struct ExceptionRecord {
|
struct ExceptionRecord {
|
||||||
uint32 ExceptionCode;
|
uint32 ExceptionCode;
|
||||||
|
@ -38,6 +38,7 @@ enum {
|
|||||||
$EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW,
|
$EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef SYSTEM_INFO $SystemInfo;
|
||||||
typedef EXCEPTION_RECORD $ExceptionRecord;
|
typedef EXCEPTION_RECORD $ExceptionRecord;
|
||||||
#ifdef _X86_
|
#ifdef _X86_
|
||||||
typedef FLOATING_SAVE_AREA $FloatingSaveArea;
|
typedef FLOATING_SAVE_AREA $FloatingSaveArea;
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#pragma dynimport runtime·GetEnvironmentStringsW GetEnvironmentStringsW "kernel32.dll"
|
#pragma dynimport runtime·GetEnvironmentStringsW GetEnvironmentStringsW "kernel32.dll"
|
||||||
#pragma dynimport runtime·GetProcAddress GetProcAddress "kernel32.dll"
|
#pragma dynimport runtime·GetProcAddress GetProcAddress "kernel32.dll"
|
||||||
#pragma dynimport runtime·GetStdHandle GetStdHandle "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·GetThreadContext GetThreadContext "kernel32.dll"
|
||||||
#pragma dynimport runtime·LoadLibraryEx LoadLibraryExA "kernel32.dll"
|
#pragma dynimport runtime·LoadLibraryEx LoadLibraryExA "kernel32.dll"
|
||||||
#pragma dynimport runtime·QueryPerformanceCounter QueryPerformanceCounter "kernel32.dll"
|
#pragma dynimport runtime·QueryPerformanceCounter QueryPerformanceCounter "kernel32.dll"
|
||||||
@ -26,6 +27,7 @@
|
|||||||
#pragma dynimport runtime·SetEvent SetEvent "kernel32.dll"
|
#pragma dynimport runtime·SetEvent SetEvent "kernel32.dll"
|
||||||
#pragma dynimport runtime·SetThreadPriority SetThreadPriority "kernel32.dll"
|
#pragma dynimport runtime·SetThreadPriority SetThreadPriority "kernel32.dll"
|
||||||
#pragma dynimport runtime·SetWaitableTimer SetWaitableTimer "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·SuspendThread SuspendThread "kernel32.dll"
|
||||||
#pragma dynimport runtime·timeBeginPeriod timeBeginPeriod "winmm.dll"
|
#pragma dynimport runtime·timeBeginPeriod timeBeginPeriod "winmm.dll"
|
||||||
#pragma dynimport runtime·WaitForSingleObject WaitForSingleObject "kernel32.dll"
|
#pragma dynimport runtime·WaitForSingleObject WaitForSingleObject "kernel32.dll"
|
||||||
@ -41,6 +43,7 @@ extern void *runtime·FreeEnvironmentStringsW;
|
|||||||
extern void *runtime·GetEnvironmentStringsW;
|
extern void *runtime·GetEnvironmentStringsW;
|
||||||
extern void *runtime·GetProcAddress;
|
extern void *runtime·GetProcAddress;
|
||||||
extern void *runtime·GetStdHandle;
|
extern void *runtime·GetStdHandle;
|
||||||
|
extern void *runtime·GetSystemInfo;
|
||||||
extern void *runtime·GetThreadContext;
|
extern void *runtime·GetThreadContext;
|
||||||
extern void *runtime·LoadLibraryEx;
|
extern void *runtime·LoadLibraryEx;
|
||||||
extern void *runtime·QueryPerformanceCounter;
|
extern void *runtime·QueryPerformanceCounter;
|
||||||
@ -50,6 +53,7 @@ extern void *runtime·SetConsoleCtrlHandler;
|
|||||||
extern void *runtime·SetEvent;
|
extern void *runtime·SetEvent;
|
||||||
extern void *runtime·SetThreadPriority;
|
extern void *runtime·SetThreadPriority;
|
||||||
extern void *runtime·SetWaitableTimer;
|
extern void *runtime·SetWaitableTimer;
|
||||||
|
extern void *runtime·Sleep;
|
||||||
extern void *runtime·SuspendThread;
|
extern void *runtime·SuspendThread;
|
||||||
extern void *runtime·timeBeginPeriod;
|
extern void *runtime·timeBeginPeriod;
|
||||||
extern void *runtime·WaitForSingleObject;
|
extern void *runtime·WaitForSingleObject;
|
||||||
@ -57,6 +61,15 @@ extern void *runtime·WriteFile;
|
|||||||
|
|
||||||
static int64 timerfreq;
|
static int64 timerfreq;
|
||||||
|
|
||||||
|
static int32
|
||||||
|
getproccount(void)
|
||||||
|
{
|
||||||
|
SystemInfo info;
|
||||||
|
|
||||||
|
runtime·stdcall(runtime·GetSystemInfo, 1, &info);
|
||||||
|
return info.dwNumberOfProcessors;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
runtime·osinit(void)
|
runtime·osinit(void)
|
||||||
{
|
{
|
||||||
@ -67,6 +80,7 @@ runtime·osinit(void)
|
|||||||
runtime·stdcall(runtime·QueryPerformanceFrequency, 1, &timerfreq);
|
runtime·stdcall(runtime·QueryPerformanceFrequency, 1, &timerfreq);
|
||||||
runtime·stdcall(runtime·SetConsoleCtrlHandler, 2, runtime·ctrlhandler, (uintptr)1);
|
runtime·stdcall(runtime·SetConsoleCtrlHandler, 2, runtime·ctrlhandler, (uintptr)1);
|
||||||
runtime·stdcall(runtime·timeBeginPeriod, 1, (uintptr)1);
|
runtime·stdcall(runtime·timeBeginPeriod, 1, (uintptr)1);
|
||||||
|
runtime·ncpu = getproccount();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -126,6 +140,21 @@ runtime·write(int32 fd, void *buf, int32 n)
|
|||||||
return written;
|
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.
|
// Thread-safe allocation of an event.
|
||||||
static void
|
static void
|
||||||
initevent(void **pevent)
|
initevent(void **pevent)
|
||||||
|
Loading…
Reference in New Issue
Block a user