ssa: prog.linkname; abi llvm.LinkOnceAnyLinkage always
This commit is contained in:
@@ -10,15 +10,15 @@ source_filename = "main"
|
||||
%"github.com/goplus/llgo/internal/abi.Imethod" = type { %"github.com/goplus/llgo/internal/runtime.String", ptr }
|
||||
|
||||
@"main.init$guard" = global i1 false, align 1
|
||||
@_llgo_main.errorString = global ptr null, align 8
|
||||
@"main.struct$QTufDJA9wEDzuzgkA-ZSrLqW-B6lWN8O25mTSglAoLQ" = global ptr null, align 8
|
||||
@_llgo_main.errorString = linkonce global ptr null, align 8
|
||||
@"main.struct$QTufDJA9wEDzuzgkA-ZSrLqW-B6lWN8O25mTSglAoLQ" = linkonce global ptr null, align 8
|
||||
@0 = private unnamed_addr constant [1 x i8] c"s", align 1
|
||||
@1 = private unnamed_addr constant [4 x i8] c"main", align 1
|
||||
@2 = private unnamed_addr constant [5 x i8] c"Error", align 1
|
||||
@"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to" = linkonce global ptr null, align 8
|
||||
@_llgo_string = linkonce global ptr null, align 8
|
||||
@3 = private unnamed_addr constant [11 x i8] c"errorString", align 1
|
||||
@"*_llgo_main.errorString" = global ptr null, align 8
|
||||
@"*_llgo_main.errorString" = linkonce global ptr null, align 8
|
||||
@"_llgo_iface$Fh8eUJ-Gw4e6TYuajcFIOSCuqSPKAt5nS4ow7xeGXEU" = linkonce global ptr null, align 8
|
||||
@__llgo_argc = global i32 0, align 4
|
||||
@__llgo_argv = global ptr null, align 8
|
||||
|
||||
@@ -23,12 +23,12 @@ source_filename = "main"
|
||||
@"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac" = linkonce global ptr null, align 8
|
||||
@3 = private unnamed_addr constant [6 x i8] c"main.f", align 1
|
||||
@4 = private unnamed_addr constant [7 x i8] c"main.I1", align 1
|
||||
@"main.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4" = global ptr null, align 8
|
||||
@"main.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4" = linkonce global ptr null, align 8
|
||||
@5 = private unnamed_addr constant [21 x i8] c"nil i1.(I1) succeeded", align 1
|
||||
@_llgo_main.I2 = linkonce global ptr null, align 8
|
||||
@6 = private unnamed_addr constant [6 x i8] c"main.g", align 1
|
||||
@7 = private unnamed_addr constant [7 x i8] c"main.I2", align 1
|
||||
@"main.iface$gZBF8fFlqIMZ9M6lT2VWPyc3eu5Co6j0WoKGIEgDPAw" = global ptr null, align 8
|
||||
@"main.iface$gZBF8fFlqIMZ9M6lT2VWPyc3eu5Co6j0WoKGIEgDPAw" = linkonce global ptr null, align 8
|
||||
@8 = private unnamed_addr constant [21 x i8] c"nil i2.(I2) succeeded", align 1
|
||||
@_llgo_main.C1 = linkonce global ptr null, align 8
|
||||
@"_llgo_struct$n1H8J_3prDN3firMwPxBLVTkE5hJ9Di-AqNvaC9jczw" = linkonce global ptr null, align 8
|
||||
|
||||
@@ -15,7 +15,7 @@ source_filename = "main"
|
||||
@0 = private unnamed_addr constant [3 x i8] c"two", align 1
|
||||
@__llgo_argc = global i32 0, align 4
|
||||
@__llgo_argv = global ptr null, align 8
|
||||
@_llgo_main.impl = global ptr null, align 8
|
||||
@_llgo_main.impl = linkonce global ptr null, align 8
|
||||
@"_llgo_struct$n1H8J_3prDN3firMwPxBLVTkE5hJ9Di-AqNvaC9jczw" = linkonce global ptr null, align 8
|
||||
@1 = private unnamed_addr constant [4 x i8] c"main", align 1
|
||||
@2 = private unnamed_addr constant [3 x i8] c"one", align 1
|
||||
@@ -26,7 +26,7 @@ source_filename = "main"
|
||||
@"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to" = linkonce global ptr null, align 8
|
||||
@_llgo_string = linkonce global ptr null, align 8
|
||||
@5 = private unnamed_addr constant [4 x i8] c"impl", align 1
|
||||
@"main.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA" = global ptr null, align 8
|
||||
@"main.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA" = linkonce global ptr null, align 8
|
||||
@_llgo_main.I = linkonce global ptr null, align 8
|
||||
@6 = private unnamed_addr constant [6 x i8] c"main.I", align 1
|
||||
@7 = private unnamed_addr constant [21 x i8] c"type assertion failed", align 1
|
||||
|
||||
@@ -31,7 +31,7 @@ source_filename = "main"
|
||||
@"_llgo_github.com/goplus/llgo/cl/internal/foo.Gamer" = linkonce global ptr null, align 8
|
||||
@8 = private unnamed_addr constant [38 x i8] c"github.com/goplus/llgo/cl/internal/foo", align 1
|
||||
@9 = private unnamed_addr constant [44 x i8] c"github.com/goplus/llgo/cl/internal/foo.Gamer", align 1
|
||||
@"main.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg" = global ptr null, align 8
|
||||
@"main.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg" = linkonce global ptr null, align 8
|
||||
@10 = private unnamed_addr constant [2 x i8] c"OK", align 1
|
||||
@11 = private unnamed_addr constant [4 x i8] c"FAIL", align 1
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ source_filename = "main"
|
||||
@__llgo_argv = global ptr null, align 8
|
||||
@7 = private unnamed_addr constant [5 x i8] c"hello", align 1
|
||||
@_llgo_main.T = linkonce global ptr null, align 8
|
||||
@"main.struct$QTufDJA9wEDzuzgkA-ZSrLqW-B6lWN8O25mTSglAoLQ" = global ptr null, align 8
|
||||
@"main.struct$QTufDJA9wEDzuzgkA-ZSrLqW-B6lWN8O25mTSglAoLQ" = linkonce global ptr null, align 8
|
||||
@8 = private unnamed_addr constant [1 x i8] c"s", align 1
|
||||
@9 = private unnamed_addr constant [4 x i8] c"main", align 1
|
||||
@10 = private unnamed_addr constant [6 x i8] c"Invoke", align 1
|
||||
@@ -51,12 +51,12 @@ source_filename = "main"
|
||||
@16 = private unnamed_addr constant [2 x i8] c"T4", align 1
|
||||
@"*_llgo_main.T4" = linkonce global ptr null, align 8
|
||||
@_llgo_main.T5 = linkonce global ptr null, align 8
|
||||
@"main.struct$eovYmOhZg4X0zMSsuscSshndnbbAGvB2E3cyG8E7Y4U" = global ptr null, align 8
|
||||
@"main.struct$eovYmOhZg4X0zMSsuscSshndnbbAGvB2E3cyG8E7Y4U" = linkonce global ptr null, align 8
|
||||
@17 = private unnamed_addr constant [1 x i8] c"n", align 1
|
||||
@18 = private unnamed_addr constant [2 x i8] c"T5", align 1
|
||||
@"*_llgo_main.T5" = linkonce global ptr null, align 8
|
||||
@_llgo_main.T6 = linkonce global ptr null, align 8
|
||||
@"main.struct$2bSfJcCYDdttnIT-JASAjsTNUZvojBt4mPXFJdH4M10" = global ptr null, align 8
|
||||
@"main.struct$2bSfJcCYDdttnIT-JASAjsTNUZvojBt4mPXFJdH4M10" = linkonce global ptr null, align 8
|
||||
@_llgo_Pointer = linkonce global ptr null, align 8
|
||||
@19 = private unnamed_addr constant [1 x i8] c"f", align 1
|
||||
@20 = private unnamed_addr constant [4 x i8] c"data", align 1
|
||||
|
||||
@@ -34,7 +34,7 @@ source_filename = "main"
|
||||
@5 = private unnamed_addr constant [7 x i8] c"WriteTo", align 1
|
||||
@6 = private unnamed_addr constant [13 x i8] c"main.WriterTo", align 1
|
||||
@"_llgo_iface$eN81k1zqixGTyagHw_4nqH4mGfwwehTOCTXUlbT9kzk" = linkonce global ptr null, align 8
|
||||
@_llgo_main.nopCloserWriterTo = global ptr null, align 8
|
||||
@_llgo_main.nopCloserWriterTo = linkonce global ptr null, align 8
|
||||
@"_llgo_struct$_3ow4zXXILqvC0WDqDRNq5DPhjE1DInJgN924VHWc2Y" = linkonce global ptr null, align 8
|
||||
@7 = private unnamed_addr constant [6 x i8] c"Reader", align 1
|
||||
@8 = private unnamed_addr constant [4 x i8] c"Read", align 1
|
||||
@@ -43,7 +43,7 @@ source_filename = "main"
|
||||
@"_llgo_func$8rsrSd_r3UHd_2DiYTyaOKR7BYkei4zw5ysG35KF38w" = linkonce global ptr null, align 8
|
||||
@11 = private unnamed_addr constant [17 x i8] c"nopCloserWriterTo", align 1
|
||||
@"_llgo_iface$L2Ik-AJcd0jsoBw5fQ07pQpfUM-kh78Wn2bOeak6M3I" = linkonce global ptr null, align 8
|
||||
@_llgo_main.nopCloser = global ptr null, align 8
|
||||
@_llgo_main.nopCloser = linkonce global ptr null, align 8
|
||||
@12 = private unnamed_addr constant [9 x i8] c"nopCloser", align 1
|
||||
@_llgo_main.StringWriter = linkonce global ptr null, align 8
|
||||
@"_llgo_func$thH5FBpdXzJNnCpSfiLU5ItTntFU6LWp0RJhDm2XJjw" = linkonce global ptr null, align 8
|
||||
@@ -55,8 +55,8 @@ source_filename = "main"
|
||||
@__llgo_argc = global i32 0, align 4
|
||||
@__llgo_argv = global ptr null, align 8
|
||||
@17 = private unnamed_addr constant [11 x i8] c"hello world", align 1
|
||||
@_llgo_main.stringReader = global ptr null, align 8
|
||||
@"main.struct$Mdt84yjYYwxF9D2i4cRmpEPiWaO6tsjtrbGUjyESypk" = global ptr null, align 8
|
||||
@_llgo_main.stringReader = linkonce global ptr null, align 8
|
||||
@"main.struct$Mdt84yjYYwxF9D2i4cRmpEPiWaO6tsjtrbGUjyESypk" = linkonce global ptr null, align 8
|
||||
@18 = private unnamed_addr constant [1 x i8] c"s", align 1
|
||||
@19 = private unnamed_addr constant [1 x i8] c"i", align 1
|
||||
@20 = private unnamed_addr constant [8 x i8] c"prevRune", align 1
|
||||
@@ -77,12 +77,12 @@ source_filename = "main"
|
||||
@27 = private unnamed_addr constant [10 x i8] c"UnreadByte", align 1
|
||||
@28 = private unnamed_addr constant [10 x i8] c"UnreadRune", align 1
|
||||
@29 = private unnamed_addr constant [12 x i8] c"stringReader", align 1
|
||||
@"*_llgo_main.stringReader" = global ptr null, align 8
|
||||
@"*_llgo_main.stringReader" = linkonce global ptr null, align 8
|
||||
@"_llgo_iface$OFO8Us9n8ajWCabGedeuoJ-Za2zAMk4Jh0FunAcUCFE" = linkonce global ptr null, align 8
|
||||
@_llgo_main.errorString = global ptr null, align 8
|
||||
@"main.struct$QTufDJA9wEDzuzgkA-ZSrLqW-B6lWN8O25mTSglAoLQ" = global ptr null, align 8
|
||||
@_llgo_main.errorString = linkonce global ptr null, align 8
|
||||
@"main.struct$QTufDJA9wEDzuzgkA-ZSrLqW-B6lWN8O25mTSglAoLQ" = linkonce global ptr null, align 8
|
||||
@30 = private unnamed_addr constant [11 x i8] c"errorString", align 1
|
||||
@"*_llgo_main.errorString" = global ptr null, align 8
|
||||
@"*_llgo_main.errorString" = linkonce global ptr null, align 8
|
||||
@"_llgo_iface$Fh8eUJ-Gw4e6TYuajcFIOSCuqSPKAt5nS4ow7xeGXEU" = linkonce global ptr null, align 8
|
||||
@31 = private unnamed_addr constant [21 x i8] c"type assertion failed", align 1
|
||||
@32 = private unnamed_addr constant [37 x i8] c"stringsReader.ReadAt: negative offset", align 1
|
||||
|
||||
@@ -7,7 +7,7 @@ source_filename = "main"
|
||||
%"github.com/goplus/llgo/internal/runtime.Slice" = type { ptr, i64, i64 }
|
||||
|
||||
@"main.init$guard" = global i1 false, align 1
|
||||
@"main.struct$MYpsoM99ZwFY087IpUOkIw1zjBA_sgFXVodmn1m-G88" = global ptr null, align 8
|
||||
@"main.struct$MYpsoM99ZwFY087IpUOkIw1zjBA_sgFXVodmn1m-G88" = linkonce global ptr null, align 8
|
||||
@0 = private unnamed_addr constant [1 x i8] c"v", align 1
|
||||
@1 = private unnamed_addr constant [4 x i8] c"main", align 1
|
||||
@__llgo_argc = global i32 0, align 4
|
||||
|
||||
@@ -11,7 +11,7 @@ source_filename = "main"
|
||||
|
||||
@"main.init$guard" = global i1 false, align 1
|
||||
@"_llgo_github.com/goplus/llgo/cl/internal/foo.Foo" = linkonce global ptr null, align 8
|
||||
@"main.struct$qQwZyFy_4JRalRxVVsVD8R09X5t58tWjTrtJPtHbEjs" = global ptr null, align 8
|
||||
@"main.struct$qQwZyFy_4JRalRxVVsVD8R09X5t58tWjTrtJPtHbEjs" = linkonce global ptr null, align 8
|
||||
@0 = private unnamed_addr constant [2 x i8] c"pb", align 1
|
||||
@1 = private unnamed_addr constant [1 x i8] c"F", align 1
|
||||
@2 = private unnamed_addr constant [4 x i8] c"main", align 1
|
||||
@@ -21,8 +21,8 @@ source_filename = "main"
|
||||
@"*_llgo_byte" = linkonce global ptr null, align 8
|
||||
@4 = private unnamed_addr constant [38 x i8] c"github.com/goplus/llgo/cl/internal/foo", align 1
|
||||
@5 = private unnamed_addr constant [3 x i8] c"Foo", align 1
|
||||
@_llgo_main.bar = global ptr null, align 8
|
||||
@"main.struct$Ci43nzKYkRLddRL_N4mkykxLXfJlqJGS5n04LKThPNo" = global ptr null, align 8
|
||||
@_llgo_main.bar = linkonce global ptr null, align 8
|
||||
@"main.struct$Ci43nzKYkRLddRL_N4mkykxLXfJlqJGS5n04LKThPNo" = linkonce global ptr null, align 8
|
||||
@6 = private unnamed_addr constant [1 x i8] c"f", align 1
|
||||
@7 = private unnamed_addr constant [3 x i8] c"bar", align 1
|
||||
@__llgo_argc = global i32 0, align 4
|
||||
|
||||
@@ -15,7 +15,7 @@ source_filename = "main"
|
||||
@__llgo_argc = global i32 0, align 4
|
||||
@__llgo_argv = global ptr null, align 8
|
||||
@_llgo_main.T = linkonce global ptr null, align 8
|
||||
@"main.struct$FYfyNCnlvkYOztpQWjt-y8D_WY3tpxyt5Qo62CJffTE" = global ptr null, align 8
|
||||
@"main.struct$FYfyNCnlvkYOztpQWjt-y8D_WY3tpxyt5Qo62CJffTE" = linkonce global ptr null, align 8
|
||||
@0 = private unnamed_addr constant [1 x i8] c"p", align 1
|
||||
@1 = private unnamed_addr constant [1 x i8] c"t", align 1
|
||||
@2 = private unnamed_addr constant [1 x i8] c"n", align 1
|
||||
|
||||
@@ -31,7 +31,7 @@ source_filename = "main"
|
||||
@_llgo_float32 = linkonce global ptr null, align 8
|
||||
@_llgo_float64 = linkonce global ptr null, align 8
|
||||
@"[10]_llgo_int" = linkonce global ptr null, align 8
|
||||
@"main.struct$hWvPvnlB9uIZSm1cMlcssbAfCpkLhNdpCzAk4conL0o" = global ptr null, align 8
|
||||
@"main.struct$hWvPvnlB9uIZSm1cMlcssbAfCpkLhNdpCzAk4conL0o" = linkonce global ptr null, align 8
|
||||
@_llgo_Pointer = linkonce global ptr null, align 8
|
||||
@3 = private unnamed_addr constant [1 x i8] c"f", align 1
|
||||
@4 = private unnamed_addr constant [4 x i8] c"data", align 1
|
||||
@@ -40,7 +40,7 @@ source_filename = "main"
|
||||
@"[]_llgo_int" = linkonce global ptr null, align 8
|
||||
@6 = private unnamed_addr constant [5 x i8] c"hello", align 1
|
||||
@_llgo_string = linkonce global ptr null, align 8
|
||||
@"main.struct$RKbUG45GE4henGMAdmt0Rju0JptyR8NsX7IZLsOI0OM" = global ptr null, align 8
|
||||
@"main.struct$RKbUG45GE4henGMAdmt0Rju0JptyR8NsX7IZLsOI0OM" = linkonce global ptr null, align 8
|
||||
@7 = private unnamed_addr constant [1 x i8] c"x", align 1
|
||||
@8 = private unnamed_addr constant [1 x i8] c"y", align 1
|
||||
@9 = private unnamed_addr constant [1 x i8] c"z", align 1
|
||||
|
||||
@@ -8,7 +8,7 @@ source_filename = "main"
|
||||
%"github.com/goplus/llgo/internal/abi.StructField" = type { %"github.com/goplus/llgo/internal/runtime.String", ptr, i64, %"github.com/goplus/llgo/internal/runtime.String", i1 }
|
||||
|
||||
@"main.init$guard" = global i1 false, align 1
|
||||
@"main.struct$hWvPvnlB9uIZSm1cMlcssbAfCpkLhNdpCzAk4conL0o" = global ptr null, align 8
|
||||
@"main.struct$hWvPvnlB9uIZSm1cMlcssbAfCpkLhNdpCzAk4conL0o" = linkonce global ptr null, align 8
|
||||
@_llgo_Pointer = linkonce global ptr null, align 8
|
||||
@0 = private unnamed_addr constant [1 x i8] c"f", align 1
|
||||
@1 = private unnamed_addr constant [4 x i8] c"data", align 1
|
||||
|
||||
@@ -34,7 +34,7 @@ source_filename = "main"
|
||||
@13 = private unnamed_addr constant [21 x i8] c"type assertion failed", align 1
|
||||
@_llgo_main.K = linkonce global ptr null, align 8
|
||||
@_llgo_main.N = linkonce global ptr null, align 8
|
||||
@"main.struct$e65EDK9vxC36Nz3YTgO1ulssLlNH03Bva_WWaCjH-4A" = global ptr null, align 8
|
||||
@"main.struct$e65EDK9vxC36Nz3YTgO1ulssLlNH03Bva_WWaCjH-4A" = linkonce global ptr null, align 8
|
||||
@14 = private unnamed_addr constant [2 x i8] c"n1", align 1
|
||||
@15 = private unnamed_addr constant [2 x i8] c"n2", align 1
|
||||
@16 = private unnamed_addr constant [1 x i8] c"N", align 1
|
||||
|
||||
@@ -15,7 +15,7 @@ source_filename = "main"
|
||||
@__llgo_argv = global ptr null, align 8
|
||||
@0 = private unnamed_addr constant [1 x i8] c"a", align 1
|
||||
@"_llgo_main.T[string,int]" = linkonce global ptr null, align 8
|
||||
@"main.struct$A2OTYqQyUOqOQ-i_F5iXeAKWtxeWGEuyeN7HCfULCDk" = global ptr null, align 8
|
||||
@"main.struct$A2OTYqQyUOqOQ-i_F5iXeAKWtxeWGEuyeN7HCfULCDk" = linkonce global ptr null, align 8
|
||||
@1 = private unnamed_addr constant [1 x i8] c"m", align 1
|
||||
@2 = private unnamed_addr constant [1 x i8] c"n", align 1
|
||||
@3 = private unnamed_addr constant [4 x i8] c"main", align 1
|
||||
|
||||
@@ -285,45 +285,39 @@ func TestErrVarOf(t *testing.T) {
|
||||
|
||||
func TestContextResolveLinkname(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
context *context
|
||||
input string
|
||||
want string
|
||||
panics bool
|
||||
name string
|
||||
link map[string]string
|
||||
input string
|
||||
want string
|
||||
panics bool
|
||||
}{
|
||||
{
|
||||
name: "Normal",
|
||||
context: &context{
|
||||
link: map[string]string{
|
||||
"foo": "C.bar",
|
||||
},
|
||||
link: map[string]string{
|
||||
"foo": "C.bar",
|
||||
},
|
||||
input: "foo",
|
||||
want: "bar",
|
||||
},
|
||||
{
|
||||
name: "MultipleLinks",
|
||||
context: &context{
|
||||
link: map[string]string{
|
||||
"foo1": "C.bar1",
|
||||
"foo2": "C.bar2",
|
||||
},
|
||||
link: map[string]string{
|
||||
"foo1": "C.bar1",
|
||||
"foo2": "C.bar2",
|
||||
},
|
||||
input: "foo2",
|
||||
want: "bar2",
|
||||
},
|
||||
{
|
||||
name: "NoLink",
|
||||
context: &context{link: map[string]string{}},
|
||||
input: "foo",
|
||||
want: "foo",
|
||||
name: "NoLink",
|
||||
link: map[string]string{},
|
||||
input: "foo",
|
||||
want: "foo",
|
||||
},
|
||||
{
|
||||
name: "InvalidLink",
|
||||
context: &context{
|
||||
link: map[string]string{
|
||||
"foo": "invalid.bar",
|
||||
},
|
||||
link: map[string]string{
|
||||
"foo": "invalid.bar",
|
||||
},
|
||||
input: "foo",
|
||||
panics: true,
|
||||
@@ -338,7 +332,11 @@ func TestContextResolveLinkname(t *testing.T) {
|
||||
}
|
||||
}()
|
||||
}
|
||||
got := tt.context.resolveLinkname(tt.input)
|
||||
ctx := &context{prog: llssa.NewProgram(nil)}
|
||||
for k, v := range tt.link {
|
||||
ctx.prog.SetLinkname(k, v)
|
||||
}
|
||||
got := ctx.resolveLinkname(tt.input)
|
||||
if !tt.panics {
|
||||
if got != tt.want {
|
||||
t.Errorf("got %q, want %q", got, tt.want)
|
||||
|
||||
@@ -89,7 +89,6 @@ type context struct {
|
||||
goTyps *types.Package
|
||||
goPkg *ssa.Package
|
||||
pyMod string
|
||||
link map[string]string // pkgPath.nameInPkg => linkname
|
||||
skips map[string]none
|
||||
loaded map[*types.Package]*pkgInfo // loaded packages
|
||||
bvals map[ssa.Value]llssa.Expr // block values
|
||||
@@ -827,7 +826,6 @@ func NewPackageEx(prog llssa.Program, patches Patches, pkg *ssa.Package, files [
|
||||
goTyps: pkgTypes,
|
||||
goPkg: pkg,
|
||||
patches: patches,
|
||||
link: make(map[string]string),
|
||||
skips: make(map[string]none),
|
||||
vargs: make(map[*ssa.Alloc][]llssa.Expr),
|
||||
loaded: map[*types.Package]*pkgInfo{
|
||||
@@ -936,7 +934,7 @@ func (p *context) patchType(typ types.Type) types.Type {
|
||||
}
|
||||
|
||||
func (p *context) resolveLinkname(name string) string {
|
||||
if link, ok := p.link[name]; ok {
|
||||
if link, ok := p.prog.Linkname(name); ok {
|
||||
prefix, ltarget, _ := strings.Cut(link, ".")
|
||||
if prefix != "C" {
|
||||
panic("resolveLinkname: invalid link: " + link)
|
||||
|
||||
@@ -266,7 +266,7 @@ func (p *context) initLink(line string, prefix int, f func(inPkgName string) (fu
|
||||
if fullName, isVar, ok := f(inPkgName); ok {
|
||||
link := strings.TrimLeft(text[idx+1:], " ")
|
||||
if isVar || strings.Contains(link, ".") { // eg. C.printf, C.strlen, llgo.cstr
|
||||
p.link[fullName] = link
|
||||
p.prog.SetLinkname(fullName, link)
|
||||
} else {
|
||||
panic(line + ": no specified call convention. eg. //go:linkname Printf C.printf")
|
||||
}
|
||||
@@ -434,7 +434,7 @@ func (p *context) funcName(fn *ssa.Function, ignore bool) (*types.Package, strin
|
||||
return nil, orgName, ignoredFunc
|
||||
}
|
||||
}
|
||||
if v, ok := p.link[orgName]; ok {
|
||||
if v, ok := p.prog.Linkname(orgName); ok {
|
||||
if strings.HasPrefix(v, "C.") {
|
||||
return nil, v[2:], cFunc
|
||||
}
|
||||
@@ -458,7 +458,7 @@ const (
|
||||
|
||||
func (p *context) varName(pkg *types.Package, v *ssa.Global) (vName string, vtype int, define bool) {
|
||||
name := llssa.FullName(pkg, v.Name())
|
||||
if v, ok := p.link[name]; ok {
|
||||
if v, ok := p.prog.Linkname(name); ok {
|
||||
if pos := strings.IndexByte(v, '.'); pos >= 0 {
|
||||
if pos == 2 && v[0] == 'p' && v[1] == 'y' {
|
||||
return v[3:], pyVar, false
|
||||
|
||||
Reference in New Issue
Block a user