]> Cypherpunks repositories - gostls13.git/commitdiff
the ld-supplied typestrings are now obsolete
authorRuss Cox <rsc@golang.org>
Wed, 8 Jul 2009 00:35:45 +0000 (17:35 -0700)
committerRuss Cox <rsc@golang.org>
Wed, 8 Jul 2009 00:35:45 +0000 (17:35 -0700)
R=r
DELTA=167  (0 added, 167 deleted, 0 changed)
OCL=31304
CL=31316

src/cmd/5l/l.h
src/cmd/5l/obj.c
src/cmd/6l/l.h
src/cmd/6l/obj.c
src/cmd/8l/l.h
src/cmd/8l/obj.c
src/cmd/ld/go.c

index 685b9ce557dd7130e1ef4ad2dd2eff3d6b8a55dc..df47d9055ad11dc038a35669a6632f7f0699f5a6 100644 (file)
@@ -498,8 +498,6 @@ int linuxstrtable(void);
  *     go.c
  */
 void   deadcode(void);
-void   definetypestrings(void);
-void   definetypesigs(void);
 char*  gotypefor(char *name);
 void   ldpkg(Biobuf *f, int64 len, char *filename);
 
index bcb2110f015cc8f3ec11a70ff520bf7385b73230..202c2e800469bc45fc96ff614b25b6c18dd49210 100644 (file)
@@ -279,8 +279,6 @@ main(int argc, char *argv[])
                sprint(a, "%s/pkg/%s_%s/runtime.a", goroot, goos, goarch);
                objfile(a);
        }
-       definetypestrings();
-       definetypesigs();
        deadcode();
 
        firstp = firstp->link;
index 3e6892c47e1cddf298497f906f578ce2da9785b8..41e233f62a108e2c4803c39a19203fe69f376a9c 100644 (file)
@@ -387,8 +387,6 @@ Prog*       copyp(Prog*);
 double cputime(void);
 void   datblk(int32, int32);
 void   deadcode(void);
-void   definetypestrings(void);
-void   definetypesigs(void);
 void   diag(char*, ...);
 void   dodata(void);
 void   doinit(void);
index a149ed07fd9f110d411ee844dd86ed0ebb1660d1..bcaa9da3b1bfc5d7a9316b5e9effa04b3ec67499 100644 (file)
@@ -362,8 +362,6 @@ main(int argc, char *argv[])
                sprint(a, "%s/pkg/%s_%s/runtime.a", goroot, goos, goarch);
                objfile(a);
        }
-       definetypestrings();
-       definetypesigs();
        deadcode();
 
        firstp = firstp->link;
index d06d050de3b30dacf914dfdf1aa05309c778e192..a1fcd2232a5eba0b1e67a48a0ea93903c31dbd21 100644 (file)
@@ -391,8 +391,6 @@ void        whatsys(void);
  *     go.c
  */
 void   deadcode(void);
-void   definetypestrings(void);
-void   definetypesigs(void);
 char*  gotypefor(char *name);
 void   ldpkg(Biobuf *f, int64 len, char *filename);
 
index ef4e9a9b9021df43877973e5e01d2c80bf78e57d..5d230939d1577d9a645746c1ade307456df5a086 100644 (file)
@@ -332,8 +332,6 @@ main(int argc, char *argv[])
                sprint(a, "%s/pkg/%s_%s/runtime.a", goroot, goos, goarch);
                objfile(a);
        }
-       definetypestrings();
-       definetypesigs();
        deadcode();
 
        firstp = firstp->link;
index 6c2cbc09bc7a5e0c26b6fc8990265dc9884ee0a3..c138a8d43b9d63dd880cb7c9327529ba5d103cf7 100644 (file)
@@ -6,11 +6,8 @@
 
 // accumulate all type information from .6 files.
 // check for inconsistencies.
-// define gotypestrings variable if needed.
-// define gotypesigs variable if needed.
 
 // TODO:
-//     include type info for non-exported types.
 //     generate debugging section in binary.
 //     once the dust settles, try to move some code to
 //             libmach, so that other linkers and ar can share.
@@ -338,158 +335,6 @@ symcmp(const void *va, const void *vb)
        return strcmp(a->name, b->name);
 }
 
