Initial revision
This commit is contained in:
		
							parent
							
								
									429502815f
								
							
						
					
					
						commit
						8612a70ea3
					
				
					 167 changed files with 2574 additions and 0 deletions
				
			
		
							
								
								
									
										560
									
								
								mach/sun2/cv/cv.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										560
									
								
								mach/sun2/cv/cv.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,560 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert ACK a.out file to SUN3 object format. | ||||
|  */ | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| #include <out.h> | ||||
| #include <assert.h> | ||||
| 
 | ||||
| long	lseek(); | ||||
| 
 | ||||
| #define	OMAGIC	0407	/* old-fashioned */ | ||||
| #define	NMAGIC	0410	/* text write protexted */ | ||||
| #define ZMAGIC	0413	/* demand paging */ | ||||
| 
 | ||||
| #define MACH	2 | ||||
| 
 | ||||
| struct bhdr { | ||||
| 	short	machtype; | ||||
| 	short	magic; | ||||
| 	long	tsize; | ||||
| 	long	dsize; | ||||
| 	long	bsize; | ||||
| 	long	ssize; | ||||
| 	long	entry; | ||||
| 	long	rtsize; | ||||
| 	long	rdsize; | ||||
| }; | ||||
| 
 | ||||
| struct machrelo { | ||||
| 	long	address; | ||||
| 	long	relodata; | ||||
| }; | ||||
| #define setpcrel(X,f)	(X |= (f<<7)) | ||||
| #define setsymbolnum(X,n)	(X = (X & 0377) | ((long)n << 8)) | ||||
| #define setextern(X,f)	(X |= (f << 4)) | ||||
| #define setlength(X,l)	(X = (X & ~0x60)|((long) l << 5)) | ||||
| 
 | ||||
| struct sym { | ||||
| 	long	name; | ||||
| 	char	type; | ||||
| 	char	other; | ||||
| 	short	desc; | ||||
| 	long	value; | ||||
| }; | ||||
| 
 | ||||
| #define N_UNDF	0 | ||||
| #define	N_ABS	02 | ||||
| #define	N_TEXT	04 | ||||
| #define	N_DATA	06 | ||||
| #define	N_BSS	010 | ||||
| #define	N_EXT	01 | ||||
| #define N_FN	0x1f | ||||
| 
 | ||||
| /*
 | ||||
|  * Header and section table of new format object file. | ||||
|  */ | ||||
| struct outhead	outhead; | ||||
| struct outsect	outsect[S_MAX]; | ||||
| 
 | ||||
| char	*output_file; | ||||
| int	outputfile_created; | ||||
| long magic; | ||||
| 
 | ||||
| int rom_in_data; | ||||
| 
 | ||||
| char *program ; | ||||
| 
 | ||||
| char flag ; | ||||
| 
 | ||||
| /* Output file definitions and such */ | ||||
| 
 | ||||
| struct bhdr bh; | ||||
| 
 | ||||
| #define ENTRY 0x02000 | ||||
| #define TOT_HDRSIZE	(sizeof(struct bhdr)) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #define TEXTSG	0 | ||||
| #define ROMSG	1 | ||||
| #define DATASG	2 | ||||
| #define BSSSG	3 | ||||
| #define LSECT	BSSSG+1 | ||||
| #define NSECT	LSECT+1 | ||||
| 
 | ||||
| int		output; | ||||
| 
 | ||||
| int unresolved; | ||||
| long	textsize ;  | ||||
| long	datasize ; | ||||
| long	bsssize; | ||||
| 
 | ||||
