
This commit switches to LLVM 15 everywhere by default, while still keeping LLVM 14 support.
89 строки
2,4 КиБ
Go
89 строки
2,4 КиБ
Go
package runtime
|
|
|
|
import (
|
|
"unsafe"
|
|
)
|
|
|
|
//go:generate go run ../../tools/gen-critical-atomics -out ./atomics_critical.go
|
|
|
|
const Compiler = "tinygo"
|
|
|
|
// The compiler will fill this with calls to the initialization function of each
|
|
// package.
|
|
func initAll()
|
|
|
|
//go:linkname callMain main.main
|
|
func callMain()
|
|
|
|
func GOMAXPROCS(n int) int {
|
|
// Note: setting GOMAXPROCS is ignored.
|
|
return 1
|
|
}
|
|
|
|
func GOROOT() string {
|
|
// TODO: don't hardcode but take the one at compile time.
|
|
return "/usr/local/go"
|
|
}
|
|
|
|
// Copy size bytes from src to dst. The memory areas must not overlap.
|
|
// This function is implemented by the compiler as a call to a LLVM intrinsic
|
|
// like llvm.memcpy.p0.p0.i32(dst, src, size, false).
|
|
func memcpy(dst, src unsafe.Pointer, size uintptr)
|
|
|
|
// Copy size bytes from src to dst. The memory areas may overlap and will do the
|
|
// correct thing.
|
|
// This function is implemented by the compiler as a call to a LLVM intrinsic
|
|
// like llvm.memmove.p0.p0.i32(dst, src, size, false).
|
|
func memmove(dst, src unsafe.Pointer, size uintptr)
|
|
|
|
// Set the given number of bytes to zero.
|
|
// This function is implemented by the compiler as a call to a LLVM intrinsic
|
|
// like llvm.memset.p0.i32(ptr, 0, size, false).
|
|
func memzero(ptr unsafe.Pointer, size uintptr)
|
|
|
|
// This intrinsic returns the current stack pointer.
|
|
// It is normally used together with llvm.stackrestore but also works to get the
|
|
// current stack pointer in a platform-independent way.
|
|
//
|
|
//export llvm.stacksave
|
|
func stacksave() unsafe.Pointer
|
|
|
|
//export strlen
|
|
func strlen(ptr unsafe.Pointer) uintptr
|
|
|
|
//export malloc
|
|
func malloc(size uintptr) unsafe.Pointer
|
|
|
|
// Compare two same-size buffers for equality.
|
|
func memequal(x, y unsafe.Pointer, n uintptr) bool {
|
|
for i := uintptr(0); i < n; i++ {
|
|
cx := *(*uint8)(unsafe.Pointer(uintptr(x) + i))
|
|
cy := *(*uint8)(unsafe.Pointer(uintptr(y) + i))
|
|
if cx != cy {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func nanotime() int64 {
|
|
return ticksToNanoseconds(ticks())
|
|
}
|
|
|
|
// Copied from the Go runtime source code.
|
|
//
|
|
//go:linkname os_sigpipe os.sigpipe
|
|
func os_sigpipe() {
|
|
runtimePanic("too many writes on closed pipe")
|
|
}
|
|
|
|
// LockOSThread wires the calling goroutine to its current operating system thread.
|
|
// Stub for now
|
|
// Called by go1.18 standard library on windows, see https://github.com/golang/go/issues/49320
|
|
func LockOSThread() {
|
|
}
|
|
|
|
// UnlockOSThread undoes an earlier call to LockOSThread.
|
|
// Stub for now
|
|
func UnlockOSThread() {
|
|
}
|