Give pm its own brk() so malloc() works in pm. pm needs more stack for this.
This commit is contained in:
		
							parent
							
								
									b5179d7025
								
							
						
					
					
						commit
						b654c02f55
					
				@ -20,7 +20,7 @@ OBJ = 	main.o forkexit.o break.o exec.o time.o timers.o \
 | 
			
		||||
all build:	$(SERVER)
 | 
			
		||||
$(SERVER):	$(OBJ)
 | 
			
		||||
	$(CC) -o $@ $(LDFLAGS) $(OBJ) -lsysutil  -lsys -ltimers
 | 
			
		||||
	install -S 256w $@
 | 
			
		||||
	install -S 8k $@
 | 
			
		||||
 | 
			
		||||
# install with other servers
 | 
			
		||||
install:	/usr/sbin/$(SERVER)
 | 
			
		||||
 | 
			
		||||
@ -271,7 +271,6 @@ PRIVATE void pm_init()
 | 
			
		||||
  if (OK != (s=sys_getimage(image))) 
 | 
			
		||||
  	panic(__FILE__,"couldn't get image table: %d\n", s);
 | 
			
		||||
  procs_in_use = 0;				/* start populating table */
 | 
			
		||||
  printf("Building process table:");		/* show what's happening */
 | 
			
		||||
  for (ip = &image[0]; ip < &image[NR_BOOT_PROCS]; ip++) {		
 | 
			
		||||
  	if (ip->proc_nr >= 0) {			/* task have negative nrs */
 | 
			
		||||
  		procs_in_use += 1;		/* found user process */
 | 
			
		||||
@ -315,10 +314,8 @@ PRIVATE void pm_init()
 | 
			
		||||
		mess.PR_ENDPT = rmp->mp_endpoint;
 | 
			
		||||
  		if (OK != (s=send(FS_PROC_NR, &mess)))
 | 
			
		||||
			panic(__FILE__,"can't sync up with FS", s);
 | 
			
		||||
  		printf(" %s", ip->proc_name);	/* display process name */
 | 
			
		||||
  	}
 | 
			
		||||
  }
 | 
			
		||||
  printf(".\n");				/* last process done */
 | 
			
		||||
 | 
			
		||||
  /* Override some details. INIT, PM, FS and RS are somewhat special. */
 | 
			
		||||
  mproc[PM_PROC_NR].mp_pid = PM_PID;		/* PM has magic pid */
 | 
			
		||||
 | 
			
		||||
@ -11,6 +11,8 @@
 | 
			
		||||
 *   do_svrctl: process manager control
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define brk _brk
 | 
			
		||||
 | 
			
		||||
#include "pm.h"
 | 
			
		||||
#include <minix/callnr.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
@ -520,3 +522,20 @@ PUBLIC int do_svrctl()
 | 
			
		||||
	return(EINVAL);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*
 | 
			
		||||
 *				_brk				             *
 | 
			
		||||
 *===========================================================================*/
 | 
			
		||||
 | 
			
		||||
extern char *_brksize;
 | 
			
		||||
PUBLIC int brk(brk_addr)
 | 
			
		||||
char *brk_addr;
 | 
			
		||||
{
 | 
			
		||||
/* PM wants to call brk() itself. */
 | 
			
		||||
	if(real_brk(&mproc[PM_PROC_NR], (vir_bytes) brk_addr) != OK) {
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
	_brksize = brk_addr;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user