summaryrefslogtreecommitdiff
path: root/vendor/github.com/tetratelabs/wazero/internal/platform
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tetratelabs/wazero/internal/platform')
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_amd64.go4
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_arm64.go7
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_unsupported.go2
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/mmap_linux.go12
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/mmap_other.go6
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/mmap_unix.go25
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/mmap_unsupported.go6
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/mmap_windows.go11
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_bsd.go2
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_syscall.go2
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_unsupported.go5
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/platform/platform.go10
12 files changed, 35 insertions, 57 deletions
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_amd64.go b/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_amd64.go
index a0c7734a0..3619eecd4 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_amd64.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_amd64.go
@@ -2,8 +2,10 @@
package platform
+import "sync"
+
// CpuFeatures exposes the capabilities for this CPU, queried via the Has, HasExtra methods.
-var CpuFeatures = loadCpuFeatureFlags()
+var CpuFeatures = sync.OnceValue(loadCpuFeatureFlags)
// cpuFeatureFlags implements CpuFeatureFlags interface.
type cpuFeatureFlags struct {
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_arm64.go b/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_arm64.go
index 5430353fd..583b2941e 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_arm64.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_arm64.go
@@ -2,10 +2,13 @@
package platform
-import "runtime"
+import (
+ "runtime"
+ "sync"
+)
// CpuFeatures exposes the capabilities for this CPU, queried via the Has, HasExtra methods.
-var CpuFeatures = loadCpuFeatureFlags()
+var CpuFeatures = sync.OnceValue(loadCpuFeatureFlags)
// cpuFeatureFlags implements CpuFeatureFlags interface.
type cpuFeatureFlags struct {
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_unsupported.go b/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_unsupported.go
index 50a178f52..5f9009453 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_unsupported.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/cpuid_unsupported.go
@@ -2,7 +2,7 @@
package platform
-var CpuFeatures CpuFeatureFlags = &cpuFeatureFlags{}
+var CpuFeatures = func() CpuFeatureFlags { return &cpuFeatureFlags{} }
// cpuFeatureFlags implements CpuFeatureFlags for unsupported platforms.
type cpuFeatureFlags struct{}
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_linux.go b/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_linux.go
index 55906e827..3e2f435dc 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_linux.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_linux.go
@@ -59,12 +59,16 @@ func init() {
})
}
-func mmapCodeSegment(size, prot int) ([]byte, error) {
- flags := syscall.MAP_ANON | syscall.MAP_PRIVATE
+func mmapCodeSegment(size int) ([]byte, error) {
+ flag := syscall.MAP_ANON | syscall.MAP_PRIVATE
+ prot := syscall.PROT_READ | syscall.PROT_WRITE
+ if noopMprotectRX {
+ prot = syscall.PROT_READ | syscall.PROT_WRITE | syscall.PROT_EXEC
+ }
for _, hugePagesConfig := range hugePagesConfigs {
if hugePagesConfig.match(size) {
- b, err := syscall.Mmap(-1, 0, size, prot, flags|hugePagesConfig.flag)
+ b, err := syscall.Mmap(-1, 0, size, prot, flag|hugePagesConfig.flag)
if err != nil {
continue
}
@@ -72,5 +76,5 @@ func mmapCodeSegment(size, prot int) ([]byte, error) {
}
}
- return syscall.Mmap(-1, 0, size, prot, flags)
+ return syscall.Mmap(-1, 0, size, prot, flag)
}
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_other.go b/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_other.go
index 9f0610f27..ee2d87022 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_other.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_other.go
@@ -5,7 +5,11 @@ package platform
import "syscall"
-func mmapCodeSegment(size, prot int) ([]byte, error) {
+func mmapCodeSegment(size int) ([]byte, error) {
+ prot := syscall.PROT_READ | syscall.PROT_WRITE
+ if noopMprotectRX {
+ prot = syscall.PROT_READ | syscall.PROT_WRITE | syscall.PROT_EXEC
+ }
return syscall.Mmap(
-1,
0,
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_unix.go b/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_unix.go
index 8d0baa712..6b7c617b2 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_unix.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_unix.go
@@ -2,31 +2,8 @@
package platform
-import (
- "syscall"
-)
-
-const (
- mmapProtAMD64 = syscall.PROT_READ | syscall.PROT_WRITE | syscall.PROT_EXEC
- mmapProtARM64 = syscall.PROT_READ | syscall.PROT_WRITE
-)
+import "syscall"
func munmapCodeSegment(code []byte) error {
return syscall.Munmap(code)
}
-
-// mmapCodeSegmentAMD64 gives all read-write-exec permission to the mmap region
-// to enter the function. Otherwise, segmentation fault exception is raised.
-func mmapCodeSegmentAMD64(size int) ([]byte, error) {
- // The region must be RWX: RW for writing native codes, X for executing the region.
- return mmapCodeSegment(size, mmapProtAMD64)
-}
-
-// mmapCodeSegmentARM64 cannot give all read-write-exec permission to the mmap region.
-// Otherwise, the mmap systemcall would raise an error. Here we give read-write
-// to the region so that we can write contents at call-sites. Callers are responsible to
-// execute MprotectRX on the returned buffer.
-func mmapCodeSegmentARM64(size int) ([]byte, error) {
- // The region must be RW: RW for writing native codes.
- return mmapCodeSegment(size, mmapProtARM64)
-}
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_unsupported.go b/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_unsupported.go
index f3fa0911a..06517b7b6 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_unsupported.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_unsupported.go
@@ -13,11 +13,7 @@ func munmapCodeSegment(code []byte) error {
panic(errUnsupported)
}
-func mmapCodeSegmentAMD64(size int) ([]byte, error) {
- panic(errUnsupported)
-}
-
-func mmapCodeSegmentARM64(size int) ([]byte, error) {
+func mmapCodeSegment(size int) ([]byte, error) {
panic(errUnsupported)
}
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_windows.go b/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_windows.go
index 03a254d4a..68b11ad38 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_windows.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/mmap_windows.go
@@ -56,16 +56,7 @@ func virtualProtect(address, size, newprotect uintptr, oldprotect *uint32) error
return nil
}
-func mmapCodeSegmentAMD64(size int) ([]byte, error) {
- p, err := allocateMemory(uintptr(size), windows_PAGE_EXECUTE_READWRITE)
- if err != nil {
- return nil, err
- }
-
- return unsafe.Slice((*byte)(unsafe.Pointer(p)), size), nil
-}
-
-func mmapCodeSegmentARM64(size int) ([]byte, error) {
+func mmapCodeSegment(size int) ([]byte, error) {
p, err := allocateMemory(uintptr(size), windows_PAGE_READWRITE)
if err != nil {
return nil, err
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_bsd.go b/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_bsd.go
index f8f40cabe..d9b264863 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_bsd.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_bsd.go
@@ -7,6 +7,8 @@ import (
"unsafe"
)
+const noopMprotectRX = false
+
// MprotectRX is like syscall.Mprotect with RX permission, defined locally so that BSD compiles.
func MprotectRX(b []byte) (err error) {
var _p0 unsafe.Pointer
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_syscall.go b/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_syscall.go
index 6fe96d6f6..71baabb44 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_syscall.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_syscall.go
@@ -4,6 +4,8 @@ package platform
import "syscall"
+const noopMprotectRX = false
+
// MprotectRX is like syscall.Mprotect with RX permission.
func MprotectRX(b []byte) (err error) {
return syscall.Mprotect(b, syscall.PROT_READ|syscall.PROT_EXEC)
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_unsupported.go b/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_unsupported.go
index 84719ab08..e367b2030 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_unsupported.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/mprotect_unsupported.go
@@ -2,8 +2,9 @@
package platform
-import "syscall"
+const noopMprotectRX = true
func MprotectRX(b []byte) error {
- return syscall.ENOTSUP
+ // Assume we already called mmap with at least RX.
+ return nil
}
diff --git a/vendor/github.com/tetratelabs/wazero/internal/platform/platform.go b/vendor/github.com/tetratelabs/wazero/internal/platform/platform.go
index 532cc7b8c..35806f6e4 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/platform/platform.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/platform/platform.go
@@ -21,13 +21,13 @@ func CompilerSupports(features api.CoreFeatures) bool {
case "linux", "darwin", "freebsd", "netbsd", "dragonfly", "windows":
if runtime.GOARCH == "arm64" {
if features.IsEnabled(experimental.CoreFeaturesThreads) {
- return CpuFeatures.Has(CpuFeatureArm64Atomic)
+ return CpuFeatures().Has(CpuFeatureArm64Atomic)
}
return true
}
fallthrough
case "solaris", "illumos":
- return runtime.GOARCH == "amd64" && CpuFeatures.Has(CpuFeatureAmd64SSE4_1)
+ return runtime.GOARCH == "amd64" && CpuFeatures().Has(CpuFeatureAmd64SSE4_1)
default:
return false
}
@@ -40,11 +40,7 @@ func MmapCodeSegment(size int) ([]byte, error) {
if size == 0 {
panic("BUG: MmapCodeSegment with zero length")
}
- if runtime.GOARCH == "amd64" {
- return mmapCodeSegmentAMD64(size)
- } else {
- return mmapCodeSegmentARM64(size)
- }
+ return mmapCodeSegment(size)
}
// MunmapCodeSegment unmaps the given memory region.