| main(argc, argv) | ||||
| 	int	argc; | ||||
| 	char	*argv[]; | ||||
| { | ||||
| 	register int		nsect; | ||||
| 
 | ||||
| 	program= argv[0] ; | ||||
| 	if ( argc>1 && argv[1][0]=='-' ) { | ||||
| 		flag=argv[1][1] ; | ||||
| 		argc-- ; argv++ ; | ||||
| 	} | ||||
| 	switch (argc) { | ||||
| 	case 3:	if ((output = creat(argv[2], 0644)) < 0 || | ||||
| 		    (close(output), output = open(argv[2],2)) < 0) | ||||
| 			fatal("Can't write %s.\n", argv[2]); | ||||
| 		output_file = argv[2]; | ||||
| 		outputfile_created = 1; | ||||
| 		if (! rd_open(argv[1])) | ||||
| 			fatal("Can't read %s.\n", argv[1]); | ||||
| 		break; | ||||
| 	default:fatal("Usage: %s <ACK object> <Sun object>.\n", argv[0]); | ||||
| 	} | ||||
| 	rd_ohead(&outhead); | ||||
| 	if (BADMAGIC(outhead)) | ||||
| 		fatal("Not an ack object file.\n"); | ||||
| 	if (outhead.oh_flags & HF_LINK) { | ||||
| 		unresolved++; | ||||
| 		fprintf(stderr,"Warning: contains unresolved references.\n"); | ||||
| 	} | ||||
| 	else if (outhead.oh_nrelo > 0) | ||||
| 		fprintf(stderr, "Warning: relocation information present.\n"); | ||||
| 	if ( outhead.oh_nsect!=LSECT && outhead.oh_nsect!=NSECT ) | ||||
| 		fatal("Input file must have %d sections, not %ld\n", | ||||
| 			NSECT,outhead.oh_nsect) ; | ||||
| 	rd_sect(outsect, outhead.oh_nsect); | ||||
| 	/* A few checks */ | ||||
| 	if ( outsect[BSSSG].os_flen != 0 ) | ||||
| 		fatal("bss space contains initialized data\n") ; | ||||
| 	if ( !unresolved && outsect[BSSSG].os_base != outsect[DATASG].os_base+ | ||||
| 					outsect[DATASG].os_size ) | ||||
| 		fatal("bss segment must follow data segment\n") ; | ||||
| 	if ( outsect[ROMSG].os_lign == 0x20000 ) { | ||||
| 		/* 410/413 file with ROMSG in data space */ | ||||
| 		rom_in_data = 1; | ||||
| 		magic= NMAGIC ; | ||||
| 		textsize= outsect[TEXTSG].os_size ; | ||||
| 		datasize= outsect[ROMSG].os_size + outsect[DATASG].os_size ; | ||||
| 		if ( outsect[DATASG].os_base != outsect[ROMSG].os_base+ | ||||
| 						outsect[ROMSG].os_size ) | ||||
| 			fatal("data segment must follow rom\n") ; | ||||
| 	} else | ||||
| 	if ( outsect[DATASG].os_lign == 0x20000 ) { | ||||
| 		/* 410/413 file with ROMSG in instruction space */ | ||||
| 		rom_in_data = 0; | ||||
| 		magic= NMAGIC ; | ||||
| 		textsize= outsect[TEXTSG].os_size + outsect[ROMSG].os_size ; | ||||
| 		datasize= outsect[DATASG].os_size ; | ||||
| 		if ( outsect[ROMSG].os_base != outsect[TEXTSG].os_base+ | ||||
| 						outsect[TEXTSG].os_size ) | ||||
| 			fatal("rom segment must follow text\n") ; | ||||
| 	} else { | ||||
| 		/* Plain 407 file */ | ||||
| 		rom_in_data = 0; | ||||
| 		magic= OMAGIC ; | ||||
| 		textsize= outsect[TEXTSG].os_size + outsect[ROMSG].os_size ; | ||||
| 		datasize= outsect[DATASG].os_size ; | ||||
| 		if (!unresolved) { | ||||
| 			if (outsect[ROMSG].os_base != outsect[TEXTSG].os_base+ | ||||
| 						outsect[TEXTSG].os_size ) | ||||
| 				fatal("rom segment must follow text\n") ; | ||||
| 			if ( outsect[DATASG].os_base != outsect[ROMSG].os_base+ | ||||
| 						outsect[ROMSG].os_size ) | ||||
| 				fatal("data segment must follow rom\n") ; | ||||
| 		} | ||||
| 	} | ||||
| 	if (outsect[TEXTSG].os_base == TOT_HDRSIZE+ENTRY) { | ||||
| 		if (magic != NMAGIC) { | ||||
| 			fatal("illegal alignments.\n"); | ||||
| 		} | ||||
| 		magic = ZMAGIC; | ||||
| 		textsize = (textsize + TOT_HDRSIZE + (0x2000 - 1)) & ~(0x2000 - 1); | ||||
| 		datasize = (datasize + (0x2000 - 1)) & ~(0x2000 - 1); | ||||
| 	} | ||||
| 	bsssize = outsect[BSSSG].os_size; | ||||
| 	if ( outhead.oh_nsect==NSECT ) { | ||||
| 		if ( outsect[LSECT].os_base != outsect[BSSSG].os_base+ | ||||
| 						outsect[BSSSG].os_size ) | ||||
| 			fatal("end segment must follow bss\n") ; | ||||
| 		if ( outsect[LSECT].os_size != 0 ) | ||||
| 			fatal("end segment must be empty\n") ; | ||||
| 	} | ||||
| 
 | ||||
| 	if (magic != OMAGIC && unresolved) { | ||||
| 		fatal("unresolved references with wrong magic number\n"); | ||||
| 	} | ||||
| 
 | ||||
| 	if ((magic == ZMAGIC && outsect[TEXTSG].os_base != TOT_HDRSIZE+ENTRY) || | ||||
| 	    (magic != ZMAGIC && !unresolved && outsect[TEXTSG].os_base != ENTRY)) { | ||||
| 		fatal("Illegal entry point.\n"); | ||||
| 	} | ||||
| 
 | ||||
| 	bh.magic = magic; | ||||
| 	bh.machtype = MACH; | ||||
| 	bh.tsize = textsize; | ||||
| 	bh.bsize = bsssize; | ||||
| 	bh.dsize = datasize; | ||||
| 	bh.rtsize = 0; | ||||
| 	bh.rdsize = 0; | ||||
| 	if (magic == ZMAGIC) bh.entry = TOT_HDRSIZE+ENTRY; | ||||
| 	else if (!unresolved)	bh.entry = ENTRY; | ||||
| 	else bh.entry = 0; | ||||
| 
 | ||||
| 	/* Action at last */ | ||||
| 	lseek(output,(long) TOT_HDRSIZE,0); | ||||
| 	emits(&outsect[TEXTSG]) ; | ||||
| 	if (rom_in_data && magic == ZMAGIC) { | ||||
| 		lseek(output,textsize,0); | ||||
| 	} | ||||
| 	emits(&outsect[ROMSG]) ; | ||||
| 	if (!rom_in_data && magic == ZMAGIC) { | ||||
| 		lseek(output,textsize,0); | ||||
| 	} | ||||
| 	emits(&outsect[DATASG]) ; | ||||
| 	if (magic == ZMAGIC) { | ||||
| 		lseek(output,textsize + datasize,0); | ||||
| 	} | ||||
| 	if (unresolved) emit_relo(); | ||||
| 	emit_symtab(); | ||||
| 	bh.ssize = outhead.oh_nname * sizeof(struct sym); | ||||
| 	lseek(output,0L,0); | ||||
| 	cvshort(&(bh.machtype)); | ||||
| 	cvshort(&(bh.magic)); | ||||
| 	cvlong(&(bh.tsize)); | ||||
| 	cvlong(&(bh.dsize)); | ||||
| 	cvlong(&(bh.bsize)); | ||||
| 	cvlong(&(bh.ssize)); | ||||
| 	cvlong(&(bh.entry)); | ||||
| 	cvlong(&(bh.rtsize)); | ||||
| 	cvlong(&(bh.rdsize)); | ||||
| 	writef(&bh, 1, (long) TOT_HDRSIZE); | ||||
| 	if ( outputfile_created  && !unresolved ) chmod(argv[2],0755); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| writef(addr,sz,cnt) | ||||
| 	char *addr; | ||||
| 	long cnt; | ||||
| { | ||||
| 	cnt *= sz; | ||||
| 
 | ||||
| 	while (cnt) { | ||||
| 		int i = cnt >= 0x4000 ? 0x4000 : cnt; | ||||
| 
 | ||||
| 		cnt -= i; | ||||
| 		if (write(output, addr, i) < i) { | ||||
| 			fatal("write error\n"); | ||||
| 		} | ||||
| 		addr += i; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Transfer the emitted byted from one file to another. | ||||
|  */ | ||||
| emits(section) struct outsect *section ; { | ||||
| 	char		*p; | ||||
| 	char		*calloc(); | ||||
| 	long sz = section->os_flen; | ||||
| 
 | ||||
| 	rd_outsect(section - outsect); | ||||
| 	while (sz) { | ||||
| 		unsigned int i = (sz >= 0x4000 ? 0x4000 : sz); | ||||
| 		if (!(p = calloc(i, 1))) { | ||||
| 			fatal("No memory.\n"); | ||||
| 		} | ||||
| 		rd_emit(p, i); | ||||
| 		if (write(output, p, i) < i) { | ||||
| 			fatal("write error.\n"); | ||||
| 		} | ||||
| 		free(p); | ||||
| 		sz -= i; | ||||
| 	} | ||||
| 
 | ||||
| 	sz = section->os_size - section->os_flen; | ||||
| 	while (sz) { | ||||
| 		unsigned int i = (sz >= 0x4000 ? 0x4000 : sz); | ||||
| 		if (!(p = calloc(i, 1))) { | ||||
| 			fatal("No memory.\n"); | ||||
| 		} | ||||
| 		if (write(output, p, i) < i) { | ||||
| 			fatal("write error.\n"); | ||||
| 		} | ||||
| 		free(p); | ||||
| 		sz -= i; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| struct outname *ACKnames; | ||||
| 
 | ||||
| emit_relo() | ||||
| { | ||||
| 	struct outrelo *ACKrelo; | ||||
| 	struct machrelo *MACHtrelo,*MACHdrelo; | ||||
| 	register struct outrelo *ap; | ||||
| 	register struct machrelo *mtp, *mdp; | ||||
| 	unsigned int cnt = outhead.oh_nrelo; | ||||
| 
 | ||||
| 	ACKrelo = (struct outrelo *) calloc(cnt, sizeof(struct outrelo)); | ||||
| 	MACHtrelo = (struct machrelo *) calloc(cnt, sizeof(struct machrelo)); | ||||
| 	MACHdrelo = (struct machrelo *) calloc(cnt, sizeof(struct machrelo)); | ||||
| 	ACKnames = (struct outname *) calloc(outhead.oh_nname, sizeof(struct outname)); | ||||
| 	if (!(ap = ACKrelo) || !(mtp = MACHtrelo) || !(mdp = MACHdrelo) || | ||||
| 	    !ACKnames) { | ||||
| 		fatal("No memory.\n"); | ||||
| 	} | ||||
| 	rd_relo(ACKrelo, cnt); | ||||
| 	rd_name(ACKnames, outhead.oh_nname); | ||||
| 	while (cnt-- != 0) { | ||||
| 		register struct machrelo *mp; | ||||
| 
 | ||||
| 		if (ap->or_sect - S_MIN <= ROMSG) mp = mtp++; | ||||
| 		else mp = mdp++; | ||||
| 		setlength(mp->relodata,(ap->or_type&RELSZ) >> 1); | ||||
| 		setpcrel(mp->relodata,(ap->or_type&RELPC != 0)); | ||||
| 		mp->address = ap->or_addr; | ||||
| 		if (ap->or_sect == ROMSG+S_MIN) { | ||||
| 			mp->address += outsect[TEXTSG].os_size; | ||||
| 		} | ||||
| 		if (ap->or_nami < outhead.oh_nname) { | ||||
| 			if (ACKnames[ap->or_nami].on_type & S_EXT) { | ||||
| 				setsymbolnum(mp->relodata, ap->or_nami); | ||||
| 				setextern(mp->relodata,1); | ||||
| 			} | ||||
| 			else { | ||||
| 				patch(ap, &ACKnames[ap->or_nami], mp); | ||||
| 			} | ||||
| 		} | ||||
| 		else { | ||||
| 			setsymbolnum(mp->relodata, N_ABS); | ||||
| 		} | ||||
| 		cvlong(&(mp->address)); | ||||
| 		cvlong(&(mp->relodata)); | ||||
| 		ap++; | ||||
| 	} | ||||
| 	bh.rtsize = (char *) mtp - (char *) MACHtrelo; | ||||
| 	bh.rdsize = (char *) mdp - (char *) MACHdrelo; | ||||
| 	writef(MACHtrelo, 1, bh.rtsize); | ||||
| 	writef(MACHdrelo, 1, bh.rdsize); | ||||
| 	free(ACKrelo); | ||||
| 	free(MACHtrelo); | ||||
| 	free(MACHdrelo); | ||||
| } | ||||
| 
 | ||||
| long | ||||
| get(sz) | ||||
| { | ||||
| 	char buf[10]; | ||||
| 	long l = 0; | ||||
| 	register char *p = buf; | ||||
| 
 | ||||
| 	read(output,buf,sz); | ||||
| 	while (sz--) { | ||||
| 		l = (l << 8) | (*p++ & 0377); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| put(l,sz) | ||||
| 	long l; | ||||
| { | ||||
| 	char buf[10]; | ||||
| 	register char *p; | ||||
| 
 | ||||
| 	*p++ = l >> 24; | ||||
| 	*p++ = l >> 16; | ||||
| 	*p++ = l >> 8; | ||||
| 	*p++ = l; | ||||
| 	p -= sz; | ||||
| 	if (write(output, p, sz) < sz) { | ||||
| 		fatal("write error.\n"); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| patch(ap, an, mp) | ||||
| 	register struct outrelo *ap; | ||||
| 	register struct outname *an; | ||||
| 	register struct machrelo *mp; | ||||
| { | ||||
| 	int whichsect = (an->on_type & S_TYP) - S_MIN; | ||||
| 	long correction = 0; | ||||
| 	long where = TOT_HDRSIZE+ap->or_addr; | ||||
| 	long X; | ||||
| 	long here; | ||||
| 	int sz; | ||||
| 
 | ||||
| 	if (!(an->on_type & S_SCT)) { | ||||
| 		fprintf(stderr,"funny on_type %x\n", an->on_type); | ||||
| 	} | ||||
| 	switch(whichsect) { | ||||
| 	case TEXTSG: | ||||
| 		setsymbolnum(mp->relodata,N_TEXT); | ||||
| 		return; | ||||
| 	case DATASG: | ||||
| 		correction = outsect[ROMSG].os_size + outsect[TEXTSG].os_size; | ||||
| 		setsymbolnum(mp->relodata,N_DATA); | ||||
| 		break; | ||||
| 	case ROMSG: | ||||
| 		correction += outsect[TEXTSG].os_size; | ||||
| 		setsymbolnum(mp->relodata,N_TEXT); | ||||
| 		break; | ||||
| 	default: | ||||
| 		assert(0); | ||||
| 	} | ||||
| 
 | ||||
| 	switch(ap->or_sect - S_MIN) { | ||||
| 	case DATASG: | ||||
| 		where += outsect[ROMSG].os_size; | ||||
| 	case ROMSG: | ||||
| 		where += outsect[TEXTSG].os_size; | ||||
| 	case TEXTSG: | ||||
| 		break; | ||||
| 	default: | ||||
| 		assert(0); | ||||
| 	} | ||||
| 	here = lseek(output, 0L, 1); | ||||
| 	lseek(output, where, 0); | ||||
| 	sz = ap->or_type & RELSZ; | ||||
| 	X = get(sz) + correction; | ||||
| 	lseek(output, where, 0); | ||||
| 	put(X,sz); | ||||
| 	lseek(output, here, 0); | ||||
| } | ||||
| 
 | ||||
| cvlong(l) | ||||
| 	long *l; | ||||
| { | ||||
| 	long x = *l; | ||||
| 	char *p = (char *) l; | ||||
| 
 | ||||
| 	*p++ = x >> 24; | ||||
| 	*p++ = x >> 16; | ||||
| 	*p++ = x >> 8; | ||||
| 	*p = x; | ||||
| } | ||||
| 
 | ||||
| cvshort(s) | ||||
| 	short *s; | ||||
| { | ||||
| 	short x = *s; | ||||
| 	char *p = (char *) s; | ||||
| 
 | ||||
| 	*p++ = x >> 8; | ||||
| 	*p = x; | ||||
| } | ||||
| 
 | ||||
| emit_symtab() | ||||
| { | ||||
| 	register unsigned short i = outhead.oh_nname; | ||||
| 	register struct outname *A; | ||||
| 	struct sym *MACHnames; | ||||
| 	register struct sym *M; | ||||
| 	extern char *malloc(), *calloc(); | ||||
| 	char *chars; | ||||
| 	long offX = OFF_CHAR(outhead) - 4; | ||||
| 
 | ||||
| 	if (!(A = ACKnames)) { | ||||
| 	    	if (!(A = (struct outname *) | ||||
| 			calloc(i, sizeof(struct outname)))) { | ||||
| 			fatal("No memory.\n"); | ||||
| 		} | ||||
| 		rd_name(A, outhead.oh_nname); | ||||
| 	} | ||||
| 	if (!(M = (struct sym *) calloc(i, sizeof(struct sym)))) { | ||||
| 		fatal("No memory.\n"); | ||||
| 	} | ||||
| 	MACHnames = M; | ||||
| 	ACKnames = A; | ||||
| 	for (; i; i--, A++, M++) { | ||||
| 		M->value = A->on_valu; | ||||
| 		switch(A->on_type & S_TYP) { | ||||
| 			case S_UND: | ||||
| 				M->type = N_UNDF; | ||||
| 				break; | ||||
| 			case S_ABS: | ||||
| 				M->type = N_ABS; | ||||
| 				break; | ||||
| 			case S_MIN + TEXTSG: | ||||
| 				if (! A->on_type & S_COM) { | ||||
| 					M->value += outsect[TEXTSG].os_base; | ||||
| 				} | ||||
| 				M->type = N_TEXT;  | ||||
| 				break; | ||||
| 			case S_MIN + ROMSG: | ||||
| 				M->type = (rom_in_data ? N_DATA : N_TEXT); | ||||
| 				if (! A->on_type & S_COM) { | ||||
| 					M->value += outsect[ROMSG].os_base; | ||||
| 				} | ||||
| 				break; | ||||
| 			case S_MIN + DATASG: | ||||
| 				M->type = N_DATA; | ||||
| 				if (! A->on_type & S_COM) { | ||||
| 					M->value += outsect[DATASG].os_base; | ||||
| 				} | ||||
| 				break; | ||||
| 			case S_MIN + BSSSG: | ||||
| 				M->type = N_BSS; | ||||
| 				if (! A->on_type & S_COM) { | ||||
| 					M->value += outsect[BSSSG].os_base; | ||||
| 				} | ||||
| 				break; | ||||
| 			case S_MIN + LSECT: | ||||
| 				M->type = N_BSS; | ||||
| 				if (! A->on_type & S_COM) { | ||||
| 					M->value += outsect[LSECT].os_base; | ||||
| 				} | ||||
| 				break; | ||||
| 			default: | ||||
| 				fprintf(stderr,"warning: unknown s_type: %d\n", | ||||
| 					A->on_type & S_TYP); | ||||
| 		} | ||||
| 		if (A->on_type & S_EXT) M->type |= N_EXT; | ||||
| 		if (M->name = A->on_foff) { | ||||
| 			M->name -= offX; | ||||
| 		} | ||||
| 		cvlong(&(M->name)); | ||||
| 		cvlong(&(M->value)); | ||||
| 	} | ||||
| 	writef(MACHnames, sizeof(struct sym), (long) outhead.oh_nname); | ||||
| 	free(MACHnames); | ||||
| 	free(ACKnames); | ||||
| 	if ((unsigned) outhead.oh_nchar != outhead.oh_nchar || | ||||
| 	    !( chars = malloc((unsigned) outhead.oh_nchar))) { | ||||
| 		fatal("No memory\n."); | ||||
| 	} | ||||
| 	put(outhead.oh_nchar+4,4); | ||||
| 	rd_string(chars,outhead.oh_nchar); | ||||
| 	writef(chars, 1, outhead.oh_nchar); | ||||
| 	free(chars); | ||||
| } | ||||
| 
 | ||||
| /* VARARGS1 */ | ||||
| fatal(s, a1, a2) | ||||
| 	char	*s; | ||||
| { | ||||
| 	fprintf(stderr,"%s: ",program) ; | ||||
| 	fprintf(stderr, s, a1, a2); | ||||
| 	if (outputfile_created) | ||||
| 		unlink(output_file); | ||||
| 	exit(-1); | ||||
| } | ||||
| 
 | ||||
| rd_fatal() { fatal("read error.\n"); } | ||||
							
								
								
									
										6
									
								
								mach/sun3/Action
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								mach/sun3/Action
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| name "Ack.out --> SUN 68020 a.out format conversion program" | ||||
| dir cv | ||||
| end | ||||
| name "SUN 68020 systemcall library" | ||||
| dir libsys | ||||
| end | ||||
							
								
								
									
										25
									
								
								mach/sun3/cv/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								mach/sun3/cv/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| EMHOME =	../../.. | ||||
| LIBOBJ =	$(EMHOME)/modules/lib/libobject.a | ||||
| INCLUDE =	$(EMHOME)/h | ||||
| CFLAGS =	-I. -I$(INCLUDE) -O | ||||
| TARGETS =	cv | ||||
| 
 | ||||
| all:		$(TARGETS) | ||||
| 
 | ||||
| install:	all | ||||
| 		../../install cv | ||||
| 
 | ||||
| cmp:		all | ||||
| 		../../compare cv | ||||
| 
 | ||||
| cv:	cv.o | ||||
| 		$(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ) | ||||
| 
 | ||||
| clean: | ||||
| 		rm -f $(TARGETS) *.o nohup.out Out | ||||
| 
 | ||||
| pr: | ||||
| 		@pr Makefile cv.c | ||||
| 
 | ||||
| opr: | ||||
| 		make pr | opr | ||||
							
								
								
									
										560
									
								
								mach/sun3/cv/cv.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										560
									
								
								mach/sun3/cv/cv.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,560 @@ | |||
| /*
 | ||||
|  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
|  * | ||||
|  *          This product is part of the Amsterdam Compiler Kit. | ||||
|  * | ||||
|  * Permission to use, sell, duplicate or disclose this software must be | ||||
|  * obtained in writing. Requests for such permissions may be sent to | ||||
|  * | ||||
|  *      Dr. Andrew S. Tanenbaum | ||||
|  *      Wiskundig Seminarium | ||||
|  *      Vrije Universiteit | ||||
|  *      Postbox 7161 | ||||
|  *      1007 MC Amsterdam | ||||
|  *      The Netherlands | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert ACK a.out file to SUN3 object format. | ||||
|  */ | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| #include <out.h> | ||||
| #include <assert.h> | ||||
| 
 | ||||
| long	lseek(); | ||||
| 
 | ||||
| #define	OMAGIC	0407	/* old-fashioned */ | ||||
| #define	NMAGIC	0410	/* text write protexted */ | ||||
| #define ZMAGIC	0413	/* demand paging */ | ||||
| 
 | ||||
| #define MACH	2 | ||||
| 
 | ||||
| struct bhdr { | ||||
| 	short	machtype; | ||||
| 	short	magic; | ||||
| 	long	tsize; | ||||
| 	long	dsize; | ||||
| 	long	bsize; | ||||
| 	long	ssize; | ||||
| 	long	entry; | ||||
| 	long	rtsize; | ||||
| 	long	rdsize; | ||||
| }; | ||||
| 
 | ||||
| struct machrelo { | ||||
| 	long	address; | ||||
| 	long	relodata; | ||||
| }; | ||||
| #define setpcrel(X,f)	(X |= (f<<7)) | ||||
| #define setsymbolnum(X,n)	(X = (X & 0377) | ((long)n << 8)) | ||||
| #define setextern(X,f)	(X |= (f << 4)) | ||||
| #define setlength(X,l)	(X = (X & ~0x60)|((long) l << 5)) | ||||
| 
 | ||||
| struct sym { | ||||
| 	long	name; | ||||
| 	char	type; | ||||
| 	char	other; | ||||
| 	short	desc; | ||||
| 	long	value; | ||||
| }; | ||||
| 
 | ||||
| #define N_UNDF	0 | ||||
| #define	N_ABS	02 | ||||
| #define	N_TEXT	04 | ||||
| #define	N_DATA	06 | ||||
| #define	N_BSS	010 | ||||
| #define	N_EXT	01 | ||||
| #define N_FN	0x1f | ||||
| 
 | ||||
| /*
 | ||||
|  * Header and section table of new format object file. | ||||
|  */ | ||||
| struct outhead	outhead; | ||||
| struct outsect	outsect[S_MAX]; | ||||
| 
 | ||||
| char	*output_file; | ||||
| int	outputfile_created; | ||||
| long magic; | ||||
| 
 | ||||
| int rom_in_data; | ||||
| 
 | ||||
| char *program ; | ||||
| 
 | ||||
| char flag ; | ||||
| 
 | ||||
| /* Output file definitions and such */ | ||||
| 
 | ||||
| struct bhdr bh; | ||||
| 
 | ||||
| #define ENTRY 0x02000 | ||||
| #define TOT_HDRSIZE	(sizeof(struct bhdr)) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #define TEXTSG	0 | ||||
| #define ROMSG	1 | ||||
| #define DATASG	2 | ||||
| #define BSSSG	3 | ||||
| #define LSECT	BSSSG+1 | ||||
| #define NSECT	LSECT+1 | ||||
| 
 | ||||
| int		output; | ||||
| 
 | ||||
| int unresolved; | ||||
| long	textsize ;  | ||||
| long	datasize ; | ||||
| long	bsssize; | ||||
| 
 | ||||
| main(argc, argv) | ||||
| 	int	argc; | ||||
| 	char	*argv[]; | ||||
| { | ||||
| 	register int		nsect; | ||||
| 
 | ||||
| 	program= argv[0] ; | ||||
| 	if ( argc>1 && argv[1][0]=='-' ) { | ||||
| 		flag=argv[1][1] ; | ||||
| 		argc-- ; argv++ ; | ||||
| 	} | ||||
| 	switch (argc) { | ||||
| 	case 3:	if ((output = creat(argv[2], 0644)) < 0 || | ||||
| 		    (close(output), output = open(argv[2],2)) < 0) | ||||
| 			fatal("Can't write %s.\n", argv[2]); | ||||
| 		output_file = argv[2]; | ||||
| 		outputfile_created = 1; | ||||
| 		if (! rd_open(argv[1])) | ||||
| 			fatal("Can't read %s.\n", argv[1]); | ||||
| 		break; | ||||
| 	default:fatal("Usage: %s <ACK object> <Sun object>.\n", argv[0]); | ||||
| 	} | ||||
| 	rd_ohead(&outhead); | ||||
| 	if (BADMAGIC(outhead)) | ||||
| 		fatal("Not an ack object file.\n"); | ||||
| 	if (outhead.oh_flags & HF_LINK) { | ||||
| 		unresolved++; | ||||
| 		fprintf(stderr,"Warning: contains unresolved references.\n"); | ||||
| 	} | ||||
| 	else if (outhead.oh_nrelo > 0) | ||||
| 		fprintf(stderr, "Warning: relocation information present.\n"); | ||||
| 	if ( outhead.oh_nsect!=LSECT && outhead.oh_nsect!=NSECT ) | ||||
| 		fatal("Input file must have %d sections, not %ld\n", | ||||
| 			NSECT,outhead.oh_nsect) ; | ||||
| 	rd_sect(outsect, outhead.oh_nsect); | ||||
| 	/* A few checks */ | ||||
| 	if ( outsect[BSSSG].os_flen != 0 ) | ||||
| 		fatal("bss space contains initialized data\n") ; | ||||
| 	if ( !unresolved && outsect[BSSSG].os_base != outsect[DATASG].os_base+ | ||||
| 					outsect[DATASG].os_size ) | ||||
| 		fatal("bss segment must follow data segment\n") ; | ||||
| 	if ( outsect[ROMSG].os_lign == 0x20000 ) { | ||||
| 		/* 410/413 file with ROMSG in data space */ | ||||
| 		rom_in_data = 1; | ||||
| 		magic= NMAGIC ; | ||||
| 		textsize= outsect[TEXTSG].os_size ; | ||||
| 		datasize= outsect[ROMSG].os_size + outsect[DATASG].os_size ; | ||||
| 		if ( outsect[DATASG].os_base != outsect[ROMSG].os_base+ | ||||
| 						outsect[ROMSG].os_size ) | ||||
| 			fatal("data segment must follow rom\n") ; | ||||
| 	} else | ||||
| 	if ( outsect[DATASG].os_lign == 0x20000 ) { | ||||
| 		/* 410/413 file with ROMSG in instruction space */ | ||||
| 		rom_in_data = 0; | ||||
| 		magic= NMAGIC ; | ||||
| 		textsize= outsect[TEXTSG].os_size + outsect[ROMSG].os_size ; | ||||
| 		datasize= outsect[DATASG].os_size ; | ||||
| 		if ( outsect[ROMSG].os_base != outsect[TEXTSG].os_base+ | ||||
| 						outsect[TEXTSG].os_size ) | ||||
| 			fatal("rom segment must follow text\n") ; | ||||
| 	} else { | ||||
| 		/* Plain 407 file */ | ||||
| 		rom_in_data = 0; | ||||
| 		magic= OMAGIC ; | ||||
| 		textsize= outsect[TEXTSG].os_size + outsect[ROMSG].os_size ; | ||||
| 		datasize= outsect[DATASG].os_size ; | ||||
| 		if (!unresolved) { | ||||
| 			if (outsect[ROMSG].os_base != outsect[TEXTSG].os_base+ | ||||
| 						outsect[TEXTSG].os_size ) | ||||
| 				fatal("rom segment must follow text\n") ; | ||||
| 			if ( outsect[DATASG].os_base != outsect[ROMSG].os_base+ | ||||
| 						outsect[ROMSG].os_size ) | ||||
| 				fatal("data segment must follow rom\n") ; | ||||
| 		} | ||||
| 	} | ||||
| 	if (outsect[TEXTSG].os_base == TOT_HDRSIZE+ENTRY) { | ||||
| 		if (magic != NMAGIC) { | ||||
| 			fatal("illegal alignments.\n"); | ||||
| 		} | ||||
| 		magic = ZMAGIC; | ||||
| 		textsize = (textsize + TOT_HDRSIZE + (0x2000 - 1)) & ~(0x2000 - 1); | ||||
| 		datasize = (datasize + (0x2000 - 1)) & ~(0x2000 - 1); | ||||
| 	} | ||||
| 	bsssize = outsect[BSSSG].os_size; | ||||
| 	if ( outhead.oh_nsect==NSECT ) { | ||||
| 		if ( outsect[LSECT].os_base != outsect[BSSSG].os_base+ | ||||
| 						outsect[BSSSG].os_size ) | ||||
| 			fatal("end segment must follow bss\n") ; | ||||
| 		if ( outsect[LSECT].os_size != 0 ) | ||||
| 			fatal("end segment must be empty\n") ; | ||||
| 	} | ||||
| 
 | ||||
| 	if (magic != OMAGIC && unresolved) { | ||||
| 		fatal("unresolved references with wrong magic number\n"); | ||||
| 	} | ||||
| 
 | ||||
| 	if ((magic == ZMAGIC && outsect[TEXTSG].os_base != TOT_HDRSIZE+ENTRY) || | ||||
| 	    (magic != ZMAGIC && !unresolved && outsect[TEXTSG].os_base != ENTRY)) { | ||||
| 		fatal("Illegal entry point.\n"); | ||||
| 	} | ||||
| 
 | ||||
| 	bh.magic = magic; | ||||
| 	bh.machtype = MACH; | ||||
| 	bh.tsize = textsize; | ||||
| 	bh.bsize = bsssize; | ||||
| 	bh.dsize = datasize; | ||||
| 	bh.rtsize = 0; | ||||
| 	bh.rdsize = 0; | ||||
| 	if (magic == ZMAGIC) bh.entry = TOT_HDRSIZE+ENTRY; | ||||
| 	else if (!unresolved)	bh.entry = ENTRY; | ||||
| 	else bh.entry = 0; | ||||
| 
 | ||||
| 	/* Action at last */ | ||||
| 	lseek(output,(long) TOT_HDRSIZE,0); | ||||
| 	emits(&outsect[TEXTSG]) ; | ||||
| 	if (rom_in_data && magic == ZMAGIC) { | ||||
| 		lseek(output,textsize,0); | ||||
| 	} | ||||
| 	emits(&outsect[ROMSG]) ; | ||||
| 	if (!rom_in_data && magic == ZMAGIC) { | ||||
| 		lseek(output,textsize,0); | ||||
| 	} | ||||
| 	emits(&outsect[DATASG]) ; | ||||
| 	if (magic == ZMAGIC) { | ||||
| 		lseek(output,textsize + datasize,0); | ||||
| 	} | ||||
| 	if (unresolved) emit_relo(); | ||||
| 	emit_symtab(); | ||||
| 	bh.ssize = outhead.oh_nname * sizeof(struct sym); | ||||
| 	lseek(output,0L,0); | ||||
| 	cvshort(&(bh.machtype)); | ||||
| 	cvshort(&(bh.magic)); | ||||
| 	cvlong(&(bh.tsize)); | ||||
| 	cvlong(&(bh.dsize)); | ||||
| 	cvlong(&(bh.bsize)); | ||||
| 	cvlong(&(bh.ssize)); | ||||
| 	cvlong(&(bh.entry)); | ||||
| 	cvlong(&(bh.rtsize)); | ||||
| 	cvlong(&(bh.rdsize)); | ||||
| 	writef(&bh, 1, (long) TOT_HDRSIZE); | ||||
| 	if ( outputfile_created  && !unresolved ) chmod(argv[2],0755); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| writef(addr,sz,cnt) | ||||
| 	char *addr; | ||||
| 	long cnt; | ||||
| { | ||||
| 	cnt *= sz; | ||||
| 
 | ||||
| 	while (cnt) { | ||||
| 		int i = cnt >= 0x4000 ? 0x4000 : cnt; | ||||
| 
 | ||||
| 		cnt -= i; | ||||
| 		if (write(output, addr, i) < i) { | ||||
| 			fatal("write error\n"); | ||||
| 		} | ||||
| 		addr += i; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Transfer the emitted byted from one file to another. | ||||
|  */ | ||||
| emits(section) struct outsect *section ; { | ||||
| 	char		*p; | ||||
| 	char		*calloc(); | ||||
| 	long sz = section->os_flen; | ||||
| 
 | ||||
| 	rd_outsect(section - outsect); | ||||
| 	while (sz) { | ||||
| 		unsigned int i = (sz >= 0x4000 ? 0x4000 : sz); | ||||
| 		if (!(p = calloc(i, 1))) { | ||||
| 			fatal("No memory.\n"); | ||||
| 		} | ||||
| 		rd_emit(p, i); | ||||
| 		if (write(output, p, i) < i) { | ||||
| 			fatal("write error.\n"); | ||||
| 		} | ||||
| 		free(p); | ||||
| 		sz -= i; | ||||
| 	} | ||||
| 
 | ||||
| 	sz = section->os_size - section->os_flen; | ||||
| 	while (sz) { | ||||
| 		unsigned int i = (sz >= 0x4000 ? 0x4000 : sz); | ||||
| 		if (!(p = calloc(i, 1))) { | ||||
| 			fatal("No memory.\n"); | ||||
| 		} | ||||
| 		if (write(output, p, i) < i) { | ||||
| 			fatal("write error.\n"); | ||||
| 		} | ||||
| 		free(p); | ||||
| 		sz -= i; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| struct outname *ACKnames; | ||||
| 
 | ||||
| emit_relo() | ||||
| { | ||||
| 	struct outrelo *ACKrelo; | ||||
| 	struct machrelo *MACHtrelo,*MACHdrelo; | ||||
| 	register struct outrelo *ap; | ||||
| 	register struct machrelo *mtp, *mdp; | ||||
| 	unsigned int cnt = outhead.oh_nrelo; | ||||
| 
 | ||||
| 	ACKrelo = (struct outrelo *) calloc(cnt, sizeof(struct outrelo)); | ||||
| 	MACHtrelo = (struct machrelo *) calloc(cnt, sizeof(struct machrelo)); | ||||
| 	MACHdrelo = (struct machrelo *) calloc(cnt, sizeof(struct machrelo)); | ||||
| 	ACKnames = (struct outname *) calloc(outhead.oh_nname, sizeof(struct outname)); | ||||
| 	if (!(ap = ACKrelo) || !(mtp = MACHtrelo) || !(mdp = MACHdrelo) || | ||||
| 	    !ACKnames) { | ||||
| 		fatal("No memory.\n"); | ||||
| 	} | ||||
| 	rd_relo(ACKrelo, cnt); | ||||
| 	rd_name(ACKnames, outhead.oh_nname); | ||||
| 	while (cnt-- != 0) { | ||||
| 		register struct machrelo *mp; | ||||
| 
 | ||||
| 		if (ap->or_sect - S_MIN <= ROMSG) mp = mtp++; | ||||
| 		else mp = mdp++; | ||||
| 		setlength(mp->relodata,(ap->or_type&RELSZ) >> 1); | ||||
| 		setpcrel(mp->relodata,(ap->or_type&RELPC != 0)); | ||||
| 		mp->address = ap->or_addr; | ||||
| 		if (ap->or_sect == ROMSG+S_MIN) { | ||||
| 			mp->address += outsect[TEXTSG].os_size; | ||||
| 		} | ||||
| 		if (ap->or_nami < outhead.oh_nname) { | ||||
| 			if (ACKnames[ap->or_nami].on_type & S_EXT) { | ||||
| 				setsymbolnum(mp->relodata, ap->or_nami); | ||||
| 				setextern(mp->relodata,1); | ||||
| 			} | ||||
| 			else { | ||||
| 				patch(ap, &ACKnames[ap->or_nami], mp); | ||||
| 			} | ||||
| 		} | ||||
| 		else { | ||||
| 			setsymbolnum(mp->relodata, N_ABS); | ||||
| 		} | ||||
| 		cvlong(&(mp->address)); | ||||
| 		cvlong(&(mp->relodata)); | ||||
| 		ap++; | ||||
| 	} | ||||
| 	bh.rtsize = (char *) mtp - (char *) MACHtrelo; | ||||
| 	bh.rdsize = (char *) mdp - (char *) MACHdrelo; | ||||
| 	writef(MACHtrelo, 1, bh.rtsize); | ||||
| 	writef(MACHdrelo, 1, bh.rdsize); | ||||
| 	free(ACKrelo); | ||||
| 	free(MACHtrelo); | ||||
| 	free(MACHdrelo); | ||||
| } | ||||
| 
 | ||||
| long | ||||
| get(sz) | ||||
| { | ||||
| 	char buf[10]; | ||||
| 	long l = 0; | ||||
| 	register char *p = buf; | ||||
| 
 | ||||
| 	read(output,buf,sz); | ||||
| 	while (sz--) { | ||||
| 		l = (l << 8) | (*p++ & 0377); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| put(l,sz) | ||||
| 	long l; | ||||
| { | ||||
| 	char buf[10]; | ||||
| 	register char *p; | ||||
| 
 | ||||
| 	*p++ = l >> 24; | ||||
| 	*p++ = l >> 16; | ||||
| 	*p++ = l >> 8; | ||||
| 	*p++ = l; | ||||
| 	p -= sz; | ||||
| 	if (write(output, p, sz) < sz) { | ||||
| 		fatal("write error.\n"); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| patch(ap, an, mp) | ||||
| 	register struct outrelo *ap; | ||||
| 	register struct outname *an; | ||||
| 	register struct machrelo *mp; | ||||
| { | ||||
| 	int whichsect = (an->on_type & S_TYP) - S_MIN; | ||||
| 	long correction = 0; | ||||
| 	long where = TOT_HDRSIZE+ap->or_addr; | ||||
| 	long X; | ||||
| 	long here; | ||||
| 	int sz; | ||||
| 
 | ||||
| 	if (!(an->on_type & S_SCT)) { | ||||
| 		fprintf(stderr,"funny on_type %x\n", an->on_type); | ||||
| 	} | ||||
| 	switch(whichsect) { | ||||
| 	case TEXTSG: | ||||
| 		setsymbolnum(mp->relodata,N_TEXT); | ||||
| 		return; | ||||
| 	case DATASG: | ||||
| 		correction = outsect[ROMSG].os_size + outsect[TEXTSG].os_size; | ||||
| 		setsymbolnum(mp->relodata,N_DATA); | ||||
| 		break; | ||||
| 	case ROMSG: | ||||
| 		correction += outsect[TEXTSG].os_size; | ||||
| 		setsymbolnum(mp->relodata,N_TEXT); | ||||
| 		break; | ||||
| 	default: | ||||
| 		assert(0); | ||||
| 	} | ||||
| 
 | ||||
| 	switch(ap->or_sect - S_MIN) { | ||||
| 	case DATASG: | ||||
| 		where += outsect[ROMSG].os_size; | ||||
| 	case ROMSG: | ||||
| 		where += outsect[TEXTSG].os_size; | ||||
| 	case TEXTSG: | ||||
| 		break; | ||||
| 	default: | ||||
| 		assert(0); | ||||
| 	} | ||||
| 	here = lseek(output, 0L, 1); | ||||
| 	lseek(output, where, 0); | ||||
| 	sz = ap->or_type & RELSZ; | ||||
| 	X = get(sz) + correction; | ||||
| 	lseek(output, where, 0); | ||||
| 	put(X,sz); | ||||
| 	lseek(output, here, 0); | ||||
| } | ||||
| 
 | ||||
| cvlong(l) | ||||
| 	long *l; | ||||
| { | ||||
| 	long x = *l; | ||||
| 	char *p = (char *) l; | ||||
| 
 | ||||
| 	*p++ = x >> 24; | ||||
| 	*p++ = x >> 16; | ||||
| 	*p++ = x >> 8; | ||||
| 	*p = x; | ||||
| } | ||||
| 
 | ||||
| cvshort(s) | ||||
| 	short *s; | ||||
| { | ||||
| 	short x = *s; | ||||
| 	char *p = (char *) s; | ||||
| 
 | ||||
| 	*p++ = x >> 8; | ||||
| 	*p = x; | ||||
| } | ||||
| 
 | ||||
| emit_symtab() | ||||
| { | ||||
| 	register unsigned short i = outhead.oh_nname; | ||||
| 	register struct outname *A; | ||||
| 	struct sym *MACHnames; | ||||
| 	register struct sym *M; | ||||
| 	extern char *malloc(), *calloc(); | ||||
| 	char *chars; | ||||
| 	long offX = OFF_CHAR(outhead) - 4; | ||||
| 
 | ||||
| 	if (!(A = ACKnames)) { | ||||
| 	    	if (!(A = (struct outname *) | ||||
| 			calloc(i, sizeof(struct outname)))) { | ||||
| 			fatal("No memory.\n"); | ||||
| 		} | ||||
| 		rd_name(A, outhead.oh_nname); | ||||
| 	} | ||||
| 	if (!(M = (struct sym *) calloc(i, sizeof(struct sym)))) { | ||||
| 		fatal("No memory.\n"); | ||||
| 	} | ||||
| 	MACHnames = M; | ||||
| 	ACKnames = A; | ||||
| 	for (; i; i--, A++, M++) { | ||||
| 		M->value = A->on_valu; | ||||
| 		switch(A->on_type & S_TYP) { | ||||
| 			case S_UND: | ||||
| 				M->type = N_UNDF; | ||||
| 				break; | ||||
| 			case S_ABS: | ||||
| 				M->type = N_ABS; | ||||
| 				break; | ||||
| 			case S_MIN + TEXTSG: | ||||
| 				if (! A->on_type & S_COM) { | ||||
| 					M->value += outsect[TEXTSG].os_base; | ||||
| 				} | ||||
| 				M->type = N_TEXT;  | ||||
| 				break; | ||||
| 			case S_MIN + ROMSG: | ||||
| 				M->type = (rom_in_data ? N_DATA : N_TEXT); | ||||
| 				if (! A->on_type & S_COM) { | ||||
| 					M->value += outsect[ROMSG].os_base; | ||||
| 				} | ||||
| 				break; | ||||
| 			case S_MIN + DATASG: | ||||
| 				M->type = N_DATA; | ||||
| 				if (! A->on_type & S_COM) { | ||||
| 					M->value += outsect[DATASG].os_base; | ||||
| 				} | ||||
| 				break; | ||||
| 			case S_MIN + BSSSG: | ||||
| 				M->type = N_BSS; | ||||
| 				if (! A->on_type & S_COM) { | ||||
| 					M->value += outsect[BSSSG].os_base; | ||||
| 				} | ||||
| 				break; | ||||
| 			case S_MIN + LSECT: | ||||
| 				M->type = N_BSS; | ||||
| 				if (! A->on_type & S_COM) { | ||||
| 					M->value += outsect[LSECT].os_base; | ||||
| 				} | ||||
| 				break; | ||||
| 			default: | ||||
| 				fprintf(stderr,"warning: unknown s_type: %d\n", | ||||
| 					A->on_type & S_TYP); | ||||
| 		} | ||||
| 		if (A->on_type & S_EXT) M->type |= N_EXT; | ||||
| 		if (M->name = A->on_foff) { | ||||
| 			M->name -= offX; | ||||
| 		} | ||||
| 		cvlong(&(M->name)); | ||||
| 		cvlong(&(M->value)); | ||||
| 	} | ||||
| 	writef(MACHnames, sizeof(struct sym), (long) outhead.oh_nname); | ||||
| 	free(MACHnames); | ||||
| 	free(ACKnames); | ||||
| 	if ((unsigned) outhead.oh_nchar != outhead.oh_nchar || | ||||
| 	    !( chars = malloc((unsigned) outhead.oh_nchar))) { | ||||
| 		fatal("No memory\n."); | ||||
| 	} | ||||
| 	put(outhead.oh_nchar+4,4); | ||||
| 	rd_string(chars,outhead.oh_nchar); | ||||
| 	writef(chars, 1, outhead.oh_nchar); | ||||
| 	free(chars); | ||||
| } | ||||
| 
 | ||||
| /* VARARGS1 */ | ||||
| fatal(s, a1, a2) | ||||
| 	char	*s; | ||||
| { | ||||
| 	fprintf(stderr,"%s: ",program) ; | ||||
| 	fprintf(stderr, s, a1, a2); | ||||
| 	if (outputfile_created) | ||||
| 		unlink(output_file); | ||||
| 	exit(-1); | ||||
| } | ||||
| 
 | ||||
| rd_fatal() { fatal("read error.\n"); } | ||||
							
								
								
									
										159
									
								
								mach/sun3/libsys/LIST
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								mach/sun3/libsys/LIST
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,159 @@ | |||
| libmon_s.a | ||||
| accept.s | ||||
| access.s | ||||
| acct.s | ||||
| adjtime.s | ||||
| alarm.c | ||||
| async_dem.s | ||||
| bind.s | ||||
| cerror.s | ||||
| chdir.s | ||||
| chmod.s | ||||
| chown.s | ||||
| chroot.s | ||||
| cleanup.c | ||||
| close.s | ||||
| connect.s | ||||
| creat.s | ||||
| dup.s | ||||
| dup2.s | ||||
| execl.c | ||||
| execle.c | ||||
| execv.c | ||||
| execve.s | ||||
| exit.c | ||||
| exportfs.s | ||||
| fchmod.s | ||||
| fchown.s | ||||
| fcntl.s | ||||
| flock.s | ||||
| fork.s | ||||
| fstat.s | ||||
| fstatfs.s | ||||
| fsync.s | ||||
| ftime.c | ||||
| ftruncate.s | ||||
| getdirent.s | ||||
| getdomnam.s | ||||
| getdopt.s | ||||
| getdtabsz.s | ||||
| getfh.s | ||||
| getgid.s | ||||
| getgroups.s | ||||
| gethostid.s | ||||
| gethostnam.s | ||||
| getitimer.s | ||||
| getpagesiz.s | ||||
| getpeernam.s | ||||
| getpgrp.s | ||||
| getpid.s | ||||
| getprio.s | ||||
| getrlimit.s | ||||
| getrusage.s | ||||
| getsocknam.s | ||||
| getsockopt.s | ||||
| gettimday.s | ||||
| getuid.s | ||||
| ioctl.s | ||||
| kill.s | ||||
| killpg.s | ||||
| link.s | ||||
| listen.s | ||||
| lseek.s | ||||
| lstat.s | ||||
| madvise.s | ||||
| mincore.s | ||||
| mkdir.s | ||||
| mknod.s | ||||
| mmap.s | ||||
| mount.s | ||||
| mprotect.s | ||||
| mremap.s | ||||
| msgsys.s | ||||
| munmap.s | ||||
| nfssvc.s | ||||
| nice.c | ||||
| open.s | ||||
| pause.c | ||||
| pipe.s | ||||
| profil.s | ||||
| ptrace.s | ||||
| quotactl.s | ||||
| read.s | ||||
| readlink.s | ||||
| readv.s | ||||
| reboot.s | ||||
| recv.s | ||||
| recvfrom.s | ||||
| recvmsg.s | ||||
| rename.s | ||||
| rmdir.s | ||||
| sbrk.s | ||||
| select.s | ||||
| semsys.s | ||||
| send.s | ||||
| sendmsg.s | ||||
| sendto.s | ||||
| setdomnam.s | ||||
| setdopt.s | ||||
| setgroups.s | ||||
| sethostnam.s | ||||
| setitimer.s | ||||
| setpgrp.s | ||||
| setprio.s | ||||
| setregid.s | ||||
| setreuid.s | ||||
| setrlimit.s | ||||
| setsockopt.s | ||||
| settimday.s | ||||
| shmsys.s | ||||
| shutdown.s | ||||
| sigblock.s | ||||
| signal.c | ||||
| sigpause.s | ||||
| sigsetmask.s | ||||
| sigstack.s | ||||
| sigtramp.s | ||||
| sigvec.c | ||||
| socket.s | ||||
| socketpair.s | ||||
| sstk.s | ||||
| stat.s | ||||
| statfs.s | ||||
| swapon.s | ||||
| symlink.s | ||||
| sync.s | ||||
| syscall.s | ||||
| time.c | ||||
| times.c | ||||
| truncate.s | ||||
| umask.s | ||||
| unlink.s | ||||
| unmount.s | ||||
| ustat.s | ||||
| utime.c | ||||
| utimes.s | ||||
| vhangup.s | ||||
| wait.s | ||||
| write.s | ||||
| writev.s | ||||
| _exit.s | ||||
| stty.c | ||||
| gtty.c | ||||
| getegid.s | ||||
| geteuid.s | ||||
| getppid.s | ||||
| lockf.c | ||||
| msg.s | ||||
| plock.c | ||||
| sem.s | ||||
| setgid.c | ||||
| setuid.c | ||||
| shm.s | ||||
| stime.c | ||||
| tell.c | ||||
| ulimit.c | ||||
| uname.c | ||||
| vadvise.s | ||||
| vfork.s | ||||
| wait3.s | ||||
							
								
								
									
										29
									
								
								mach/sun3/libsys/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								mach/sun3/libsys/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| # $Header$
 | ||||
| MACH=m68020 | ||||
| all:		libmon_o.a head_em.o | ||||
| 
 | ||||
| install: 	all | ||||
| 		../../install head_em.o head_em | ||||
| 		../../install libmon_o.a tail_mon | ||||
| 
 | ||||
| 
 | ||||
| cmp:		all | ||||
| 		-../../compare head_em.o head_em | ||||
| 		-../../compare libmon_o.a tail_mon | ||||
| 
 | ||||
| libmon_o.a:	libmon_s.a | ||||
| 		ASAR=aal ; export ASAR ;\
 | ||||
| 		march . libmon_o.a | ||||
| 
 | ||||
| head_em.o:	head_em.s | ||||
| 		$(MACH) -I../../../h -c head_em.s | ||||
| 
 | ||||
| clean: | ||||
| 		rm -f *.o libmon_o.a | ||||
| 
 | ||||
| opr : | ||||
| 		make pr | opr | ||||
| 
 | ||||
| pr: | ||||
| 		@pr `pwd`/head_em.s | ||||
| 		@arch pv libmon_s.a | pr -h `pwd`/libmon_s.a | ||||
							
								
								
									
										7
									
								
								mach/sun3/libsys/_exit.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								mach/sun3/libsys/_exit.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define __exit
 | ||||
| __exit: | ||||
| 	pea	(SYS_exit) | ||||
| 	trap	#0 | ||||
| 	jmp	(cerror) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/accept.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/accept.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _accept
 | ||||
| _accept: SYSTEM(SYS_accept) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/access.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/access.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _access
 | ||||
| _access: SYSTEM(SYS_access) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/acct.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/acct.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _acct
 | ||||
| _acct: SYSTEM(SYS_acct) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/adjtime.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/adjtime.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _adjtime
 | ||||
| _adjtime: SYSTEM(SYS_adjtime) | ||||
							
								
								
									
										13
									
								
								mach/sun3/libsys/alarm.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								mach/sun3/libsys/alarm.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| unsigned | ||||
| alarm(n) | ||||
| 	unsigned n; | ||||
| { | ||||
| 	struct { long l1,l2,l3,l4; } t1,t2; | ||||
| 	t1.l1 = 0; | ||||
| 	t1.l2 = 0; | ||||
| 	t1.l4 = 0; | ||||
| 	t1.l3 = n; | ||||
| 	if (setitimer(0,&t1,&t2) < 0) return -1; | ||||
| 	if (t2.l4) t2.l3++; | ||||
| 	return t2.l3; | ||||
| } | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/async_dem.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/async_dem.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _async_daemon
 | ||||
| _async_daemon: SYSTEM(SYS_async_daemon) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/bind.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/bind.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _bind
 | ||||
| _bind: SYSTEM(SYS_bind) | ||||
							
								
								
									
										9
									
								
								mach/sun3/libsys/cerror.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								mach/sun3/libsys/cerror.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define cerror,_errno | ||||
| cerror: | ||||
| 	move.l	d0,(_errno) | ||||
| 	move.l	#-1,d0 | ||||
| 	rts | ||||
| 
 | ||||
| .sect .bss | ||||
| _errno:	.space 4 | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/chdir.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/chdir.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _chdir
 | ||||
| _chdir: SYSTEM(SYS_chdir) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/chmod.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/chmod.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _chmod
 | ||||
| _chmod: SYSTEM(SYS_chmod) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/chown.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/chown.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _chown
 | ||||
| _chown: SYSTEM(SYS_chown) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/chroot.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/chroot.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _chroot
 | ||||
| _chroot: SYSTEM(SYS_chroot) | ||||
							
								
								
									
										1
									
								
								mach/sun3/libsys/cleanup.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								mach/sun3/libsys/cleanup.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| _cleanup() { } | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/close.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/close.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _close
 | ||||
| _close: SYSTEM(SYS_close) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/compmodule
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/compmodule
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| if m68020 -c -L $1 1>&2 | ||||
| then echo `basename $1 $2`.o | ||||
| else exit 1 | ||||
| fi | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/connect.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/connect.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _connect
 | ||||
| _connect: SYSTEM(SYS_connect) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/creat.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/creat.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _creat
 | ||||
| _creat: SYSTEM(SYS_creat) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/dup.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/dup.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _dup
 | ||||
| _dup: SYSTEM(SYS_dup) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/dup2.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/dup2.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _dup2
 | ||||
| _dup2: SYSTEM(SYS_dup2) | ||||
							
								
								
									
										8
									
								
								mach/sun3/libsys/execl.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								mach/sun3/libsys/execl.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| execl(name,args) | ||||
| 	char *name; | ||||
| 	int args; | ||||
| { | ||||
| 	extern char **environ; | ||||
| 
 | ||||
| 	execve(name,&args,environ); | ||||
| } | ||||
							
								
								
									
										9
									
								
								mach/sun3/libsys/execle.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								mach/sun3/libsys/execle.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| execle(name,args) | ||||
| 	char *name; | ||||
| 	char *args; | ||||
| { | ||||
| 	char **p = &args; | ||||
| 	while (*p++) ; | ||||
| 
 | ||||
| 	execve(name,&args,*p); | ||||
| } | ||||
							
								
								
									
										7
									
								
								mach/sun3/libsys/execv.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								mach/sun3/libsys/execv.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| execv(name,args) | ||||
| 	char *name; | ||||
| 	char **args; | ||||
| { | ||||
| 	extern char **environ; | ||||
| 	execve(name,args,environ); | ||||
| } | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/execve.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/execve.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _execve
 | ||||
| _execve: SYSTEM(SYS_execve) | ||||
							
								
								
									
										5
									
								
								mach/sun3/libsys/exit.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								mach/sun3/libsys/exit.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| exit(n) | ||||
| { | ||||
| 	_cleanup(); | ||||
| 	_exit(n); | ||||
| } | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/exportfs.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/exportfs.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _exportfs
 | ||||
| _exportfs: SYSTEM(SYS_exportfs) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/fchmod.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/fchmod.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _fchmod
 | ||||
| _fchmod: SYSTEM(SYS_fchmod) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/fchown.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/fchown.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _fchown
 | ||||
| _fchown: SYSTEM(SYS_fchown) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/fcntl.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/fcntl.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _fcntl
 | ||||
| _fcntl: SYSTEM(SYS_fcntl) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/flock.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/flock.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _flock
 | ||||
| _flock: SYSTEM(SYS_flock) | ||||
							
								
								
									
										14
									
								
								mach/sun3/libsys/fork.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								mach/sun3/libsys/fork.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _fork
 | ||||
| _fork: | ||||
| 	pea	(SYS_fork) | ||||
| 	trap	#0 | ||||
| 	bcs	1f | ||||
| 	tst.l	d1 | ||||
| 	beq	2f | ||||
| 	clr.l	d0 | ||||
| 2: | ||||
| 	rts | ||||
| 1: | ||||
| 	jmp	(cerror) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/fstat.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/fstat.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _fstat
 | ||||
| _fstat: SYSTEM(SYS_fstat) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/fstatfs.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/fstatfs.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _fstatfs
 | ||||
| _fstatfs: SYSTEM(SYS_fstatfs) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/fsync.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/fsync.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _fsync
 | ||||
| _fsync: SYSTEM(SYS_fsync) | ||||
							
								
								
									
										15
									
								
								mach/sun3/libsys/ftime.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								mach/sun3/libsys/ftime.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| #include <sys/types.h> | ||||
| 
 | ||||
| ftime(p) | ||||
| 	struct { time_t time; unsigned short millitm; | ||||
| 		 short timezone; short dstflag; } *p; | ||||
| { | ||||
| 	struct { long l1,l2; } t1,t2; | ||||
| 
 | ||||
| 	if (gettimeofday(&t1,&t2) < 0) return -1; | ||||
| 	p->time = t1.l1; | ||||
| 	p->millitm = t1.l2/1000; | ||||
| 	p->dstflag = t2.l2; | ||||
| 	p->timezone = t2.l1; | ||||
| 	return 0; | ||||
| } | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/ftruncate.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/ftruncate.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _ftruncate
 | ||||
| _ftruncate: SYSTEM(SYS_ftruncate) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getdirent.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getdirent.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getdirentries
 | ||||
| _getdirentries: SYSTEM(SYS_getdirentries) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getdomnam.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getdomnam.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getdomainname
 | ||||
| _getdomainname: SYSTEM(SYS_getdomainname) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getdopt.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getdopt.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getdopt
 | ||||
| _getdopt: SYSTEM(SYS_getdopt) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getdtabsz.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getdtabsz.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getdtablesize
 | ||||
| _getdtablesize: SYSTEM(SYS_getdtablesize) | ||||
							
								
								
									
										8
									
								
								mach/sun3/libsys/getegid.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								mach/sun3/libsys/getegid.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getegid
 | ||||
| _getegid: | ||||
| 	pea	(SYS_getgid) | ||||
| 	trap	#0 | ||||
| 	move.l	d1,d0 | ||||
| 	rts | ||||
							
								
								
									
										8
									
								
								mach/sun3/libsys/geteuid.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								mach/sun3/libsys/geteuid.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _geteuid
 | ||||
| _geteuid: | ||||
| 	pea	(SYS_getuid) | ||||
| 	trap	#0 | ||||
| 	move.l	d1,d0 | ||||
| 	rts | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getfh.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getfh.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getfh
 | ||||
| _getfh: SYSTEM(SYS_getfh) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getgid.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getgid.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getgid
 | ||||
| _getgid: SYSTEM(SYS_getgid) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getgroups.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getgroups.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getgroups
 | ||||
| _getgroups: SYSTEM(SYS_getgroups) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/gethostid.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/gethostid.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _gethostid
 | ||||
| _gethostid: SYSTEM(SYS_gethostid) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/gethostnam.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/gethostnam.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _gethostname
 | ||||
| _gethostname: SYSTEM(SYS_gethostname) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getitimer.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getitimer.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getitimer
 | ||||
| _getitimer: SYSTEM(SYS_getitimer) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getpagesiz.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getpagesiz.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getpagesize
 | ||||
| _getpagesize: SYSTEM(SYS_getpagesize) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getpeernam.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getpeernam.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getpeername
 | ||||
| _getpeername: SYSTEM(SYS_getpeername) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getpgrp.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getpgrp.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getpgrp
 | ||||
| _getpgrp: SYSTEM(SYS_getpgrp) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getpid.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getpid.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getpid
 | ||||
| _getpid: SYSTEM(SYS_getpid) | ||||
							
								
								
									
										8
									
								
								mach/sun3/libsys/getppid.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								mach/sun3/libsys/getppid.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getppid
 | ||||
| _getppid: | ||||
| 	pea	(SYS_getpid) | ||||
| 	trap	#0 | ||||
| 	move.l	d1,d0 | ||||
| 	rts | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getprio.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getprio.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getpriority
 | ||||
| _getpriority: SYSTEM(SYS_getpriority) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getrlimit.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getrlimit.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getrlimit
 | ||||
| _getrlimit: SYSTEM(SYS_getrlimit) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getrusage.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getrusage.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getrusage
 | ||||
| _getrusage: SYSTEM(SYS_getrusage) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getsocknam.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getsocknam.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getsockname
 | ||||
| _getsockname: SYSTEM(SYS_getsockname) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getsockopt.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getsockopt.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getsockopt
 | ||||
| _getsockopt: SYSTEM(SYS_getsockopt) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/gettimday.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/gettimday.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _gettimeofday
 | ||||
| _gettimeofday: SYSTEM(SYS_gettimeofday) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/getuid.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/getuid.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _getuid
 | ||||
| _getuid: SYSTEM(SYS_getuid) | ||||
							
								
								
									
										7
									
								
								mach/sun3/libsys/gtty.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								mach/sun3/libsys/gtty.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| #include <sgtty.h> | ||||
| int gtty(fildes,argp) | ||||
| 	int fildes ; | ||||
| 	struct sgttyb *argp ; | ||||
| { | ||||
| 	return ioctl(fildes,TIOCGETP,argp) ; | ||||
| } | ||||
							
								
								
									
										65
									
								
								mach/sun3/libsys/head_em.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								mach/sun3/libsys/head_em.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,65 @@ | |||
| .define .lino,.filn | ||||
| .define EXIT
 | ||||
| .define	begtext,begdata,begbss | ||||
| .define	EARRAY,ERANGE,ESET,EIDIVZ,EHEAP,EILLINS,ECASE,EBADGTO | ||||
| .define	hol0,.reghp,.limhp,.trpim,.trppc | ||||
| .sect .text | ||||
| .sect .rom | ||||
| .sect .data | ||||
| .sect .bss | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ! runtime startof for 68020 machine | ||||
| 
 | ||||
| 
 | ||||
| LINO_AD	= 0 | ||||
| FILN_AD	= 4 | ||||
| 
 | ||||
| EARRAY	= 0 | ||||
| ERANGE	= 1 | ||||
| ESET	= 2 | ||||
| EIDIVZ	= 6 | ||||
| EHEAP	= 17 | ||||
| EILLINS	= 18 | ||||
| ECASE	= 20 | ||||
| EBADGTO = 27 | ||||
| 
 | ||||
| 	.sect .text | ||||
| begtext: | ||||
| 	move.l	(sp),d2 | ||||
| 	lea	(4,sp),a0 | ||||
| 	move.l	d2,d1 | ||||
| 	add.l	#1,d1 | ||||
| 	asl.l	#2,d1 | ||||
| 	move.l	a0,a1 | ||||
| 	add.l	d1,a1 | ||||
| 	pea	(a1) | ||||
| 	pea	(a0) | ||||
| 	move.l	d2,-(sp) | ||||
| 	move.l	#0,a6 | ||||
| 	jsr	(_m_a_i_n) | ||||
| 	move.l	d0,(sp)		! no stack cleanup needed | ||||
| EXIT: | ||||
| 	jsr	(_exit) | ||||
| 
 | ||||
| 	.sect .data | ||||
| begdata: | ||||
| 	.data4 0		! may be at virtual address 0 with no problem | ||||
| hol0: | ||||
| .lino: | ||||
| 	.data4	0	! lino | ||||
| .filn: | ||||
| 	.data4	0	! filn | ||||
| .reghp: | ||||
| 	.data4	endbss
 | ||||
| .limhp: | ||||
| 	.data4	endbss
 | ||||
| .trppc: | ||||
| 	.data4	0
 | ||||
| .trpim: | ||||
| 	.data4	0	! USED TO BE 2 BYTES; IS THIS RIGHT?
 | ||||
| 
 | ||||
| 
 | ||||
| 	.sect .bss | ||||
| begbss: !initialization is not needed because ALL entries are in zero space! | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/ioctl.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/ioctl.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _ioctl
 | ||||
| _ioctl: SYSTEM(SYS_ioctl) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/kill.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/kill.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _kill
 | ||||
| _kill: SYSTEM(SYS_kill) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/killpg.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/killpg.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _killpg
 | ||||
| _killpg: SYSTEM(SYS_killpg) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/link.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/link.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _link
 | ||||
| _link: SYSTEM(SYS_link) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/listen.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/listen.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _listen
 | ||||
| _listen: SYSTEM(SYS_listen) | ||||
							
								
								
									
										43
									
								
								mach/sun3/libsys/lockf.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								mach/sun3/libsys/lockf.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| #include <errno.h> | ||||
| lockf(fildes, mode, size) | ||||
| 	long size; | ||||
| { | ||||
| 	struct { | ||||
| 		short type, whence; long start, end; short pid; | ||||
| 	} x; | ||||
| 	int i = 8; | ||||
| 	extern int errno; | ||||
| 
 | ||||
| 	x.type = 2; | ||||
| 	x.whence = 1; | ||||
| 	x.start = 0; | ||||
| 	x.end = size; | ||||
| 	switch(mode) { | ||||
| 	case 0: | ||||
| 		x.type = 3; | ||||
| 		break; | ||||
| 	case 1: | ||||
| 		i = 9; | ||||
| 		break; | ||||
| 	case 2: | ||||
| 		break; | ||||
| 	case 3: | ||||
| 		if (fcntl(fildes,7,&x) == -1) { | ||||
| 			return -1; | ||||
| 		} | ||||
| 		if (x.type == 3) { | ||||
| 			return 0; | ||||
| 		} | ||||
| 		errno = EACCES; | ||||
| 		return -1; | ||||
| 	default: | ||||
| 		errno = EINVAL; | ||||
| 		return -1; | ||||
| 	} | ||||
| 	if (fcntl(fildes,i,&x) == -1) { | ||||
| 		if (errno = 79) { | ||||
| 			errno = 78; | ||||
| 		} | ||||
| 		return -1; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/lseek.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/lseek.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _lseek
 | ||||
| _lseek: SYSTEM(SYS_lseek) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/lstat.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/lstat.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _lstat
 | ||||
| _lstat: SYSTEM(SYS_lstat) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/madvise.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/madvise.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _madvise
 | ||||
| _madvise: SYSTEM(SYS_madvise) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/mincore.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/mincore.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _mincore
 | ||||
| _mincore: SYSTEM(SYS_mincore) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/mkdir.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/mkdir.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _mkdir
 | ||||
| _mkdir: SYSTEM(SYS_mkdir) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/mknod.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/mknod.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _mknod
 | ||||
| _mknod: SYSTEM(SYS_mknod) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/mmap.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/mmap.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _mmap
 | ||||
| _mmap: SYSTEM(SYS_mmap) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/mount.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/mount.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _mount
 | ||||
| _mount: SYSTEM(SYS_mount) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/mprotect.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/mprotect.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _mprotect
 | ||||
| _mprotect: SYSTEM(SYS_mprotect) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/mremap.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/mremap.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _mremap
 | ||||
| _mremap: SYSTEM(SYS_mremap) | ||||
							
								
								
									
										18
									
								
								mach/sun3/libsys/msg.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								mach/sun3/libsys/msg.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _msgget,_msgctl,_msgrcv,_msgsnd | ||||
| _msgget: | ||||
| 	pea	(0) | ||||
| 	bra	1f | ||||
| _msgctl: | ||||
| 	pea	(1) | ||||
| 	bra	1f | ||||
| _msgrcv: | ||||
| 	pea	(2) | ||||
| 	bra	1f | ||||
| _msgsnd: | ||||
| 	pea	(3) | ||||
| 1: | ||||
| 	move.l	(4,sp),d0 | ||||
| 	move.l	(sp),(4,sp) | ||||
| 	move.l	d0,(sp) | ||||
| 	jmp	(_msgsys) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/msgsys.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/msgsys.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _msgsys
 | ||||
| _msgsys: SYSTEM(SYS_msgsys) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/munmap.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/munmap.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _munmap
 | ||||
| _munmap: SYSTEM(SYS_munmap) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/nfssvc.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/nfssvc.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _nfssvc
 | ||||
| _nfssvc: SYSTEM(SYS_nfssvc) | ||||
							
								
								
									
										13
									
								
								mach/sun3/libsys/nice.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								mach/sun3/libsys/nice.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| nice(incr) | ||||
| { | ||||
| 	extern int errno; | ||||
| 	int sav = errno; | ||||
| 	int prio; | ||||
| 
 | ||||
| 	errno = 0; | ||||
| 	prio = getpriority(0,0); | ||||
| 	if (prio == -1 && errno) return -1; | ||||
| 	if (setpriority(0,0,prio+incr) < 0) return -1; | ||||
| 	errno = sav; | ||||
| 	return 0; | ||||
| } | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/open.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/open.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _open
 | ||||
| _open: SYSTEM(SYS_open) | ||||
							
								
								
									
										3
									
								
								mach/sun3/libsys/pause.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								mach/sun3/libsys/pause.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| pause() { | ||||
| 	sigpause(sigblock()); | ||||
| } | ||||
							
								
								
									
										14
									
								
								mach/sun3/libsys/pipe.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								mach/sun3/libsys/pipe.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _pipe
 | ||||
| _pipe: | ||||
| 	pea	(SYS_pipe) | ||||
| 	trap	#0 | ||||
| 	bcs	1f | ||||
| 	move.l	(4,sp),a0 | ||||
| 	move.l	d0,(a0)+ | ||||
| 	move.l	d1,(a0) | ||||
| 	clr.l	d0 | ||||
| 	rts | ||||
| 1: | ||||
| 	jmp	(cerror) | ||||
							
								
								
									
										8
									
								
								mach/sun3/libsys/plock.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								mach/sun3/libsys/plock.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| #include <errno.h> | ||||
| plock(op) | ||||
| { | ||||
| 	extern int errno; | ||||
| 
 | ||||
| 	errno = EPERM; | ||||
| 	return -1; | ||||
| } | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/profil.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/profil.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _profil
 | ||||
| _profil: SYSTEM(SYS_profil) | ||||
							
								
								
									
										7
									
								
								mach/sun3/libsys/ptrace.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								mach/sun3/libsys/ptrace.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _ptrace
 | ||||
| .extern _errno
 | ||||
| _ptrace: | ||||
| 	clr.l	(_errno) | ||||
| 	SYSTEM(SYS_ptrace) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/quotactl.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/quotactl.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _quotactl
 | ||||
| _quotactl: SYSTEM(SYS_quotactl) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/read.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/read.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _read
 | ||||
| _read: SYSTEM(SYS_read) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/readlink.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/readlink.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _readlink
 | ||||
| _readlink: SYSTEM(SYS_readlink) | ||||
							
								
								
									
										4
									
								
								mach/sun3/libsys/readv.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mach/sun3/libsys/readv.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _readv
 | ||||
| _readv: SYSTEM(SYS_readv) | ||||
							
								
								
									
										10
									
								
								mach/sun3/libsys/reboot.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								mach/sun3/libsys/reboot.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| #include "syscall.h" | ||||
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | ||||
| .define _reboot
 | ||||
| _reboot: | ||||
| 	pea	(SYS_reboot) | ||||
| 	trap	#0 | ||||
| 	bcs	1f | ||||
| 	stop	#0 | ||||
| 1: | ||||
| 	jmp	(cerror) | ||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		
		Reference in a new issue