aboutsummaryrefslogtreecommitdiff
path: root/misc/cgo/testplugin
AgeCommit message (Collapse)Author
2022-07-22cmd/compile: make jump table symbol localCherry Mui
When using plugins, if the plugin and the main executable both have the same function, and if it uses jump table, currently the jump table symbol have the same name so it will be deduplicated by the dynamic linker. This causes a function in the plugin may (in the middle of the function) jump to the function with the same name in the main executable (or vice versa). But the function may be compiled slightly differently, because the plugin needs to be PIC. Jumping from the middle of one function to the other will not work. Avoid this problem by marking the jump table symbol local to a DSO. Fixes #53989. Change-Id: I2b573b9dfc22401c8a09ffe9b9ea8bb83d3700ca Reviewed-on: https://go-review.googlesource.com/c/go/+/418960 Reviewed-by: Keith Randall <khr@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> Reviewed-by: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-05-19misc/cgo/testplugin: set the package name in TestIssue19534Bryan C. Mills
The fix for #19534 (in CL 40994) adjusted escaping in the dynamically-linked name lookup logic for the plugin package. However, the regression test added for it incorrectly included quotes within the -ldflags flag, causing the flag to inadvertently be ignored. Possibly in that same CL or possibly at some other point, the condition that the test thought it was checking stopped working: the dynamic lookup used the path passed to ldflags, but the object file actually contained the symbol indexed by the original package name. Ideally we should stop mucking around with ldflags in this test and run 'go build' from a suitably-named directory instead, to mimic the actual conditions in which the original bug was reported. For now, as a more targeted fix, we can pass the '-p' flag to the compiler to adjust the package path used at compile time to match the one that will be set at link time. For #43177. Updates #19534. Change-Id: I9763961feb37cfb05dee543f273492e91a350663 Reviewed-on: https://go-review.googlesource.com/c/go/+/407314 Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Auto-Submit: Bryan Mills <bcmills@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
2022-05-19misc/cgo: invoke "go" from $GOROOT/bin instead of $PATHBryan C. Mills
If PATH doesn't contain GOROOT/bin as the first element, this could otherwise end up running entirely the wrong command (and from the wrong GOROOT, even). I pre-tested this change on release-branch.go1.17 using a gomote. I believe that it will fix the test failure on that branch, but will need to be backported. For #52995. Change-Id: Ib0c43289a1e0ccf9409f0f0ef8046501a955ce65 Reviewed-on: https://go-review.googlesource.com/c/go/+/407294 Run-TryBot: Bryan Mills <bcmills@google.com> Reviewed-by: Heschi Kreinick <heschi@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-05-17test,misc: fix builders that do not support pluginCuong Manh Le
CL 406358 added test that use -buildmode=plugin. But plugin mode only supports on some os/arch pairs, so this CL moving the test to misc/cgo/testplugin directory instead. Updates #52937 Change-Id: Iad049443c1f6539f6af1988bebd4dff56c6e1bf9 Reviewed-on: https://go-review.googlesource.com/c/go/+/406774 Reviewed-by: Michael Knyszek <mknyszek@google.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-03-16cmd/link: mark unexported methods for pluginsCherry Mui
When plugin is used, we already mark all exported methods reachable. However, when the plugin and the host program share a common package, an unexported method could also be reachable from both the plugin and the host via interfaces. We need to mark them as well. Fixes #51621. Change-Id: I1a70d3f96b66b803f2d0ab14d00ed0df276ea500 Reviewed-on: https://go-review.googlesource.com/c/go/+/393365 Trust: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
2021-12-17cmd/link: force eager binding when using plugins on darwinCherry Mui
When building/using plugins on darwin, we need to use flat namespace so the same symbol from the main executable and the plugin can be resolved to the same address. Apparently, when using flat namespace the dynamic linker can hang at forkExec when resolving a lazy binding. Work around it by forcing early bindings. Fixes #38824. Change-Id: I983aa0a0960b15bf3f7871382e8231ee244655f4 Reviewed-on: https://go-review.googlesource.com/c/go/+/372798 Trust: Cherry Mui <cherryyz@google.com> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2021-12-07misc/cgo/testplugin: remove skip in TestIssue25756pieDmitri Shuralyov
Though this was a problem for Go 1.17, it appears not to be a problem on tip. This reverts change made in CL 321349. For #46239. Change-Id: Ie4d6649fbabce3bb2c1cf04d97760ba6ceadaca5 Reviewed-on: https://go-review.googlesource.com/c/go/+/369752 Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Trust: Dmitri Shuralyov <dmitshur@golang.org>
2021-05-20misc/cgo/testplugin: skip TestIssue25756pie on darwin/arm64 builderDmitri Shuralyov
This test is known to be broken on the darwin/arm64 builder. Skip it while it's being investigated so it doesn't mask other failures. For #46239. Updates #43228. Change-Id: I8fe57a0636bba84c3100337146dcb96cc264e524 Reviewed-on: https://go-review.googlesource.com/c/go/+/321349 Trust: Dmitri Shuralyov <dmitshur@golang.org> Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com>
2021-05-17runtime/cgo: fix crosscall2 on ppc64xLynn Boger
Some uses of crosscall2 did not work on ppc64le and probably aix-ppc64. In particular, if there was a main program compiled with -buildmode=pie and used a plugin which invoked crosscall2, then failures could occur due to R2 getting set incorrectly along the way. The problem was due to R2 being saved on the caller's stack; it is now saved on the crosscall2 stack. More details can be found in the issue. This adds a testcase where the main program is built with pie and the plugin invokes crosscall2. This also changes the save of the CR bits from MOVD to MOVW as it should be. Fixes #43228 Change-Id: Ib5673e25a2ec5ee46bf9a1ffb0cb1f3ef5449086 Reviewed-on: https://go-review.googlesource.com/c/go/+/319489 Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Trust: Heschi Kreinick <heschi@google.com>
2021-04-13runtime, cgo/test: improve debugging outputDavid Chase
tests that run commands should log their actions in a shell-pasteable way. Change-Id: Ifeee88397047ef5a76925c5f30c213e83e535038 Reviewed-on: https://go-review.googlesource.com/c/go/+/309770 Trust: David Chase <drchase@google.com> Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
2021-04-05all: update references to symbols moved from io/ioutil to ioKimMachineGun
Update references missed in CL 263142. For #41190 Change-Id: I778760a6a69bd0440fec0848bdef539c9ccb4ee1 GitHub-Last-Rev: dda42b09fff36dc08ec1cdec50cc19e3da5058e5 GitHub-Pull-Request: golang/go#42874 Reviewed-on: https://go-review.googlesource.com/c/go/+/273946 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Trust: Cherry Zhang <cherryyz@google.com>
2021-03-16cmd/compile, cmd/link: dynamically export writable static tmpsCherry Zhang
Static tmps are private to a package, but with plugins a package can be shared among multiple DSOs. They need to have a consistent view of the static tmps, especially for writable ones. So export them. (Read-only static tmps have the same values anyway, so it doesn't matter. Also Mach-O doesn't support dynamically exporting read-only symbols anyway.) Fixes #44956. Change-Id: I921e25b7ab73cd5d5347800eccdb7931e3448779 Reviewed-on: https://go-review.googlesource.com/c/go/+/301793 Trust: Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
2021-03-15all: run gofmtPrajwal Koirala
Fixes #44980 Change-Id: Icef35319d1582d8367c8911e15d11b0224957327 GitHub-Last-Rev: 2113e97e837c1ef5de9ba6a7bd62db92e644c500 GitHub-Pull-Request: golang/go#45005 Reviewed-on: https://go-review.googlesource.com/c/go/+/301632 Reviewed-by: Ian Lance Taylor <iant@golang.org> Trust: Josh Bleecher Snyder <josharian@gmail.com>
2021-02-26cmd/link: handle types as converted to interface when dynlinkCherry Zhang
When using plugins, a type (whose value) may be pass to a plugin and get converted to interface there, or vice versa. We need to treat the type as potentially converted to interface, and retain its methods. Should fix #44586. Change-Id: I80dd35e68baedaa852a317543ccd78d94628d13b Reviewed-on: https://go-review.googlesource.com/c/go/+/296709 Trust: Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
2020-11-13cmd/compile: mark plugin-exported types as used in interfaceCherry Zhang
Plugin exports symbols as interfaces. Mark their types as used in interfaces, so their methods will be kept alive by the linker. Fixes #42579. Change-Id: If1b5aacc21510c20c25f88bb131bca61db6f1d56 Reviewed-on: https://go-review.googlesource.com/c/go/+/269819 Trust: Cherry Zhang <cherryyz@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
2020-06-01misc/cgo/testplugin: fix typo in commentCherry Zhang
Change-Id: I7d1a5f6936505dff8f765541b5102dcbcd6ae835 Reviewed-on: https://go-review.googlesource.com/c/go/+/235924 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2019-11-25misc: remove use of relative directories in overlayDir functionsBryan C. Mills
It turns out that the relative-path support never worked in the first place. It had been masked by the fact that we ~never invoke overlayDir with an absolute path, which caused filepath.Rel to always return an error, and overlayDir to always fall back to absolute paths. Since the absolute paths seem to be working fine (and are simpler), let's stick with those. As far as I can recall, the relative paths were only a space optimization anyway. Updates #28387 Updates #30316 Change-Id: Ie8cd28f3c41ca6497ace2799f4193d7f5dde7a37 Reviewed-on: https://go-review.googlesource.com/c/go/+/208481 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
2019-11-20misc/cgo/testplugin: avoid writing to GOROOTBryan C. Mills
One of the 'go build' commands executed by this test passed the '-i' flag, which caused the 'go' command to attempt to install transitive standard-library dependencies to GOROOT/pkg/$GOOS_$GOARCH_dynlink. That failed if GOROOT/pkg was not writable (for example, if GOROOT was owned by the root user, but the user running the test was not root). As far as I can tell the '-i' flag is not necessary in this test. Prior to the introduction of the build cache it may have been an optimization, but now that the build cache is required the '-i' flag only adds extra work. Updates #30316 Change-Id: Ib60080a008c1941aa92b5bdd5a194d89fd6202aa Reviewed-on: https://go-review.googlesource.com/c/go/+/208120 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2019-11-11misc: ensure that test overlay directories are writableBryan C. Mills
Otherwise, the test cannot create new files in the directory. Updates #32407 Updates #30316 Change-Id: Ief0df94a202be92f57d458d4ab4e4daa9ec189b1 Reviewed-on: https://go-review.googlesource.com/c/go/+/206458 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2019-11-11cmd/go: remove -w workaround for -buildmode=plugin on DarwinThan McIntosh
The problem causing the assert in #21647 are fixed at this point, along with various other linker issues with plugin + Darwin. With this in mind, remove the "-ldflags=-w" workaround for plugin mode on Darwin and re-enable the appropriate tests misc/cgo/testplugin Fixes #21647. Fixes #27502. Change-Id: I5b662987b138b06cfc9e1f9f6d804cf682bd501a Reviewed-on: https://go-review.googlesource.com/c/go/+/206198 Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
2019-05-16misc/cgo: disable testcarchive, testplugin during -short test (including ↵Russ Cox
all.bash) These tests take 20 seconds each to rebuild the entire world in their respective modes. That's too much for short mode, including all.bash on developer machines. Keep doing it on builders and if someone runs 'go test' by hand in that directory. For #26473. Change-Id: I3dc6955bc3aa7a20fd170efcde72a7d19b37bdbf Reviewed-on: https://go-review.googlesource.com/c/go/+/177417 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2019-03-22misc/cgo: gofmt testdata filesTobias Klauser
Change-Id: I64e05a1f768cb57194506021bb7fdca0ad19bf1c Reviewed-on: https://go-review.googlesource.com/c/go/+/168461 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2019-03-01misc/cgo/testplugin: let TestMain run deferred functionsIan Lance Taylor
Split TestMain into two functions so that we can defer cleanups. Updates #30500 Change-Id: I4a5c7ddb8218a8bd056c8733c3cb9feb895e77a0 Reviewed-on: https://go-review.googlesource.com/c/164859 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
2019-02-26misc/cgo: skip cgotest.TestCrossPackageTests on iOS and set PWDBryan C. Mills
I hope that this will fix the tests on iOS, but 'gomote create' isn't giving me an instance I can test with. (Please patch and test before approving.) Updates #15919 Updates #30228 Change-Id: I1b7cd30d5b127a1ad3243b329fa005d229f69a24 Reviewed-on: https://go-review.googlesource.com/c/163726 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Elias Naur <mail@eliasnaur.com>
2019-02-24misc/cgo/testplugin: convert test.bash to Go and fix in module modeBryan C. Mills
Updates #30228 Updates #28387 Change-Id: Iad7d960b70221f90ccc2372bb1d4d41cec3926e4 Reviewed-on: https://go-review.googlesource.com/c/163214 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2018-10-06all: fix a bunch of misspellingsIgor Zhilianin
Change-Id: If2954bdfc551515403706b2cd0dde94e45936e08 GitHub-Last-Rev: d4cfc41a5504cf10befefdb881d4c45986a1d1f8 GitHub-Pull-Request: golang/go#28049 Reviewed-on: https://go-review.googlesource.com/c/140299 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-09-05misc/cgo/testplugin: disable DWARF tests on darwinAlessandro Arzilli
For some reason on darwin the linker still can't add debug sections to plugins. Executables importing "plugin" do have them, however. Because of issue 25841, plugins on darwin would likely have bad debug info anyway so, for now, this isn't a great loss. This disables the check for debug sections in plugins for darwin only. Updates #27502 Change-Id: Ib8f62dac1e485006b0c2b3ba04f86d733db5ee9a Reviewed-on: https://go-review.googlesource.com/133435 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2018-09-04cmd/link: move dwarf part of DWARF generation before type name manglingAlessandro Arzilli
Splits part of dwarfgeneratedebugsyms into a new function, dwarfGenerateDebugInfo which is called between deadcode elimination and type name mangling. This function takes care of collecting and processing the DIEs for all functions and package-level variables and also generates DIEs for all types used in the program. Fixes #23733 Change-Id: I75ef0608fbed2dffc3be7a477f1b03e7e740ec61 Reviewed-on: https://go-review.googlesource.com/111237 Run-TryBot: Heschi Kreinick <heschi@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com>
2018-06-11runtime: restore r2 when restoring state from gobuf in gogo on ppc64xLynn Boger
When using plugins with goroutines calling cgo, we hit a case where an intermittent SIGSEGV occurs when referencing an address that is based on r2 (TOC address). When the failure can be generated in gdb, the contents of r2 is wrong even though the value in the current stack's slot for r2 is correct. So that means it somehow switched to start running the code in this function without passing through the beginning of the function which had the correct value of r2 and stored it there. It was noted that in runtime.gogo when the state is restored from gobuf, r2 is not restored from its slot on the stack. Adding the instruction to restore r2 prevents the SIGSEGV. This adds a testcase under testplugin which reproduces the problem if the program is run multiple times. The team who reported this problem has verified it fixes the issue on their larger, more complex application. Fixes #25756 Change-Id: I6028b6f1f8775d5c23f4ebb57ae273330a28eb8f Reviewed-on: https://go-review.googlesource.com/117515 Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-03-15runtime: identify special functions by flag instead of addressKeith Randall
When there are plugins, there may not be a unique copy of runtime functions like goexit, mcall, etc. So identifying them by entry address is problematic. Instead, keep track of each special function using a field in the symbol table. That way, multiple copies of the same runtime function will be treated identically. Fixes #24351 Fixes #23133 Change-Id: Iea3232df8a6af68509769d9ca618f530cc0f84fd Reviewed-on: https://go-review.googlesource.com/100739 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-12-06misc/cgo/testplugin: unskip testRuss Cox
Fixed by CL 76025 yesterday, without realizing it: the testshared and testplugin builds of separate iface_i packages were colliding incorrectly in the cache. Including the build directory fixes that. Fixes #22571. Change-Id: Id8193781c67c3150823dc1f48eae781dfe3702fb Reviewed-on: https://go-review.googlesource.com/76371 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
2017-11-03cmd/go: cache successful test resultsRuss Cox
This CL adds caching of successful test results, keyed by the action ID of the test binary and its command line arguments. Suppose you run: go test -short std <edit a typo in a comment in math/big/float.go> go test -short std Before this CL, the second go test would re-run all the tests for the std packages. Now, the second go test will use the cached result immediately (without any compile or link steps) for any packages that do not transitively import math/big, and then it will, after compiling math/big and seeing that the .a file didn't change, reuse the cached test results for the remaining packages without any additional compile or link steps. Suppose that instead of editing a typo you made a substantive change to one function, but you left the others (including their line numbers) unchanged. Then the second go test will re-link any of the tests that transitively depend on math/big, but it still will not re-run the tests, because the link will result in the same test binary as the first run. The only cacheable test arguments are: -cpu -list -parallel -run -short -v Using any other test flag disables the cache for that run. The suggested argument to mean "turn off the cache" is -count=1 (asking "please run this 1 time, not 0"). There's an open question about re-running tests when inputs like environment variables and input files change. For now we will assume that users will bypass the test cache when they need to do so, using -count=1 or "go test" with no arguments. This CL documents the new cache but also documents the previously-undocumented distinction between "go test" with no arguments (now called "local directory mode") and with arguments (now called "package list mode"). It also cleans up a minor detail of package list mode buffering that used to change whether test binary stderr was sent to go command stderr based on details like exactly how many packages were listed or how many CPUs the host system had. Clearly the file descriptor receiving output should not depend on those, so package list mode now consistently merges all output to stdout, where before it mostly did that but not always. Fixes #11193. Change-Id: I120edef347b9ddd5b10e247bfd5bd768db9c2182 Reviewed-on: https://go-review.googlesource.com/75631 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
2017-10-26cmd/link, plugin: always encode pathDavid Crawshaw
Both the linker and the plugin package were inconsistent about when they applied the path encoding defined in objabi.PathToPrefix. As a result, only some symbols from a package path that required encoding were being found. So always encoding the path. Fixes #22295 Change-Id: Ife86c79ca20b2e9307008ed83885e193d32b7dc4 Reviewed-on: https://go-review.googlesource.com/72390 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-10-21misc/cgo/testplugin: speed up testsDavid Crawshaw
Running test.bash goes from 30s to 10s on a linux workstation. (The coming pkg cache work in cmd/go would presumably do the same thing, but this makes all.bash faster today.) Change-Id: I8c9b0400071a412fce55b386e939906bb1c1d84d Reviewed-on: https://go-review.googlesource.com/72330 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-10-13cmd/link, runtime: put hasmain bit in moduledataDavid Crawshaw
Currently we look to see if the main.main symbol address is in the module data text range. This requires access to the main.main symbol, which usually the runtime has, but does not when building a plugin. To avoid a dynamic relocation to main.main (which I haven't worked out how to have the linker generate on darwin), stop using the symbol. Instead record a boolean in the moduledata if the module has the main function. Fixes #22175 Change-Id: If313a118f17ab499d0a760bbc2519771ed654530 Reviewed-on: https://go-review.googlesource.com/69370 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-10-05cmd/link: type symbol name mangling for pluginsDavid Crawshaw
Moves type symbol name mangling out of the object reader and into a separate pass. Requires some care, as changing the name of a type may require dealing with duplicate symbols for the first time. Disables DWARF for both plugins and programs that use plugin.Open, because type manging is currently incompatible with the go.info.* symbol generator in cmd/link. (It relies on the symbol names to find type information.) A future fix for this would be moving the go.info.* generation into the compiler, with the logic we use for generating the type.* symbols. Fixes #19529 Change-Id: I75615f8bdda86ff9e767e536d9aa36e15c194098 Reviewed-on: https://go-review.googlesource.com/67312 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-10-04cmd/link: support -X values for main.* in pluginsDavid Crawshaw
Fixes #19418 Change-Id: I98205f40c1915cd68a5d20438469ba06f1efb160 Reviewed-on: https://go-review.googlesource.com/67432 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-09-29misc/cgo/testplugin: add test for issue 18584David Crawshaw
Fixes #18584 Change-Id: I5f9428758999cacee49f3449e596e0a88bc06f91 Reviewed-on: https://go-review.googlesource.com/67150 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-09-10misc/cgo/testplugin: pass GO_GCFLAGSDavid Crawshaw
The noopt builder sets GO_GCFLAGS when building the standard library. Set it when building plugins to ensure the -shared packages built for it have the same inlining in the export data (and thus the same package version). Tested locally with GO_GCFLAGS="-N -l" ./all.bash Fixes #17937 Change-Id: Id037cfbf4af744c05c47bdc58eea60a5dba69533 Reviewed-on: https://go-review.googlesource.com/62511 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-09-10cmd/go, cmd/link, cmd/dist: re-enable plugin mode on darwin/amd64Hiroshi Ioka
1. remove broken verification The runtime check assumes that no-pcln symbol entry have zero value, but the linker emit no entries if the symbol is no-pcln. As a result, if there are no-pcln symbols at the very end of pcln table, it will panic. 2. correct condition of export Handle special chracters in pluginpath correcty. Export "go.itab.*", so different plugins can share the same itab. Fixes #18190 Change-Id: Ia4f9c51d83ce8488a9470520f1ee9432802cfc1d Reviewed-on: https://go-review.googlesource.com/61091 Reviewed-by: David Crawshaw <crawshaw@golang.org> Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-09-09runtime, plugin: error not throw on duplicate openDavid Crawshaw
Along the way, track bad modules. Make sure they don't end up on the active modules list, and aren't accidentally reprocessed as new plugins. Fixes #19004 Change-Id: I8a5e7bb11f572f7b657a97d521a7f84822a35c07 Reviewed-on: https://go-review.googlesource.com/61171 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-09-09cmd/go: add source file contents to plugin hashDavid Crawshaw
It is common to have multiple plugins built from ephemeral source files all with the same name: # generate main.go go build -buildmode=plugin -o=p1.so main.go # rm main.go, generate new main.go go build -buildmode=plugin -o=p2.so main.go ... These different plugins currently have the same build ID, and hence the same package path. This means only one can be loaded. To remove this restriction, this commit adds the contents of the main package source files to the plugin hash. Fixes #19358 Change-Id: Icd42024b085feb29c09c2771aaecb85f8b528dd3 Reviewed-on: https://go-review.googlesource.com/61170 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-09-01cmd/go: pass plugin package name to compile -pDavid Crawshaw
When compiling a plugin, package main gets a new name so as not to conflict with the main package in the host binary, or any other plugins. It is already defined by cmd/go, and used by cmd/link when filling out the "" package placeholder in symbols. With this CL, the plugin-specific name for main is also passed to cmd/compile's -p flag. This is used to fill out the pkgpath field of types, and ensures that two types defined in two different plugin mains with the same name will not be mistaken for one another at runtime. Fixes #21386 Change-Id: I8a646d8d7451caff533fe0007343ea8b8e1704ed Reviewed-on: https://go-review.googlesource.com/60910 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-04-26plugin: resolve plugin import path issueTodd Neal
Resolve import paths to get plugin symbol prefixes. Fixes #19534 Change-Id: Ic25d83e72465ba8f6be0337218a1627b5dc702dc Reviewed-on: https://go-review.googlesource.com/40994 Run-TryBot: Todd Neal <todd@tneal.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
2017-04-12plugin: properly handle recursively defined typesTodd Neal
Prevent a crash if the same type in two plugins had a recursive definition, either by referring to a pointer to itself or a map existing with the type as a value type (which creates a recursive definition through the overflow bucket type). Fixes #19258 Change-Id: Iac1cbda4c5b6e8edd5e6859a4d5da3bad539a9c6 Reviewed-on: https://go-review.googlesource.com/40292 Run-TryBot: Todd Neal <todd@tneal.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
2017-01-17runtime: for plugins, don't add duplicate itabsKeith Randall
We already do this for shared libraries. Do it for plugins also. Suggestions on how to test this would be welcome. I'd like to get this in for 1.8. It could lead to mysterious hangs when using plugins. Fixes #18676 Change-Id: I03209b096149090b9ba171c834c5e59087ed0f92 Reviewed-on: https://go-review.googlesource.com/35117 Reviewed-by: David Crawshaw <crawshaw@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
2017-01-13misc/cgo/testplugin: test that types and itabs are uniqueKeith Randall
Make sure that the same type and itab generated in two different plugins are actually the same thing. See also CL 35115 Change-Id: I0c1ecb039d7e2bf5a601d58dfa162a435ae4ef76 Reviewed-on: https://go-review.googlesource.com/35116 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
2016-12-14cmd/link: do not export plugin C symbolsDavid Crawshaw
Explicitly filter any C-only cgo functions out of pclntable, which allows them to be duplicated with the host binary. Updates #18190. Change-Id: I50d8706777a6133b3e95f696bc0bc586b84faa9e Reviewed-on: https://go-review.googlesource.com/34199 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2016-12-10cmd/link: limit darwin dynlink symbol exportsDavid Crawshaw
The pclntable contains pointers to functions. If the function symbol is exported in a plugin, and there is a matching symbol in the host binary, then the pclntable of a plugin ends up pointing at the function in the host module. This doesn't work because the traceback code expects the pointer to be in the same module space as the PC value. So don't export functions that might overlap with the host binary. This way the pointer stays in its module. Updates #18190 Change-Id: Ifb77605b35fb0a1e7edeecfd22b1e335ed4bb392 Reviewed-on: https://go-review.googlesource.com/34196 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2016-11-16cmd/link: handle R_GOTPCREL separately on darwinDavid Crawshaw
To generate the correct section offset the shared code path for R_CALL, R_PCREL, and R_GOTPCREL on darwin when externally linking walks up the symbol heirarchy adding the differences. This is fine, except in the case where we are generating a GOT lookup, because the topmost symbol is left in r.Xsym instead of the symbol we are looking up. So all funcsym GOT lookups were looking up the outer "go.func.*" symbol. Fix this by separating out the R_GOTPCREL code path. For #17828 (and may fix it). Change-Id: I2c9f4d135e77c17270aa064d8c876dc6d485d659 Reviewed-on: https://go-review.googlesource.com/33211 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>