-// if there is an undefined reference to gotypestrings,
-// create it.  c declaration is
-//     extern char gotypestrings[];
-// ironically, gotypestrings is a c variable, because there
-// is no way to forward declare a string in go.
-void
-definetypestrings(void)
-{
-       int i, j, len, n, w;
-       char *p;
-       Import **all, *x;
-       Fmt f;
-       Prog *prog;
-       Sym *s;
-
-       if(debug['g'])
-               return;
-
-       if(debug['v'])
-               Bprint(&bso, "%5.2f definetypestrings\n", cputime());
-
-       s = lookup("gotypestrings", 0);
-       if(s->type == 0)
-               return;
-       if(s->type != SXREF) {
-               diag("gotypestrings already defined");
-               return;
-       }
-       s->type = SDATA;
-
-       // make a list of all the type exports
-       n = 0;
-       for(i=0; i<NIHASH; i++)
-               for(x=ihash[i]; x; x=x->hash)
-                       if(strcmp(x->prefix, "type") == 0)
-                               n++;
-       all = mal(n*sizeof all[0]);
-       j = 0;
-       for(i=0; i<NIHASH; i++)
-               for(x=ihash[i]; x; x=x->hash)
-                       if(strcmp(x->prefix, "type") == 0)
-                               all[j++] = x;
-
-       // sort them by name
-       qsort(all, n, sizeof all[0], importcmp);
-
-       // make a big go string containing all the types
-       fmtstrinit(&f);
-       fmtprint(&f, "xxxx");   // 4-byte length
-       for(i=0; i<n; i++) {
-               p = strchr(all[i]->def, '\n');
-               if(p)
-                       len = p - all[i]->def;
-               else
-                       len = strlen(all[i]->def);
-               fmtprint(&f, "%s %.*s\n", all[i]->name, utfnlen(all[i]->def, len), all[i]->def);
-       }
-       p = fmtstrflush(&f);
-       n = strlen(p);
-       s->value = n;
-
-       // go strings begin with 4-byte length.
-       // amd64 is little-endian.
-       len = n - 4;
-       p[0] = len;
-       p[1] = len >> 8;
-       p[2] = len >> 16;
-       p[3] = len >> 24;
-
-       // have data, need to create linker representation.
-       // linker stores big data as sequence of pieces
-       // with int8 length, so break p into 100-byte chunks.
-       // (had to add D_SBIG even to do that; the compiler
-       // would have generated 8-byte chunks.)
-       for(i=0; i<n; i+=100) {
-               w = 100;
-               if(w > n - i)
-                       w = n - i;
-               prog = newdata(s, i, w, D_EXTERN);
-               prog->to.type = D_SBIG;
-               prog->to.sbig = p + i;
-       }
-
-       if(debug['v'])
-               Bprint(&bso, "%5.2f typestrings %d\n", cputime(), n);
-}
-
-// if there is an undefined reference to gotypesigs, create it.
-// c declaration is
-//     extern Sigt *gotypesigs[];
-//     extern int ngotypesigs;
-// used by sys.unreflect runtime.
-void
-definetypesigs(void)
-{
-       int i, j, n;
-       Sym **all, *s, *x;
-       Prog *prog;
-
-       if(debug['g'])
-               return;
-
-       if(debug['v'])
-               Bprint(&bso, "%5.2f definetypesigs\n", cputime());
-
-       s = lookup("gotypesigs", 0);
-       if(s->type == 0)
-               return;
-       if(s->type != SXREF) {
-               diag("gotypesigs already defined");
-               return;
-       }
-       s->type = SDATA;
-
-       // make a list of all the sigt symbols.
-       n = 0;
-       for(i=0; i<NHASH; i++)
-               for(x = hash[i]; x; x=x->link)
-                       if(memcmp(x->name, "sigtĀ·", 6) == 0 && x->type != Sxxx)
-                               n++;
-       all = mal(n*sizeof all[0]);
-       j = 0;
-       for(i=0; i<NHASH; i++)
-               for(x = hash[i]; x; x=x->link)
-                       if(memcmp(x->name, "sigtĀ·", 6) == 0 && x->type != Sxxx)
-                               all[j++] = x;
-
-       // sort them by name
-       qsort(all, n, sizeof all[0], symcmp);
-
-       // emit array as sequence of references.
-       for(i=0; i<n; i++) {
-               prog = newdata(s, PtrSize*i, PtrSize, D_EXTERN);
-               prog->to.type = D_ADDR;
-               prog->to.index = D_EXTERN;
-               prog->to.sym = all[i];
-       }
-       s->value = PtrSize*n;
-       if(n == 0)
-               s->value = 1;   // must have non-zero size or 6l complains
-
-       // emit count
-       s = lookup("ngotypesigs", 0);
-       s->type = SDATA;
-       s->value = sizeof(int32);
-       prog = newdata(s, 0, sizeof(int32), D_EXTERN);
-       prog->to.offset = n;
-
-       if(debug['v'])
-               Bprint(&bso, "%5.2f typesigs %d\n", cputime(), n);
-}
-
 static void mark(Sym*);
 static int markdepth;