wok diff linld/stuff/src/LINLD.CPP @ rev 21984
linld: x86 support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Mon Oct 14 11:20:06 2019 +0200 (2019-10-14) |
parents | e93e6b4d565f |
children | a0dccc5d133d |
line diff
1.1 --- a/linld/stuff/src/LINLD.CPP Sun Aug 25 18:00:45 2019 +0200 1.2 +++ b/linld/stuff/src/LINLD.CPP Mon Oct 14 11:20:06 2019 +0200 1.3 @@ -5,9 +5,13 @@ 1.4 #include "crtl.h" 1.5 #include "common.h" 1.6 1.7 +const char* cmdline = "auto"; 1.8 const char* kernel_name = "bzImage"; 1.9 +#ifdef USE_ARGSTR 1.10 +const char* initrd_name = NULL; 1.11 +#else 1.12 const char* initrd_name; 1.13 -const char* cmdline = "auto"; 1.14 +#endif 1.15 u32 root_dev; 1.16 u32 vid_mode; // -3 = ask 1.17 // -2 = Extended VGA 1.18 @@ -21,6 +25,7 @@ 1.19 "LINLD [image=file] [initrd=files] [vga=mode] [root=num] [mem=max] [cl=cmdline]" NL 1.20 "vga mode: ask,extended,normal or dec/oct/hex number" NL 1.21 "-f force" NL 1.22 + "-64 for cpu64 only" NL 1.23 "Defaults:" NL 1.24 "\timage=bzImage" NL 1.25 "\tinitrd,vga,root=(void)" NL 1.26 @@ -50,31 +55,29 @@ 1.27 // Parse command line 1.28 #ifdef USE_ARGSTR 1.29 if (!argv[1]) syntax(); 1.30 - {for (;;) { 1.31 + for (;;) { 1.32 const char **clp = &cmdline; 1.33 - next: 1.34 argv++; 1.35 - if (!*argv) { 1.36 + if (!*argv) goto boot; 1.37 + if ((*(u16 *)*argv|2) == 0x362F) { // -64 /64 1.38 + if (cpuhaslm() == 0) exit(); 1.39 + } 1.40 + if ((*(u16 *)*argv|0x2002) == 0x662F) { // -F /f 1.41 + skip_alloc++; 1.42 + } 1.43 + else if (argstr(*argv,"cl|image|initrd",clp) != -1); 1.44 + else if (fileexist(*argv) != -1) 1.45 + kernel_name=*argv; 1.46 + else if (argnum(*argv,"root|vga|mem|-b",&root_dev) != -1); 1.47 + else { 1.48 + *clp = (const char *) buf_cmdline + 1; 1.49 + strcatb((const char *) buf_cmdline,*argv); 1.50 + boot: 1.51 puts(*clp); 1.52 set_cmdline(*clp); 1.53 puts(load_kernel()); 1.54 load_initrd(); 1.55 boot_kernel(); 1.56 - } 1.57 - if ((*(u16 *)*argv|0x2002) == 0x662F) { // -F /f 1.58 - skip_alloc++; 1.59 - goto next; 1.60 - } 1.61 - if (argstr(*argv,"cl|image|initrd",clp) != -1); 1.62 - else if (fileexist(*argv) != -1) 1.63 - kernel_name=*argv; 1.64 - else if (*argv) { 1.65 - argnum(*argv,"root|vga|mem|-b",&root_dev); 1.66 - *clp = (const char *) buf_cmdline + 1; 1.67 - strcatb((const char *) buf_cmdline,*argv); 1.68 - } 1.69 - else 1.70 - break; 1.71 } 1.72 } 1.73 #else 1.74 @@ -96,6 +99,9 @@ 1.75 *(u16*)&vid_mode = (u16)strtol(s+7); // support normal, extended & ask 1.76 } 1.77 else switch (*(u16 *)s|0x2002) { 1.78 + case 0x362F: // -64 /64 1.79 + if (cpuhaslm() == 0) exit(); 1.80 + goto next; 1.81 case 0x662F: // -F /f 1.82 skip_alloc++; 1.83 goto next;