Initial revision
This commit is contained in:
		
							parent
							
								
									083404fc90
								
							
						
					
					
						commit
						3ccbd9cdc7
					
				
					 6 changed files with 173 additions and 0 deletions
				
			
		
							
								
								
									
										6
									
								
								mach/arm/.distr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								mach/arm/.distr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | Action | ||||||
|  | as | ||||||
|  | cv | ||||||
|  | libcc | ||||||
|  | libem | ||||||
|  | ncg | ||||||
							
								
								
									
										12
									
								
								mach/arm/Action
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								mach/arm/Action
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | name "ARM assembler" | ||||||
|  | dir as | ||||||
|  | end | ||||||
|  | name "ARM backend" | ||||||
|  | dir ncg | ||||||
|  | end | ||||||
|  | name "ARM C libraries" | ||||||
|  | dir libcc | ||||||
|  | end | ||||||
|  | name "ARM EM library" | ||||||
|  | dir libem | ||||||
|  | end | ||||||
							
								
								
									
										3
									
								
								mach/arm/cv/.distr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								mach/arm/cv/.distr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | ||||||
|  | Makefile | ||||||
|  | arm.h | ||||||
|  | cv.c | ||||||
							
								
								
									
										22
									
								
								mach/arm/cv/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								mach/arm/cv/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | EMHOME=../../.. | ||||||
|  | OBJLIB=$(EMHOME)/modules/lib/libobject.a | ||||||
|  | 
 | ||||||
|  | head:	cv | ||||||
|  | 
 | ||||||
|  | cv:	conv.c | ||||||
|  | 	$(CC) -I$(EMHOME)/h -o cv cv.c $(OBJLIB) | ||||||
|  | 
 | ||||||
|  | install:	head | ||||||
|  | 	@echo Nothing is installed | ||||||
|  | 
 | ||||||
|  | cmp:	head | ||||||
|  | 	@echo Nothing is compared | ||||||
|  | 
 | ||||||
|  | clean: | ||||||
|  | 	rm -f *.o | ||||||
|  | 
 | ||||||
|  | pr: | ||||||
|  | 	@pr `pwd`/Makefile `pwd`/cv.c | ||||||
|  | 
 | ||||||
|  | opr: | ||||||
|  | 	make pr | opr | ||||||
							
								
								
									
										34
									
								
								mach/arm/cv/arm.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								mach/arm/cv/arm.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | ||||||
