Merge pull request #58 from xushiwei/q
cl: go:linkname specifies call convention by C.xxx
This commit is contained in:
@@ -3,10 +3,10 @@ package main
|
||||
import "C"
|
||||
import _ "unsafe"
|
||||
|
||||
//go:linkname printf printf
|
||||
//go:linkname printf C.printf
|
||||
func printf(format *int8, __llgo_va_list ...any)
|
||||
|
||||
//go:linkname strlen strlen
|
||||
//go:linkname strlen C.strlen
|
||||
func strlen(str *int8) C.int
|
||||
|
||||
var format = [...]int8{'H', 'e', 'l', 'l', 'o', ' ', '%', 'd', '\n', 0}
|
||||
|
||||
@@ -8,7 +8,7 @@ func (a T) Add(b T) T {
|
||||
return a + b
|
||||
}
|
||||
|
||||
//go:linkname printf printf
|
||||
//go:linkname printf C.printf
|
||||
func printf(format *int8, __llgo_va_list ...any)
|
||||
|
||||
var format = [...]int8{'H', 'e', 'l', 'l', 'o', ' ', '%', 'd', '\n', 0}
|
||||
|
||||
@@ -2,7 +2,7 @@ package main
|
||||
|
||||
import _ "unsafe"
|
||||
|
||||
//go:linkname printf printf
|
||||
//go:linkname printf C.printf
|
||||
func printf(format *int8, __llgo_va_list ...any)
|
||||
|
||||
var hello = [...]int8{'H', 'e', 'l', 'l', 'o', '\n', 0}
|
||||
|
||||
@@ -2,7 +2,7 @@ package main
|
||||
|
||||
import _ "unsafe"
|
||||
|
||||
//go:linkname printf printf
|
||||
//go:linkname printf C.printf
|
||||
func printf(format *int8, __llgo_va_list ...any)
|
||||
|
||||
var format = [...]int8{'H', 'e', 'l', 'l', 'o', ' ', '%', 'd', '\n', 0}
|
||||
|
||||
@@ -2,7 +2,7 @@ package main
|
||||
|
||||
import _ "unsafe"
|
||||
|
||||
//go:linkname printf printf
|
||||
//go:linkname printf C.printf
|
||||
func printf(format *int8, __llgo_va_list ...any)
|
||||
|
||||
type T int8
|
||||
|
||||
@@ -30,13 +30,23 @@ func TestIgnoreName(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestImport(t *testing.T) {
|
||||
func TestErrImport(t *testing.T) {
|
||||
var ctx context
|
||||
pkg := types.NewPackage("foo", "foo")
|
||||
ctx.importPkg(pkg)
|
||||
}
|
||||
|
||||
func TestVarOf(t *testing.T) {
|
||||
func TestErrInitLinkname(t *testing.T) {
|
||||
defer func() {
|
||||
if r := recover(); r == nil {
|
||||
t.Fatal("initLinkname: no error?")
|
||||
}
|
||||
}()
|
||||
var ctx context
|
||||
ctx.initLinkname("foo", "//go:linkname Printf printf")
|
||||
}
|
||||
|
||||
func TestErrVarOf(t *testing.T) {
|
||||
defer func() {
|
||||
if r := recover(); r == nil {
|
||||
t.Fatal("varOf: no error?")
|
||||
|
||||
@@ -98,9 +98,13 @@ func (p *context) initLinkname(pkgPath, line string) {
|
||||
if strings.HasPrefix(line, linkname) {
|
||||
text := strings.TrimSpace(line[len(linkname):])
|
||||
if idx := strings.IndexByte(text, ' '); idx > 0 {
|
||||
name := pkgPath + "." + text[:idx]
|
||||
link := strings.TrimLeft(text[idx+1:], " ")
|
||||
p.link[name] = link
|
||||
if strings.Contains(link, ".") { // eg. C.printf, C.strlen
|
||||
name := pkgPath + "." + text[:idx]
|
||||
p.link[name] = link[2:]
|
||||
} else {
|
||||
panic(line + ": no specified call convention. eg. //go:linkname Printf C.printf")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@ const (
|
||||
LLGoPackage = true
|
||||
)
|
||||
|
||||
//go:linkname Printf printf
|
||||
//go:linkname Printf C.printf
|
||||
func Printf(format *int8, __llgo_va_list ...any)
|
||||
|
||||
//go:linkname Strlen strlen
|
||||
//go:linkname Strlen C.strlen
|
||||
func Strlen(str *int8) C.int
|
||||
|
||||
@@ -6,7 +6,7 @@ const (
|
||||
LLGoPackage = true
|
||||
)
|
||||
|
||||
//go:linkname Printf printf
|
||||
//go:linkname Printf C.printf
|
||||
func Printf(format *int8, __llgo_va_list ...any)
|
||||
|
||||
func Max(a, b int) int {
|
||||
|
||||
Reference in New Issue
Block a user