74 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| 	Handling the proctable
 | |
| */
 | |
| 
 | |
| /* $Header$ */
 | |
| 
 | |
| #include	"logging.h"
 | |
| #include	"global.h"
 | |
| #include	"log.h"
 | |
| #include	"alloc.h"
 | |
| #include	"proctab.h"
 | |
| 
 | |
| struct proc *proctab;
 | |
| PRIVATE long pr_cnt;
 | |
| 
 | |
| init_proctab()
 | |
| {
 | |
| 	proctab = (struct proc *)
 | |
| 			Malloc(NProc * sizeof (struct proc), "proctable");
 | |
| 	pr_cnt = 0;
 | |
| }
 | |
| 
 | |
| add_proc(nloc, ep)
 | |
| 	size nloc;
 | |
| 	ptr ep;
 | |
| {
 | |
| 	register struct proc *pr = &proctab[pr_cnt++];
 | |
| 	register struct proc *p;
 | |
| 	register ptr ff = DB;
 | |
| 
 | |
| 	LOG((" r6 add_proc: pr_cnt = %ld, nloc = %lu, ep = %lu",
 | |
| 				pr_cnt-1, nloc, ep));
 | |
| 	if (ep > DB)
 | |
| 		fatal("procedure entry point outside text segment");
 | |
| 
 | |
| 	pr->pr_nloc = nloc;
 | |
| 	pr->pr_ep = ep;
 | |
| 	/* examine all old proc descriptors */
 | |
| 	for (p = &proctab[0]; p < pr; p++) {
 | |
| 		if (	/* the old one starts earlier */
 | |
| 			p->pr_ep < pr->pr_ep
 | |
| 		&&	/* it seems to end later */
 | |
| 			p->pr_ff > pr->pr_ep
 | |
| 		) {	/* update its limit */
 | |
| 			p->pr_ff = pr->pr_ep;
 | |
| 		}
 | |
| 		if (	/* the old one starts later */
 | |
| 			p->pr_ep > pr->pr_ep
 | |
| 		&&	/* our limit is beyond the old procedure entry point*/
 | |
| 			ff > p->pr_ep
 | |
| 		) {	/* update our limit */
 | |
| 			ff = p->pr_ep;
 | |
| 		}
 | |
| 	}
 | |
| 	pr->pr_ff = ff;
 | |
| }
 | |
| 
 | |
| end_init_proctab()
 | |
| {
 | |
| #ifdef	LOGGING
 | |
| 	register long p;
 | |
| 
 | |
| 	if (!check_log(" r6"))
 | |
| 		return;
 | |
| 
 | |
| 	for (p = 0; p < NProc; p++) {
 | |
| 		register struct proc *pr = &proctab[p];
 | |
| 
 | |
| 		LOG((" r5: proctab[%ld]: nloc = %d, ep = %lu, ff = %lu",
 | |
| 				p, pr->pr_nloc, pr->pr_ep, pr->pr_ff));
 | |
| 	}
 | |
| #endif	LOGGING
 | |
| }
 | |
| 
 |