aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld
diff options
context:
space:
mode:
authorWei Guangjing <vcc.163@gmail.com>2011-06-14 11:05:59 -0400
committerRuss Cox <rsc@golang.org>2011-06-14 11:05:59 -0400
commit9e2ffc315f93ea8cf1c6fba38d2233c802b3d9e9 (patch)
tree13e40e62ff51ebdb204b1202f624b1c9d00aab59 /src/cmd/ld
parent2ad42a82496afa45cc362a65e3e5c70d9578de78 (diff)
downloadgo-9e2ffc315f93ea8cf1c6fba38d2233c802b3d9e9.tar.xz
ld: fix link Windows PE __declspec(dllimport) symbol
R=golang-dev, rsc CC=golang-dev https://golang.org/cl/4568077
Diffstat (limited to 'src/cmd/ld')
-rw-r--r--src/cmd/ld/data.c2
-rw-r--r--src/cmd/ld/ldpe.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/src/cmd/ld/data.c b/src/cmd/ld/data.c
index 3f3faade0b..cd485072e7 100644
--- a/src/cmd/ld/data.c
+++ b/src/cmd/ld/data.c
@@ -249,7 +249,7 @@ dynrelocsym(Sym *s)
return;
for(r=s->r; r<s->r+s->nr; r++) {
targ = r->sym;
- if(r->sym->plt == -2) { // make dynimport JMP table for PE object files.
+ if(r->sym->plt == -2 && r->sym->got != -2) { // make dynimport JMP table for PE object files.
targ->plt = rel->size;
r->sym = rel;
r->add = targ->plt;
diff --git a/src/cmd/ld/ldpe.c b/src/cmd/ld/ldpe.c
index d6aa267c4e..77a8b82e4c 100644
--- a/src/cmd/ld/ldpe.c
+++ b/src/cmd/ld/ldpe.c
@@ -403,6 +403,8 @@ readsym(PeObj *obj, int i, PeSym **y)
if(s != nil && s->type == 0 && !(sym->sclass == IMAGE_SYM_CLASS_STATIC && sym->value == 0))
s->type = SXREF;
+ if(strncmp(sym->name, "__imp__", 6) == 0)
+ s->got = -2; // flag for __imp__
sym->sym = s;
return 0;