]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cc,runtime: change preprocessor to expand macros inside of
authorKeith Randall <khr@golang.org>
Thu, 29 Aug 2013 19:36:59 +0000 (12:36 -0700)
committerKeith Randall <khr@golang.org>
Thu, 29 Aug 2013 19:36:59 +0000 (12:36 -0700)
#pragma textflag and #pragma dataflag directives.
Update dataflag directives to use symbols instead of integer constants.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/13310043

src/cmd/cc/dpchk.c
src/cmd/ld/textflag.h
src/pkg/runtime/hashmap.c
src/pkg/runtime/malloc.goc
src/pkg/runtime/mgc0.c
src/pkg/runtime/os_linux.c
src/pkg/runtime/os_plan9.c
src/pkg/runtime/os_windows.c
src/pkg/runtime/sema.goc

index 34163ff926ce0179ff6d70a23894b9a8ec8e511e..606bf40dd9e1d9ad148e2b8cc0255e0dcc96ab6a 100644 (file)
@@ -567,7 +567,19 @@ pragfpround(void)
 void
 pragtextflag(void)
 {
-       textflag = getnsn();
+       Sym *s;
+
+       s = getsym();
+       if(s == S) {
+               textflag = getnsn();
+       } else {
+               if(s->macro) {
+                       macexpand(s, symb);
+               }
+               if(symb[0] < '0' || symb[0] > '9')
+                       yyerror("pragma textflag not an integer");
+               textflag = atoi(symb);
+       }
        while(getnsc() != '\n')
                ;
        if(debug['f'])
@@ -577,7 +589,19 @@ pragtextflag(void)
 void
 pragdataflag(void)
 {
-       dataflag = getnsn();
+       Sym *s;
+
+       s = getsym();
+       if(s == S) {
+               dataflag = getnsn();
+       } else {
+               if(s->macro) {
+                       macexpand(s, symb);
+               }
+               if(symb[0] < '0' || symb[0] > '9')
+                       yyerror("pragma dataflag not an integer");
+               dataflag = atoi(symb);
+       }
        while(getnsc() != '\n')
                ;
        if(debug['f'])
index 7b16865be4b31235770ba30dab82d3864fe4da91..64ae647fb60298906d8b414fb3cf807f0a138b8e 100644 (file)
@@ -7,13 +7,13 @@
 // all agree on these values.
 
 // Don't profile the marked routine.  This flag is deprecated.
-#define NOPROF (1<<0)
+#define NOPROF 1
 // It is ok for the linker to get multiple of these symbols.  It will
 // pick one of the duplicates to use.
-#define DUPOK  (1<<1)
+#define DUPOK  2
 // Don't insert stack check preamble.
-#define NOSPLIT        (1<<2)
+#define NOSPLIT        4
 // Put this data in a read-only section.
-#define RODATA (1<<3)
+#define RODATA 8
 // This data contains no pointers.
-#define NOPTR  (1<<4)
+#define NOPTR  16
index a721d4a535b4cc002224eb915733878283287330..36cbda5abe28e3caf5621d31a8cd0238327d4889 100644 (file)
@@ -8,6 +8,7 @@
 #include "hashmap.h"
 #include "type.h"
 #include "race.h"
+#include "../../cmd/ld/textflag.h"
 
 // This file contains the implementation of Go's map type.
 //
@@ -524,7 +525,7 @@ hash_lookup(MapType *t, Hmap *h, byte **keyp)
 }
 
 // When an item is not found, fast versions return a pointer to this zeroed memory.
-#pragma dataflag 16 // no pointers
+#pragma dataflag RODATA
 static uint8 empty_value[MAXVALUESIZE];
 
 // Specialized versions of mapaccess1 for specific types.
@@ -593,7 +594,6 @@ static uint8 empty_value[MAXVALUESIZE];
 #define SLOW_EQ(x,y) runtime·memeq((x).str, (y).str, (x).len)
 #define MAYBE_EQ(x,y) (*(CHECKTYPE*)(x).str == *(CHECKTYPE*)(y).str && *(CHECKTYPE*)((x).str + (x).len - sizeof(CHECKTYPE)) == *(CHECKTYPE*)((y).str + (x).len - sizeof(CHECKTYPE)))
 #include "hashmap_fast.c"
-#include "../../cmd/ld/textflag.h"
 
 static void
 hash_insert(MapType *t, Hmap *h, void *key, void *value)
index 405eae1f11258fe80a7bce4ed19d39fe4c7a8afc..a28e35d04b84871e9c08d431c95d74a9a5e34cc6 100644 (file)
@@ -17,7 +17,7 @@ package runtime
 #include "../../cmd/ld/textflag.h"
 
 // Mark mheap as 'no pointers', it does not contain interesting pointers but occupies ~45K.
-#pragma dataflag 16
+#pragma dataflag NOPTR
 MHeap runtime·mheap;
 
 int32  runtime·checking;
index 9fbf008b4aebf625648d1a755e591e39f5dadc5b..23e1140465fa1d3ded60de5b22996d7eccb3145a 100644 (file)
@@ -14,6 +14,7 @@
 #include "typekind.h"
 #include "hashmap.h"
 #include "funcdata.h"
+#include "../../cmd/ld/textflag.h"
 
 enum {
        Debug = 0,
@@ -299,7 +300,7 @@ struct BufferList
        uint32 busy;
        byte pad[CacheLineSize];
 };
-#pragma dataflag 16  // no pointers
+#pragma dataflag NOPTR
 static BufferList bufferList[MaxGcproc];
 
 static Type *itabtype;
index 0c2c40441a156fad96af1e3c2c4f8c0044ce194a..cb45fe8cee9dfc4a82c533d3dda03024f580369f 100644 (file)
@@ -169,7 +169,7 @@ runtime·get_random_data(byte **rnd, int32 *rnd_len)
                *rnd = runtime·startup_random_data;
                *rnd_len = runtime·startup_random_data_len;
        } else {
-               #pragma dataflag 16 // no pointers
+               #pragma dataflag NOPTR
                static byte urandom_data[HashRandomBytes];
                int32 fd;
                fd = runtime·open("/dev/urandom", 0 /* O_RDONLY */, 0);
index 2f6d4f224fb932f9bcbc378c1d442ce09e538907..07db2c3055a96402ce14000aede70fa39eb428de 100644 (file)
@@ -324,7 +324,7 @@ runtime·memlimit(void)
        return 0;
 }
 
