wok-6.x diff linld/stuff/src/LOAD.CPP @ rev 20632

linld: 32 bits lseeks for tazboot
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Jan 05 17:23:23 2019 +0100 (2019-01-05)
parents 16d1d23aefee
children 57d97be431f4
line diff
     1.1 --- a/linld/stuff/src/LOAD.CPP	Sat Dec 01 11:07:58 2018 +0100
     1.2 +++ b/linld/stuff/src/LOAD.CPP	Sat Jan 05 17:23:23 2019 +0100
     1.3 @@ -115,6 +115,7 @@
     1.4  static u8 pm_high;	// @ = @rm_size + 2, see JUMP.ASM
     1.5  static u8* rm_buf;	// @ = @rm_size + 3, see JUMP.ASM
     1.6  u32 base_himem = _1m+_64k;
     1.7 +struct image_himem imgs[2];
     1.8  
     1.9  // register value to launch the kernel real mode code
    1.10  #ifdef NO386
    1.11 @@ -129,8 +130,15 @@
    1.12  char* load_kernel() {
    1.13  
    1.14      struct	image_himem *m = &pm;
    1.15 +#define _base_himem	(((u32*)(m))[-1])
    1.16 +#define _rm_buf(m)	(((u8**)(m))[-3])
    1.17 +#define _pm_high	(((u8*)(m))[-7])
    1.18 +#define _rm_size	(*(u16*)((u8*)(m)-9))
    1.19  #ifdef NO386
    1.20 +#define _csip		(*(u32*)(m+2))
    1.21      *((u16 *)&csip+1)=topseg()+0x20;
    1.22 +#else
    1.23 +#define _csip		csip
    1.24  #endif
    1.25      // Open kernel, read first kb, check it
    1.26      m->errmsg = kernel_file_error;
    1.27 @@ -139,7 +147,7 @@
    1.28      char *version_string;
    1.29    {
    1.30      struct kernelparams_t *kernelparams;
    1.31 -    kernelparams = &(((first1k_t*) (rm_buf = (u8 *)malloc_or_die(_32k)))->params);
    1.32 +    kernelparams = &(((first1k_t*) (_rm_buf(m) = (u8 *)malloc_or_die(_32k)))->params);
    1.33  #define first1k		((first1k_t*)((u8 *)kernelparams-0x1F1))
    1.34  
    1.35  do {
    1.36 @@ -150,7 +158,7 @@
    1.37      if(kernelparams->setup_sects == 0) {
    1.38  #if 1
    1.39          if(* (int *) &first1k->pad10[0x3F-0x24] == 0x3AE8) {
    1.40 -            csip+=0xFFE00042;
    1.41 +            _csip+=0xFFE00042;
    1.42          }
    1.43          else
    1.44  #endif
    1.45 @@ -159,12 +167,12 @@
    1.46      if((kernelparams->setup_sects)>=(_32k/512) || // 0th sector not counted
    1.47  	 kernelparams->boot_flag != 0xAA55)
    1.48          die("Not a kernel");
    1.49 -    heap_top = rm_buf+(rm_size=0x200*(kernelparams->setup_sects+1));  // <*>
    1.50 -    m->size -= rm_size;
    1.51 -    m->chunk_size -= rm_size;
    1.52 +    heap_top = _rm_buf(m)+(_rm_size=0x200*(kernelparams->setup_sects+1));  // <*>
    1.53 +    m->size -= _rm_size;
    1.54 +    m->chunk_size -= _rm_size;
    1.55  
    1.56      // Read remaining rm loader
    1.57 -    if (read(m->fd, rm_buf, rm_size) == rm_size) break;
    1.58 +    if (read(m->fd, rm_buf, _rm_size) == _rm_size) break;
    1.59   }
    1.60          die(kernel_file_error);
    1.61  } while (0);
    1.62 @@ -220,8 +228,8 @@
    1.63    {
    1.64      struct image_himem *m = &pm;
    1.65      if((u16)(((m->fallback=(u32((u16(_CS)+0x1FFF)&0xF000)<<4))+m->size)>>4) >
    1.66 -		 topseg() || pm_high) {
    1.67 -        m->fallback = base_himem;
    1.68 +		 topseg() || _pm_high) {
    1.69 +        m->fallback = _base_himem;
    1.70      }
    1.71  
    1.72      load_image(m);
    1.73 @@ -251,7 +259,7 @@
    1.74      }
    1.75  
    1.76      load_image(m);
    1.77 -    struct kernelparams_t *kernelparams = &(((first1k_t*) rm_buf)->params);
    1.78 +    struct kernelparams_t *kernelparams = &(((first1k_t*) _rm_buf(m-1))->params);
    1.79      if(kernelparams->header == HdrS) {
    1.80          kernelparams->initrd_buf  = m->fallback;
    1.81          kernelparams->initrd_size = m->size;