|  | #define MAXCHUNK        5 | ||||||
|  | #define NSECT		4 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct entry{ | ||||||
|  |         char chunkid[8]; | ||||||
|  |         long offset; | ||||||
|  |         long size; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct armhead{ | ||||||
|  |         long chunkfileid; | ||||||
|  |         long maxchunks; | ||||||
|  |         long numchunks; | ||||||
|  |         struct entry entries[MAXCHUNK]; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct chunkhead{ | ||||||
|  |         long objtype; | ||||||
|  |         long versionid; | ||||||
|  |         long narea; | ||||||
|  |         long nsymb; | ||||||
|  |         long entrya; | ||||||
|  |         long entryo; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct areadec{ | ||||||
|  |         long name; | ||||||
|  |         long atal; | ||||||
|  |         long size; | ||||||
|  |         long nrel; | ||||||
|  |         long base; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
							
								
								
									
										96
									
								
								mach/arm/cv/cv.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								mach/arm/cv/cv.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,96 @@ | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <out.h> | ||||||
|  | #include "arm.h" | ||||||
|  | struct outhead ohead; | ||||||
|  | struct outsect sect[NSECT]; | ||||||
|  | struct armhead ahead; | ||||||
|  | struct chunkhead chead; | ||||||
|  | struct areadec area[NSECT]; | ||||||
|  | int fd; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | main (argc,argv) | ||||||
|  | int argc; | ||||||
|  | char *argv[]; | ||||||
|  | { | ||||||
|  |         if (argc != 3)   fatal ("usage: dl ackobj armobj\n"); | ||||||
|  |         if (! rd_open (*++argv)) | ||||||
|  |                 fatal ("can't open \n"); | ||||||
|  | 	if ((fd = open(*++argv, 1)) <0) | ||||||
|  |                 fatal ("can't open \n"); | ||||||
|  |         else    { | ||||||
|  |                 convert (); | ||||||
|  |                 } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | convert () | ||||||
|  | { | ||||||
|  |         int i,areasize=0; | ||||||
|  | 	char buf[4]; | ||||||
|  | 	int cnt; | ||||||
|  | 
 | ||||||
|  |         rd_ohead(&ohead); | ||||||
|  |         if (ohead.oh_flags & HF_LINK) { | ||||||
|  |                 fatal("unresolved references\n"); | ||||||
|  |         } | ||||||
|  |         ahead.chunkfileid = 0xC3CBC6C5; | ||||||
|  |         ahead.maxchunks = MAXCHUNK; | ||||||
|  |         ahead.numchunks = MAXCHUNK; | ||||||
|  | 	strncpy(ahead.entries[0].chunkid , "OBJ_HEAD", 8); | ||||||
|  | 	strncpy(ahead.entries[1].chunkid , "OBJ_AREA", 8); | ||||||
|  | 	strncpy(ahead.entries[2].chunkid , "OBJ_IDFN", 8); | ||||||
|  | 	strncpy(ahead.entries[3].chunkid , "OBJ_SYMT", 8); | ||||||
|  | 	strncpy(ahead.entries[4].chunkid , "OBJ_STRT", 8); | ||||||
|  | 	ahead.entries[0].offset = sizeof(struct armhead); | ||||||
|  | 	ahead.entries[0].size = sizeof(struct chunkhead) + ohead.oh_nsect * | ||||||
|  | 					sizeof(struct areadec); | ||||||
|  | 	ahead.entries[1].offset = ahead.entries[0].offset+ahead.entries[0].size; | ||||||
|  |         chead.objtype = 0xC5E2D080; | ||||||
|  |         chead.versionid = 110; | ||||||
|  |         chead.narea = ohead.oh_nsect; | ||||||
|  |         chead.nsymb = ohead.oh_nname; | ||||||
|  |         chead.entrya = 0; | ||||||
|  |         chead.entryo = 0; | ||||||
|  | 	lseek(fd, ahead.entries[1].offset, 0); | ||||||
|  |         rd_sect(sect, ohead.oh_nsect); | ||||||
|  |         for (i = 0; i < ohead.oh_nsect; i++) { | ||||||
|  |                 area[i].name=0; | ||||||
|  |                 area[i].atal=2|1<<7|(i=0?(1<<8):0); | ||||||
|  |                 area[i].size=sect[i].os_size; | ||||||
|  |                 area[i].nrel=0; | ||||||
|  |                 area[i].base=sect[i].os_base; | ||||||
|  | 		rd_outsect(i); | ||||||
|  | 		cnt = sect[i].os_flen; | ||||||
|  | 		areasize += cnt; | ||||||
|  | 		if (cnt!=sect[i].os_size) | ||||||
|  | 			area[i].atal |= 1<<11; | ||||||
|  | 			if (cnt & 3) | ||||||
|  | 				fatal("alignment error\n");	 | ||||||
|  | 			while (cnt){ | ||||||
|  | 				rd_emit(buf, (long)4); | ||||||
|  | 				write(fd, buf, 4); | ||||||
|  | 				cnt -= 4; | ||||||
|  | 			} | ||||||
|  |         } | ||||||
|  | 	ahead.entries[1].size = areasize; | ||||||
|  | 	lseek(fd, 0, 0); | ||||||
|  | 	write(fd, &ahead, sizeof(struct armhead)); | ||||||
|  | 	write(fd, &chead, sizeof(struct chunkhead)); | ||||||
|  | 	for(i=1; i<NSECT; i++) | ||||||
|  | 		write(fd, &area[i], sizeof(struct areadec)); | ||||||
|  | 	close(fd); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fatal(s) | ||||||
|  | char *s; | ||||||
|  | { | ||||||
|  |         printf (s); | ||||||
|  |         exit (-1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | rd_fatal(s) | ||||||
|  | char *s; | ||||||
|  | { | ||||||
|  |         printf (s); | ||||||
|  |         exit (-1); | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue