From 1a57267a17c2fc17fb6e104846fabc3e363c326c Mon Sep 17 00:00:00 2001 From: Emile Date: Fri, 16 Aug 2024 19:50:26 +0200 Subject: initial commit --- vendor/modernc.org/gc/v3/abi.go | 682 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 682 insertions(+) create mode 100644 vendor/modernc.org/gc/v3/abi.go (limited to 'vendor/modernc.org/gc/v3/abi.go') diff --git a/vendor/modernc.org/gc/v3/abi.go b/vendor/modernc.org/gc/v3/abi.go new file mode 100644 index 0000000..2f0964a --- /dev/null +++ b/vendor/modernc.org/gc/v3/abi.go @@ -0,0 +1,682 @@ +// Copyright 2022 The Gc 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 gc // import "modernc.org/gc/v3" + +import ( + "encoding/binary" + "fmt" +) + +var ( + byteOrders = map[string]binary.ByteOrder{ + "386": binary.LittleEndian, + "amd64": binary.LittleEndian, + "arm": binary.LittleEndian, + "arm64": binary.LittleEndian, + "ppc64le": binary.LittleEndian, + "riscv64": binary.LittleEndian, + "s390x": binary.BigEndian, + } + + abiTypes = map[[2]string]map[Kind]ABIType{ + // go1.19.1 + {"freebsd", "386"}: { + Bool: {1, 1, 1}, + Chan: {4, 4, 4}, + Complex128: {16, 4, 4}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 4, 4}, + Function: {4, 4, 4}, + Int: {4, 4, 4}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 4, 4}, + Int8: {1, 1, 1}, + Interface: {8, 4, 4}, + Map: {4, 4, 4}, + Pointer: {4, 4, 4}, + Slice: {12, 4, 4}, + String: {8, 4, 4}, + Uint: {4, 4, 4}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 4, 4}, + Uint8: {1, 1, 1}, + Uintptr: {4, 4, 4}, + UnsafePointer: {4, 4, 4}, + }, + // go1.19.1 + {"freebsd", "amd64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.18.5 + {"freebsd", "arm"}: { + Bool: {1, 1, 1}, + Chan: {4, 4, 4}, + Complex128: {16, 4, 4}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 4, 4}, + Function: {4, 4, 4}, + Int: {4, 4, 4}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 4, 4}, + Int8: {1, 1, 1}, + Interface: {8, 4, 4}, + Map: {4, 4, 4}, + Pointer: {4, 4, 4}, + Slice: {12, 4, 4}, + String: {8, 4, 4}, + Uint: {4, 4, 4}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 4, 4}, + Uint8: {1, 1, 1}, + Uintptr: {4, 4, 4}, + UnsafePointer: {4, 4, 4}, + }, + // go1.19 + {"freebsd", "arm64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19.1 + {"darwin", "amd64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19.1 + {"darwin", "arm64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19.1 + {"linux", "386"}: { + Bool: {1, 1, 1}, + Chan: {4, 4, 4}, + Complex128: {16, 4, 4}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 4, 4}, + Function: {4, 4, 4}, + Int: {4, 4, 4}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 4, 4}, + Int8: {1, 1, 1}, + Interface: {8, 4, 4}, + Map: {4, 4, 4}, + Pointer: {4, 4, 4}, + Slice: {12, 4, 4}, + String: {8, 4, 4}, + Uint: {4, 4, 4}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 4, 4}, + Uint8: {1, 1, 1}, + Uintptr: {4, 4, 4}, + UnsafePointer: {4, 4, 4}, + }, + // go1.19.1 + {"linux", "amd64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19.1 + {"linux", "arm"}: { + Bool: {1, 1, 1}, + Chan: {4, 4, 4}, + Complex128: {16, 4, 4}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 4, 4}, + Function: {4, 4, 4}, + Int: {4, 4, 4}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 4, 4}, + Int8: {1, 1, 1}, + Interface: {8, 4, 4}, + Map: {4, 4, 4}, + Pointer: {4, 4, 4}, + Slice: {12, 4, 4}, + String: {8, 4, 4}, + Uint: {4, 4, 4}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 4, 4}, + Uint8: {1, 1, 1}, + Uintptr: {4, 4, 4}, + UnsafePointer: {4, 4, 4}, + }, + // go1.19.1 + {"linux", "arm64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19.1 + {"linux", "s390x"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19.1 + {"linux", "ppc64le"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19.1 + {"linux", "riscv64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.18.3 + {"netbsd", "386"}: { + Bool: {1, 1, 1}, + Chan: {4, 4, 4}, + Complex128: {16, 4, 4}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 4, 4}, + Function: {4, 4, 4}, + Int: {4, 4, 4}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 4, 4}, + Int8: {1, 1, 1}, + Interface: {8, 4, 4}, + Map: {4, 4, 4}, + Pointer: {4, 4, 4}, + Slice: {12, 4, 4}, + String: {8, 4, 4}, + Uint: {4, 4, 4}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 4, 4}, + Uint8: {1, 1, 1}, + Uintptr: {4, 4, 4}, + UnsafePointer: {4, 4, 4}, + }, + // go1.18.3 + {"netbsd", "amd64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.18.3 + {"netbsd", "arm"}: { + Bool: {1, 1, 1}, + Chan: {4, 4, 4}, + Complex128: {16, 4, 4}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 4, 4}, + Function: {4, 4, 4}, + Int: {4, 4, 4}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 4, 4}, + Int8: {1, 1, 1}, + Interface: {8, 4, 4}, + Map: {4, 4, 4}, + Pointer: {4, 4, 4}, + Slice: {12, 4, 4}, + String: {8, 4, 4}, + Uint: {4, 4, 4}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 4, 4}, + Uint8: {1, 1, 1}, + Uintptr: {4, 4, 4}, + UnsafePointer: {4, 4, 4}, + }, + // go1.19 + {"openbsd", "amd64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19 + {"openbsd", "arm64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19 + {"openbsd", "386"}: { + Bool: {1, 1, 1}, + Chan: {4, 4, 4}, + Complex128: {16, 4, 4}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 4, 4}, + Function: {4, 4, 4}, + Int: {4, 4, 4}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 4, 4}, + Int8: {1, 1, 1}, + Interface: {8, 4, 4}, + Map: {4, 4, 4}, + Pointer: {4, 4, 4}, + Slice: {12, 4, 4}, + String: {8, 4, 4}, + Uint: {4, 4, 4}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 4, 4}, + Uint8: {1, 1, 1}, + Uintptr: {4, 4, 4}, + UnsafePointer: {4, 4, 4}, + }, + // go1.19.1 + {"windows", "386"}: { + Bool: {1, 1, 1}, + Chan: {4, 4, 4}, + Complex128: {16, 4, 4}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 4, 4}, + Function: {4, 4, 4}, + Int: {4, 4, 4}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 4, 4}, + Int8: {1, 1, 1}, + Interface: {8, 4, 4}, + Map: {4, 4, 4}, + Pointer: {4, 4, 4}, + Slice: {12, 4, 4}, + String: {8, 4, 4}, + Uint: {4, 4, 4}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 4, 4}, + Uint8: {1, 1, 1}, + Uintptr: {4, 4, 4}, + UnsafePointer: {4, 4, 4}, + }, + // go1.19.1 + {"windows", "amd64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19.1 + {"windows", "arm64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + // go1.19.3 + {"illumos", "amd64"}: { + Bool: {1, 1, 1}, + Chan: {8, 8, 8}, + Complex128: {16, 8, 8}, + Complex64: {8, 4, 4}, + Float32: {4, 4, 4}, + Float64: {8, 8, 8}, + Function: {8, 8, 8}, + Int: {8, 8, 8}, + Int16: {2, 2, 2}, + Int32: {4, 4, 4}, + Int64: {8, 8, 8}, + Int8: {1, 1, 1}, + Interface: {16, 8, 8}, + Map: {8, 8, 8}, + Pointer: {8, 8, 8}, + Slice: {24, 8, 8}, + String: {16, 8, 8}, + Uint: {8, 8, 8}, + Uint16: {2, 2, 2}, + Uint32: {4, 4, 4}, + Uint64: {8, 8, 8}, + Uint8: {1, 1, 1}, + Uintptr: {8, 8, 8}, + UnsafePointer: {8, 8, 8}, + }, + } +) + +// ABI describes selected parts of the Application Binary Interface. +type ABI struct { + ByteOrder binary.ByteOrder + goarch string + goos string + Types map[Kind]ABIType +} + +type ABIType struct { + Size int64 + Align int64 + FieldAlign int64 +} + +// NewABI creates an ABI based on the os+arch pair. +func NewABI(os, arch string) (*ABI, error) { + byteOrder, ok := byteOrders[arch] + if !ok { + return nil, fmt.Errorf("unsupported arch: %s", arch) + } + + types0, ok := abiTypes[[2]string{os, arch}] + if !ok { + return nil, fmt.Errorf("unsupported os/arch: %s/%s", os, arch) + } + + types := make(map[Kind]ABIType, len(types0)) + for k, v := range types0 { + types[k] = v + } + return &ABI{ + ByteOrder: byteOrder, + Types: types, + }, nil +} -- cgit 1.4.1