]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
runtime/goc2c: Drop gc support, change int to intgo.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 31 Oct 2012 20:49:53 +0000 (20:49 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 31 Oct 2012 20:49:53 +0000 (20:49 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@193046 138bc75d-0d04-0410-961f-82ee72b054a4

libgo/Makefile.am
libgo/Makefile.in
libgo/runtime/goc2c.c

index f470c054860e5115824a69c9b33769a9088bffb1..cabe756a1c41bee7f323aac8df119aeead0c0fc5 100644 (file)
@@ -536,35 +536,35 @@ goc2c: goc2c.$(OBJEXT)
        $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ $<
 
 malloc.c: $(srcdir)/runtime/malloc.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 mprof.c: $(srcdir)/runtime/mprof.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 reflect.c: $(srcdir)/runtime/reflect.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 runtime1.c: $(srcdir)/runtime/runtime1.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 sema.c: $(srcdir)/runtime/sema.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 sigqueue.c: $(srcdir)/runtime/sigqueue.goc goc2c
-       ./goc2c --gcc --go-pkgpath os_signal $< > $@.tmp
+       ./goc2c --go-pkgpath os_signal $< > $@.tmp
        mv -f $@.tmp $@
 
 time.c: $(srcdir)/runtime/time.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 %.c: $(srcdir)/runtime/%.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 go_bufio_files = \
index b413094e841ab1d8affc442f175f930f6ff0fc72..8d80e08a6def189b313f99764fb19dfa34917ae7 100644 (file)
@@ -4310,35 +4310,35 @@ goc2c: goc2c.$(OBJEXT)
        $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ $<
 
 malloc.c: $(srcdir)/runtime/malloc.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 mprof.c: $(srcdir)/runtime/mprof.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 reflect.c: $(srcdir)/runtime/reflect.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 runtime1.c: $(srcdir)/runtime/runtime1.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 sema.c: $(srcdir)/runtime/sema.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 sigqueue.c: $(srcdir)/runtime/sigqueue.goc goc2c
-       ./goc2c --gcc --go-pkgpath os_signal $< > $@.tmp
+       ./goc2c --go-pkgpath os_signal $< > $@.tmp
        mv -f $@.tmp $@
 
 time.c: $(srcdir)/runtime/time.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 %.c: $(srcdir)/runtime/%.goc goc2c
-       ./goc2c --gcc $< > $@.tmp
+       ./goc2c $< > $@.tmp
        mv -f $@.tmp $@
 
 version.go: s-version; @true
index 55c6d9b2dc43c26e475eb6f62a7c198870637827..22295360a4b9663cf9a76c56be90fd9a56f7af62 100644 (file)
 #include <string.h>
 #include <errno.h>
 
-/* Whether we're emitting for gcc */
-static int gcc;
-
-/* Package path to use; only meaningful for gcc */
+/* Package path to use.  */
 static const char *pkgpath;
 
-/* Package prefix to use; only meaningful for gcc */
+/* Package prefix to use */
 static const char *prefix;
 
 /* File and line number */
@@ -50,53 +47,6 @@ struct params {
        char *type;
 };
 
-/* index into type_table */
-enum {
-       Bool,
-       Float,
-       Int,
-       Uint,
-       Uintptr,
-       String,
-       Slice,
-       Eface,
-};
-
-static struct {
-       char *name;
-       int size;
-} type_table[] = {
-       /* variable sized first, for easy replacement */
-       /* order matches enum above */
-       /* default is 32-bit architecture sizes */
-       "bool",         1,
-       "float",        4,
-       "int",          4,
-       "uint",         4,
-       "uintptr",      4,
-       "String",       8,
-       "Slice",        12,
-       "Eface",        8,
-
-       /* fixed size */
-       "float32",      4,
-       "float64",      8,
-       "byte",         1,
-       "int8",         1,
-       "uint8",        1,
-       "int16",        2,
-       "uint16",       2,
-       "int32",        4,
-       "uint32",       4,
-       "int64",        8,
-       "uint64",       8,
-
-       NULL,
-};
-
-/* Fixed structure alignment (non-gcc only) */
-int structround = 4;
-
 char *argv0;
 
 static void
@@ -147,6 +97,15 @@ xrealloc(void *buf, unsigned int size)
        return ret;
 }
 
+/* Copy a string into memory without fail.  */
+static char *
+xstrdup(const char *p)
+{
+       char *ret = xmalloc(strlen(p) + 1);
+       strcpy(ret, p);
+       return ret;
+}
+
 /* Free a list of parameters.  */
 static void
 free_params(struct params *p)
@@ -351,14 +310,29 @@ read_type(void)
        unsigned int len;
 
        p = read_token_no_eof();
-       if (*p != '*')
+       if (*p != '*') {
+               /* Convert the Go type "int" to the C type "intgo",
+                  and similarly for "uint".  */
+               if (strcmp(p, "int") == 0)
+                       return xstrdup("intgo");
+               else if (strcmp(p, "uint") == 0)
+                       return xstrdup("uintgo");
                return p;
+       }
        op = p;
        pointer_count = 0;
        while (*p == '*') {
                ++pointer_count;
                ++p;
        }
+
+       /* Convert the Go type "int" to the C type "intgo", and
+          similarly for "uint".  */
+       if (strcmp(p, "int") == 0)
+         p = (char *) "intgo";
+       else if (strcmp(p, "uint") == 0)
+         p = (char *) "uintgo";
+
        len = strlen(p);
        q = xmalloc(len + pointer_count + 1);
        memcpy(q, p, len);
@@ -372,39 +346,19 @@ read_type(void)
        return q;
 }
 
