Pārlūkot izejas kodu

cvm: initialize memory with random garbage

This should help spot bugs due to bad initialization.
master
Virgil Dupras pirms 3 gadiem
vecāks
revīzija
ba8a9c2647
2 mainītis faili ar 16 papildinājumiem un 9 dzēšanām
  1. +8
    -2
      cvm/vm.c
  2. +8
    -7
      cvm/xcomp.fs

+ 8
- 2
cvm/vm.c Parādīt failu

@@ -1,3 +1,4 @@
#include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "vm.h" #include "vm.h"
@@ -284,8 +285,6 @@ VM* VM_init() {
return NULL; return NULL;
} }
fseek(blkfp, 0, SEEK_SET); fseek(blkfp, 0, SEEK_SET);
// initialize memory
memset(vm.mem, 0, 0x10000);
FILE *bfp = fopen(FBIN_PATH, "r"); FILE *bfp = fopen(FBIN_PATH, "r");
if (!bfp) { if (!bfp) {
fprintf(stderr, "Can't open forth.bin\n"); fprintf(stderr, "Can't open forth.bin\n");
@@ -298,6 +297,13 @@ VM* VM_init() {
c = getc(bfp); c = getc(bfp);
} }
fclose(bfp); fclose(bfp);
// initialize rest of memory with random data. Many, many bugs we've seen in
// Collapse OS were caused by bad initialization and weren't reproducable
// in CVM because it has a neat zeroed-out memory. Let's make bugs easier
// to spot.
while (i<0x10000) {
vm.mem[i++] = random();
}
vm.SP = SP_ADDR; vm.SP = SP_ADDR;
vm.RS = RS_ADDR; vm.RS = RS_ADDR;
vm.minSP = SP_ADDR; vm.minSP = SP_ADDR;


+ 8
- 7
cvm/xcomp.fs Parādīt failu

@@ -6,23 +6,24 @@ RS_ADDR 0x80 - CONSTANT SYSVARS
VARIABLE ORG VARIABLE ORG
CREATE BIN( 0 , CREATE BIN( 0 ,
: PC H@ ORG @ - ; : PC H@ ORG @ - ;
155 LOAD ( ALLOT0 )
262 LOAD ( xcomp ) 262 LOAD ( xcomp )
270 LOAD ( xcomp overrides ) 270 LOAD ( xcomp overrides )


H@ ORG ! H@ ORG !
ORG @ 0x0b + HERE !
0x0b ALLOT0
0 C, 0 C, ( EXIT ) 0 C, 0 C, ( EXIT )
ORG @ 0x23 + HERE !
0x16 ALLOT0
0 C, 0x05 C, ( (n) ) 0 C, 0x05 C, ( (n) )
ORG @ 0x2b + HERE !
0x6 ALLOT0
0 C, 0x06 C, ( (s) ) 0 C, 0x06 C, ( (s) )
ORG @ 0x33 + HERE !
0x6 ALLOT0
0 C, 0x04 C, ( 2>R ) 0 C, 0x04 C, ( 2>R )
ORG @ 0x3b + HERE !
0x6 ALLOT0
0 C, 0x01 C, ( (br) ) 0 C, 0x01 C, ( (br) )
ORG @ 0x3f + HERE !
0x2 ALLOT0
0 C, 0x02 C, ( (?br) ) 0 C, 0x02 C, ( (?br) )
ORG @ 0x43 + HERE !
0x2 ALLOT0
0 C, 0x03 C, ( (loop) ) 0 C, 0x03 C, ( (loop) )
( END OF STABLE ABI ) ( END OF STABLE ABI )
H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) H@ 4 + XCURRENT ! ( make next CODE have 0 prev field )


Notiek ielāde…
Atcelt
Saglabāt