]> Cypherpunks repositories - gostls13.git/commitdiff
ld: fix link Windows PE __declspec(dllimport) symbol
authorWei Guangjing <vcc.163@gmail.com>
Tue, 14 Jun 2011 15:05:59 +0000 (11:05 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 14 Jun 2011 15:05:59 +0000 (11:05 -0400)
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/4568077

src/cmd/ld/data.c
src/cmd/ld/ldpe.c

index 3f3faade0be3e3cda8ee2303eadf9fe2d73a4026..cd485072e7b55c57a2bef6ae97249bd1c952bae2 100644 (file)
@@ -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;
index d6aa267c4e2c8ffb48cc57119d7df410d5e08305..77a8b82e4c5eb2a15c6c659a1b4436f34bcb42df 100644 (file)
@@ -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;