]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: stop linker crashing with -s flag on windows
authorAlex Brainman <alex.brainman@gmail.com>
Tue, 9 Jun 2015 06:16:42 +0000 (16:16 +1000)
committerAlex Brainman <alex.brainman@gmail.com>
Wed, 10 Jun 2015 06:49:23 +0000 (06:49 +0000)
Update #10254

Change-Id: I3ddd26607813ca629e3ab62abf87dc5ab453e36f
Reviewed-on: https://go-review.googlesource.com/10835
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/link/internal/ld/pe.go

index cb82c053d88b9c370f0eed8170911493478ab4a4..d5f7e629895a9687b75a891a755ce1b71d91147e 100644 (file)
@@ -545,10 +545,6 @@ func initdynimport() *Dll {
                                r.Off = 0
                                r.Siz = uint8(Thearch.Ptrsize)
                                r.Type = obj.R_ADDR
-
-                               // pre-allocate symtab entries for those symbols
-                               dynSym.Dynid = int32(ncoffsym)
-                               ncoffsym++
                        }
                }
        } else {
@@ -988,20 +984,25 @@ func addpesym(s *LSym, name string, type_ int, addr int64, size int64, ver int,
        ncoffsym++
 }
 
+func pegenasmsym(put func(*LSym, string, int, int64, int64, int, *LSym)) {
+       if Linkmode == LinkExternal {
+               for d := dr; d != nil; d = d.next {
+                       for m := d.ms; m != nil; m = m.next {
+                               s := m.s.R[0].Xsym
+                               put(s, s.Name, 'U', 0, int64(Thearch.Ptrsize), 0, nil)
+                       }
+               }
+       }
+       genasmsym(put)
+}
+
 func addpesymtable() {
-       if Debug['s'] == 0 {
-               genasmsym(addpesym)
+       if Debug['s'] == 0 || Linkmode == LinkExternal {
+               ncoffsym = 0
+               pegenasmsym(addpesym)
                coffsym = make([]COFFSym, ncoffsym)
                ncoffsym = 0
-               if Linkmode == LinkExternal {
-                       for d := dr; d != nil; d = d.next {
-                               for m := d.ms; m != nil; m = m.next {
-                                       s := m.s.R[0].Xsym
-                                       addpesym(s, s.Name, 'U', 0, int64(Thearch.Ptrsize), 0, nil)
-                               }
-                       }
-               }
-               genasmsym(addpesym)
+               pegenasmsym(addpesym)
        }
        size := len(strtbl) + 4 + 18*ncoffsym