-#pragma dataflag 16 // no pointers
+#pragma dataflag NOPTR
 static int8 badsignal[] = "runtime: signal received on thread not created by Go.\n";
 
 // This runs on a foreign stack, without an m or a g.  No stack split.
index 96d9f91c5b1342462f03fdb18e9155bf85e2ad93..c3e296aa670a116fc171f22dce6f091c53f5ebbf 100644 (file)
@@ -478,7 +478,7 @@ runtime·memlimit(void)
        return 0;
 }
 
-#pragma dataflag 16 // no pointers
+#pragma dataflag NOPTR
 int8 runtime·badsignalmsg[] = "runtime: signal received on thread not created by Go.\n";
 int32 runtime·badsignallen = sizeof runtime·badsignalmsg - 1;
 
index 51a38adafe371736284e4e25c20a5e06025618fa..57f32a0ddbee5d716eeafa101e696a9439993eab 100644 (file)
@@ -20,6 +20,7 @@
 package sync
 #include "runtime.h"
 #include "arch_GOARCH.h"
+#include "../../cmd/ld/textflag.h"
 
 typedef struct SemaWaiter SemaWaiter;
 struct SemaWaiter
@@ -50,7 +51,7 @@ struct semtable
        SemaRoot;
        uint8 pad[CacheLineSize-sizeof(SemaRoot)];
 };
-#pragma dataflag 16 /* mark semtable as 'no pointers', hiding from garbage collector */
+#pragma dataflag NOPTR /* mark semtable as 'no pointers', hiding from garbage collector */
 static struct semtable semtable[SEMTABLESZ];
 
 static SemaRoot*