-/* Return the size of the given type. */
-static int
-type_size(char *p)
-{
-       int i;
-
-       if(p[strlen(p)-1] == '*')
-               return type_table[Uintptr].size;
-
-       for(i=0; type_table[i].name; i++)
-               if(strcmp(type_table[i].name, p) == 0)
-                       return type_table[i].size;
-       if(!gcc) {
-               sysfatal("%s:%ud: unknown type %s\n", file, lineno, p);
-       }
-       return 1;
-}
-
 /*
  * Read a list of parameters.  Each parameter is a name and a type.
  * The list ends with a ')'.  We have already read the '('.
  */
 static struct params *
-read_params(int *poffset)
+read_params()
 {
        char *token;
        struct params *ret, **pp, *p;
-       int offset, size, rnd;
 
        ret = NULL;
        pp = &ret;
        token = read_token_no_eof();
-       offset = 0;
        if (strcmp(token, ")") != 0) {
                while (1) {
                        p = xmalloc(sizeof(struct params));
@@ -414,14 +368,6 @@ read_params(int *poffset)
                        *pp = p;
                        pp = &p->next;
 
-                       size = type_size(p->type);
-                       rnd = size;
-                       if(rnd > structround)
-                               rnd = structround;
-                       if(offset%rnd)
-                               offset += rnd - offset%rnd;
-                       offset += size;
-
                        token = read_token_no_eof();
                        if (strcmp(token, ",") != 0)
                                break;
@@ -432,8 +378,6 @@ read_params(int *poffset)
                sysfatal("%s:%ud: expected '('\n",
                        file, lineno);
        }
-       if (poffset != NULL)
-               *poffset = offset;
        return ret;
 }
 
@@ -442,7 +386,7 @@ read_params(int *poffset)
  * '{' character.  Returns 1 if it read a header, 0 at EOF.
  */
 static int
-read_func_header(char **name, struct params **params, int *paramwid, struct params **rets)
+read_func_header(char **name, struct params **params, struct params **rets)
 {
        int lastline;
        char *token;
@@ -474,13 +418,13 @@ read_func_header(char **name, struct params **params, int *paramwid, struct para
                sysfatal("%s:%ud: expected \"(\"\n",
                        file, lineno);
        }
-       *params = read_params(paramwid);
+       *params = read_params();
 
        token = read_token();
        if (token == NULL || strcmp(token, "(") != 0)
                *rets = NULL;
        else {
-               *rets = read_params(NULL);
+               *rets = read_params();
                token = read_token();
        }
        if (token == NULL || strcmp(token, "{") != 0) {
@@ -505,43 +449,6 @@ write_params(struct params *params, int *first)
        }
 }
 
-/* Write a 6g function header.  */
-static void
-write_6g_func_header(char *package, char *name, struct params *params,
-                    int paramwid, struct params *rets)
-{
-       int first, n;
-
-       printf("void\n%s·%s(", package, name);
-       first = 1;
-       write_params(params, &first);
-
-       /* insert padding to align output struct */
-       if(rets != NULL && paramwid%structround != 0) {
-               n = structround - paramwid%structround;
-               if(n & 1)
-                       printf(", uint8");
-               if(n & 2)
-                       printf(", uint16");
-               if(n & 4)
-                       printf(", uint32");
-       }
-
-       write_params(rets, &first);
-       printf(")\n{\n");
-}
-
-/* Write a 6g function trailer.  */
-static void
-write_6g_func_trailer(struct params *rets)
-{
-       struct params *p;
-
-       for (p = rets; p != NULL; p = p->next)
-               printf("\tFLUSH(&%s);\n", p->name);
-       printf("}\n");
-}
-
 /* Define the gcc function return type if necessary.  */
 static void
 define_gcc_return_type(char *package, char *name, struct params *rets)
@@ -619,14 +526,10 @@ write_gcc_func_trailer(char *package, char *name, struct params *rets)
 
 /* Write out a function header.  */
 static void
-write_func_header(char *package, char *name,
-                 struct params *params, int paramwid,
+write_func_header(char *package, char *name, struct params *params, 
                  struct params *rets)
 {
-       if (gcc)
-               write_gcc_func_header(package, name, params, rets);
-       else
-               write_6g_func_header(package, name, params, paramwid, rets);
+       write_gcc_func_header(package, name, params, rets);
        printf("#line %d \"%s\"\n", lineno, file);
 }
 
@@ -635,10 +538,7 @@ static void
 write_func_trailer(char *package, char *name,
                   struct params *rets)
 {
-       if (gcc)
-               write_gcc_func_trailer(package, name, rets);
-       else
-               write_6g_func_trailer(rets);
+       write_gcc_func_trailer(package, name, rets);
 }
 
 /*
@@ -713,12 +613,11 @@ process_file(void)
 {
        char *package, *name;
        struct params *params, *rets;
-       int paramwid;
 
        package = read_package();
        read_preprocessor_lines();
-       while (read_func_header(&name, &params, &paramwid, &rets)) {
-               write_func_header(package, name, params, paramwid, rets);
+       while (read_func_header(&name, &params, &rets)) {
+               write_func_header(package, name, params, rets);
                copy_body();
                write_func_trailer(package, name, rets);
                free(name);
@@ -731,7 +630,7 @@ process_file(void)
 static void
 usage(void)
 {
-       sysfatal("Usage: goc2c [--6g | --gc] [--go-pkgpath PKGPATH] [--go-prefix PREFIX] [file]\n");
+       sysfatal("Usage: goc2c [--go-pkgpath PKGPATH] [--go-prefix PREFIX] [file]\n");
 }
 
 void
@@ -743,11 +642,7 @@ main(int argc, char **argv)
        while(argc > 1 && argv[1][0] == '-') {
                if(strcmp(argv[1], "-") == 0)
                        break;
-               if(strcmp(argv[1], "--6g") == 0)
-                       gcc = 0;
-               else if(strcmp(argv[1], "--gcc") == 0)
-                       gcc = 1;
-               else if (strcmp(argv[1], "--go-pkgpath") == 0 && argc > 2) {
+               if (strcmp(argv[1], "--go-pkgpath") == 0 && argc > 2) {
                        pkgpath = argv[2];
                        argc--;
                        argv++;
@@ -775,18 +670,6 @@ main(int argc, char **argv)
                sysfatal("open %s: %r\n", file);
        }
 
-       if(!gcc) {
-               // 6g etc; update size table
-               goarch = getenv("GOARCH");
-               if(goarch != NULL && strcmp(goarch, "amd64") == 0) {
-                       type_table[Uintptr].size = 8;
-                       type_table[String].size = 16;
-                       type_table[Slice].size = 8+4+4;
-                       type_table[Eface].size = 8+8;
-                       structround = 8;
-               }
-       }
-
        printf("// AUTO-GENERATED by autogen.sh; DO NOT EDIT\n\n");
        process_file();
        exit(0);