. 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);
|
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
|
#if DEAD_CODE
|
||||||
while (bytes > 0) {
|
while (bytes > 0) {
|
||||||
static char zero[1024]; /* used to zero bss */
|
static char zero[1024]; /* used to zero bss */
|
||||||
|
@ -217,6 +217,13 @@ PUBLIC int do_svrctl()
|
|||||||
{
|
{
|
||||||
int s, req;
|
int s, req;
|
||||||
vir_bytes ptr;
|
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;
|
req = m_in.svrctl_req;
|
||||||
ptr = (vir_bytes) m_in.svrctl_argp;
|
ptr = (vir_bytes) m_in.svrctl_argp;
|
||||||
|
|
||||||
@ -236,6 +243,7 @@ PUBLIC int do_svrctl()
|
|||||||
|
|
||||||
/* Control operations local to the PM. */
|
/* Control operations local to the PM. */
|
||||||
switch(req) {
|
switch(req) {
|
||||||
|
case MMSETPARAM:
|
||||||
case MMGETPARAM: {
|
case MMGETPARAM: {
|
||||||
struct sysgetenv sysgetenv;
|
struct sysgetenv sysgetenv;
|
||||||
char search_key[64];
|
char search_key[64];
|
||||||
@ -247,20 +255,52 @@ PUBLIC int do_svrctl()
|
|||||||
if (sys_datacopy(who, ptr, SELF, (vir_bytes) &sysgetenv,
|
if (sys_datacopy(who, ptr, SELF, (vir_bytes) &sysgetenv,
|
||||||
sizeof(sysgetenv)) != OK) return(EFAULT);
|
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 */
|
if (sysgetenv.keylen == 0) { /* copy all parameters */
|
||||||
val_start = monitor_params;
|
val_start = monitor_params;
|
||||||
val_len = sizeof(monitor_params);
|
val_len = sizeof(monitor_params);
|
||||||
}
|
}
|
||||||
else { /* lookup value for key */
|
else { /* lookup value for key */
|
||||||
|
int p;
|
||||||
/* Try to get a copy of the requested key. */
|
/* Try to get a copy of the requested key. */
|
||||||
if (sysgetenv.keylen > sizeof(search_key)) return(EINVAL);
|
if (sysgetenv.keylen > sizeof(search_key)) return(EINVAL);
|
||||||
if ((s = sys_datacopy(who, (vir_bytes) sysgetenv.key,
|
if ((s = sys_datacopy(who, (vir_bytes) sysgetenv.key,
|
||||||
SELF, (vir_bytes) search_key, sysgetenv.keylen)) != OK)
|
SELF, (vir_bytes) search_key, sysgetenv.keylen)) != OK)
|
||||||
return(s);
|
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';
|
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);
|
return(ESRCH);
|
||||||
val_len = strlen(val_start) + 1;
|
val_len = strlen(val_start) + 1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user