|
|
1.1 ! root 1: From att!zoo.toronto.edu!henry Mon Apr 9 15:34:40 EDT 1990 ! 2: Received: by att-in; Mon Apr 9 15:32:52 1990 ! 3: Received: by inet.att.com; Mon Apr 9 15:34 EDT 1990 ! 4: From: [email protected] ! 5: Date: Mon, 9 Apr 90 15:34:40 EDT ! 6: To: research.att.com!dmr ! 7: Subject: 11 cross-compiler changes for host-byte-order portability ! 8: ! 9: Here's context diffs for the stuff I did, with some irrelevant localisms ! 10: (location of include files and such) edited out. ! 11: ! 12: One or two things are probably slightly overkill; I haven't made a ! 13: determined effort to minimize the changes. I think the result should ! 14: work regardless of host byte order. ! 15: ! 16: I made one change to semantics after hitting an old problem in our pdp11 ! 17: kernel build: 11ld now does not consider lingering undefined externals to ! 18: be grounds for returning status 1 when -r is used. This seemed sensible; ! 19: -r normally means that another 11ld will be done later, so treating ! 20: undefined externals as a sign of trouble is inappropriate -- it messes ! 21: up Makefiles. ! 22: ! 23: I fixed a bug in 11cc.c: the creation of tmp0 should not be conditional, ! 24: since the construction of later filenames depends on it. ! 25: ! 26: There is an "#ifndef sun" in c00.c that perhaps should be changed to ! 27: something like "#ifndef cpp_sometimes_puts_funny_third_field_in_#_lines". ! 28: ! 29: As I mentioned in earlier mail, chkleaf() now fills in the tr2 field to ! 30: avoid trouble later. ! 31: ! 32: Emission of floating-point constants assumes host and target share a ! 33: common representation for them, and I have not tried to fix this. ! 34: ! 35: Lingering problems with long constants are possible; the code I'm mostly ! 36: concerned with does not use them much. ! 37: ! 38: Henry Spencer at U of Toronto Zoology ! 39: uunet!attcan!utzoo!henry [email protected] ! 40: ! 41: *** /tmp/11ld.c.old Mon Apr 9 14:34:37 1990 ! 42: --- 11ld.c Mon Apr 2 16:05:05 1990 ! 43: *************** ! 44: *** 74,80 **** ! 45: char goodnm[] = "__.SYMDEF"; ! 46: ! 47: /* table of contents stuff */ ! 48: ! #define TABSZ 900 ! 49: struct tab ! 50: { char cname[8]; ! 51: long cloc; ! 52: --- 73,79 ---- ! 53: char goodnm[] = "__.SYMDEF"; ! 54: ! 55: /* table of contents stuff */ ! 56: ! #define TABSZ 2000 /* match 11ranlib */ ! 57: struct tab ! 58: { char cname[8]; ! 59: long cloc; ! 60: *************** ! 61: *** 119,125 **** ! 62: ! 63: struct ar_hdr archdr; ! 64: ! 65: ! struct { ! 66: short fmagic; ! 67: ushort tsize; ! 68: ushort dsize; ! 69: --- 118,124 ---- ! 70: ! 71: struct ar_hdr archdr; ! 72: ! 73: ! struct filhdr_t { ! 74: short fmagic; ! 75: ushort tsize; ! 76: ushort dsize; ! 77: *************** ! 78: *** 145,151 **** ! 79: /* symbol management */ ! 80: struct symbol { ! 81: char sname[8]; ! 82: ! char stype; ! 83: char spare; ! 84: ushort svalue; ! 85: }; ! 86: --- 144,150 ---- ! 87: /* symbol management */ ! 88: struct symbol { ! 89: char sname[8]; ! 90: ! char stype; /* obscene -- should be ushort -- but works */ ! 91: char spare; ! 92: ushort svalue; ! 93: }; ! 94: *************** ! 95: *** 507,512 **** ! 96: --- 506,512 ---- ! 97: } ! 98: lseek(infil, (long)(SARMAG+sizeof(archdr)), 0); ! 99: read(infil, (char *)tab, tnum * sizeof(struct tab)); ! 100: + /* ldrand looks after byte-order issues in tab */ ! 101: while (ldrand()) ! 102: ; ! 103: libp->loc = -1; ! 104: *************** ! 105: *** 545,556 **** ! 106: register short i; ! 107: register struct symbol *sp; ! 108: register struct liblist *oldp = libp; ! 109: for(i = 0; i<tnum; i++) { ! 110: if ((sp = *slookup(tab[i].cname)) == 0) ! 111: continue; ! 112: if (sp->stype != EXTERN+UNDEF) ! 113: continue; ! 114: ! step(tab[i].cloc >> 1); ! 115: } ! 116: return(oldp != libp); ! 117: } ! 118: --- 545,566 ---- ! 119: register short i; ! 120: register struct symbol *sp; ! 121: register struct liblist *oldp = libp; ! 122: + register long cloc; ! 123: + register char *cp; ! 124: + ! 125: for(i = 0; i<tnum; i++) { ! 126: if ((sp = *slookup(tab[i].cname)) == 0) ! 127: continue; ! 128: if (sp->stype != EXTERN+UNDEF) ! 129: continue; ! 130: ! cp = (char *)&tab[i].cloc; ! 131: ! /* strange pdp11 byte order in longs */ ! 132: ! cloc = 0; ! 133: ! cloc |= (*cp++ & 0377) << 16; ! 134: ! cloc |= (*cp++ & 0377) << 24; ! 135: ! cloc |= (*cp++ & 0377); ! 136: ! cloc |= (*cp++ & 0377) << 8; ! 137: ! step(cloc >> 1); ! 138: } ! 139: return(oldp != libp); ! 140: } ! 141: *************** ! 142: *** 593,598 **** ! 143: --- 603,609 ---- ! 144: dseek(&text, loc, filhdr.ssize); ! 145: while (text.size > 0) { ! 146: mget((short *)&cursym, sizeof cursym); ! 147: + usin(&cursym.svalue); ! 148: type = cursym.stype; ! 149: if (Sflag) { ! 150: mtype = type&037; ! 151: *************** ! 152: *** 716,722 **** ! 153: nund = 0; ! 154: for (sp = symtab; sp<symp; sp++) switch (sp->stype) { ! 155: case EXTERN+UNDEF: ! 156: ! errlev |= 01; ! 157: if (arflag==0 && sp->svalue==0) { ! 158: if (nund==0) ! 159: printf("Undefined:\n"); ! 160: --- 727,734 ---- ! 161: nund = 0; ! 162: for (sp = symtab; sp<symp; sp++) switch (sp->stype) { ! 163: case EXTERN+UNDEF: ! 164: ! if (arflag==0) ! 165: ! errlev |= 01; ! 166: if (arflag==0 && sp->svalue==0) { ! 167: if (nund==0) ! 168: printf("Undefined:\n"); ! 169: *************** ! 170: *** 771,776 **** ! 171: --- 783,790 ---- ! 172: ! 173: setupout() ! 174: { ! 175: + struct filhdr_t fhbuf; ! 176: + ! 177: tcreat(&toutb, 0); ! 178: mktemp(tfname); ! 179: tcreat(&doutb, 1); ! 180: *************** ! 181: *** 794,800 **** ! 182: filhdr.entry=0; ! 183: filhdr.pad = 0; ! 184: filhdr.relflg = (rflag==0); ! 185: ! mput(&toutb, (short *)&filhdr, sizeof filhdr); ! 186: } ! 187: ! 188: tcreat(buf, tempflg) ! 189: --- 808,823 ---- ! 190: filhdr.entry=0; ! 191: filhdr.pad = 0; ! 192: filhdr.relflg = (rflag==0); ! 193: ! fhbuf = filhdr; ! 194: ! usout(&fhbuf.fmagic); ! 195: ! usout(&fhbuf.tsize); ! 196: ! usout(&fhbuf.dsize); ! 197: ! usout(&fhbuf.bsize); ! 198: ! usout(&fhbuf.ssize); ! 199: ! usout(&fhbuf.entry); ! 200: ! usout(&fhbuf.pad); ! 201: ! usout(&fhbuf.relflg); ! 202: ! mput(&toutb, (short *)&fhbuf, sizeof fhbuf); ! 203: } ! 204: ! 205: tcreat(buf, tempflg) ! 206: *************** ! 207: *** 861,866 **** ! 208: --- 884,890 ---- ! 209: while (text.size > 0) { ! 210: symno++; ! 211: mget((short *)&cursym, sizeof cursym); ! 212: + usin(&cursym.svalue); ! 213: symreloc(); ! 214: type = cursym.stype; ! 215: if (Sflag) { ! 216: *************** ! 217: *** 868,875 **** ! 218: if (mtype==1 || mtype>4) continue; ! 219: } ! 220: if ((type&EXTERN) == 0) { ! 221: ! if (!sflag&&!xflag&&(!Xflag||cursym.sname[0]!='L')) ! 222: ! mput(&soutb, (short *)&cursym, sizeof cursym); ! 223: continue; ! 224: } ! 225: if ((sp = *lookup()) == 0) ! 226: --- 892,903 ---- ! 227: if (mtype==1 || mtype>4) continue; ! 228: } ! 229: if ((type&EXTERN) == 0) { ! 230: ! if (!sflag&&!xflag&&(!Xflag||cursym.sname[0]!='L')) { ! 231: ! struct symbol st; ! 232: ! st = cursym; ! 233: ! usout(&st.svalue); ! 234: ! mput(&soutb, (short *)&st, sizeof st); ! 235: ! } ! 236: continue; ! 237: } ! 238: if ((sp = *lookup()) == 0) ! 239: *************** ! 240: *** 904,909 **** ! 241: --- 932,938 ---- ! 242: { ! 243: register r, t; ! 244: register struct symbol *sp; ! 245: + short stmp; ! 246: ! 247: for (;;) { ! 248: /* ! 249: *************** ! 250: *** 922,927 **** ! 251: --- 951,957 ---- ! 252: t = get(&text); ! 253: } else ! 254: t = *text.ptr++; ! 255: + stmp = t; usin(&stmp); t = stmp; ! 256: ! 257: /* next relocation word */ ! 258: if (--reloc.size <= 0) { ! 259: *************** ! 260: *** 935,940 **** ! 261: --- 965,971 ---- ! 262: r = get(&reloc); ! 263: } else ! 264: r = *reloc.ptr++; ! 265: + stmp = r; usin(&stmp); r = stmp; ! 266: ! 267: switch (r&016) { ! 268: ! 269: *************** ! 270: *** 970,976 **** ! 271: ! 272: finishout() ! 273: { ! 274: ! register short n, *p; ! 275: ! 276: if (nflag||iflag) { ! 277: n = torigin; ! 278: --- 1001,1008 ---- ! 279: ! 280: finishout() ! 281: { ! 282: ! register short n; ! 283: ! register struct symbol *sp; ! 284: ! 285: if (nflag||iflag) { ! 286: n = torigin; ! 287: *************** ! 288: *** 989,996 **** ! 289: if (sflag==0) { ! 290: if (xflag==0) ! 291: copy(&soutb); ! 292: ! for (p = (short *)symtab; p < (short *)&symtab[symindex];) ! 293: ! putw(*p++, &toutb); ! 294: } ! 295: flush(&toutb); ! 296: close(toutb.fildes); ! 297: --- 1021,1032 ---- ! 298: if (sflag==0) { ! 299: if (xflag==0) ! 300: copy(&soutb); ! 301: ! for (sp = symtab; sp < &symtab[symindex]; sp++) { ! 302: ! register ushort u = sp->svalue; ! 303: ! usout(&sp->svalue); ! 304: ! mput(&toutb, (short *)sp, sizeof(*sp)); ! 305: ! sp->svalue = u; /* just in case */ ! 306: ! } ! 307: } ! 308: flush(&toutb); ! 309: close(toutb.fildes); ! 310: *************** ! 311: *** 1018,1024 **** ! 312: n >>= 1; ! 313: p = (short *)doutb.iobuf; ! 314: do ! 315: ! putw(*p++, &toutb); ! 316: while (--n); ! 317: } ! 318: close(f); ! 319: --- 1054,1060 ---- ! 320: n >>= 1; ! 321: p = (short *)doutb.iobuf; ! 322: do ! 323: ! rputw(*p++, &toutb); ! 324: while (--n); ! 325: } ! 326: close(f); ! 327: *************** ! 328: *** 1027,1032 **** ! 329: --- 1063,1069 ---- ! 330: mkfsym(s) ! 331: char *s; ! 332: { ! 333: + struct symbol st; ! 334: ! 335: if (sflag || xflag) ! 336: return; ! 337: *************** ! 338: *** 1033,1039 **** ! 339: cp8c(s, cursym.sname); ! 340: cursym.stype = 037; ! 341: cursym.svalue = torigin; ! 342: ! mput(&soutb, (short *)&cursym, sizeof cursym); ! 343: } ! 344: ! 345: mget(aloc, an) ! 346: --- 1070,1078 ---- ! 347: cp8c(s, cursym.sname); ! 348: cursym.stype = 037; ! 349: cursym.svalue = torigin; ! 350: ! st = cursym; ! 351: ! usout(&st.svalue); ! 352: ! mput(&soutb, (short *)&st, sizeof st); ! 353: } ! 354: ! 355: mget(aloc, an) ! 356: *************** ! 357: *** 1073,1079 **** ! 358: loc = aloc; ! 359: n = an>>1; ! 360: do { ! 361: ! putw(*loc++, buf); ! 362: } ! 363: while (--n); ! 364: } ! 365: --- 1112,1118 ---- ! 366: loc = aloc; ! 367: n = an>>1; ! 368: do { ! 369: ! rputw(*loc++, buf); ! 370: } ! 371: while (--n); ! 372: } ! 373: *************** ! 374: *** 1327,1332 **** ! 375: --- 1366,1379 ---- ! 376: ! 377: dseek(&text, loc, sizeof filhdr); ! 378: mget((short *)&filhdr, sizeof filhdr); ! 379: + usin(&filhdr.fmagic); ! 380: + usin(&filhdr.tsize); ! 381: + usin(&filhdr.dsize); ! 382: + usin(&filhdr.bsize); ! 383: + usin(&filhdr.ssize); ! 384: + usin(&filhdr.entry); ! 385: + usin(&filhdr.pad); ! 386: + usin(&filhdr.relflg); ! 387: if (filhdr.fmagic != FMAGIC) ! 388: error(2, "Bad format"); ! 389: st = (filhdr.tsize+01) & ~01; ! 390: *************** ! 391: *** 1363,1368 **** ! 392: --- 1410,1425 ---- ! 393: putw(w, b) ! 394: register struct buf *b; ! 395: { ! 396: + *b->xnext = w; ! 397: + usout(b->xnext); ! 398: + b->xnext++; ! 399: + if (--b->nleft <= 0) ! 400: + flush(b); ! 401: + } ! 402: + ! 403: + rputw(w, b) ! 404: + register struct buf *b; ! 405: + { ! 406: *(b->xnext)++ = w; ! 407: if (--b->nleft <= 0) ! 408: flush(b); ! 409: *************** ! 410: *** 1400,1403 **** ! 411: --- 1457,1482 ---- ! 412: while(*p >= '0' && *p <= '9') ! 413: n = n*10 + *p++ - '0'; ! 414: return(n); ! 415: + } ! 416: + ! 417: + usin(usp) ! 418: + ushort *usp; ! 419: + { ! 420: + register ushort u; ! 421: + register char *p = (char *)usp; ! 422: + ! 423: + u = *p++ & 0377; ! 424: + u |= (*p++ & 0377) << 8; ! 425: + *usp = u; ! 426: + } ! 427: + ! 428: + usout(usp) ! 429: + ushort *usp; ! 430: + { ! 431: + register ushort u; ! 432: + register char *p = (char *)usp; ! 433: + ! 434: + u = *usp; ! 435: + *p++ = u & 0377; ! 436: + *p++ = (u >> 8) & 0377; ! 437: } ! 438: *** /tmp/11nm.c.old Mon Apr 9 14:34:55 1990 ! 439: --- 11nm.c Mon Mar 19 16:04:09 1990 ! 440: *************** ! 441: *** 22,27 **** ! 442: --- 22,28 ---- ! 443: int globl_flg; ! 444: int nosort_flg; ! 445: int arch_flg; ! 446: + int swab_flg; ! 447: int prep_flg; ! 448: struct ar_hdr arp; ! 449: long arsize; ! 450: *************** ! 451: *** 35,40 **** ! 452: --- 36,43 ---- ! 453: ! 454: char *progname; /*god: for error messages, hold name here*/ ! 455: ! 456: + short swab(); ! 457: + ! 458: main(argc, argv) ! 459: char **argv; ! 460: { ! 461: *************** ! 462: *** 100,105 **** ! 463: --- 103,110 ---- ! 464: fread((char *)&magbuf, 1, sizeof(magbuf), fi); /* get magic no. */ ! 465: if (strncmp(magbuf.a, ARMAG, SARMAG)==0) ! 466: arch_flg++; ! 467: + else if (BADMAG(magbuf.i) && !BADMAG(swab(magbuf.i))) ! 468: + swab_flg++; ! 469: else if (BADMAG(magbuf.i)) { ! 470: fprintf(stderr, "%s: %s-- bad format\n", ! 471: progname, *argv); ! 472: *************** ! 473: *** 118,123 **** ! 474: --- 123,138 ---- ! 475: struct nlist sym; ! 476: ! 477: fread((char *)&exp, 1, sizeof(struct exec), fi); ! 478: + if (swab_flg) { ! 479: + exp.a_magic = swab(exp.a_magic); ! 480: + exp.a_text = swab(exp.a_text); ! 481: + exp.a_data = swab(exp.a_data); ! 482: + exp.a_bss = swab(exp.a_bss ); ! 483: + exp.a_syms = swab(exp.a_syms); ! 484: + exp.a_entry = swab(exp.a_entry); ! 485: + exp.a_unused = swab(exp.a_unused); ! 486: + exp.a_flag = swab(exp.a_flag); ! 487: + } ! 488: if (BADMAG(exp.a_magic)) { /* archive element not in */ ! 489: continue; /* proper format - skip it */ ! 490: } ! 491: *************** ! 492: *** 134,139 **** ! 493: --- 149,158 ---- ! 494: i = 0; ! 495: while (--n >= 0) { ! 496: fread((char *)&sym, 1, sizeof(sym), fi); ! 497: + if (swab_flg) { ! 498: + sym.n_type = swab(sym.n_type); ! 499: + sym.n_value = swab(sym.n_value); ! 500: + } ! 501: if (globl_flg && (sym.n_type&N_EXT)==0) ! 502: continue; ! 503: switch (sym.n_type&N_TYPE) { ! 504: *************** ! 505: *** 255,258 **** ! 506: --- 274,284 ---- ! 507: ++arsize; ! 508: off = ftell(af) + arsize; /* offset to next element */ ! 509: return(1); ! 510: + } ! 511: + ! 512: + short ! 513: + swab(s) ! 514: + short s; ! 515: + { ! 516: + return(((s&0377)<<8) | ((s>>8)&0377)); ! 517: } ! 518: *** /tmp/11ranlib.c.old Mon Apr 9 14:34:58 1990 ! 519: --- 11ranlib.c Wed Mar 21 17:38:20 1990 ! 520: *************** ! 521: *** 35,40 **** ! 522: --- 35,42 ---- ! 523: { ! 524: char buf[256]; ! 525: char magbuf[SARMAG+1]; ! 526: + register long temp; ! 527: + register int i; ! 528: ! 529: progname = argv[0]; /*god: for error messages */ ! 530: --argc; ! 531: *************** ! 532: *** 61,68 **** ! 533: long o; ! 534: register n; ! 535: struct nlist sym; ! 536: ! 537: ! fread((char *)&exp, 1, sizeof(struct exec), fi); ! 538: if (BADMAG) /* archive element not in */ ! 539: continue; /* proper format - skip it */ ! 540: o = (long)exp.a_text + exp.a_data; ! 541: --- 63,81 ---- ! 542: long o; ! 543: register n; ! 544: struct nlist sym; ! 545: + char ebuf[sizeof(exp)]; ! 546: + register char *ep; ! 547: ! 548: ! fread(ebuf, 1, sizeof(ebuf), fi); ! 549: ! ep = ebuf; ! 550: ! exp.a_magic = *ep++ & 0377; exp.a_magic |= (*ep++ & 0377) << 8; ! 551: ! exp.a_text = *ep++ & 0377; exp.a_text |= (*ep++ & 0377) << 8; ! 552: ! exp.a_data = *ep++ & 0377; exp.a_data |= (*ep++ & 0377) << 8; ! 553: ! exp.a_bss = *ep++ & 0377; exp.a_bss |= (*ep++ & 0377) << 8; ! 554: ! exp.a_syms = *ep++ & 0377; exp.a_syms |= (*ep++ & 0377) << 8; ! 555: ! exp.a_entry = *ep++ & 0377; exp.a_entry |= (*ep++ & 0377) << 8; ! 556: ! exp.a_unused = *ep++ & 0377; exp.a_unused |= (*ep++ & 0377) << 8; ! 557: ! exp.a_flag = *ep++ & 0377; exp.a_flag |= (*ep++ & 0377) << 8; ! 558: if (BADMAG) /* archive element not in */ ! 559: continue; /* proper format - skip it */ ! 560: o = (long)exp.a_text + exp.a_data; ! 561: *************** ! 562: *** 77,82 **** ! 563: --- 90,102 ---- ! 564: } ! 565: while (--n >= 0) { ! 566: fread((char *)&sym, 1, sizeof(sym), fi); ! 567: + ep = (char *)&sym.n_type; ! 568: + temp = *ep++ & 0377; ! 569: + temp |= (*ep++ & 0377) >> 8; ! 570: + sym.n_type = temp; ! 571: + temp = *ep++ & 0377; ! 572: + temp |= (*ep++ & 0377) >> 8; ! 573: + sym.n_value = temp; ! 574: if ((sym.n_type&N_EXT)==0) ! 575: continue; ! 576: switch (sym.n_type&N_TYPE) { ! 577: *************** ! 578: *** 98,103 **** ! 579: --- 118,133 ---- ! 580: if(fo == NULL) ! 581: { fprintf(stderr, "can't create temporary\n"); ! 582: exit(1); ! 583: + } ! 584: + for (i = 0; i < TABSZ; i++) { ! 585: + register char *p; ! 586: + ! 587: + p = (char *)&tab[i].cloc; ! 588: + temp = tab[i].cloc; ! 589: + *p++ = (temp >> 16) & 0377; /* funny long order */ ! 590: + *p++ = (temp >> 24) & 0377; ! 591: + *p++ = (temp) & 0377; ! 592: + *p++ = (temp >> 8) & 0377; ! 593: } ! 594: fwrite((char *)tab, tnum, sizeof(struct tab), fo); ! 595: fclose(fo); ! 596: *** /tmp/11size.c.old Mon Apr 9 14:35:01 1990 ! 597: --- 11size.c Wed Mar 21 17:20:35 1990 ! 598: *************** ! 599: *** 8,21 **** ! 600: ! 601: int a_magic[] = {A_MAGIC1,A_MAGIC2,A_MAGIC3,A_MAGIC4,0}; ! 602: ! 603: main(argc, argv) ! 604: char **argv; ! 605: { ! 606: ! struct exec buf; ! 607: long sum; ! 608: int gorp,i; ! 609: FILE *f; ! 610: ! 611: if (argc==1) { ! 612: *argv = A_DOT_OUT; /*god*/ ! 613: argc++; ! 614: --- 12,31 ---- ! 615: ! 616: int a_magic[] = {A_MAGIC1,A_MAGIC2,A_MAGIC3,A_MAGIC4,0}; ! 617: ! 618: + char *progname; ! 619: + ! 620: main(argc, argv) ! 621: char **argv; ! 622: { ! 623: ! struct exec h; ! 624: ! char buf[sizeof(struct exec)]; ! 625: ! register char *bp; ! 626: long sum; ! 627: int gorp,i; ! 628: FILE *f; ! 629: ! 630: + progname = argv[0]; ! 631: + ! 632: if (argc==1) { ! 633: *argv = A_DOT_OUT; /*god*/ ! 634: argc++; ! 635: *************** ! 636: *** 25,45 **** ! 637: while(--argc) { ! 638: ++argv; ! 639: if ((f = fopen(*argv, "r"))==NULL) { ! 640: ! printf("11size: %s not found\n", *argv); ! 641: continue; ! 642: } ! 643: ! fread((char *)&buf, sizeof(buf), 1, f); ! 644: for(i=0;a_magic[i];i++) ! 645: ! if(a_magic[i] == buf.a_magic) break; ! 646: if(a_magic[i] == 0) { ! 647: ! printf("11size: %s not an object file\n", *argv); ! 648: ! fclose(f); ! 649: continue; ! 650: } ! 651: if (gorp>2) ! 652: printf("%s: ", *argv); ! 653: ! printf("%u+%u+%u = ", buf.a_text,buf.a_data,buf.a_bss); ! 654: ! sum = (long) buf.a_text + (long) buf.a_data + (long) buf.a_bss; ! 655: printf("%ldb = %#lob\n", sum, sum); ! 656: fclose(f); ! 657: } ! 658: --- 35,68 ---- ! 659: while(--argc) { ! 660: ++argv; ! 661: if ((f = fopen(*argv, "r"))==NULL) { ! 662: ! fprintf(stderr, "11size: `%s' not found\n", *argv); ! 663: continue; ! 664: } ! 665: ! if (fread(buf, sizeof(buf), 1, f) != 1) { ! 666: ! fprintf(stderr, "11size: read error in `%s'\n", *argv); ! 667: ! (void) fclose(f); ! 668: ! continue; ! 669: ! } ! 670: ! bp = buf; ! 671: ! h.a_magic = *bp++ & 0377; h.a_magic |= (*bp++&0377) << 8; ! 672: ! h.a_text = *bp++ & 0377; h.a_text |= (*bp++&0377) << 8; ! 673: ! h.a_data = *bp++ & 0377; h.a_data |= (*bp++&0377) << 8; ! 674: ! h.a_bss = *bp++ & 0377; h.a_bss |= (*bp++&0377) << 8; ! 675: ! h.a_syms = *bp++ & 0377; h.a_syms |= (*bp++&0377) << 8; ! 676: ! h.a_entry = *bp++ & 0377; h.a_entry |= (*bp++&0377) << 8; ! 677: ! h.a_unused = *bp++ & 0377; h.a_unused |= (*bp++&0377) << 8; ! 678: ! h.a_flag = *bp++ & 0377; h.a_flag |= (*bp++&0377) << 8; ! 679: for(i=0;a_magic[i];i++) ! 680: ! if(a_magic[i] == h.a_magic) break; ! 681: if(a_magic[i] == 0) { ! 682: ! printf("11size: `%s' not an object file\n", *argv); ! 683: ! (void) fclose(f); ! 684: continue; ! 685: } ! 686: if (gorp>2) ! 687: printf("%s: ", *argv); ! 688: ! printf("%u+%u+%u = ", h.a_text,h.a_data,h.a_bss); ! 689: ! sum = (long) h.a_text + (long) h.a_data + (long) h.a_bss; ! 690: printf("%ldb = %#lob\n", sum, sum); ! 691: fclose(f); ! 692: } ! 693: *** /tmp/11strip.c.old Mon Apr 9 14:35:04 1990 ! 694: --- 11strip.c Wed Mar 21 17:08:18 1990 ! 695: *************** ! 696: *** 47,52 **** ! 697: --- 51,58 ---- ! 698: int i; ! 699: time_t tm[2]; ! 700: struct stat stbuf; ! 701: + char buf[sizeof(head)]; ! 702: + register char *bp; ! 703: ! 704: tm[0] = 0; ! 705: f = open(name, 0); ! 706: *************** ! 707: *** 58,64 **** ! 708: fstat(f, &stbuf); ! 709: tm[0] = stbuf.st_atime; ! 710: tm[1] = stbuf.st_mtime; ! 711: ! read(f, (char *)&head, sizeof(head)); ! 712: for(i=0;a_magic[i];i++) ! 713: if(a_magic[i] == head.a_magic) break; ! 714: if(a_magic[i] == 0) { ! 715: --- 64,79 ---- ! 716: fstat(f, &stbuf); ! 717: tm[0] = stbuf.st_atime; ! 718: tm[1] = stbuf.st_mtime; ! 719: ! read(f, buf, sizeof(buf)); ! 720: ! bp = buf; ! 721: ! head.a_magic = *bp++ & 0377; head.a_magic |= (*bp++ & 0377) << 8; ! 722: ! head.a_text = *bp++ & 0377; head.a_text |= (*bp++ & 0377) << 8; ! 723: ! head.a_data = *bp++ & 0377; head.a_data |= (*bp++ & 0377) << 8; ! 724: ! head.a_bss = *bp++ & 0377; head.a_bss |= (*bp++ & 0377) << 8; ! 725: ! head.a_syms = *bp++ & 0377; head.a_syms |= (*bp++ & 0377) << 8; ! 726: ! head.a_entry = *bp++ & 0377; head.a_entry |= (*bp++ & 0377) << 8; ! 727: ! head.a_unused = *bp++ & 0377; head.a_unused |= (*bp++ & 0377) << 8; ! 728: ! head.a_flag = *bp++ & 0377; head.a_flag |= (*bp++ & 0377) << 8; ! 729: for(i=0;a_magic[i];i++) ! 730: if(a_magic[i] == head.a_magic) break; ! 731: if(a_magic[i] == 0) { ! 732: *************** ! 733: *** 73,81 **** ! 734: size = (long)head.a_text + head.a_data; ! 735: head.a_syms = 0; ! 736: head.a_flag |= 1; ! 737: ! 738: lseek(tf, (long)0, 0); ! 739: ! write(tf, (char *)&head, sizeof(head)); ! 740: if(copy(name, f, tf, size)) { ! 741: status = 1; ! 742: goto out; ! 743: --- 88,105 ---- ! 744: size = (long)head.a_text + head.a_data; ! 745: head.a_syms = 0; ! 746: head.a_flag |= 1; ! 747: + bp = buf; ! 748: + *bp++ = head.a_magic&0377; *bp++ = (head.a_magic>>8)&0377; ! 749: + *bp++ = head.a_text&0377; *bp++ = (head.a_text>>8)&0377; ! 750: + *bp++ = head.a_data&0377; *bp++ = (head.a_data>>8)&0377; ! 751: + *bp++ = head.a_bss&0377; *bp++ = (head.a_bss>>8)&0377; ! 752: + *bp++ = head.a_syms&0377; *bp++ = (head.a_syms>>8)&0377; ! 753: + *bp++ = head.a_entry&0377; *bp++ = (head.a_entry>>8)&0377; ! 754: + *bp++ = head.a_unused&0377; *bp++ = (head.a_unused>>8)&0377; ! 755: + *bp++ = head.a_flag&0377; *bp++ = (head.a_flag>>8)&0377; ! 756: ! 757: lseek(tf, (long)0, 0); ! 758: ! write(tf, buf, sizeof(buf)); ! 759: if(copy(name, f, tf, size)) { ! 760: status = 1; ! 761: goto out; ! 762: *** /tmp/didnotexistbefore Mon Apr 9 14:52:59 1990 ! 763: --- as/README.tmpf Mon Mar 19 15:57:38 1990 ! 764: *************** ! 765: *** 0 **** ! 766: --- 1,23 ---- ! 767: + The assembler uses three temporary files to pass info from pass 1 to pass 2. ! 768: + All are binary format. Code dealing with them had to be beat on a bit to ! 769: + make it run on the Sun; the VAX had the same byte ordering as the pdp11, ! 770: + which preserved some unportable code. (Not just wrong byte order in ! 771: + shorts, but also writing out the first half of a long and assuming ! 772: + that was the low-order half.) ! 773: + ! 774: + The first file, pof in pass 1 and stdin/intfil in pass 2, is shorts in ! 775: + pdp11 byte order (low byte first). (A bit curious, but pass 1 wrote them ! 776: + as words and pass 2 read them as pairs of chars [barf], and the choice of ! 777: + which to fix was arbitrary.) They are restored to host byte order for ! 778: + pass-2 processing, and flipped to pdp11 order again for final output. ! 779: + ! 780: + The second, fbfil in both, is information on temporary labels. It is ! 781: + binary records of type "struct expr", in host format. (For some bizarre ! 782: + reason, pass 1 used to define its own structure with the type field of ! 783: + the struct broken down into two chars, while pass 2 extracted the pieces ! 784: + with shifts and masks on a short!) ! 785: + ! 786: + The third, t in pass 1 and symf in pass 2, is the symbol table. It is ! 787: + binary records of type "struct symtab", in host format. The shorts in ! 788: + these are transmogrified into pdp11 byte order before they are written ! 789: + out to the final output. ! 790: *** /tmp/Makefile.old Mon Apr 9 14:54:12 1990 ! 791: --- as/Makefile Thu Mar 29 16:10:22 1990 ! 792: *************** ! 793: *** 4,21 **** ! 794: # ! 795: # BINDIR and LIBDIR must be defined. ! 796: # ! 797: ! BINDIR = /usr/bin ! 798: LIBDIR = /usr/lib ! 799: ! 800: AS1 = 11as ! 801: AS2 = 11as2 ! 802: ! A_DOT_OUT = a.out ! 803: ! 804: CC = cc ! 805: CFLAGS = -O "-DPASS2PGM=\"${LIBDIR}/${AS2}\"" "-DA_DOT_OUT=\"${A_DOT_OUT}\"" ! 806: ! 807: ! AS1O = as11.o as12.o as13.o as14.o as15.o as16.o as17.o as18.o as19.o ! 808: ! AS2O = as21.o as22.o as23.o as24.o as25.o as26.o as27.o as28.o as29.o ! 809: ! 810: all: ${AS1} ${AS2} ! 811: ! 812: --- 4,21 ---- ! 813: # ! 814: # BINDIR and LIBDIR must be defined. ! 815: # ! 816: ! BINDIR = /usr/bin ! 817: LIBDIR = /usr/lib ! 818: ! 819: AS1 = 11as ! 820: AS2 = 11as2 ! 821: ! A_DOT_OUT = a.out ! 822: ! 823: CC = cc ! 824: CFLAGS = -O "-DPASS2PGM=\"${LIBDIR}/${AS2}\"" "-DA_DOT_OUT=\"${A_DOT_OUT}\"" ! 825: ! 826: ! AS1O = as11.o as12.o as13.o as14.o as15.o as16.o as17.o as18.o as19.o heap.o ! 827: ! AS2O = as21.o as22.o as23.o as24.o as25.o as26.o as27.o as28.o as29.o heap.o ! 828: ! 829: all: ${AS1} ${AS2} ! 830: ! 831: *** /tmp/as1.h.old Mon Apr 9 14:54:13 1990 ! 832: --- as/as1.h Thu Mar 29 16:09:31 1990 ! 833: *************** ! 834: *** 107,109 **** ! 835: --- 107,110 ---- ! 836: extern int nargs; ! 837: extern char **curarg; ! 838: extern int numval; ! 839: + #define sbrk hbrk ! 840: *** /tmp/as11.c.old Mon Apr 9 14:54:14 1990 ! 841: --- as/as11.c Mon Mar 19 16:08:05 1990 ! 842: *************** ! 843: *** 22,27 **** ! 844: --- 22,28 ---- ! 845: extern aexit(); ! 846: FILE *t; ! 847: char *buf1,*buf2; ! 848: + extern char *sbrk(); ! 849: ! 850: if (signal(SIGINT,SIG_IGN)!=SIG_IGN) signal(SIGINT,aexit); ! 851: while (--argc>=0 && (++argv)[0][0]=='-') { ! 852: *** /tmp/as12.c.old Mon Apr 9 14:54:15 1990 ! 853: --- as/as12.c Mon Mar 19 16:08:06 1990 ! 854: *************** ! 855: *** 11,16 **** ! 856: putw(t) ! 857: OP t; ! 858: { ! 859: ! if (ifflg==0 || (t.v=='\n')) ! 860: ! if (EOF==fwrite(&t,2,1,pof)) wrterr(); ! 861: } ! 862: --- 11,21 ---- ! 863: putw(t) ! 864: OP t; ! 865: { ! 866: ! char buf[2]; ! 867: ! ! 868: ! if (ifflg==0 || (t.v=='\n')) { ! 869: ! buf[0] = t.uv&0377; ! 870: ! buf[1] = (t.uv>>8)&0377; ! 871: ! if (EOF==fwrite(buf,2,1,pof)) wrterr(); ! 872: ! } ! 873: } ! 874: *** /tmp/as13.c.old Mon Apr 9 14:54:15 1990 ! 875: --- as/as13.c Mon Mar 19 16:08:06 1990 ! 876: *************** ! 877: *** 5,10 **** ! 878: --- 5,11 ---- ! 879: assem() ! 880: { ! 881: OP op1,op2; ! 882: + struct expr buf; ! 883: ! 884: for (;;) { ! 885: op1=readop(); ! 886: *************** ! 887: *** 34,41 **** ! 888: if (op1.v!=T_ABS) {error('x'); continue;} ! 889: t=fbcheck(numval); ! 890: curfbr[t]= *dotrel; curfb[t]= *dot; ! 891: ! nxtfb.c0= *dotrel; nxtfb.c1=t; nxtfb.val= *dot; ! 892: ! if (1!=fwrite(&nxtfb,sizeof(nxtfb),1,fbfil)) wrterr(); ! 893: } else { ! 894: if (op1.xp->typ&037) error('m'); ! 895: op1.xp->typ |= *dotrel; op1.xp->val = *dot; ! 896: --- 35,43 ---- ! 897: if (op1.v!=T_ABS) {error('x'); continue;} ! 898: t=fbcheck(numval); ! 899: curfbr[t]= *dotrel; curfb[t]= *dot; ! 900: ! buf.typ = ((t&0377)<<8)|(*dotrel&0377); ! 901: ! buf.val = *dot; ! 902: ! if (1!=fwrite(&buf,sizeof(buf),1,fbfil)) wrterr(); ! 903: } else { ! 904: if (op1.xp->typ&037) error('m'); ! 905: op1.xp->typ |= *dotrel; op1.xp->val = *dot; ! 906: *** /tmp/as14.c.old Mon Apr 9 14:54:16 1990 ! 907: --- as/as14.c Thu Mar 29 16:23:41 1990 ! 908: *************** ! 909: *** 1,5 **** ! 910: --- 1,6 ---- ! 911: /* a4 -- pdp-11 assembler pass1 */ ! 912: #include "as1.h" ! 913: + #define end heap ! 914: extern char end[]; ! 915: char *brkend = end; ! 916: extern struct symtab *hshtab[HSHSIZ]; ! 917: *************** ! 918: *** 14,19 **** ! 919: --- 15,21 ---- ! 920: struct symtab *sp,**hp; ! 921: int around; ! 922: int h=0,flags=0; ! 923: + extern char *sbrk(); ! 924: ! 925: for (cp1=symbol+NCPS,i=NCPS; --i>=0; ) *--cp1=0; ! 926: i=NCPS; ! 927: *** /tmp/as2.h.old Mon Apr 9 14:54:17 1990 ! 928: --- as/as2.h Thu Mar 29 16:09:58 1990 ! 929: *************** ! 930: *** 94,96 **** ! 931: --- 94,97 ---- ! 932: extern int ifflg; ! 933: extern int numval; ! 934: extern int brdelt; ! 935: + #define sbrk hbrk ! 936: *** /tmp/as21.c.old Mon Apr 9 14:54:17 1990 ! 937: --- as/as21.c Thu Mar 29 16:51:24 1990 ! 938: *************** ! 939: *** 37,42 **** ! 940: --- 37,46 ---- ! 941: int datbase,bssbase; ! 942: int nsym; ! 943: int defund = 0; ! 944: + extern char *sbrk(); ! 945: + char hbuf[sizeof(hdr)]; ! 946: + char buf[2]; ! 947: + register char *hbp; ! 948: ! 949: if (signal(SIGINT,SIG_IGN)!=SIG_IGN) signal(SIGINT,saexit); ! 950: while (--argc>=0 && (++argv)[0][0]=='-') { ! 951: *************** ! 952: *** 62,68 **** ! 953: ! 954: fstat(fileno(symf),&statbuf); hdr.symsiz=statbuf.st_size; ! 955: nsym=n=statbuf.st_size/sizeof(dsksym); ! 956: ! if (-1==(usymtab=sp=sbrk(n*sizeof(*sp)))) saexit(); ! 957: while (--n>=0) { ! 958: if (1!=fread(&dsksym,sizeof(dsksym),1,symf)) wrterr(); ! 959: if ((t=dsksym.dtyp&037)==T_TEXT || t==T_DATA) { ! 960: --- 66,72 ---- ! 961: ! 962: fstat(fileno(symf),&statbuf); hdr.symsiz=statbuf.st_size; ! 963: nsym=n=statbuf.st_size/sizeof(dsksym); ! 964: ! if ((struct expr *)-1==(usymtab=sp=(struct expr *)sbrk(n*sizeof(*sp)))) saexit(); ! 965: while (--n>=0) { ! 966: if (1!=fread(&dsksym,sizeof(dsksym),1,symf)) wrterr(); ! 967: if ((t=dsksym.dtyp&037)==T_TEXT || t==T_DATA) { ! 968: *************** ! 969: *** 79,85 **** ! 970: ! 971: fstat(fileno(fbfil),&statbuf); ! 972: nfb=statbuf.st_size/sizeof(*fbp); ! 973: ! if (-1==(fbbuf=fbp=sbrk((nfb+1)*sizeof(*fbp)))) saexit(); ! 974: if (nfb!=fread(fbp,sizeof(*fbp),nfb,fbfil)) wrterr(); ! 975: while (--nfb>=0) fbp++->typ+=T_ESTTXT-T_TEXT; /* mark "estimated" */ ! 976: usymend=fbp; fbp->typ=0100000; ! 977: --- 83,89 ---- ! 978: ! 979: fstat(fileno(fbfil),&statbuf); ! 980: nfb=statbuf.st_size/sizeof(*fbp); ! 981: ! if ((struct expr *)-1==(fbbuf=fbp=(struct expr *)sbrk((nfb+1)*sizeof(*fbp)))) saexit(); ! 982: if (nfb!=fread(fbp,sizeof(*fbp),nfb,fbfil)) wrterr(); ! 983: while (--nfb>=0) fbp++->typ+=T_ESTTXT-T_TEXT; /* mark "estimated" */ ! 984: usymend=fbp; fbp->typ=0100000; ! 985: *************** ! 986: *** 119,125 **** ! 987: } ! 988: } ! 989: ! 990: ! if (1!=fwrite(&hdr,sizeof(hdr),1,txtf)) wrterr(); ! 991: fseek(txtf,tseek[T_TEXT-T_TEXT],0); ! 992: fseek(relf,rseek[T_TEXT-T_TEXT],0); ! 993: assem(); ! 994: --- 123,138 ---- ! 995: } ! 996: } ! 997: ! 998: ! hbp = hbuf; ! 999: ! *hbp++ = hdr.magic&0377; *hbp++ = (hdr.magic>>8)&0377; ! 1000: ! *hbp++ = hdr.txtsiz&0377; *hbp++ = (hdr.txtsiz>>8)&0377; ! 1001: ! *hbp++ = hdr.datsiz&0377; *hbp++ = (hdr.datsiz>>8)&0377; ! 1002: ! *hbp++ = hdr.bsssiz&0377; *hbp++ = (hdr.bsssiz>>8)&0377; ! 1003: ! *hbp++ = hdr.symsiz&0377; *hbp++ = (hdr.symsiz>>8)&0377; ! 1004: ! *hbp++ = hdr.entry&0377; *hbp++ = (hdr.entry>>8)&0377; ! 1005: ! *hbp++ = hdr.flag&0377; *hbp++ = (hdr.flag>>8)&0377; ! 1006: ! *hbp++ = hdr.dummy&0377; *hbp++ = (hdr.dummy>>8)&0377; ! 1007: ! if (1!=fwrite(hbuf,sizeof(hbuf),1,txtf)) wrterr(); ! 1008: fseek(txtf,tseek[T_TEXT-T_TEXT],0); ! 1009: fseek(relf,rseek[T_TEXT-T_TEXT],0); ! 1010: assem(); ! 1011: *************** ! 1012: *** 132,138 **** ! 1013: while (--n>=0) { ! 1014: if (1!=fread(&dsksym,sizeof(dsksym),1,symf)) wrterr(); ! 1015: dsksym.dtyp=sp->typ; dsksym.dval=sp->val; ! 1016: ! if (1!=fwrite(&dsksym,sizeof(dsksym),1,relf)) wrterr(); ! 1017: sp++; ! 1018: } ! 1019: } ! 1020: --- 145,157 ---- ! 1021: while (--n>=0) { ! 1022: if (1!=fread(&dsksym,sizeof(dsksym),1,symf)) wrterr(); ! 1023: dsksym.dtyp=sp->typ; dsksym.dval=sp->val; ! 1024: ! if (1!=fwrite(dsksym.name,sizeof(dsksym.name),1,relf)) wrterr(); ! 1025: ! buf[0] = dsksym.dtyp&0377; ! 1026: ! buf[1] = (dsksym.dtyp>>8)&0377; ! 1027: ! if (1!=fwrite(buf,2,1,relf)) wrterr(); ! 1028: ! buf[0] = dsksym.dval&0377; ! 1029: ! buf[1] = (dsksym.dval>>8)&0377; ! 1030: ! if (1!=fwrite(buf,2,1,relf)) wrterr(); ! 1031: sp++; ! 1032: } ! 1033: } ! 1034: *** /tmp/as22.c.old Mon Apr 9 14:54:18 1990 ! 1035: --- as/as22.c Mon Mar 19 16:08:08 1990 ! 1036: *************** ! 1037: *** 34,46 **** ! 1038: ! 1039: outb(typ,val) ! 1040: { ! 1041: if (*dotrel==T_BSS) {error('x'); return;} ! 1042: if ((unsigned)typ>T_ABS) error('r'); ! 1043: if (passno!=0) { ! 1044: ! if (1!=fwrite(&val,1,1,txtf)) wrterr(); ! 1045: tseek[*dotrel-T_TEXT]++; ! 1046: if (!(*dot&1)) {/* relocate immediately, so we don't forget */ ! 1047: ! val=0; if (1!=fwrite(&val,2,1,relf)) wrterr(); ! 1048: rseek[*dotrel-T_TEXT]+=2; ! 1049: } ! 1050: } ! 1051: --- 34,49 ---- ! 1052: ! 1053: outb(typ,val) ! 1054: { ! 1055: + char buf[2]; ! 1056: + ! 1057: if (*dotrel==T_BSS) {error('x'); return;} ! 1058: if ((unsigned)typ>T_ABS) error('r'); ! 1059: if (passno!=0) { ! 1060: ! buf[0] = val; ! 1061: ! if (1!=fwrite(buf,1,1,txtf)) wrterr(); ! 1062: tseek[*dotrel-T_TEXT]++; ! 1063: if (!(*dot&1)) {/* relocate immediately, so we don't forget */ ! 1064: ! if (2!=fwrite("\0\0",1,2,relf)) wrterr(); ! 1065: rseek[*dotrel-T_TEXT]+=2; ! 1066: } ! 1067: } ! 1068: *** /tmp/as24.c.old Mon Apr 9 14:54:19 1990 ! 1069: --- as/as24.c Mon Mar 19 16:08:08 1990 ! 1070: *************** ! 1071: *** 4,10 **** ! 1072: putw(w,fp) ! 1073: FILE *fp; ! 1074: { ! 1075: ! if (1!=fwrite(&w,2,1,fp)) wrterr(); ! 1076: } ! 1077: ! 1078: wrterr() ! 1079: --- 4,14 ---- ! 1080: putw(w,fp) ! 1081: FILE *fp; ! 1082: { ! 1083: ! char buf[2]; ! 1084: ! ! 1085: ! buf[0] = w&0377; ! 1086: ! buf[1] = (w>>8)&0377; ! 1087: ! if (1!=fwrite(buf,2,1,fp)) wrterr(); ! 1088: } ! 1089: ! 1090: wrterr() ! 1091: *** /tmp/didnotexistbefore Mon Apr 9 14:52:59 1990 ! 1092: --- heap.c Thu Mar 29 16:50:08 1990 ! 1093: *************** ! 1094: *** 0 **** ! 1095: --- 1,21 ---- ! 1096: + /* ! 1097: + * fake heap and fake sbrk() for ugly old code ! 1098: + */ ! 1099: + #include <stdio.h> ! 1100: + #ifndef HEAPSIZ ! 1101: + #define HEAPSIZ 100000 ! 1102: + #endif ! 1103: + char heap[HEAPSIZ]; ! 1104: + static char *hbreak = &heap[0]; ! 1105: + ! 1106: + char * ! 1107: + hbrk(amount) ! 1108: + int amount; ! 1109: + { ! 1110: + register char *old = hbreak; ! 1111: + ! 1112: + hbreak += amount; ! 1113: + if (hbreak > &heap[HEAPSIZ]) ! 1114: + return((char *)-1); ! 1115: + return(old); ! 1116: + } ! 1117: *** /tmp/11cc.c.old Mon Apr 9 15:00:44 1990 ! 1118: --- 11cc.c Thu Mar 29 15:20:43 1990 ! 1119: *************** ! 1120: *** 246,253 **** ! 1121: pref = "/lib/mcrt0.o";*/ /*god*/ ! 1122: if(nc==0) ! 1123: goto nocom; ! 1124: if (pflag==0 || Fflag) { /* mjm: added Fflag */ ! 1125: - tmp0 = copy("/tmp/ctm0a"); ! 1126: while (access(tmp0, 0)==0) ! 1127: tmp0[9]++; ! 1128: while((creat(tmp0, 0400))<0) { ! 1129: --- 244,251 ---- ! 1130: pref = "/lib/mcrt0.o";*/ /*god*/ ! 1131: if(nc==0) ! 1132: goto nocom; ! 1133: + tmp0 = copy("/tmp/ctm0a"); ! 1134: if (pflag==0 || Fflag) { /* mjm: added Fflag */ ! 1135: while (access(tmp0, 0)==0) ! 1136: tmp0[9]++; ! 1137: while((creat(tmp0, 0400))<0) { ! 1138: *** /tmp/Makefile.old Mon Apr 9 15:05:10 1990 ! 1139: --- cc/Makefile Thu Mar 29 15:25:23 1990 ! 1140: *************** ! 1141: *** 9,19 **** ! 1142: ! 1143: CFLAGS = -O ! 1144: ! 1145: ! C0FILES = c00.o c01.o c02.o c03.o c04.o c05.o ! 1146: ! C1FILES = c10.o c11.o c12.o c13.o ! 1147: ! C2FILES = c20.o c21.o ! 1148: ! 1149: ! all: ${C0} ${C1} ${C2} ! 1150: @echo \`all\' is up to date: $? ! 1151: ! 1152: ${C0}: ${C0FILES} ! 1153: --- 10,20 ---- ! 1154: ! 1155: CFLAGS = -O ! 1156: ! 1157: ! C0FILES = c00.o c01.o c02.o c03.o c04.o c05.o heap.o ! 1158: ! C1FILES = c10.o c11.o c12.o c13.o heap.o ! 1159: ! C2FILES = c20.o c21.o heap.o ! 1160: ! 1161: ! all: ${C0} ${C1} ${C2} ! 1162: @echo \`all\' is up to date: $? ! 1163: ! 1164: ${C0}: ${C0FILES} ! 1165: *** /tmp/c0.h.old Mon Apr 9 15:05:12 1990 ! 1166: --- cc/c0.h Thu Mar 29 14:37:05 1990 ! 1167: *************** ! 1168: *** 75,81 **** ! 1169: * Structure of tree nodes for operators ! 1170: */ ! 1171: struct tnode { ! 1172: ! int op; /* operator */ ! 1173: int type; /* data type */ ! 1174: int *subsp; /* subscript list (for arrays) */ ! 1175: union str *strp; /* structure description for structs */ ! 1176: --- 75,81 ---- ! 1177: * Structure of tree nodes for operators ! 1178: */ ! 1179: struct tnode { ! 1180: ! short op; /* operator */ ! 1181: int type; /* data type */ ! 1182: int *subsp; /* subscript list (for arrays) */ ! 1183: union str *strp; /* structure description for structs */ ! 1184: *************** ! 1185: *** 87,93 **** ! 1186: * Tree node for constants ! 1187: */ ! 1188: struct cnode { ! 1189: ! int op; ! 1190: int type; ! 1191: int *subsp; ! 1192: union str *strp; ! 1193: --- 87,93 ---- ! 1194: * Tree node for constants ! 1195: */ ! 1196: struct cnode { ! 1197: ! short op; ! 1198: int type; ! 1199: int *subsp; ! 1200: union str *strp; ! 1201: *************** ! 1202: *** 98,104 **** ! 1203: * Tree node for long constants ! 1204: */ ! 1205: struct lnode { ! 1206: ! int op; ! 1207: int type; ! 1208: int *subsp; ! 1209: union str *strp; ! 1210: --- 98,104 ---- ! 1211: * Tree node for long constants ! 1212: */ ! 1213: struct lnode { ! 1214: ! short op; ! 1215: int type; ! 1216: int *subsp; ! 1217: union str *strp; ! 1218: *************** ! 1219: *** 110,116 **** ! 1220: * constants ! 1221: */ ! 1222: struct fnode { ! 1223: ! int op; ! 1224: int type; ! 1225: int *subsp; ! 1226: union str *strp; ! 1227: --- 110,116 ---- ! 1228: * constants ! 1229: */ ! 1230: struct fnode { ! 1231: ! short op; ! 1232: int type; ! 1233: int *subsp; ! 1234: union str *strp; ! 1235: *************** ! 1236: *** 453,459 **** ! 1237: /* ! 1238: * functions ! 1239: */ ! 1240: ! char *sbrk(); ! 1241: union tree *tree(); ! 1242: char *copnum(); ! 1243: union tree *convert(); ! 1244: --- 453,460 ---- ! 1245: /* ! 1246: * functions ! 1247: */ ! 1248: ! char *hbrk(); ! 1249: ! #define sbrk(n) hbrk(n) ! 1250: union tree *tree(); ! 1251: char *copnum(); ! 1252: union tree *convert(); ! 1253: *** /tmp/c00.c.old Mon Apr 9 15:05:16 1990 ! 1254: --- cc/c00.c Thu Mar 29 14:38:22 1990 ! 1255: *************** ! 1256: *** 223,229 **** ! 1257: peekc = getchar(); ! 1258: } ! 1259: if (peekc != '\n') { ! 1260: ! error("Illegal #"); ! 1261: while (getchar()!='\n' && eof==0) ! 1262: ; ! 1263: } ! 1264: --- 223,231 ---- ! 1265: peekc = getchar(); ! 1266: } ! 1267: if (peekc != '\n') { ! 1268: ! #ifndef sun /* Sun cpp adds level indicator on end */ ! 1269: ! error("Illegal # suffix"); ! 1270: ! #endif ! 1271: while (getchar()!='\n' && eof==0) ! 1272: ; ! 1273: } ! 1274: *************** ! 1275: *** 465,485 **** ! 1276: ! 1277: /* ! 1278: * read a single-quoted character constant. ! 1279: - * The routine is sensitive to the layout of ! 1280: - * characters in a word. ! 1281: */ ! 1282: getcc() ! 1283: { ! 1284: register int c, cc; ! 1285: - register char *ccp; ! 1286: char realc; ! 1287: ! 1288: cval = 0; ! 1289: - ccp = (char *)&cval; ! 1290: cc = 0; ! 1291: ! while((c=mapch('\'')) >= 0) ! 1292: ! if(cc++ < LNCPW) ! 1293: ! *ccp++ = c; ! 1294: if (cc>LNCPW) ! 1295: error("Long character constant"); ! 1296: if (cc==1) { ! 1297: --- 467,485 ---- ! 1298: ! 1299: /* ! 1300: * read a single-quoted character constant. ! 1301: */ ! 1302: getcc() ! 1303: { ! 1304: register int c, cc; ! 1305: char realc; ! 1306: ! 1307: cval = 0; ! 1308: cc = 0; ! 1309: ! while((c=mapch('\'')) >= 0) { ! 1310: ! if(cc < LNCPW) ! 1311: ! cval = cval | ((c&0377) << (cc*8)); ! 1312: ! cc++; ! 1313: ! } ! 1314: if (cc>LNCPW) ! 1315: error("Long character constant"); ! 1316: if (cc==1) { ! 1317: *** /tmp/c04.c.old Mon Apr 9 15:05:20 1990 ! 1318: --- cc/c04.c Thu Mar 29 14:38:49 1990 ! 1319: *************** ! 1320: *** 375,387 **** ! 1321: ap = &a; ! 1322: for (;;) switch(*s++) { ! 1323: case 'B': ! 1324: ! putc(*ap++, bufp); ! 1325: putc(0376, bufp); ! 1326: continue; ! 1327: ! 1328: case 'N': ! 1329: ! putc(*ap, bufp); ! 1330: ! putc(*ap++>>8, bufp); ! 1331: continue; ! 1332: ! 1333: case 'F': ! 1334: --- 375,387 ---- ! 1335: ap = &a; ! 1336: for (;;) switch(*s++) { ! 1337: case 'B': ! 1338: ! putc(*ap++&0377, bufp); ! 1339: putc(0376, bufp); ! 1340: continue; ! 1341: ! 1342: case 'N': ! 1343: ! putc(*ap&0377, bufp); ! 1344: ! putc((*ap++>>8)&0377, bufp); ! 1345: continue; ! 1346: ! 1347: case 'F': ! 1348: *** /tmp/c1.h.old Mon Apr 9 15:05:21 1990 ! 1349: --- cc/c1.h Thu Mar 29 14:37:22 1990 ! 1350: *************** ! 1351: *** 147,153 **** ! 1352: int panicposs; /* set when there might be a need for regpanic */ ! 1353: jmp_buf jmpbuf; ! 1354: long ftell(); ! 1355: ! char *sbrk(); ! 1356: struct optab *match(); ! 1357: union tree *optim(); ! 1358: union tree *unoptim(); ! 1359: --- 147,154 ---- ! 1360: int panicposs; /* set when there might be a need for regpanic */ ! 1361: jmp_buf jmpbuf; ! 1362: long ftell(); ! 1363: ! char *hbrk(); ! 1364: ! #define sbrk(n) hbrk(n) ! 1365: struct optab *match(); ! 1366: union tree *optim(); ! 1367: union tree *unoptim(); ! 1368: *** /tmp/c10.c.old Mon Apr 9 15:05:24 1990 ! 1369: --- cc/c10.c Thu Mar 29 14:39:14 1990 ! 1370: *************** ! 1371: *** 1090,1095 **** ! 1372: --- 1090,1096 ---- ! 1373: lbuf.type = tree->t.type; ! 1374: lbuf.degree = tree->t.degree; ! 1375: lbuf.tr1 = tree; ! 1376: + lbuf.tr2 = TNULL; ! 1377: return(rcexpr((union tree *)&lbuf, table, reg)); ! 1378: } ! 1379: ! 1380: *** /tmp/c2.h.old Mon Apr 9 15:05:34 1990 ! 1381: --- cc/c2.h Thu Mar 29 14:37:22 1990 ! 1382: *************** ! 1383: *** 130,136 **** ! 1384: struct optab *ophash[OPHS]; ! 1385: struct node *nonlab(); ! 1386: char *copy(); ! 1387: ! char *sbrk(); ! 1388: char *findcon(); ! 1389: struct node *insertl(); ! 1390: struct node *codemove(); ! 1391: --- 130,137 ---- ! 1392: struct optab *ophash[OPHS]; ! 1393: struct node *nonlab(); ! 1394: char *copy(); ! 1395: ! char *hbrk(); ! 1396: ! #define sbrk(n) hbrk(n) ! 1397: char *findcon(); ! 1398: struct node *insertl(); ! 1399: struct node *codemove(); ! 1400: *** /tmp/didnotexistbefore Mon Apr 9 14:52:59 1990 ! 1401: --- cc/heap.c Thu Mar 29 16:53:11 1990 ! 1402: *************** ! 1403: *** 0 **** ! 1404: --- 1,20 ---- ! 1405: + /* ! 1406: + * fake heap and fake sbrk() for ugly old code ! 1407: + */ ! 1408: + #ifndef HEAPSIZ ! 1409: + #define HEAPSIZ 100000 ! 1410: + #endif ! 1411: + static char heap[HEAPSIZ]; ! 1412: + static char *hbreak = &heap[0]; ! 1413: + ! 1414: + char * ! 1415: + hbrk(amount) ! 1416: + int amount; ! 1417: + { ! 1418: + register char *old = hbreak; ! 1419: + ! 1420: + hbreak += amount; ! 1421: + if (hbreak > &heap[HEAPSIZ]) ! 1422: + return((char *)-1); ! 1423: + return(old); ! 1424: + } ! 1425:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.