aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link/testdata
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/link/testdata')
-rw-r--r--src/cmd/link/testdata/dynimportvar/asm/a.go15
-rw-r--r--src/cmd/link/testdata/dynimportvar/asm/a_amd64.s11
-rw-r--r--src/cmd/link/testdata/dynimportvar/asm/a_arm64.s11
-rw-r--r--src/cmd/link/testdata/dynimportvar/main.go32
4 files changed, 69 insertions, 0 deletions
diff --git a/src/cmd/link/testdata/dynimportvar/asm/a.go b/src/cmd/link/testdata/dynimportvar/asm/a.go
new file mode 100644
index 0000000000..8d9299972b
--- /dev/null
+++ b/src/cmd/link/testdata/dynimportvar/asm/a.go
@@ -0,0 +1,15 @@
+// Copyright 2023 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.
+
+// This is a separate package because we cannot have Go
+// assembly code and cgo code in the same package.
+
+//go:build darwin
+
+package asm
+
+//go:cgo_import_dynamic libc_mach_task_self_ mach_task_self_ "/usr/lib/libSystem.B.dylib"
+
+// load mach_task_self_ from assembly code
+func Mach_task_self() uint32
diff --git a/src/cmd/link/testdata/dynimportvar/asm/a_amd64.s b/src/cmd/link/testdata/dynimportvar/asm/a_amd64.s
new file mode 100644
index 0000000000..93547e32f1
--- /dev/null
+++ b/src/cmd/link/testdata/dynimportvar/asm/a_amd64.s
@@ -0,0 +1,11 @@
+// Copyright 2023 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.
+
+//go:build darwin
+
+TEXT ·Mach_task_self(SB),0,$0-4
+ MOVQ $libc_mach_task_self_(SB), AX
+ MOVQ (AX), AX
+ MOVL AX, ret+0(FP)
+ RET
diff --git a/src/cmd/link/testdata/dynimportvar/asm/a_arm64.s b/src/cmd/link/testdata/dynimportvar/asm/a_arm64.s
new file mode 100644
index 0000000000..bd3c9d71f5
--- /dev/null
+++ b/src/cmd/link/testdata/dynimportvar/asm/a_arm64.s
@@ -0,0 +1,11 @@
+// Copyright 2023 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.
+
+//go:build darwin
+
+TEXT ·Mach_task_self(SB),0,$0-4
+ MOVD $libc_mach_task_self_(SB), R0
+ MOVD (R0), R0
+ MOVW R0, ret+0(FP)
+ RET
diff --git a/src/cmd/link/testdata/dynimportvar/main.go b/src/cmd/link/testdata/dynimportvar/main.go
new file mode 100644
index 0000000000..658d340532
--- /dev/null
+++ b/src/cmd/link/testdata/dynimportvar/main.go
@@ -0,0 +1,32 @@
+// Copyright 2023 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.
+
+// Test that we can access dynamically imported variables.
+// We ues mach_task_self_ from darwin's system library.
+// Check that loading the variable from C and Go gets the
+// same result.
+
+//go:build darwin
+
+package main
+
+/*
+#include <mach/mach_init.h>
+
+unsigned int Mach_task_self(void) {
+ return mach_task_self();
+}
+*/
+import "C"
+
+import "cmd/link/testdata/dynimportvar/asm"
+
+func main() {
+ c := uint32(C.Mach_task_self())
+ a := asm.Mach_task_self()
+ if a != c {
+ println("got", a, "want", c)
+ panic("FAIL")
+ }
+}