blob: 0f4b91ce66f6e5e9b415003330a1f63682f04ba9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#!/bin/bash
#
# Generate some Go code to make calling into the C code of the .syso
# file easier.
package="${1}"
syso="${2}"
if [[ -z "${syso}" ]]; then
echo "usage: $0 <package> <.....syso>" >&2
exit 1
fi
if [[ "${syso%.syso}" == "${syso}" ]]; then
echo "2nd argument should be a .syso file" >&2
exit 1
fi
cat<<EOF
package ${package}
import (
"unsafe"
)
// syso is how we call, indirectly, into the C-code.
func syso(cFn, state unsafe.Pointer)
type sysoCaller struct {
ptr unsafe.Pointer
}
// call calls the syso linked C-function, $sym().
func (s *sysoCaller) call(data unsafe.Pointer) {
syso(s.ptr, data)
}
EOF
for sym in $(objdump -x "${syso}" | grep -F 'g F' | awk '{print $6}'); do
cat<<EOF
//go:linkname _${sym} ${sym}
var _${sym} byte
var syso__${sym} = &sysoCaller{ptr: unsafe.Pointer(&_${sym})}
EOF
done
|