diff options
| author | rsc <rsc> | 2007-09-27 05:13:10 +0000 | 
|---|---|---|
| committer | rsc <rsc> | 2007-09-27 05:13:10 +0000 | 
| commit | 666f58c711eafbdccb8abfe530b935505ab6eaa6 (patch) | |
| tree | 07b6b693d5087b2237cceef262f0d934f2536cc3 | |
| parent | 90d975e9c8a540efb380435f0dfc1369bad684ae (diff) | |
| download | xv6-labs-666f58c711eafbdccb8abfe530b935505ab6eaa6.tar.gz xv6-labs-666f58c711eafbdccb8abfe530b935505ab6eaa6.tar.bz2 xv6-labs-666f58c711eafbdccb8abfe530b935505ab6eaa6.zip | |
believe it or not, this was working
the macro expansion of "char *cp;" turned into
char *(curproc[cpu()]);  which declares a dynamically
sized array of char* called curproc.
so then &cp == &(curproc[cpu()]) was actually a
stack variable as "expected".  it was one past the
end of the array, but the implicit alloca allocated
more than was necessary.
do not tell me that making cp a #define was a bad idea.
there are worse problems to fix.  more on that later.
| -rwxr-xr-x | dot-bochsrc | 8 | ||||
| -rw-r--r-- | sysfile.c | 12 | ||||
| -rw-r--r-- | usertests.c | 4 | 
3 files changed, 14 insertions, 10 deletions
| diff --git a/dot-bochsrc b/dot-bochsrc index bd249ce..bef6558 100755 --- a/dot-bochsrc +++ b/dot-bochsrc @@ -74,7 +74,8 @@  # now supported, but we still recommend to use the BIOS distributed with  # Bochs. Now the start address can be calculated from image size.  #======================================================================= -romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000 +#romimage: file=$BXSHARE/BIOS-bochs-latest +romimage: file=/home/rsc/pub/bochs/bios/BIOS-bochs-latest  #romimage: file=mybios.bin, address=0xfff80000 # 512k at memory top  #romimage: file=mybios.bin # calculate start address from image size @@ -107,7 +108,7 @@ romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000  #  650Mhz Athlon K-7 with Linux 2.4.4/egcs-2.91.66  2 to  2.5 Mips  #  400Mhz Pentium II with Linux 2.0.36/egcs-1.0.3   1 to  1.8 Mips  #======================================================================= -cpu: count=2, ips=10000000 +cpu: count=2, ips=10000000, quantum=1  #=======================================================================  # MEGS @@ -403,7 +404,7 @@ debug: action=ignore  #=======================================================================  #debugger_log: /dev/null  #debugger_log: debugger.out -debugger_log: - +debugger_log: bochsout.txt  #=======================================================================  # COM1, COM2, COM3, COM4: @@ -675,6 +676,7 @@ keyboard_mapping: enabled=0, map=  #   i440fxsupport: enabled=1, slot1=pcivga, slot2=ne2k  #=======================================================================  #i440fxsupport: enabled=1 +i440fxsupport: enabled=1  #=======================================================================  # USB1: @@ -49,11 +49,11 @@ sys_read(void)  {    struct file *f;    int n; -  char *cp; +  char *p; -  if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &cp, n) < 0) +  if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0)      return -1; -  return fileread(f, cp, n); +  return fileread(f, p, n);  }  int @@ -61,11 +61,11 @@ sys_write(void)  {    struct file *f;    int n; -  char *cp; +  char *p; -  if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &cp, n) < 0) +  if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argptr(1, &p, n) < 0)      return -1; -  return filewrite(f, cp, n); +  return filewrite(f, p, n);  }  int diff --git a/usertests.c b/usertests.c index 2b35b8f..9be2764 100644 --- a/usertests.c +++ b/usertests.c @@ -1234,7 +1234,9 @@ int  main(int argc, char *argv[])  {    printf(1, "usertests starting\n"); -   + +for(;;) concreate(); +    if(open("usertests.ran", 0) >= 0){      printf(1, "already ran user tests -- rebuild fs.img\n");      exit(); | 
