. Junk-filling gap+stack code on exec() if enabled (not enabled now)
. Allow 'boot monitor' variable changes and additions by svrctl call
This commit is contained in:
		
							parent
							
								
									6e8f484b3b
								
							
						
					
					
						commit
						ca80161f40
					
				@ -378,6 +378,21 @@ phys_bytes tot_bytes;		/* total memory to allocate, including gap */
 | 
			
		||||
	panic(__FILE__,"new_mem can't zero", s);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#define ENABLE_USAGE_TEST 0
 | 
			
		||||
#if ENABLE_USAGE_TEST
 | 
			
		||||
 /* Junk-fill gap and stack.
 | 
			
		||||
  * Mind the gap..
 | 
			
		||||
  */
 | 
			
		||||
 {
 | 
			
		||||
 static int pat = 1;
 | 
			
		||||
 if ((s=sys_memset(pat++ & 0xff,
 | 
			
		||||
 	(rmp->mp_seg[D].mem_phys + rmp->mp_seg[D].mem_len) << CLICK_SHIFT,
 | 
			
		||||
  	(gap_clicks + stack_clicks) << CLICK_SHIFT)) != OK) {
 | 
			
		||||
	panic(__FILE__,"can't junk-fill", s);
 | 
			
		||||
  }
 | 
			
		||||
 }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if DEAD_CODE
 | 
			
		||||
  while (bytes > 0) {
 | 
			
		||||
  	static char zero[1024];		/* used to zero bss */
 | 
			
		||||
 | 
			
		||||
@ -217,6 +217,13 @@ PUBLIC int do_svrctl()
 | 
			
		||||
{
 | 
			
		||||
  int s, req;
 | 
			
		||||
  vir_bytes ptr;
 | 
			
		||||
#define MAX_LOCAL_PARAMS 2
 | 
			
		||||
  static struct {
 | 
			
		||||
  	char name[30];
 | 
			
		||||
  	char value[30];
 | 
			
		||||
  } local_param_overrides[MAX_LOCAL_PARAMS];
 | 
			
		||||
  static int local_params = 0;
 | 
			
		||||
 | 
			
		||||
  req = m_in.svrctl_req;
 | 
			
		||||
  ptr = (vir_bytes) m_in.svrctl_argp;
 | 
			
		||||
 | 
			
		||||
@ -236,6 +243,7 @@ PUBLIC int do_svrctl()
 | 
			
		||||
 | 
			
		||||
  /* Control operations local to the PM. */
 | 
			
		||||
  switch(req) {
 | 
			
		||||
  case MMSETPARAM:
 | 
			
		||||
  case MMGETPARAM: {
 | 
			
		||||
      struct sysgetenv sysgetenv;
 | 
			
		||||
      char search_key[64];
 | 
			
		||||
@ -247,20 +255,52 @@ PUBLIC int do_svrctl()
 | 
			
		||||
      if (sys_datacopy(who, ptr, SELF, (vir_bytes) &sysgetenv, 
 | 
			
		||||
              sizeof(sysgetenv)) != OK) return(EFAULT);  
 | 
			
		||||
 | 
			
		||||
      /* Set a param override? */
 | 
			
		||||
      if(req == MMSETPARAM) {
 | 
			
		||||
  		if(local_params >= MAX_LOCAL_PARAMS) return ENOSPC;
 | 
			
		||||
  		if(sysgetenv.keylen <= 0 || sysgetenv.keylen >= sizeof(local_param_overrides[local_params].name)
 | 
			
		||||
  		 || sysgetenv.vallen <= 0 || sysgetenv.vallen >= sizeof(local_param_overrides[local_params].value))
 | 
			
		||||
  			return EINVAL;
 | 
			
		||||
  		
 | 
			
		||||
          	if ((s = sys_datacopy(who, (vir_bytes) sysgetenv.key,
 | 
			
		||||
               	   SELF, (vir_bytes) local_param_overrides[local_params].name,
 | 
			
		||||
               	    sysgetenv.keylen)) != OK)
 | 
			
		||||
               	    	return s;
 | 
			
		||||
          	if ((s = sys_datacopy(who, (vir_bytes) sysgetenv.val,
 | 
			
		||||
               	   SELF, (vir_bytes) local_param_overrides[local_params].value,
 | 
			
		||||
               	    sysgetenv.keylen)) != OK)
 | 
			
		||||
               	    	return s;
 | 
			
		||||
               	local_param_overrides[local_params].name[sysgetenv.keylen] = '\0';
 | 
			
		||||
               	local_param_overrides[local_params].value[sysgetenv.vallen] = '\0';
 | 
			
		||||
 | 
			
		||||
  		local_params++;
 | 
			
		||||
 | 
			
		||||
  		return OK;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (sysgetenv.keylen == 0) {	/* copy all parameters */
 | 
			
		||||
          val_start = monitor_params;
 | 
			
		||||
          val_len = sizeof(monitor_params);
 | 
			
		||||
      } 
 | 
			
		||||
      else {				/* lookup value for key */
 | 
			
		||||
      	  int p;
 | 
			
		||||
          /* Try to get a copy of the requested key. */
 | 
			
		||||
          if (sysgetenv.keylen > sizeof(search_key)) return(EINVAL);
 | 
			
		||||
          if ((s = sys_datacopy(who, (vir_bytes) sysgetenv.key,
 | 
			
		||||
                  SELF, (vir_bytes) search_key, sysgetenv.keylen)) != OK)
 | 
			
		||||
              return(s);
 | 
			
		||||
 | 
			
		||||
          /* Make sure key is null-terminated and lookup value. */
 | 
			
		||||
          /* Make sure key is null-terminated and lookup value.
 | 
			
		||||
           * First check local overrides.
 | 
			
		||||
           */
 | 
			
		||||
          search_key[sysgetenv.keylen-1]= '\0';
 | 
			
		||||
          if ((val_start = find_param(search_key)) == NULL)
 | 
			
		||||
          for(p = 0; p < local_params; p++) {
 | 
			
		||||
          	if(!strcmp(search_key, local_param_overrides[p].name)) {
 | 
			
		||||
          		val_start = local_param_overrides[p].value;
 | 
			
		||||
          		break;
 | 
			
		||||
          	}
 | 
			
		||||
          }
 | 
			
		||||
          if(p >= local_params && (val_start = find_param(search_key)) == NULL)
 | 
			
		||||
               return(ESRCH);
 | 
			
		||||
          val_len = strlen(val_start) + 1;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user