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 = ± 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 = ± 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;