ham@Neon.Stanford.EDU (Peter R. Ham) (09/14/89)
*** /xxV/cmds/gccnew/pgcc/mi/c-decl.c Fri Sep 1 16:19:26 1989 --- /xxV/cmds/gccnew/dist/c-decl.c Mon Aug 7 17:04:48 1989 *************** *** 1034,1040 **** TREE_EXTERNAL (decl) = 1; TREE_PUBLIC (decl) = 1; - TREE_SHARED (decl) = 1; /* ANSI standard says implicit declarations are in the innermost block. So we record the decl in the standard fashion. --- 1034,1039 ---- *************** *** 2571,2580 **** /* Assume that otherwise the function can be inlined. */ TREE_INLINE (decl) = 1; } - /* - ** Functions are always implicitly declared "shared". - */ - TREE_SHARED (decl) = 1; } else { --- 2570,2575 ---- *************** *** 2603,2622 **** /* `extern' with initialization is invalid if not at top level. */ if ((specbits & (1 << (int) RID_EXTERN)) && initialized) error ("`%s' has both `extern' and initializer", name); - } - /* - ** Functions are implicitly declared "shared". - ** Declarations with the "shared" storage class specifier are - ** marked. - */ - - if (TREE_CODE (declarator) == CALL_EXPR) - { - TREE_SHARED (decl) = 1; - } - else - { - TREE_SHARED (decl) = !!(specbits & (1 << (int) RID_SHARED)); } } --- 2598,2603 ---- *** /xxV/cmds/gccnew/pgcc/mi/c-parse.h Fri Sep 1 16:13:46 1989 --- /xxV/cmds/gccnew/dist/c-parse.h Mon Aug 7 17:04:50 1989 *************** *** 34,40 **** RID_LONG, RID_AUTO, RID_STATIC, - RID_SHARED, RID_EXTERN, RID_REGISTER, RID_TYPEDEF, --- 34,39 ---- *** /xxV/cmds/gccnew/pgcc/mi/c-parse.tab.c Mon Sep 11 13:28:33 1989 --- /xxV/cmds/gccnew/dist/c-parse.tab.c Tue Aug 8 10:46:59 1989 *************** *** 1,5 **** ! /* A Bison parser, made from ../../mi/c-parse.y */ #define IDENTIFIER 258 #define TYPENAME 259 --- 1,5 ---- ! /* A Bison parser, made from c-parse.y */ #define IDENTIFIER 258 #define TYPENAME 259 *************** *** 41,47 **** #define HYPERUNARY 295 #define POINTSAT 296 ! #line 46 "../../mi/c-parse.y" #include "config.h" #include "tree.h" --- 41,47 ---- #define HYPERUNARY 295 #define POINTSAT 296 ! #line 47 "c-parse.y" #include "config.h" #include "tree.h" *************** *** 60,68 **** /* Cause the `yydebug' variable to be defined. */ #define YYDEBUG 1 ! #line 67 "../../mi/c-parse.y" typedef union {long itype; tree ttype; enum tree_code code; } YYSTYPE; ! #line 155 "../../mi/c-parse.y" /* the declaration found for the last IDENTIFIER token read in. yylex must look this up to detect typedefs, which get token type TYPENAME, --- 60,68 ---- /* Cause the `yydebug' variable to be defined. */ #define YYDEBUG 1 ! #line 68 "c-parse.y" typedef union {long itype; tree ttype; enum tree_code code; } YYSTYPE; ! #line 156 "c-parse.y" /* the declaration found for the last IDENTIFIER token read in. yylex must look this up to detect typedefs, which get token type TYPENAME, *************** *** 87,93 **** #ifndef YYLTYPE typedef struct yyltype ! { int timestamp; int first_line; int first_column; --- 87,93 ---- #ifndef YYLTYPE typedef struct yyltype ! { int timestamp; int first_line; int first_column; *************** *** 95,108 **** int last_column; char *text; } ! yyltype; #define YYLTYPE yyltype #endif - #define YYACCEPT return(0) - #define YYABORT return(1) - #define YYERROR return(1) #include <stdio.h> #ifndef __STDC__ --- 95,105 ---- int last_column; char *text; } ! yyltype; #define YYLTYPE yyltype #endif #include <stdio.h> #ifndef __STDC__ *************** *** 151,185 **** }; static const short yyrline[] = { 0, ! 178, 179, 186, 188, 188, 189, 191, 193, 194, 201, ! 207, 209, 211, 213, 215, 216, 217, 220, 226, 228, ! 229, 231, 236, 238, 239, 241, 246, 248, 249, 253, ! 255, 258, 260, 262, 264, 266, 268, 270, 274, 278, ! 281, 284, 287, 291, 293, 295, 297, 302, 304, 309, ! 313, 315, 318, 332, 334, 336, 338, 340, 342, 344, ! 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, ! 366, 370, 419, 420, 422, 424, 426, 433, 437, 439, ! 441, 443, 445, 447, 452, 454, 458, 460, 463, 465, ! 466, 467, 472, 477, 480, 482, 484, 492, 495, 499, ! 501, 503, 511, 514, 516, 518, 527, 530, 534, 536, ! 544, 545, 546, 547, 551, 559, 560, 561, 564, 566, ! 569, 571, 574, 577, 585, 590, 591, 596, 601, 602, ! 607, 609, 613, 615, 617, 623, 626, 633, 635, 640, ! 643, 648, 650, 652, 654, 662, 668, 670, 672, 674, ! 680, 686, 688, 690, 692, 694, 697, 702, 706, 709, ! 711, 713, 715, 718, 720, 723, 726, 729, 732, 736, ! 738, 741, 743, 747, 749, 751, 765, 769, 772, 776, ! 781, 782, 786, 789, 791, 800, 802, 807, 810, 814, ! 817, 821, 824, 827, 830, 834, 837, 841, 845, 847, ! 849, 851, 853, 855, 857, 859, 867, 869, 870, 873, ! 875, 878, 881, 890, 892, 895, 896, 900, 904, 910, ! 915, 917, 919, 923, 926, 927, 929, 932, 936, 937, ! 940, 942, 947, 952, 956, 962, 968, 975, 977, 1009, ! 1009, 1020, 1020, 1024, 1028, 1031, 1034, 1038, 1044, 1050, ! 1056, 1062, 1067, 1067, 1072, 1077, 1083, 1086, 1091, 1093, ! 1096, 1098, 1102, 1107, 1110, 1116, 1119, 1126, 1129, 1134, ! 1136, 1138, 1142, 1144, 1150, 1152, 1154, 1158, 1161, 1167, ! 1170, 1172, 1174, 1176, 1181, 1184 }; static const char * const yytname[] = { 0, --- 148,182 ---- }; static const short yyrline[] = { 0, ! 179, 180, 187, 189, 189, 190, 192, 194, 195, 202, ! 208, 210, 212, 214, 216, 217, 218, 221, 227, 229, ! 230, 232, 237, 239, 240, 242, 247, 249, 250, 254, ! 256, 259, 261, 263, 265, 267, 269, 271, 275, 279, ! 282, 285, 288, 292, 294, 296, 298, 303, 305, 310, ! 314, 316, 319, 333, 335, 337, 339, 341, 343, 345, ! 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, ! 367, 371, 420, 421, 423, 425, 427, 434, 438, 440, ! 442, 444, 446, 448, 453, 455, 459, 461, 464, 466, ! 467, 468, 473, 478, 481, 483, 485, 493, 496, 500, ! 502, 504, 512, 515, 517, 519, 528, 531, 535, 537, ! 545, 546, 547, 548, 552, 560, 561, 562, 565, 567, ! 570, 572, 575, 578, 586, 591, 592, 597, 602, 603, ! 608, 610, 614, 616, 618, 624, 627, 634, 636, 641, ! 644, 649, 651, 653, 655, 663, 669, 671, 673, 675, ! 681, 687, 689, 691, 693, 695, 698, 703, 707, 710, ! 712, 714, 716, 719, 721, 724, 727, 730, 733, 737, ! 739, 742, 744, 748, 750, 752, 766, 770, 773, 777, ! 782, 783, 787, 790, 792, 801, 803, 808, 811, 815, ! 818, 822, 825, 828, 831, 835, 838, 842, 846, 848, ! 850, 852, 854, 856, 858, 860, 868, 870, 871, 874, ! 876, 879, 882, 891, 893, 896, 897, 901, 905, 911, ! 916, 918, 920, 924, 927, 928, 930, 933, 937, 938, ! 941, 943, 948, 953, 957, 963, 969, 976, 978, 1010, ! 1010, 1021, 1021, 1025, 1029, 1032, 1035, 1039, 1045, 1051, ! 1057, 1063, 1068, 1068, 1073, 1078, 1084, 1087, 1092, 1094, ! 1097, 1099, 1103, 1108, 1111, 1117, 1120, 1127, 1130, 1135, ! 1137, 1139, 1143, 1145, 1151, 1153, 1155, 1159, 1162, 1168, ! 1171, 1173, 1175, 1177, 1182, 1185 }; static const char * const yytname[] = { 0, *************** *** 719,725 **** }; #define YYPURE 1 ! #line 2 "bison.simple" /* Skeleton output parser for bison, copyright (C) 1984 Bob Corbett and Richard Stallman --- 716,723 ---- }; #define YYPURE 1 ! /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ ! #line 3 "bison.simple" /* Skeleton output parser for bison, copyright (C) 1984 Bob Corbett and Richard Stallman *************** *** 825,830 **** --- 823,832 ---- You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ + #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) + #include <alloca.h> + #endif + /* This is the parser code that is written into each bison parser when the %semantic_parser declaration is not specified in the grammar. It was written by Richard Stallman by simplifying the hairy parser *************** *** 839,844 **** --- 841,849 ---- #define YYEMPTY -2 #define YYEOF 0 #define YYFAIL goto yyerrlab; + #define YYACCEPT return(0) + #define YYABORT return(1) + #define YYERROR goto yyerrlab #define YYTERROR 1 *************** *** 861,875 **** YYLTYPE yylloc; /* location data for the lookahead */ /* symbol */ ! int yynerr; /* number of parse errors so far */ ! #ifdef YYDEBUG ! int yydebug = 0; /* nonzero means print parse trace */ #endif *** /xxV/cmds/gccnew/pgcc/mi/c-parse.y Mon Sep 11 13:27:52 1989 --- /xxV/cmds/gccnew/dist/c-parse.y Mon Aug 7 17:05:22 1989 *************** *** 1315,1326 **** /* Nonzero if end-of-file has been seen on input. */ static int end_of_file; - #ifndef WITH_PERPROCESS_VARIABLES - /* Data type that represents the GNU C reserved words. */ struct resword { char *name; short token; enum rid rid; }; - #define MIN_WORD_LENGTH 2 /* minimum size for C keyword */ #define MAX_WORD_LENGTH 9 /* maximum size for C keyword */ #define MIN_HASH_VALUE 4 /* range of the hash keys values */ --- 1315,1323 ---- *************** *** 1464,1477 **** return 0; } - #else WITH_PERPROCESS_VARIABLES - - #define NORID RID_UNUSED - - #include "perfect-hashing-function.h" - - #endif WITH_PERPROCESS_VARIABLES - /* The elements of `ridpointers' are identifier nodes for the reserved type names and storage classes. It is indexed by a RID_... value. */ --- 1461,1466 ---- *************** *** 1478,1484 **** tree ridpointers[(int) RID_MAX]; - int check_newline (); void --- 1467,1472 ---- *************** *** 1507,1513 **** ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile"); ridpointers[(int) RID_AUTO] = get_identifier ("auto"); ridpointers[(int) RID_STATIC] = get_identifier ("static"); - WITH_PERPROCESS_VARIABLES( ridpointers[(int) RID_SHARED] = get_identifier ("shared");) ridpointers[(int) RID_EXTERN] = get_identifier ("extern"); ridpointers[(int) RID_TYPEDEF] = get_identifier ("typedef"); ridpointers[(int) RID_REGISTER] = get_identifier ("register"); --- 1495,1500 ---- ("New file: " "/xxV/cmds/gccnew/pgcc/mi/perfect-hashing-function.h") /* C code produced by gperf version 1.8.1 (GNU C++ version) */ /* Command-line: gperf -k1,2,$ -p -j1 -g -o -t -N is_reserved_word xp */ /* Command-line: gperf -p -j1 -g -o -t -N is_reserved_word c-parse.gperf */ struct resword { char *name; short token; enum rid rid; }; #define MIN_WORD_LENGTH 2 #define MAX_WORD_LENGTH 10 #define MIN_HASH_VALUE 5 #define MAX_HASH_VALUE 74 /* 42 keywords 70 is the maximum key range */ #ifdef __GNUC__ inline #endif static int hash (str, len) register char *str; register int unsigned len; { static unsigned char hash_table[] = { 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 0, 74, 24, 10, 27, 9, 0, 4, 14, 6, 17, 74, 0, 22, 29, 0, 0, 74, 74, 15, 18, 0, 0, 6, 14, 0, 31, 74, 74, 74, 74, 74, 74, }; return len + hash_table[str[1]] + hash_table[str[0]] + hash_table[str[len - 1]]; } #ifdef __GNUC__ inline #endif struct resword * is_reserved_word (str, len) register char *str; register unsigned int len; { static struct resword wordlist[] = { {"",}, {"",}, {"",}, {"",}, {"",}, {"union", UNION, NORID}, {"extern", SCSPEC, RID_EXTERN}, {"__const", TYPE_QUAL, RID_CONST}, {"__inline", SCSPEC, RID_INLINE}, {"",}, {"__volatile", TYPE_QUAL, RID_VOLATILE}, {"do", DO, NORID}, {"__typeof", TYPEOF, NORID}, {"__alignof", ALIGNOF, NORID}, {"volatile", TYPE_QUAL, RID_VOLATILE}, {"double", TYPESPEC, RID_DOUBLE}, {"default", DEFAULT, NORID}, {"unsigned", TYPESPEC, RID_UNSIGNED}, {"goto", GOTO, NORID}, {"void", TYPESPEC, RID_VOID}, {"int", TYPESPEC, RID_INT}, {"return", RETURN, NORID}, {"for", FOR, NORID}, {"inline", SCSPEC, RID_INLINE}, {"struct", STRUCT, NORID}, {"while", WHILE, NORID}, {"else", ELSE, NORID}, {"if", IF, NORID}, {"auto", SCSPEC, RID_AUTO}, {"short", TYPESPEC, RID_SHORT}, {"break", BREAK, NORID}, {"float", TYPESPEC, RID_FLOAT}, {"const", TYPE_QUAL, RID_CONST}, {"enum", ENUM, NORID}, {"__asm", ASM, NORID}, {"continue", CONTINUE, NORID}, {"",}, {"",}, {"register", SCSPEC, RID_REGISTER}, {"shared", SCSPEC, RID_SHARED}, {"long", TYPESPEC, RID_LONG}, {"typeof", TYPEOF, NORID}, {"typedef", SCSPEC, RID_TYPEDEF}, {"",}, {"switch", SWITCH, NORID}, {"sizeof", SIZEOF, NORID}, {"",}, {"",}, {"",}, {"",}, {"signed", TYPESPEC, RID_SIGNED}, {"static", SCSPEC, RID_STATIC}, {"char", TYPESPEC, RID_CHAR}, {"",}, {"",}, {"case", CASE, NORID}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"asm", ASM, NORID}, }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { register int key = hash (str, len); if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE) { register char *s = wordlist[key].name; if (*s == *str && !strcmp (str + 1, s + 1)) return &wordlist[key]; } } return 0; } ("New file: " "/xxV/cmds/gccnew/pgcc/mi/perprocess.h") #define WITH_PERPROCESS_VARIABLES(statement) statement /* Output before writable perprocess data. */ #define PERPROCESS_SECTION_ASM_OP ".perprocess" #define PERPROCESS_BSS_SECTION_ASM_OP ".perprocess_bss" #define ASM_OUTPUT_PERPROCESS_COMMON(FILE, NAME, SIZE, ROUNDED) \ ( fputs (".perprocess_comm ", (FILE)), \ assemble_name ((FILE), (NAME)), \ fprintf ((FILE), ",%d\n", (ROUNDED))) /* This says how to output an assembler line to define a local common symbol. */ #define ASM_OUTPUT_PERPROCESS_LOCAL(FILE, NAME, SIZE, ROUNDED) \ ( fputs (".perprocess_lcomm ", (FILE)), \ assemble_name ((FILE), (NAME)), \ fprintf ((FILE), ",%d\n", (ROUNDED))) #define ASM_OUTPUT_PERPROCESS_BSS(FILE, NAME, SIZE, ROUNDED) \ ( fputs (".perprocess_bss ", (FILE)), \ assemble_name ((FILE), (NAME)), \ fprintf ((FILE), ",%d\n", (ROUNDED))) *** /xxV/cmds/gccnew/pgcc/mi/print-tree.c Fri Sep 1 16:27:23 1989 --- /xxV/cmds/gccnew/dist/print-tree.c Mon Aug 7 17:10:17 1989 *************** *** 246,257 **** fputs ("permanent", outfile); first = 0; } - if (TREE_SHARED(node)) - { - if (!first) putc (' ', outfile); - fputs ("shared", outfile); - first = 0; - } if (TREE_LANG_FLAG_1 (node)) { if (!first) putc (' ', outfile); --- 246,251 ---- *************** *** 268,273 **** --- 262,273 ---- { if (!first) putc (' ', outfile); fputs ("lang_flag_3", outfile); + first = 0; + } + if (TREE_LANG_FLAG_4 (node)) + { + if (!first) putc (' ', outfile); + fputs ("lang_flag_4", outfile); first = 0; } fputs ("] ", outfile); *** /xxV/cmds/gccnew/pgcc/mi/tree.c Tue Sep 5 11:37:27 1989 --- /xxV/cmds/gccnew/dist/tree.c Mon Aug 7 17:11:28 1989 *************** *** 941,958 **** { register enum tree_code code = TREE_CODE (arg); - #ifdef WITH_PERPROCESS_VARIABLES - /* - ** The addresses of shared global variables are 'static', but - ** the addresses of perprocess global variables are not. - */ - if (((code == VAR_DECL && TREE_SHARED(arg)) - || code == FUNCTION_DECL || code == CONSTRUCTOR - && (TREE_STATIC (arg) || TREE_EXTERNAL (arg)))) - #else if ((code == VAR_DECL || code == FUNCTION_DECL || code == CONSTRUCTOR) && (TREE_STATIC (arg) || TREE_EXTERNAL (arg))) - #endif return 1; if (code == STRING_CST) --- 941,948 ---- *** /xxV/cmds/gccnew/pgcc/mi/tree.h Fri Sep 1 16:33:39 1989 --- /xxV/cmds/gccnew/dist/tree.h Mon Aug 7 17:11:34 1989 *************** *** 146,156 **** unsigned asm_written_attr: 1; unsigned inline_attr : 1; unsigned used_attr : 1; - unsigned shared_attr : 1; unsigned lang_flag_1 : 1; unsigned lang_flag_2 : 1; unsigned lang_flag_3 : 1; ! /* There is room for three more attributes. */ }; /* Define accessors for the fields that all tree nodes have --- 146,156 ---- unsigned asm_written_attr: 1; unsigned inline_attr : 1; unsigned used_attr : 1; unsigned lang_flag_1 : 1; unsigned lang_flag_2 : 1; unsigned lang_flag_3 : 1; ! unsigned lang_flag_4 : 1; ! /* There is room for four more attributes. */ }; /* Define accessors for the fields that all tree nodes have *************** *** 273,293 **** /* Nonzero in a _DECL if the name is used in its scope. */ #define TREE_USED(NODE) ((NODE)->common.used_attr) - #ifdef WITH_PERPROCESS_VARIABLES - /* - ** Nonzero in a _DECL if the variable has the "shared" storage class - */ - #define TREE_SHARED(NODE) ((NODE)->common.shared_attr) - #endif - #define TREE_LANG_FLAG_1(NODE) ((NODE)->common.lang_flag_1) #define TREE_LANG_FLAG_2(NODE) ((NODE)->common.lang_flag_2) #define TREE_LANG_FLAG_3(NODE) ((NODE)->common.lang_flag_3) ! ! #ifndef WITH_PERPROCESS_VARIABLES ! #define TREE_LANG_FLAG_4(NODE) ((NODE)->common.lang_flag_4)) ! #endif ! /* Define additional fields and accessors for nodes representing constants. */ --- 273,282 ---- /* Nonzero in a _DECL if the name is used in its scope. */ #define TREE_USED(NODE) ((NODE)->common.used_attr) #define TREE_LANG_FLAG_1(NODE) ((NODE)->common.lang_flag_1) #define TREE_LANG_FLAG_2(NODE) ((NODE)->common.lang_flag_2) #define TREE_LANG_FLAG_3(NODE) ((NODE)->common.lang_flag_3) ! #define TREE_LANG_FLAG_4(NODE) ((NODE)->common.lang_flag_4) /* Define additional fields and accessors for nodes representing constants. */ *** /xxV/cmds/gccnew/pgcc/mi/varasm.c Tue Sep 5 11:48:53 1989 --- /xxV/cmds/gccnew/dist/varasm.c Tue Aug 29 13:41:45 1989 *************** *** 70,81 **** void output_constant (); void output_constructor (); - #ifdef WITH_PERPROCESS_VARIABLES - static enum in_section {no_section, in_text, in_data, - in_perprocess, in_perprocess_bss} in_section = no_section; - #else WITH_PERPROCESS_VARIABLES static enum in_section {no_section, in_text, in_data} in_section = no_section; - #endif WITH_PERPROCESS_VARIABLES /* Tell assembler to switch to text section. */ --- 70,76 ---- *************** *** 111,143 **** } } - #ifdef WITH_PERPROCESS_VARIABLES - /* Tell assembler to switch to perprocess section. */ - - void - perprocess_section () - { - if (in_section != in_perprocess) - { - fprintf (asm_out_file, "%s\n", PERPROCESS_SECTION_ASM_OP); - in_section = in_perprocess; - } - } - - - /* Tell assembler to switch to perprocess_bss section. */ - - void - perprocess_bss_section () - { - if (in_section != in_perprocess_bss) - { - fprintf (asm_out_file, "%s\n", PERPROCESS_BSS_SECTION_ASM_OP); - in_section = in_perprocess_bss; - } - } - #endif - /* Create the rtl to represent a function, for a function definition. DECL is a FUNCTION_DECL node which describes which function. The rtl is stored into DECL. */ --- 106,111 ---- *************** *** 256,294 **** var_labelno++; } - #ifdef WITH_PERPROCESS_VARIABLES - /* - ** If the variables is a perprocess variable residing in the perprocess - ** segment, then generate a declaration that indexes off the - ** perprocess segment register. - */ - if (TREE_SHARED (decl)) - { - DECL_RTL (decl) = gen_rtx (MEM, DECL_MODE (decl), - gen_rtx (SYMBOL_REF, Pmode, name)); - } - else - { - DECL_RTL (decl) = - gen_rtx (MEM, DECL_MODE (decl), - gen_rtx (PLUS, Pmode, - gen_rtx (SYMBOL_REF, Pmode, name), - gen_rtx (REG, Pmode, - PERPROCESS_SEGMENT_POINTER_REGNUM) - ) - ); - /* - ** I'm pretty wary of this side effect. - ** Hopefully, it will get rid of some unintentional - ** sharing that is causing me major problems. - */ - DECL_RTL(decl)->used = 1; - } - #else WITH_PERPROCESS_VARIABLES DECL_RTL (decl) = gen_rtx (MEM, DECL_MODE (decl), gen_rtx (SYMBOL_REF, Pmode, name)); - #endif WITH_PERPROCESS_VARIABLES - if (TREE_VOLATILE (decl)) MEM_VOLATILE_P (DECL_RTL (decl)) = 1; if (TREE_READONLY (decl)) --- 224,231 ---- *************** *** 517,540 **** app_disable (); - #ifdef WITH_PERPROCESS_VARIABLES - /* - ** Shared global variables and perprocess variables have different - ** declarations. Shared variables are only a symbol reference while - ** perprocess variables are a symbol reference indexed off the - ** perprocess segment pointer register as constructed in make_decl_rtl. - */ - if (TREE_SHARED(decl)) - { - name = XSTR (XEXP (DECL_RTL (decl), 0), 0); - } - else - { - name = XSTR (XEXP (XEXP (DECL_RTL (decl), 0), 0), 0); - } - #else WITH_PERPROCESS_VARIABLES name = XSTR (XEXP (DECL_RTL (decl), 0), 0); - #endif WITH_PERPROCESS_VARIABLES /* Handle uninitialized definitions. */ --- 454,460 ---- *************** *** 554,595 **** * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); if (flag_shared_data) data_section (); - - #ifdef WITH_PERPROCESS_VARIABLES - /* - ** I'm a little worried about these two perprocess calls. - ** They were commented out in my previous version. Maybe my assembler - ** or linker - ** doesn't handle thse correctly. Why did it work before? - */ - - if (TREE_SHARED (decl)) - { - if (TREE_PUBLIC (decl)) - ASM_OUTPUT_COMMON (asm_out_file, name, size, rounded); - else - ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded); - } - else - { - if (TREE_PUBLIC (decl)) - { - ASM_GLOBALIZE_LABEL (asm_out_file, name); - ASM_OUTPUT_PERPROCESS_BSS (asm_out_file, name, size, rounded); - } - else - { - ASM_OUTPUT_PERPROCESS_BSS (asm_out_file, name, size, rounded); - } - } - return; - #else if (TREE_PUBLIC (decl)) ASM_OUTPUT_COMMON (asm_out_file, name, size, rounded); else ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded); return; - #endif } /* Handle initialized definitions. */ --- 474,484 ---- *************** *** 615,635 **** if (TREE_READONLY (decl) && ! TREE_VOLATILE (decl)) text_section (); else - #ifdef WITH_PERPROCESS_VARIABLES - { - if (TREE_SHARED (decl)) - { - data_section (); - } - else - { - perprocess_section (); - } - } - #else data_section (); - #endif - /* Output the alignment of this data. */ for (i = 0; DECL_ALIGN (decl) >= BITS_PER_UNIT << (i + 1); i++); --- 504,510 ---- Newfile: tm-vax-perprocess-Vsytem.h #include "tm-vax.h" #undef FIXED_REGISTERS /* 1 for registers that have pervasive standard uses and are not available for the register allocator. On the vax, these are the PPSP (perprocess segment pointer), AP, FP, SP and PC. */ #define FIXED_REGISTERS {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} #undef CALL_USED_REGISTERS /* 1 for registers not available across function calls. These must include the FIXED_REGISTERS and also any registers that can be used without being saved. The latter must include the registers where values are returned and the register where structure-value addresses are passed. Aside from that, you can include as many other registers as you like. */ #define CALL_USED_REGISTERS {1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1} /* Base register for access to global variables in the perprocess segment. */ #define PERPROCESS_SEGMENT_POINTER_REGNUM 11 #include "perprocess.h" -- Peter Ham PO Box 3430 (h)(415) 324-9645 MS Computer Science Student Stanford, CA ham@polya.stanford.edu Stanford University 94309 (o)(415) 723-2067