]> Cypherpunks repositories - gostls13.git/commitdiff
ld: add -u flag to check safe bits; discard old -u, -x flags
authorRuss Cox <rsc@golang.org>
Tue, 22 Jun 2010 01:03:49 +0000 (18:03 -0700)
committerRuss Cox <rsc@golang.org>
Tue, 22 Jun 2010 01:03:49 +0000 (18:03 -0700)
R=r, r2
CC=golang-dev
https://golang.org/cl/1707043

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

index 06a84eeace48aa591615a83819a84301dc34af90..1d09f286a5a0735facaee8a79ab77b11e0cfb51e 100644 (file)
@@ -135,16 +135,6 @@ main(int argc, char *argv[])
                HEADTYPE = atolwhex(EARGF(usage()));
                /* do something about setting INITTEXT */
                break;
-       case 'x':       /* produce export table */
-               doexp = 1;
-               if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
-                       readundefs(ARGF(), SEXPORT);
-               break;
-       case 'u':       /* produce dynamically loadable module */
-               dlm = 1;
-               if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
-                       readundefs(ARGF(), SIMPORT);
-               break;
        case 'V':
                print("%cl version %s\n", thechar, getgoversion());
                errorexit();
index b75f8bea28a9ca5de24954234a71acfd42718978..6a0d49f13510df2de440203ed96450fceb857943 100644 (file)
@@ -129,16 +129,6 @@ main(int argc, char *argv[])
        case 'r':
                rpath = EARGF(usage());
                break;
-       case 'x':       /* produce export table */
-               doexp = 1;
-               if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
-                       readundefs(ARGF(), SEXPORT);
-               break;
-       case 'u':       /* produce dynamically loadable module */
-               dlm = 1;
-               if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
-                       readundefs(ARGF(), SIMPORT);
-               break;
        case 'V':
                print("%cl version %s\n", thechar, getgoversion());
                errorexit();
index 7f99173796893218226e69b995d4c659718fd774..304187649f4efedad758664d0513de0003993cbc 100644 (file)
@@ -134,16 +134,6 @@ main(int argc, char *argv[])
        case 'r':
                rpath = EARGF(usage());
                break;
-       case 'x':       /* produce export table */
-               doexp = 1;
-               if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
-                       readundefs(ARGF(), SEXPORT);
-               break;
-       case 'u':       /* produce dynamically loadable module */
-               dlm = 1;
-               if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
-                       readundefs(ARGF(), SIMPORT);
-               break;
        case 'V':
                print("%cl version %s\n", thechar, getgoversion());
                errorexit();
index b5e0def7bef52bbc7564abce8d473ee8cad6fec1..2598a528f2f6e67ab8efd662efee30de0b207b11 100644 (file)
@@ -84,19 +84,28 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
 
        if((int)len != len) {
                fprint(2, "%s: too much pkg data in %s\n", argv0, filename);
+               if(debug['u'])
+                       errorexit();
                return;
        }
        data = mal(len+1);
        if(Bread(f, data, len) != len) {
                fprint(2, "%s: short pkg read %s\n", argv0, filename);
+               if(debug['u'])
+                       errorexit();
                return;
        }
        data[len] = '\0';
 
        // first \n$$ marks beginning of exports - skip rest of line
        p0 = strstr(data, "\n$$");
-       if(p0 == nil)
+       if(p0 == nil) {
+               if(debug['u']) {
+                       fprint(2, "%s: cannot find export data in %s\n", argv0, filename);
+                       errorexit();
+               }
                return;
+       }
        p0 += 3;
        while(*p0 != '\n' && *p0 != '\0')
                p0++;
@@ -105,6 +114,8 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
        p1 = strstr(p0, "\n$$");
        if(p1 == nil) {
                fprint(2, "%s: cannot find end of exports in %s\n", argv0, filename);
+               if(debug['u'])
+                       errorexit();
                return;
        }
        while(p0 < p1 && (*p0 == ' ' || *p0 == '\t' || *p0 == '\n'))
@@ -112,6 +123,8 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
        if(p0 < p1) {
                if(strncmp(p0, "package ", 8) != 0) {
                        fprint(2, "%s: bad package section in %s - %s\n", argv0, filename, p0);
+                       if(debug['u'])
+                               errorexit();
                        return;
                }
                p0 += 8;
@@ -120,6 +133,10 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
                name = p0;
                while(p0 < p1 && *p0 != ' ' && *p0 != '\t' && *p0 != '\n')
                        p0++;
+               if(debug['u'] && memcmp(p0, " safe\n", 6) != 0) {
+                       fprint(2, "%s: load of unsafe package %s\n", argv0, filename);
+                       errorexit();
+               }
                if(p0 < p1) {
                        *p0++ = '\0';
                        if(strcmp(pkg, "main") == 0 && strcmp(name, "main") != 0)
@@ -140,6 +157,8 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
        p1 = strstr(p0, "\n$$");
        if(p1 == nil) {
                fprint(2, "%s: cannot find end of local types in %s\n", argv0, filename);
+               if(debug['u'])
+                       errorexit();
                return;
        }
 
@@ -151,6 +170,8 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
                p0 = strchr(p0+1, '\n');
                if(p0 == nil) {
                        fprint(2, "%s: found $$ // dynimport but no newline in %s\n", argv0, filename);
+                       if(debug['u'])
+                               errorexit();
                        return;
                }
                p1 = strstr(p0, "\n$$");
@@ -158,6 +179,8 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
                        p1 = strstr(p0, "\n!\n");
                if(p1 == nil) {
                        fprint(2, "%s: cannot find end of // dynimport section in %s\n", argv0, filename);
+                       if(debug['u'])
+                               errorexit();
                        return;
                }
                loaddynimport(filename, p0 + 1, p1 - (p0+1));
@@ -169,6 +192,8 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
                p0 = strchr(p0+1, '\n');
                if(p0 == nil) {
                        fprint(2, "%s: found $$ // dynexporg but no newline in %s\n", argv0, filename);
+                       if(debug['u'])
+                               errorexit();
                        return;
                }
                p1 = strstr(p0, "\n$$");
@@ -176,6 +201,8 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
                        p1 = strstr(p0, "\n!\n");
                if(p1 == nil) {
                        fprint(2, "%s: cannot find end of // dynexporg section in %s\n", argv0, filename);
+                       if(debug['u'])
+                               errorexit();
                        return;
                }
                loaddynexport(filename, pkg, p0 + 1, p1 - (p0+1));