Diff for /gforth/engine/main.c between versions 1.33 and 1.34

version 1.33, 2000/04/29 13:07:35 version 1.34, 2000/05/30 09:34:22
Line 219  void after_alloc(Address r, Cell size) Line 219  void after_alloc(Address r, Cell size)
   }    }
 }  }
   
 Address my_alloc(Cell size)  #ifndef MAP_FAILED
   #define MAP_FAILED ((Address) -1)
   #endif
   #ifndef MAP_FILE
   # define MAP_FILE 0
   #endif
   #ifndef MAP_PRIVATE
   # define MAP_PRIVATE 0
   #endif
   
   #if defined(HAVE_MMAP)
   static Address alloc_mmap(Cell size)
 {  {
 #if HAVE_MMAP  
   Address r;    Address r;
   
 #if defined(MAP_ANON)  #if defined(MAP_ANON)
   if (debug)    if (debug)
     fprintf(stderr,"try mmap($%lx, $%lx, ..., MAP_ANON, ...); ", (long)next_address, (long)size);      fprintf(stderr,"try mmap($%lx, $%lx, ..., MAP_ANON, ...); ", (long)next_address, (long)size);
   r=mmap(next_address, size, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);    r = mmap(next_address, size, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
 #else /* !defined(MAP_ANON) */  #else /* !defined(MAP_ANON) */
   /* Ultrix (at least) does not define MAP_FILE and MAP_PRIVATE (both are    /* Ultrix (at least) does not define MAP_FILE and MAP_PRIVATE (both are
      apparently defaults) */       apparently defaults) */
 #ifndef MAP_FILE  
 # define MAP_FILE 0  
 #endif  
 #ifndef MAP_PRIVATE  
 # define MAP_PRIVATE 0  
 #endif  
   static int dev_zero=-1;    static int dev_zero=-1;
   
   if (dev_zero == -1)    if (dev_zero == -1)
     dev_zero = open("/dev/zero", O_RDONLY);      dev_zero = open("/dev/zero", O_RDONLY);
   if (dev_zero == -1) {    if (dev_zero == -1) {
     r = (Address)-1;      r = MAP_FAILED;
     if (debug)      if (debug)
       fprintf(stderr, "open(\"/dev/zero\"...) failed (%s), no mmap; ",         fprintf(stderr, "open(\"/dev/zero\"...) failed (%s), no mmap; ", 
               strerror(errno));                strerror(errno));
Line 252  Address my_alloc(Cell size) Line 256  Address my_alloc(Cell size)
     r=mmap(next_address, size, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_FILE|MAP_PRIVATE, dev_zero, 0);      r=mmap(next_address, size, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_FILE|MAP_PRIVATE, dev_zero, 0);
   }    }
 #endif /* !defined(MAP_ANON) */  #endif /* !defined(MAP_ANON) */
   after_alloc(r,size);    after_alloc(r, size);
   if (r!=(Address)-1)    return r;  
   }
   #endif
   
   Address my_alloc(Cell size)
   {
   #if HAVE_MMAP
     Address r;
   
     r=alloc_mmap(size);
     if (r!=MAP_FAILED)
     return r;      return r;
 #endif /* HAVE_MMAP */  #endif /* HAVE_MMAP */
   /* use malloc as fallback */    /* use malloc as fallback */
Line 269  Address my_alloc(Cell size) Line 283  Address my_alloc(Cell size)
 #define dict_alloc(size) my_alloc(size)  #define dict_alloc(size) my_alloc(size)
 #endif  #endif
   
 Address dict_alloc_read(FILE *file, Cell size, Cell offset)  Address dict_alloc_read(FILE *file, Cell imagesize, Cell dictsize, Cell offset)
 {  {
   Address image = (Address) -1;    Address image = MAP_FAILED;
   
 #ifndef mips_dict_alloc  #if defined(HAVE_MMAP) && !defined(mips_dict_alloc)
   if (offset==0) {    if (offset==0) {
       image=alloc_mmap(dictsize);
     if (debug)      if (debug)
       fprintf(stderr,"try mmap(0, $%lx, ..., MAP_FILE, imagefile, 0); ", (long)size);        fprintf(stderr,"try mmap($%lx, $%lx, ..., MAP_FIXED|MAP_FILE, imagefile, 0); ", (long)image, (long)imagesize);
     image = mmap(0, size, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_FILE|MAP_PRIVATE, fileno(file), 0);      image = mmap(image, imagesize, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_FIXED|MAP_FILE|MAP_PRIVATE, fileno(file), 0);
     after_alloc(image,size);      after_alloc(image,dictsize);
   }    }
 #endif /* defined(mips_dict_alloc) */  #endif /* defined(MAP_ANON) && !defined(mips_dict_alloc) */
   if (image == (Address)-1) {    if (image == MAP_FAILED) {
     image = dict_alloc(size+offset)+offset;      image = dict_alloc(dictsize+offset)+offset;
     rewind(file);  /* fseek(imagefile,0L,SEEK_SET); */      rewind(file);  /* fseek(imagefile,0L,SEEK_SET); */
     fread(image, 1, size, file);      fread(image, 1, imagesize, file);
   }    }
   return image;    return image;
 }  }
Line 459  Address loader(FILE *imagefile, char* fi Line 474  Address loader(FILE *imagefile, char* fi
   if (debug)    if (debug)
     fprintf(stderr,"pagesize=%ld\n",(unsigned long) pagesize);      fprintf(stderr,"pagesize=%ld\n",(unsigned long) pagesize);
   
   image = dict_alloc_read(imagefile, preamblesize+dictsize, data_offset);    image = dict_alloc_read(imagefile, preamblesize+header.image_size,
                             preamblesize+dictsize, data_offset);
   imp=image+preamblesize;    imp=image+preamblesize;
   if (clear_dictionary)    if (clear_dictionary)
     memset(imp+header.image_size, 0, dictsize-header.image_size);      memset(imp+header.image_size, 0, dictsize-header.image_size);

Removed from v.1.33  
changed lines
  Added in v.1.34


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>