| // Copyright 2018 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 | |
| const ( | |
| _PROT_NONE = 0 | |
| _PROT_READ = 1 | |
| _PROT_WRITE = 2 | |
| _PROT_EXEC = 4 | |
| _MAP_ANON = 1 | |
| _MAP_PRIVATE = 2 | |
| _DUPLICATE_SAME_ACCESS = 0x2 | |
| _THREAD_PRIORITY_HIGHEST = 0x2 | |
| _SIGINT = 0x2 | |
| _SIGTERM = 0xF | |
| _CTRL_C_EVENT = 0x0 | |
| _CTRL_BREAK_EVENT = 0x1 | |
| _CTRL_CLOSE_EVENT = 0x2 | |
| _CTRL_LOGOFF_EVENT = 0x5 | |
| _CTRL_SHUTDOWN_EVENT = 0x6 | |
| _CONTEXT_CONTROL = 0x10001 | |
| _CONTEXT_FULL = 0x10007 | |
| _EXCEPTION_ACCESS_VIOLATION = 0xc0000005 | |
| _EXCEPTION_BREAKPOINT = 0x80000003 | |
| _EXCEPTION_FLT_DENORMAL_OPERAND = 0xc000008d | |
| _EXCEPTION_FLT_DIVIDE_BY_ZERO = 0xc000008e | |
| _EXCEPTION_FLT_INEXACT_RESULT = 0xc000008f | |
| _EXCEPTION_FLT_OVERFLOW = 0xc0000091 | |
| _EXCEPTION_FLT_UNDERFLOW = 0xc0000093 | |
| _EXCEPTION_INT_DIVIDE_BY_ZERO = 0xc0000094 | |
| _EXCEPTION_INT_OVERFLOW = 0xc0000095 | |
| _INFINITE = 0xffffffff | |
| _WAIT_TIMEOUT = 0x102 | |
| _EXCEPTION_CONTINUE_EXECUTION = -0x1 | |
| _EXCEPTION_CONTINUE_SEARCH = 0x0 | |
| ) | |
| type systeminfo struct { | |
| anon0 [4]byte | |
| dwpagesize uint32 | |
| lpminimumapplicationaddress *byte | |
| lpmaximumapplicationaddress *byte | |
| dwactiveprocessormask uint32 | |
| dwnumberofprocessors uint32 | |
| dwprocessortype uint32 | |
| dwallocationgranularity uint32 | |
| wprocessorlevel uint16 | |
| wprocessorrevision uint16 | |
| } | |
| type exceptionrecord struct { | |
| exceptioncode uint32 | |
| exceptionflags uint32 | |
| exceptionrecord *exceptionrecord | |
| exceptionaddress *byte | |
| numberparameters uint32 | |
| exceptioninformation [15]uint32 | |
| } | |
| type neon128 struct { | |
| low uint64 | |
| high int64 | |
| } | |
| type context struct { | |
| contextflags uint32 | |
| r0 uint32 | |
| r1 uint32 | |
| r2 uint32 | |
| r3 uint32 | |
| r4 uint32 | |
| r5 uint32 | |
| r6 uint32 | |
| r7 uint32 | |
| r8 uint32 | |
| r9 uint32 | |
| r10 uint32 | |
| r11 uint32 | |
| r12 uint32 | |
| spr uint32 | |
| lrr uint32 | |
| pc uint32 | |
| cpsr uint32 | |
| fpscr uint32 | |
| padding uint32 | |
| floatNeon [16]neon128 | |
| bvr [8]uint32 | |
| bcr [8]uint32 | |
| wvr [1]uint32 | |
| wcr [1]uint32 | |
| padding2 [2]uint32 | |
| } | |
| func (c *context) ip() uintptr { return uintptr(c.pc) } | |
| func (c *context) sp() uintptr { return uintptr(c.spr) } | |
| func (c *context) lr() uintptr { return uintptr(c.lrr) } | |
| func (c *context) set_ip(x uintptr) { c.pc = uint32(x) } | |
| func (c *context) set_sp(x uintptr) { c.spr = uint32(x) } | |
| func (c *context) set_lr(x uintptr) { c.lrr = uint32(x) } | |
| func dumpregs(r *context) { | |
| print("r0 ", hex(r.r0), "\n") | |
| print("r1 ", hex(r.r1), "\n") | |
| print("r2 ", hex(r.r2), "\n") | |
| print("r3 ", hex(r.r3), "\n") | |
| print("r4 ", hex(r.r4), "\n") | |
| print("r5 ", hex(r.r5), "\n") | |
| print("r6 ", hex(r.r6), "\n") | |
| print("r7 ", hex(r.r7), "\n") | |
| print("r8 ", hex(r.r8), "\n") | |
| print("r9 ", hex(r.r9), "\n") | |
| print("r10 ", hex(r.r10), "\n") | |
| print("r11 ", hex(r.r11), "\n") | |
| print("r12 ", hex(r.r12), "\n") | |
| print("sp ", hex(r.spr), "\n") | |
| print("lr ", hex(r.lrr), "\n") | |
| print("pc ", hex(r.pc), "\n") | |
| print("cpsr ", hex(r.cpsr), "\n") | |
| } | |
| type overlapped struct { | |
| internal uint32 | |
| internalhigh uint32 | |
| anon0 [8]byte | |
| hevent *byte | |
| } | |
| type memoryBasicInformation struct { | |
| baseAddress uintptr | |
| allocationBase uintptr | |
| allocationProtect uint32 | |
| regionSize uintptr | |
| state uint32 | |
| protect uint32 | |
| type_ uint32 | |
| } | |
| func stackcheck() { | |
| // TODO: not implemented on ARM | |
| } |