]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/ld: portability fixes
authorShenghou Ma <minux.ma@gmail.com>
Thu, 21 Mar 2013 20:00:54 +0000 (04:00 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Thu, 21 Mar 2013 20:00:54 +0000 (04:00 +0800)
fix code that implicitly assumes little-endian machines.

R=golang-dev, bradfitz, rsc, alex.brainman
CC=golang-dev
https://golang.org/cl/6792043

src/cmd/ld/ldpe.c

index 39c15e6a14e6c5505c9870c71520c91213419188..98923bfbf6d6f9c5991c44f95bb4804a89af87e1 100644 (file)
@@ -135,7 +135,8 @@ ldpe(Biobuf *f, char *pkg, int64 len, char *pn)
 {
        char *name;
        int32 base;
-       int i, j, l, numaux;
+       uint32 l;
+       int i, j, numaux;
        PeObj *obj;
        PeSect *sect, *rsect;
        IMAGE_SECTION_HEADER sh;
@@ -170,11 +171,12 @@ ldpe(Biobuf *f, char *pkg, int64 len, char *pn)
                // TODO return error if found .cormeta
        }
        // load string table
-       Bseek(f, base+obj->fh.PointerToSymbolTable+18*obj->fh.NumberOfSymbols, 0);
-       if(Bread(f, &l, sizeof l) != sizeof l
+       Bseek(f, base+obj->fh.PointerToSymbolTable+sizeof(symbuf)*obj->fh.NumberOfSymbols, 0);
+       if(Bread(f, symbuf, 4) != 4
                goto bad;
+       l = le32(symbuf);
        obj->snames = mal(l);
-       Bseek(f, base+obj->fh.PointerToSymbolTable+18*obj->fh.NumberOfSymbols, 0);
+       Bseek(f, base+obj->fh.PointerToSymbolTable+sizeof(symbuf)*obj->fh.NumberOfSymbols, 0);
        if(Bread(f, obj->snames, l) != l)
                goto bad;
        // read symbols