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;