]> Cypherpunks repositories - gostls13.git/commitdiff
5a, 5c, 5g, 5l: fix build for Linux/ARM.
authorShenghou Ma <minux.ma@gmail.com>
Sun, 19 Feb 2012 23:11:16 +0000 (18:11 -0500)
committerRuss Cox <rsc@golang.org>
Sun, 19 Feb 2012 23:11:16 +0000 (18:11 -0500)
ARM doesn't have the concept of scale, so I renamed the field
Addr.scale to Addr.flag to better reflect its true meaning.

R=rsc
CC=golang-dev
https://golang.org/cl/5687044

src/cmd/5a/lex.c
src/cmd/5c/swt.c
src/cmd/5g/gg.h
src/cmd/5g/gobj.c
src/cmd/5g/gsubr.c
src/cmd/5l/asm.c
src/cmd/5l/l.h
src/cmd/5l/obj.c
src/libmach/5obj.c

index 4bef0219a2c5726caeb1f640eedba257a5e4142b..ab7e5228ecfe0808eed9d1c32a9b79db11f1a02f 100644 (file)
@@ -491,6 +491,7 @@ zaddr(Gen *a, int s)
 
        Bputc(&obuf, a->type);
        Bputc(&obuf, a->reg);
+       Bputc(&obuf, 0); // flag
        Bputc(&obuf, s);
        Bputc(&obuf, a->name);
        switch(a->type) {
index 7268f9af26726ddf5ccaaccfec69c61af0e31eca..124a9710f56bba49a3d9d65be3b59a44a55f4a53 100644 (file)
@@ -564,9 +564,10 @@ zaddr(char *bp, Adr *a, int s)
 
        bp[0] = a->type;
        bp[1] = a->reg;
-       bp[2] = s;
-       bp[3] = a->name;
-       bp += 4;
+       bp[2] = 0; // flag
+       bp[3] = s;
+       bp[4] = a->name;
+       bp += 5;
        switch(a->type) {
        default:
                diag(Z, "unknown type %d in zaddr", a->type);
index 7dbf3beecd0ce75197fd702da3f7fcf5544b82a7..99b26075e53d7fcff9850e377a0832bab7ca8316 100644 (file)
@@ -27,6 +27,7 @@ struct        Addr
        uchar   reg;
        char pun;
        uchar   etype;
+       char    flag;
 };
 #define        A       ((Addr*)0)
 
index b562ba888ba26115ccc0563a6a3f0e66bc42ba68..1e0e96f1d137583854ed564c0ac2bd2d74c71dc3 100644 (file)
@@ -93,6 +93,7 @@ zaddr(Biobuf *b, Addr *a, int s)
        default:
                Bputc(b, a->type);
                Bputc(b, a->reg);
+               Bputc(b, a->flag);
                Bputc(b, s);
                Bputc(b, a->name);
        }
index 61c91b8273c2c7657f3224cc41039c14c117aeb7..387ebad355135b77ae1db009d4055c5b9e65c375 100644 (file)
@@ -254,9 +254,9 @@ ggloblnod(Node *nam, int32 width)
        p->to.type = D_CONST;
        p->to.offset = width;
        if(nam->readonly)
-               p->from.scale = RODATA;
+               p->from.flag = RODATA;
        if(nam->type != T && !haspointers(nam->type))
-               p->from.scale |= NOPTR;
+               p->from.flag |= NOPTR;
 }
 
 void
@@ -273,6 +273,7 @@ ggloblsym(Sym *s, int32 width, int dupok)
        p->to.offset = width;
        if(dupok)
                p->reg = DUPOK;
+       p->from.flag |= RODATA;
 }
 
 int
index df33fbe251050856cc4965d0aebdc0f9d601c8b6..4a4bfe12923a84c393ac5e866f83e6be6ef19402 100644 (file)
@@ -74,6 +74,7 @@ enum {
        ElfStrRelPlt,
        ElfStrPlt,
        ElfStrNoteNetbsdIdent,
+       ElfStrNoPtrData,
        NElfStr
 };
 
@@ -164,6 +165,7 @@ doelf(void)
 
        elfstr[ElfStrEmpty] = addstring(shstrtab, "");
        elfstr[ElfStrText] = addstring(shstrtab, ".text");
+       elfstr[ElfStrNoPtrData] = addstring(shstrtab, ".noptrdata");
        elfstr[ElfStrData] = addstring(shstrtab, ".data");
        elfstr[ElfStrBss] = addstring(shstrtab, ".bss");
        if(HEADTYPE == Hnetbsd)
index b1a48ded89c7b48bdd0292cee1c7b502274461b7..4abb6f2f50ec2a61cd0d6672e232ae7bb8c3a176 100644 (file)
@@ -76,6 +76,7 @@ struct        Adr
        uchar   index; // not used on arm, required by ld/go.c
        char    reg;
        char    name;
+       char    flag;
        int32   offset2; // argsize
        char    class;
        Sym*    gotype;
index f395925e15eb97c282975397dfa8e72c38a5de86..316a9a01b394cd80c9c484e3cf42f1eb6ff6d5d6 100644 (file)
@@ -301,6 +301,7 @@ zaddr(Biobuf *f, Adr *a, Sym *h[])
 
        a->type = Bgetc(f);
        a->reg = Bgetc(f);
+       a->flag = Bgetc(f);
        c = Bgetc(f);
        if(c < 0 || c > NSYM){
                print("sym out of range: %d\n", c);
@@ -549,9 +550,9 @@ loop:
                        s->size = p->to.offset;
                if(p->reg & DUPOK)
                        s->dupok = 1;
-               if(p->from.scale & RODATA)
+               if(p->from.flag & RODATA)
                        s->type = SRODATA;
-               else if(p->from.scale & NOPTR)
+               else if(p->from.flag & NOPTR)
                        s->type = SNOPTRDATA;
                break;
 
index e539362b0b8f41e29572f31715d1ebd7e40fd5f5..a5827f55993ec9919875da9b2137d7b862047816 100644 (file)
@@ -112,7 +112,7 @@ addr(Biobuf *bp)
        long off;
 
        a.type = Bgetc(bp);     /* a.type */
-       skip(bp,1);             /* reg */
+       skip(bp,2);             /* reg, flag */
        a.sym = Bgetc(bp);      /* sym index */
        a.name = Bgetc(bp);     /* sym type */
        switch(a.type){