mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-07-26 06:38:42 +00:00
internal/abi: implement initial version of this package
This package can never be a full version as seen in upstream Go, because TinyGo is very different. But it is necessary to define so that no code can accidentally use this package (now or in the future). It currently defines: - NoEscape which is needed by strings.Builder since Go 1.23. - FuncPCABI* which is needed by internal/syscall/unix on MacOS.
This commit is contained in:
committed by
Ron Evans
parent
560fd0a558
commit
db2a06a9bb
@@ -139,6 +139,8 @@ func (c *compilerContext) getFunction(fn *ssa.Function) (llvm.Type, llvm.Value)
|
||||
// On *nix systems, the "abort" functuion in libc is used to handle fatal panics.
|
||||
// Mark it as noreturn so LLVM can optimize away code.
|
||||
llvmFn.AddFunctionAttr(c.ctx.CreateEnumAttribute(llvm.AttributeKindID("noreturn"), 0))
|
||||
case "internal/abi.NoEscape":
|
||||
llvmFn.AddAttributeAtIndex(1, c.ctx.CreateEnumAttribute(llvm.AttributeKindID("nocapture"), 0))
|
||||
case "runtime.alloc":
|
||||
// Tell the optimizer that runtime.alloc is an allocator, meaning that it
|
||||
// returns values that are never null and never alias to an existing value.
|
||||
|
||||
@@ -236,6 +236,7 @@ func pathsToOverride(goMinor int, needsSyscallPackage bool) map[string]bool {
|
||||
"device/": false,
|
||||
"examples/": false,
|
||||
"internal/": true,
|
||||
"internal/abi/": false,
|
||||
"internal/binary/": false,
|
||||
"internal/bytealg/": false,
|
||||
"internal/cm/": false,
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
// Package abi exposes low-level details of the Go compiler/runtime
|
||||
package abi
|
||||
@@ -0,0 +1,10 @@
|
||||
package abi
|
||||
|
||||
import "unsafe"
|
||||
|
||||
// Tell the compiler the given pointer doesn't escape.
|
||||
// The compiler knows about this function and will give the nocapture parameter
|
||||
// attribute.
|
||||
func NoEscape(p unsafe.Pointer) unsafe.Pointer {
|
||||
return p
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package abi
|
||||
|
||||
// These two signatures are present to satisfy the expectation of some programs
|
||||
// (in particular internal/syscall/unix on MacOS). They do not currently have an
|
||||
// implementation, in part because TinyGo doesn't use ABI0 or ABIInternal (it
|
||||
// uses a C-like calling convention).
|
||||
|
||||
func FuncPCABI0(f interface{}) uintptr
|
||||
|
||||
func FuncPCABIInternal(f interface{}) uintptr
|
||||
Reference in New Issue
Block a user