aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld
diff options
context:
space:
mode:
authorShenghou Ma <minux.ma@gmail.com>2013-03-11 14:24:51 +0800
committerShenghou Ma <minux.ma@gmail.com>2013-03-11 14:24:51 +0800
commit960d7082ee9b8fda91444167b3c253d5cf5e115d (patch)
tree3a2f565bce8dad08128721c6af86e36a16a2c09c /src/cmd/ld
parent72dd01451f58a5b1a1cdd1d92810a8ab0d75d97d (diff)
downloadgo-960d7082ee9b8fda91444167b3c253d5cf5e115d.tar.xz
cmd/ld, runtime/cgo: allow a symbol to be both cgo_export and cgo_import.
Fixes #4878. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/7420052
Diffstat (limited to 'src/cmd/ld')
-rw-r--r--src/cmd/ld/go.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/cmd/ld/go.c b/src/cmd/ld/go.c
index 27307819fc..ff1f5f437b 100644
--- a/src/cmd/ld/go.c
+++ b/src/cmd/ld/go.c
@@ -499,11 +499,16 @@ loadcgo(char *file, char *pkg, char *p, int n)
remote = local;
local = expandpkg(local, pkg);
s = lookup(local, 0);
+
+ // export overrides import, for openbsd/cgo.
+ // see issue 4878.
if(s->dynimplib != nil) {
- fprint(2, "%s: symbol is both imported and exported: %s\n", argv0, local);
- nerrors++;
+ s->dynimplib = nil;
+ s->extname = nil;
+ s->dynimpvers = nil;
+ s->type = 0;
}
-
+
if(s->cgoexport == 0) {
if(strcmp(f[0], "cgo_export_static") == 0)
s->cgoexport |= CgoExportStatic;