]> Cypherpunks repositories - gostls13.git/commitdiff
ld: fix Plan 9 symbol table
authorAnthony Martin <ality@pbrane.org>
Sat, 23 Apr 2011 14:53:49 +0000 (10:53 -0400)
committerRuss Cox <rsc@golang.org>
Sat, 23 Apr 2011 14:53:49 +0000 (10:53 -0400)
Static symbols were not being marked as such.

I also made the 'z' symbols use the first byte of
the name instead of an explicit NUL so that if
the symbol table format is ever changed, the only
place that would need updating is addhist().

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

src/cmd/ld/symtab.c

index aefe0b1af06bd363a6089ab9e984f6dbd0eb835f..da698fcc072c817dc101dd8c01f9f486e2ff9f07 100644 (file)
@@ -140,29 +140,25 @@ void
 putplan9sym(Sym *x, char *s, int t, vlong addr, vlong size, int ver, Sym *go)
 {
        int i;
-               
+
        switch(t) {
        case 'T':
-       case 't':
        case 'L':
-       case 'l':
        case 'D':
-       case 'd':
        case 'B':
-       case 'b':
+               if(ver)
+                       t += 'a' - 'A';
        case 'a':
        case 'p':
-       
        case 'f':
        case 'z':
        case 'Z':
-               
        case 'm':
                lputb(addr);
                cput(t+0x80); /* 0x80 is variable length */
-               
+
                if(t == 'z' || t == 'Z') {
-                       cput(0);
+                       cput(s[0]);
                        for(i=1; s[i] != 0 || s[i+1] != 0; i += 2) {
                                cput(s[i]);
                                cput(s[i+1]);
@@ -172,19 +168,17 @@ putplan9sym(Sym *x, char *s, int t, vlong addr, vlong size, int ver, Sym *go)
                        i++;
                } else {
                        /* skip the '<' in filenames */
-                       if(t=='f')
+                       if(t == 'f')
                                s++;
-                       
                        for(i=0; s[i]; i++)
                                cput(s[i]);
                        cput(0);
                }
-               
                symsize += 4 + 1 + i + 1;
                break;
        default:
                return;
-       };      
+       };
 }
 
 void