|
|
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.