go main 源码

2022-07-15 浏览 (1347)

golang main 代码

文件路径:/misc/cgo/testplugin/testdata/issue44956/main.go

/ Copyright 2021 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.

/ Issue 44956: writable static temp is not exported correctly.
/ In the test below, package base is
/
/     X = &map{...}
/
/ which compiles to
/
/     X = &stmp           / static
/     stmp = makemap(...) / in init function
/
/ plugin1 and plugin2 both import base. plugin1 doesn't use
/ base.X, so that symbol is deadcoded in plugin1.
/
/ plugin1 is loaded first. base.init runs at that point, which
/ initialize base.stmp.
/
/ plugin2 is then loaded. base.init already ran, so it doesn't run
/ again. When base.stmp is not exported, plugin2's base.X points to
/ its own private base.stmp, which is not initialized, fail.

package main

import "plugin"

func main() {
	_, err := plugin.Open("issue44956p1.so")
	if err != nil {
		panic("FAIL")
	}

	p2, err := plugin.Open("issue44956p2.so")
	if err != nil {
		panic("FAIL")
	}
	f, err := p2.Lookup("F")
	if err != nil {
		panic("FAIL")
	}
	x := f.(func() *map[int]int)()
	if x == nil || (*x)[123] != 456 {
		panic("FAIL")
	}
}

相关信息

go 源码目录

相关文章

go plugin1 源码

go plugin2 源码

^