|
|
1.1 root 1: Return-Path: <[email protected]> 2: Date: 11 Sep 90 14:07:21 GMT 3: From: [email protected] (USENET News System) 4: Organization: University of Pennsylvania 5: Subject: Building gcc 1.37.1 with Vax C 6: References: <[email protected]> 7: Sender: [email protected] 8: To: [email protected] 9: 10: during it; hopefully they'll come in handy. 11: 12: To build the new gcc-cpp and gcc-cc1 that come with Gnu C 13: version 1.37.1 with Vax C and NOT a previous version of gcc, 14: do the following: 15: 16: I - Building gcc-cpp 17: 18: A - Modify cccp.c 19: 20: 1 - Replace 21: 22: #include <sys/types.h> 23: #include <sys/stat.h> 24: 25: with 26: 27: #ifndef VMS 28: #include <sys/types.h> 29: #include <sys/stat.h> 30: #else 31: #include <types.h> 32: #include <stat.h> 33: #endif 34: 35: [It is claimed that 36: $ define sys sys$library 37: will solve the same problem without source changes.] 38: 39: 2 - In the VMS-specific section (has perror.h etc in it), 40: add the following: 41: 42: #include <descrip.h> /* for dsc$descriptor_s */ 43: #include <string.h> /* for strchr & strrchr */ 44: #define index strchr 45: #define rindex strrchr 46: 47: 3 - You have to replace all occurences of: 48: 49: extern char *index(), *rindex(); 50: 51: as well as any where they're separated (e.g. extern char *index() 52: by itself or extern char *rindex() by itself), with the following: 53: 54: #ifndef VMS 55: extern char *index(); /* or whatever was here */ 56: #endif 57: 58: There's a total of three: one in main(), one in do_include(), and 59: one in hack_vms_include_specification(). 60: 61: B - You have to have alloca.mar for cccp.c; it was distributed 62: with vmsgcc1.34; it's also in the bison distribution. (both 1.03 63: and 1.06) 64: 65: C - After you've compiled alloca.mar (MACRO ALLOCA.MAR), follow 66: the instructions at the top of MAKE-CC1.COM (namely, change the 67: CC := line to say cc/noopt instead of gcc, take the 68: cc1_options="-mpcc-alignment" part out of the CFLAGS line, and change 69: the LIBS line to say: 70: 71: $ LIBS := alloca,sys$share:vaxcrtl/libr 72: 73: D - Since it doesn't come with the distribution, you have 74: to generate cexp_tab.c yourself, either with bison on either 75: a Vax or a Unix box, or yacc in Unix. (@make below will die if you 76: don't have bison on your Vax or don't have this file) 77: 78: E - Type: 79: 80: @make 81: 82: and watch it hum. It should go through okay; it'll die on the LINK 83: line, but don't worry about it. 84: 85: F - Now link the whole thing with: 86: 87: link /nomap/exe=gcc-cpp cccp,cexp,version,alloca,- 88: sys$share:vaxcrtl/libr 89: 90: G - You should be screaming for joy right now; if you're not, then 91: give up on life. <snicker> 92: 93: 94: II - Building gcc-cc1 95: 96: A - Change MAKE-CC1.COM to contain the line: 97: 98: $ libs :== sys$share:vaxcrtl/libr,alloca 99: 100: Yep, you have to have alloca.obj here too. 101: 102: B - Modify toplev.c: 103: 104: 1 - Replace 105: 106: #include <sys/types.h> 107: #include <sys/stat.h> 108: 109: with 110: 111: #ifndef VMS 112: #include <sys/types.h> 113: #include <sys/stat.h> 114: #else 115: #include <types.h> 116: #include <stat.h> 117: #endif 118: 119: (You'll see this again.) 120: 121: 2 - Do: 122: 123: Repl: rtx_equal_function_value_matters 124: With: rtx_equ_func_value_matters 125: Num: once 126: 127: This is cuz you can't have a name over 31 chars with the 128: Vax C compiler; and yep you guessed it this is over that 129: limit. You're gonna be doing this a few more times. 130: 131: C - Modify gcc.c: 132: 133: 1 - This is optional, since you never compile it (I'm 134: working on that): 135: 136: Replace 137: 138: #include <stdio.h> 139: #include <sys/types.h> 140: #include <signal.h> 141: #include <sys/file.h> 142: 143: with 144: 145: #include <stdio.h> 146: #include <signal.h> 147: #ifdef VMS 148: #include <types.h> 149: #include <file.h> 150: #else 151: #include <sys/types.h> 152: #include <sys/file.h> 153: #endif 154: 155: D - Modify c-parse_tab.c (if this isn't there, you'll have 156: to create it with bison or yacc): 157: 158: Repl: expand_start_loop_continue_elsewhere 159: With: expand_startloop_cont_elsewhere 160: Num: twice 161: 162: E - Modify tree.h: 163: 164: Repl: expand_start_loop_continue_elsewhere 165: With: expand_startloop_cont_elsewhere 166: Num: once 167: 168: F - Modify stmt.c: 169: 170: Repl: expand_start_loop_continue_elsewhere 171: With: expand_startloop_cont_elsewhere 172: Num: twice 173: 174: Repl: current_function_returns_pcc_struct 175: With: cur_func_ret_pcc_struct 176: Num: nine 177: 178: Repl: current_function_returns_pointer 179: With: cur_func_ret_ptr 180: Num: 2 181: 182: Repl: current_function_pretend_args_size 183: With: cur_func_pretend_args_size 184: Num: 3 185: 186: G - Modify rtanal.c: 187: 188: Repl: rtx_equal_function_value_matters 189: With: rtx_equ_func_values_matters 190: Num: twice 191: 192: H - Modify output.h: 193: 194: Repl: current_function_returns_pcc_struct 195: With: cur_func_ret_pcc_struct 196: Num: once 197: 198: Repl: current_function_returns_pointer 199: With: cur_func_ret_ptr 200: Num: once 201: 202: Repl: current_function_pretend_args_size 203: With: cur_func_pretend_args_size 204: Num: once 205: 206: I - Modify tree.def: 207: 208: Change the line that reads: 209: 210: DEFTREECODE (FILE_TYPE, "file_type", "t", 0) 211: 212: to: 213: 214: #ifdef VMS 215: DEFTREECODE (FILE_TYPE_GNU, "file_type", "t", 0) 216: #else 217: DEFTREECODE (FILE_TYPE, "file_type", "t", 0) 218: #endif 219: 220: This is cuz FILE_TYPE is defined in stdio.h as being 221: struct _iobuf *, which totally screws everything up. 222: 223: J - Modify expr.c: 224: 225: Change the line that reads: 226: 227: if (code == FILE_TYPE) 228: 229: to: 230: 231: #ifdef VMS 232: if (code == FILE_TYPE_GNU) 233: #else 234: if (code == FILE_TYPE) 235: #endif 236: 237: K - Modify expmed.c: 238: 239: Change the line that reads: 240: 241: trymode && GET_MODE_SIZE (trymode) <= maxsize; 242: 243: to: 244: 245: (trymode != 0) && (GET_MODE_SIZE (trymode) <= maxsize); 246: 247: Enclosing the second half of the and in parenthesis may be 248: overkill. By the time I thought of it it was too late to 249: change it (read: I didn't feel like going back), but you 250: may want to give it a try. 251: 252: L - Modify symout.c: 253: 254: Change the line that has #include <stddef.h> on it to: 255: 256: #ifndef VMS 257: #include <stddef.h> 258: #else 259: #define NULL (void *) 0 260: #endif 261: 262: M - Modify insn-emit.c: 263: 264: Line #1011 (in mine) is a 376-character long line that's 265: one HUGE return (it calls a function a few zillion times 266: embedded upon each other). This is a tad too big for Vax C 267: to chew; try cutting it down to a few lines. I made it look 268: like this: 269: 270: rtx 271: gen_casesi (operand0, operand1, operand2, operand3) 272: rtx operand0; 273: rtx operand1; 274: rtx operand2; 275: rtx operand3; 276: { 277: return gen_rtx (SET, VOIDmode, pc_rtx, 278: gen_rtx (IF_THEN_ELSE, VOIDmode, 279: gen_rtx (LE, VOIDmode, 280: gen_rtx (MINUS, SImode, operand0, operand1), 281: operand2), 282: gen_rtx (PLUS, SImode, 283: gen_rtx (SIGN_EXTEND, SImode, 284: gen_rtx (MEM, HImode, 285: gen_rtx (PLUS, SImode, pc_rtx, 286: gen_rtx (MINUS, SImode, operand0, operand1)))), 287: gen_rtx (LABEL_REF, SImode, operand3)), 288: pc_rtx)); 289: } 290: 291: Kinda smacks of lisp, no? 292: 293: N - Modify final.c: 294: 295: Change the line that reads: 296: 297: rtx final_sequence; 298: 299: to: 300: 301: #ifndef VMS 302: rtx final_sequence; 303: #endif 304: 305: This is cuz rtx final_sequence already appears in 306: output.h, and Vax C screams when it sees this. 307: 308: O - You have to have alloca(), bcopy(), bcmp(), and 309: bzero(); all are in the VMS Gcc 1.34 distribution; only 310: bcopy() is in the bison distribution. Since they're pretty 311: short, I'm gonna include 'em here. These were sent under the 312: Gnu public license. 313: 314: alloca.mar: 315: 316: .PSECT $CODE,LONG,PIC,REL,SHR,EXE,RD,NOWRT 317: .ENTRY ALLOCA,^M<> 318: SUBL2 4(AP),SP 319: MOVL 16(FP),R1 320: MOVQ 8(FP),AP 321: BICL2 #3,SP 322: ADDL2 #28,SP 323: MOVL SP,R0 324: JMP (R1) 325: 326: .END 327: 328: bcopy.mar: 329: 330: .PSECT $CODE,LONG,PIC,REL,SHR,EXE,RD,NOWRT 331: ; bcopy(from, to, size) 332: .ENTRY BCOPY,^M<R2,R3,R4,R5,R6> 333: MOVL 4(AP),R1 334: MOVL 8(AP),R3 335: MOVL 12(AP),R6 336: CMPL R1,R3 337: BGTR 2$ ; NORMAL FORWARD CASE 338: BLSS 3$ ; OVERLAPPING, MUST DO BACKWARDS 339: RET ; EQUAL, NOTHING TO DO 340: 1$: SUBL2 R0,R6 341: MOVC3 R0,(R1),(R3) 342: 2$: MOVZWL #65535,R0 343: CMPL R6,R0 344: BGTR 1$ 345: MOVC3 R6,(R1),(R3) 346: RET 347: 3$: ADDL2 R6,R1 348: ADDL2 R6,R3 349: MOVZWL #65535,R0 350: BRW 5$ 351: 4$: SUBL2 R0,R6 352: SUBL2 R0,R1 353: SUBL2 R0,R3 354: MOVC3 R0,(R1),(R3) 355: MOVZWL #65535,R0 356: SUBL2 R0,R1 357: SUBL2 R0,R3 358: 5$: CMPL R6,R0 359: BGTR 4$ 360: SUBL2 R6,R1 361: SUBL2 R6,R3 362: MOVC3 R6,(R1),(R3) 363: 364: RET 365: 366: .END 367: 368: bcmp.mar: 369: 370: .PSECT $CODE,LONG,PIC,REL,SHR,EXE,RD,NOWRT 371: ; bcmp(s1, s2, n) 372: .ENTRY BCMP,^M<R2,R3,R4,R5> 373: MOVL 4(AP),R1 374: MOVL 8(AP),R3 375: MOVL 12(AP),R4 376: 1$: MOVZWL #65535,R0 377: CMPL R4,R0 378: BLEQ 2$ 379: SUBL2 R0,R4 380: CMPC3 R0,(R1),(R3) 381: BEQL 1$ 382: ADDL2 R4,R0 383: RET 384: 2$: CMPC3 R4,(R1),(R3) 385: RET 386: 387: .END 388: 389: 390: bzero.mar: 391: 392: .PSECT $CODE,LONG,PIC,REL,SHR,EXE,RD,NOWRT 393: ; bzero(ptr, size) 394: .ENTRY BZERO,^M<R2,R3,R4,R5> 395: MOVL 4(AP),R3 396: BRB 2$ 397: 1$: SUBL2 R0,8(AP) 398: MOVC5 #0,(R3),#0,R0,(R3) 399: 2$: MOVZWL #65535,R0 400: CMPL 8(AP),R0 401: BGTR 1$ 402: MOVC5 #0,(R3),#0,8(AP),(R3) 403: RET 404: 405: .END 406: 407: P - On the last lines (where it's got all of the link shit), 408: change it so it reads: 409: 410: ...blahblahblah... 411: ...blahblah,insn-extract,insn-output,obstack,- 412: integrate,caller-save,- 413: bcopy,bcmp,bzero 414: $! 415: 416: So now it'll link the bcopy, bcmp, and bzero routines in. 417: 418: Q - You should be screaming for joy right now; if you're 419: not, then give up on life again. Hey, I don't get paid for my humor. 420: 421: R - Finally, you have to use old versions of: 422: 423: GCC.EXE GCC-AS.EXE 424: GCC.COM GCC.CLD 425: GCCLIB.OLB 426: 427: to make the package work properly. I've only been able to make the 428: new preprocessors make properly; since it wasn't even in the make 429: files that came with it, I don't think gcc.exe 1.37.1 was intended 430: to be built for the Vax .. we'll see. 431: 432: In case you're wondering, I could never get vmsgcc134 to work properly; 433: that's why I did this with Vax C. 434: 435: Good luck! This only worked under 5.3-1 (and the latest version of 436: Vax C...3.0? 3.1?), and isn't guaranteed in any way shape or form. If 437: you have stumbling blocks and think I may have come upon it during all 438: of this, feel free to mail me at [email protected]. 439: 440: -- 441: Brendan Kehoe | Soon: [email protected] 442: For now: [email protected] | Or: [email protected] 443: Last resort: [email protected] 444: Brendan Kehoe | Soon: [email protected] 445: For now: [email protected] | Or: [email protected] 446: Last resort: [email protected] 447:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.