| // Copyright 2014 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package runtime |
| |
| import "unsafe" |
| |
| type stdFunction *byte |
| |
| func stdcall0(fn stdFunction) uintptr |
| func stdcall1(fn stdFunction, a0 uintptr) uintptr |
| func stdcall2(fn stdFunction, a0, a1 uintptr) uintptr |
| func stdcall3(fn stdFunction, a0, a1, a2 uintptr) uintptr |
| func stdcall4(fn stdFunction, a0, a1, a2, a3 uintptr) uintptr |
| func stdcall5(fn stdFunction, a0, a1, a2, a3, a4 uintptr) uintptr |
| func stdcall6(fn stdFunction, a0, a1, a2, a3, a4, a5 uintptr) uintptr |
| func stdcall7(fn stdFunction, a0, a1, a2, a3, a4, a5, a6 uintptr) uintptr |
| |
| func asmstdcall(fn unsafe.Pointer) |
| func getlasterror() uint32 |
| func setlasterror(err uint32) |
| func usleep1(usec uint32) |
| func netpollinit() |
| func netpollopen(fd uintptr, pd *pollDesc) int32 |
| func netpollclose(fd uintptr) int32 |
| func netpollarm(pd *pollDesc, mode int) |
| |
| func os_sigpipe() { |
| gothrow("too many writes on closed pipe") |
| } |
| |
| func sigpanic() { |
| g := getg() |
| if !canpanic(g) { |
| gothrow("unexpected signal during runtime execution") |
| } |
| |
| switch uint32(g.sig) { |
| case _EXCEPTION_ACCESS_VIOLATION: |
| if g.sigcode1 < 0x1000 || g.paniconfault { |
| panicmem() |
| } |
| print("unexpected fault address ", hex(g.sigcode1), "\n") |
| gothrow("fault") |
| case _EXCEPTION_INT_DIVIDE_BY_ZERO: |
| panicdivide() |
| case _EXCEPTION_INT_OVERFLOW: |
| panicoverflow() |
| case _EXCEPTION_FLT_DENORMAL_OPERAND, |
| _EXCEPTION_FLT_DIVIDE_BY_ZERO, |
| _EXCEPTION_FLT_INEXACT_RESULT, |
| _EXCEPTION_FLT_OVERFLOW, |
| _EXCEPTION_FLT_UNDERFLOW: |
| panicfloat() |
| } |
| gothrow("fault") |
| } |