]> git.sur5r.net Git - u-boot/blobdiff - common/image.c
mvbc_p board: fix most build warnings.
[u-boot] / common / image.c
index e838f65b69c004c447df9af67d8095272bb8dcfc..535c302d4efa3363573b569603af4e50546b6614 100644 (file)
@@ -23,8 +23,6 @@
  * MA 02111-1307 USA
  */
 
-#define DEBUG
-
 #ifndef USE_HOSTCC
 #include <common.h>
 #include <watchdog.h>
@@ -54,6 +52,7 @@
 #endif
 
 #if defined(CONFIG_FIT)
+#include <u-boot/md5.h>
 #include <sha1.h>
 
 static int fit_check_ramdisk (const void *fit, int os_noffset,
@@ -70,6 +69,7 @@ static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
                                                int verify);
 #else
 #include "mkimage.h"
+#include <u-boot/md5.h>
 #include <time.h>
 #include <image.h>
 #endif /* !USE_HOSTCC*/
@@ -92,6 +92,7 @@ static table_entry_t uimage_arch[] = {
        {       IH_ARCH_MIPS64,         "mips64",       "MIPS 64 Bit",  },
        {       IH_ARCH_NIOS,           "nios",         "NIOS",         },
        {       IH_ARCH_NIOS2,          "nios2",        "NIOS II",      },
+       {       IH_ARCH_PPC,            "powerpc",      "PowerPC",      },
        {       IH_ARCH_PPC,            "ppc",          "PowerPC",      },
        {       IH_ARCH_S390,           "s390",         "IBM S390",     },
        {       IH_ARCH_SH,             "sh",           "SuperH",       },
@@ -154,7 +155,8 @@ static table_entry_t uimage_comp[] = {
        {       -1,             "",             "",                     },
 };
 
-unsigned long crc32 (unsigned long, const unsigned char *, unsigned int);
+uint32_t crc32 (uint32_t, const unsigned char *, uint);
+uint32_t crc32_wd (uint32_t, const unsigned char *, uint, uint);
 static void genimg_print_size (uint32_t size);
 #if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) || defined(USE_HOSTCC)
 static void genimg_print_time (time_t timestamp);
@@ -182,39 +184,11 @@ int image_check_dcrc (image_header_t *hdr)
 {
        ulong data = image_get_data (hdr);
        ulong len = image_get_data_size (hdr);
-       ulong dcrc = crc32 (0, (unsigned char *)data, len);
+       ulong dcrc = crc32_wd (0, (unsigned char *)data, len, CHUNKSZ_CRC32);
 
        return (dcrc == image_get_dcrc (hdr));
 }
 
-#ifndef USE_HOSTCC
-int image_check_dcrc_wd (image_header_t *hdr, ulong chunksz)
-{
-       ulong dcrc = 0;
-       ulong len = image_get_data_size (hdr);
-       ulong data = image_get_data (hdr);
-
-#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
-       ulong cdata = data;
-       ulong edata = cdata + len;
-
-       while (cdata < edata) {
-               ulong chunk = edata - cdata;
-
-               if (chunk > chunksz)
-                       chunk = chunksz;
-               dcrc = crc32 (dcrc, (unsigned char *)cdata, chunk);
-               cdata += chunk;
-
-               WATCHDOG_RESET ();
-       }
-#else
-       dcrc = crc32 (0, (unsigned char *)data, len);
-#endif
-
-       return (dcrc == image_get_dcrc (hdr));
-}
-#endif /* !USE_HOSTCC */
 
 /**
  * image_multi_count - get component (sub-image) count
@@ -267,7 +241,7 @@ void image_multi_getimg (image_header_t *hdr, ulong idx,
 {
        int i;
        uint32_t *size;
-       ulong offset, tail, count, img_data;
+       ulong offset, count, img_data;
 
        /* get number of component */
        count = image_multi_count (hdr);
@@ -283,19 +257,15 @@ void image_multi_getimg (image_header_t *hdr, ulong idx,
        if (idx < count) {
                *len = uimage_to_cpu (size[idx]);
                offset = 0;
-               tail = 0;
 
                /* go over all indices preceding requested component idx */
                for (i = 0; i < idx; i++) {
-                       /* add up i-th component size */
-                       offset += uimage_to_cpu (size[i]);
-
-                       /* add up alignment for i-th component */
-                       tail += (4 - uimage_to_cpu (size[i]) % 4);
+                       /* add up i-th component size, rounding up to 4 bytes */
+                       offset += (uimage_to_cpu (size[i]) + 3) & ~3 ;
                }
 
                /* calculate idx-th component data address */
-               *data = img_data + offset + tail;
+               *data = img_data + offset;
        } else {
                *len = 0;
                *data = 0;
@@ -315,19 +285,27 @@ static void image_print_type (image_header_t *hdr)
 }
 
 /**
- * __image_print_contents - prints out the contents of the legacy format image
+ * image_print_contents - prints out the contents of the legacy format image
  * @hdr: pointer to the legacy format image header
  * @p: pointer to prefix string
  *
- * __image_print_contents() formats a multi line legacy image contents description.
+ * image_print_contents() formats a multi line legacy image contents description.
  * The routine prints out all header fields followed by the size/offset data
  * for MULTI/SCRIPT images.
  *
  * returns:
  *     no returned results
  */
-static void __image_print_contents (image_header_t *hdr, const char *p)
+void image_print_contents (image_header_t *hdr)
 {
+       const char *p;
+
+#ifdef USE_HOSTCC
+       p = "";
+#else
+       p = "   ";
+#endif
+
        printf ("%sImage Name:   %.*s\n", p, IH_NMLEN, image_get_name (hdr));
 #if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) || defined(USE_HOSTCC)
        printf ("%sCreated:      ", p);
@@ -365,15 +343,6 @@ static void __image_print_contents (image_header_t *hdr, const char *p)
        }
 }
 
-inline void image_print_contents (image_header_t *hdr)
-{
-       __image_print_contents (hdr, "   ");
-}
-
-inline void image_print_contents_noindent (image_header_t *hdr)
-{
-       __image_print_contents (hdr, "");
-}
 
 #ifndef USE_HOSTCC
 /**
@@ -397,10 +366,7 @@ inline void image_print_contents_noindent (image_header_t *hdr)
 static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
                                                int verify)
 {
-       image_header_t *rd_hdr;
-
-       show_boot_progress (9);
-       rd_hdr = (image_header_t *)rd_addr;
+       image_header_t *rd_hdr = (image_header_t *)rd_addr;
 
        if (!image_check_magic (rd_hdr)) {
                puts ("Bad Magic Number\n");
@@ -419,7 +385,7 @@ static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
 
        if (verify) {
                puts("   Verifying Checksum ... ");
-               if (!image_check_dcrc_wd (rd_hdr, CHUNKSZ)) {
+               if (!image_check_dcrc (rd_hdr)) {
                        puts ("Bad Data CRC\n");
                        show_boot_progress (-12);
                        return NULL;
@@ -446,15 +412,9 @@ static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,
 /* Shared dual-format routines */
 /*****************************************************************************/
 #ifndef USE_HOSTCC
-int getenv_verify (void)
+int getenv_yesno (char *var)
 {
-       char *s = getenv ("verify");
-       return (s && (*s == 'n')) ? 0 : 1;
-}
-
-int getenv_autostart (void)
-{
-       char *s = getenv ("autostart");
+       char *s = getenv (var);
        return (s && (*s == 'n')) ? 0 : 1;
 }
 
@@ -466,22 +426,33 @@ ulong getenv_bootm_low(void)
                return tmp;
        }
 
-#ifdef CFG_SDRAM_BASE
+#if defined(CFG_SDRAM_BASE)
        return CFG_SDRAM_BASE;
+#elif defined(CONFIG_ARM)
+       return gd->bd->bi_dram[0].start;
 #else
        return 0;
 #endif
 }
 
-ulong getenv_bootm_size(void)
+phys_size_t getenv_bootm_size(void)
 {
        char *s = getenv ("bootm_size");
        if (s) {
-               ulong tmp = simple_strtoul (s, NULL, 16);
+               phys_size_t tmp;
+#ifdef CFG_64BIT_STRTOUL
+               tmp = (phys_size_t)simple_strtoull (s, NULL, 16);
+#else
+               tmp = (phys_size_t)simple_strtoul (s, NULL, 16);
+#endif
                return tmp;
        }
 
+#if defined(CONFIG_ARM)
+       return gd->bd->bi_dram[0].size;
+#else
        return gd->bd->bi_memsize;
+#endif
 }
 
 void memmove_wd (void *to, void *from, size_t len, ulong chunksz)
@@ -740,6 +711,26 @@ ulong genimg_get_image (ulong img_addr)
        return ram_addr;
 }
 
+/**
+ * fit_has_config - check if there is a valid FIT configuration
+ * @images: pointer to the bootm command headers structure
+ *
+ * fit_has_config() checks if there is a FIT configuration in use
+ * (if FTI support is present).
+ *
+ * returns:
+ *     0, no FIT support or no configuration found
+ *     1, configuration found
+ */
+int genimg_has_config (bootm_headers_t *images)
+{
+#if defined(CONFIG_FIT)
+       if (images->fit_uname_cfg)
+               return 1;
+#endif
+       return 0;
+}
+
 /**
  * boot_get_ramdisk - main ramdisk handling routine
  * @argc: command argument count
@@ -774,7 +765,7 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,
        const char      *fit_uname_ramdisk = NULL;
        ulong           default_addr;
        int             rd_noffset;
-       int             conf_noffset;
+       int             cfg_noffset;
        const void      *data;
        size_t          size;
 #endif
@@ -789,33 +780,63 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,
        if ((argc >= 3) && (strcmp(argv[2], "-") ==  0)) {
                debug ("## Skipping init Ramdisk\n");
                rd_len = rd_data = 0;
-       } else if (argc >= 3) {
+       } else if (argc >= 3 || genimg_has_config (images)) {
 #if defined(CONFIG_FIT)
-               /*
-                * If the init ramdisk comes from the FIT image and the FIT image
-                * address is omitted in the command line argument, try to use
-                * os FIT image address or default load address.
-                */
-               if (images->fit_uname_os)
-                       default_addr = (ulong)images->fit_hdr_os;
-               else
-                       default_addr = load_addr;
-
-               if (fit_parse_conf (argv[2], default_addr,
-                                       &rd_addr, &fit_uname_config)) {
-                       debug ("*  ramdisk: config '%s' from image at 0x%08lx\n",
-                                       fit_uname_config, rd_addr);
-               } else if (fit_parse_subimage (argv[2], default_addr,
-                                       &rd_addr, &fit_uname_ramdisk)) {
-                       debug ("*  ramdisk: subimage '%s' from image at 0x%08lx\n",
-                                       fit_uname_ramdisk, rd_addr);
-               } else
+               if (argc >= 3) {
+                       /*
+                        * If the init ramdisk comes from the FIT image and
+                        * the FIT image address is omitted in the command
+                        * line argument, try to use os FIT image address or
+                        * default load address.
+                        */
+                       if (images->fit_uname_os)
+                               default_addr = (ulong)images->fit_hdr_os;
+                       else
+                               default_addr = load_addr;
+
+                       if (fit_parse_conf (argv[2], default_addr,
+                                               &rd_addr, &fit_uname_config)) {
+                               debug ("*  ramdisk: config '%s' from image at 0x%08lx\n",
+                                               fit_uname_config, rd_addr);
+                       } else if (fit_parse_subimage (argv[2], default_addr,
+                                               &rd_addr, &fit_uname_ramdisk)) {
+                               debug ("*  ramdisk: subimage '%s' from image at 0x%08lx\n",
+                                               fit_uname_ramdisk, rd_addr);
+                       } else
 #endif
-               {
-                       rd_addr = simple_strtoul(argv[2], NULL, 16);
-                       debug ("*  ramdisk: cmdline image address = 0x%08lx\n",
-                                       rd_addr);
+                       {
+                               rd_addr = simple_strtoul(argv[2], NULL, 16);
+                               debug ("*  ramdisk: cmdline image address = 0x%08lx\n",
+                                               rd_addr);
+                       }
+#if defined(CONFIG_FIT)
+               } else {
+                       /* use FIT configuration provided in first bootm
+                        * command argument
+                        */
+                       rd_addr = (ulong)images->fit_hdr_os;
+                       fit_uname_config = images->fit_uname_cfg;
+                       debug ("*  ramdisk: using config '%s' from image at 0x%08lx\n",
+                                       fit_uname_config, rd_addr);
+
+                       /*
+                        * Check whether configuration has ramdisk defined,
+                        * if not, don't try to use it, quit silently.
+                        */
+                       fit_hdr = (void *)rd_addr;
+                       cfg_noffset = fit_conf_get_node (fit_hdr, fit_uname_config);
+                       if (cfg_noffset < 0) {
+                               debug ("*  ramdisk: no such config\n");
+                               return 1;
+                       }
+
+                       rd_noffset = fit_conf_get_ramdisk_node (fit_hdr, cfg_noffset);
+                       if (rd_noffset < 0) {
+                               debug ("*  ramdisk: no ramdisk in config\n");
+                               return 1;
+                       }
                }
+#endif
 
                /* copy from dataflash if needed */
                rd_addr = genimg_get_image (rd_addr);
@@ -830,6 +851,7 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,
                        printf ("## Loading init Ramdisk from Legacy "
                                        "Image at %08lx ...\n", rd_addr);
 
+                       show_boot_progress (9);
                        rd_hdr = image_get_ramdisk (rd_addr, arch,
                                                        images->verify);
 
@@ -846,10 +868,13 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,
                        printf ("## Loading init Ramdisk from FIT "
                                        "Image at %08lx ...\n", rd_addr);
 
+                       show_boot_progress (120);
                        if (!fit_check_format (fit_hdr)) {
                                puts ("Bad FIT ramdisk image format!\n");
-                               return 0;
+                               show_boot_progress (-120);
+                               return 1;
                        }
+                       show_boot_progress (121);
 
                        if (!fit_uname_ramdisk) {
                                /*
@@ -857,37 +882,52 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,
                                 * node first. If config unit node name is NULL
                                 * fit_conf_get_node() will try to find default config node
                                 */
-                               conf_noffset = fit_conf_get_node (fit_hdr, fit_uname_config);
-                               if (conf_noffset < 0)
-                                       return 0;
-
-                               rd_noffset = fit_conf_get_ramdisk_node (fit_hdr, conf_noffset);
+                               show_boot_progress (122);
+                               cfg_noffset = fit_conf_get_node (fit_hdr, fit_uname_config);
+                               if (cfg_noffset < 0) {
+                                       puts ("Could not find configuration node\n");
+                                       show_boot_progress (-122);
+                                       return 1;
+                               }
+                               fit_uname_config = fdt_get_name (fit_hdr, cfg_noffset, NULL);
+                               printf ("   Using '%s' configuration\n", fit_uname_config);
+
+                               rd_noffset = fit_conf_get_ramdisk_node (fit_hdr, cfg_noffset);
                                fit_uname_ramdisk = fit_get_name (fit_hdr, rd_noffset, NULL);
                        } else {
                                /* get ramdisk component image node offset */
+                               show_boot_progress (123);
                                rd_noffset = fit_image_get_node (fit_hdr, fit_uname_ramdisk);
                        }
-                       if (rd_noffset < 0)
-                               return 0;
+                       if (rd_noffset < 0) {
+                               puts ("Could not find subimage node\n");
+                               show_boot_progress (-124);
+                               return 1;
+                       }
 
                        printf ("   Trying '%s' ramdisk subimage\n", fit_uname_ramdisk);
 
+                       show_boot_progress (125);
                        if (!fit_check_ramdisk (fit_hdr, rd_noffset, arch, images->verify))
-                               return 0;
+                               return 1;
 
                        /* get ramdisk image data address and length */
                        if (fit_image_get_data (fit_hdr, rd_noffset, &data, &size)) {
                                puts ("Could not find ramdisk subimage data!\n");
-                               return 0;
+                               show_boot_progress (-127);
+                               return 1;
                        }
+                       show_boot_progress (128);
 
                        rd_data = (ulong)data;
                        rd_len = size;
 
                        if (fit_image_get_load (fit_hdr, rd_noffset, &rd_load)) {
                                puts ("Can't get ramdisk subimage load address!\n");
-                               return 0;
+                               show_boot_progress (-129);
+                               return 1;
                        }
+                       show_boot_progress (129);
 
                        images->fit_hdr_rd = fit_hdr;
                        images->fit_uname_rd = fit_uname_ramdisk;
@@ -910,7 +950,7 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,
 #endif /* CONFIG_B2 || CONFIG_EVB4510 || CONFIG_ARMADILLO */
 
        } else if (images->legacy_hdr_valid &&
-                       image_check_type (images->legacy_hdr_os, IH_TYPE_MULTI)) {
+                       image_check_type (&images->legacy_hdr_os_copy, IH_TYPE_MULTI)) {
                /*
                 * Now check if we have a legacy mult-component image,
                 * get second entry data start address and len.
@@ -941,7 +981,7 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,
        return 0;
 }
 
-#if defined(CONFIG_PPC) || defined(CONFIG_M68K)
+#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_SPARC)
 /**
  * boot_ramdisk_high - relocate init ramdisk
  * @lmb: pointer to lmb handle, will be used for memory mgmt
@@ -982,6 +1022,12 @@ int boot_ramdisk_high (struct lmb *lmb, ulong rd_data, ulong rd_len,
                initrd_high = ~0;
        }
 
+
+#ifdef CONFIG_LOGBUFFER
+       /* Prevent initrd from overwriting logbuffer */
+       lmb_reserve(lmb, logbuffer_base() - LOGBUFF_OVERHEAD, LOGBUFF_RESERVE);
+#endif
+
        debug ("## initrd_high = 0x%08lx, copy_to_ram = %d\n",
                        initrd_high, initrd_copy_to_ram);
 
@@ -993,9 +1039,9 @@ int boot_ramdisk_high (struct lmb *lmb, ulong rd_data, ulong rd_len,
                        lmb_reserve(lmb, rd_data, rd_len);
                } else {
                        if (initrd_high)
-                               *initrd_start = lmb_alloc_base (lmb, rd_len, 0x1000, initrd_high);
+                               *initrd_start = (ulong)lmb_alloc_base (lmb, rd_len, 0x1000, initrd_high);
                        else
-                               *initrd_start = lmb_alloc (lmb, rd_len, 0x1000);
+                               *initrd_start = (ulong)lmb_alloc (lmb, rd_len, 0x1000);
 
                        if (*initrd_start == 0) {
                                puts ("ramdisk - allocation error\n");
@@ -1048,7 +1094,7 @@ int boot_get_cmdline (struct lmb *lmb, ulong *cmd_start, ulong *cmd_end,
        char *cmdline;
        char *s;
 
-       cmdline = (char *)lmb_alloc_base(lmb, CFG_BARGSIZE, 0xf,
+       cmdline = (char *)(ulong)lmb_alloc_base(lmb, CFG_BARGSIZE, 0xf,
                                         CFG_BOOTMAPSZ + bootmap_base);
 
        if (cmdline == NULL)
@@ -1084,7 +1130,7 @@ int boot_get_cmdline (struct lmb *lmb, ulong *cmd_start, ulong *cmd_end,
  */
 int boot_get_kbd (struct lmb *lmb, bd_t **kbd, ulong bootmap_base)
 {
-       *kbd = (bd_t *)lmb_alloc_base(lmb, sizeof(bd_t), 0xf,
+       *kbd = (bd_t *)(ulong)lmb_alloc_base(lmb, sizeof(bd_t), 0xf,
                                      CFG_BOOTMAPSZ + bootmap_base);
        if (*kbd == NULL)
                return -1;
@@ -1192,18 +1238,18 @@ static void fit_get_debug (const void *fit, int noffset,
 }
 
 /**
- * __fit_print_contents - prints out the contents of the FIT format image
+ * fit_print_contents - prints out the contents of the FIT format image
  * @fit: pointer to the FIT format image header
  * @p: pointer to prefix string
  *
- * __fit_print_contents() formats a multi line FIT image contents description.
+ * fit_print_contents() formats a multi line FIT image contents description.
  * The routine prints out FIT image properties (root node level) follwed by
  * the details of each component image.
  *
  * returns:
  *     no returned results
  */
-static void __fit_print_contents (const void *fit, const char *p)
+void fit_print_contents (const void *fit)
 {
        char *desc;
        char *uname;
@@ -1213,10 +1259,17 @@ static void __fit_print_contents (const void *fit, const char *p)
        int ndepth;
        int count = 0;
        int ret;
+       const char *p;
 #if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) || defined(USE_HOSTCC)
        time_t timestamp;
 #endif
 
+#ifdef USE_HOSTCC
+       p = "";
+#else
+       p = "   ";
+#endif
+
        /* Root node properties */
        ret = fit_get_desc (fit, 0, &desc);
        printf ("%sFIT description: ", p);
@@ -1288,16 +1341,6 @@ static void __fit_print_contents (const void *fit, const char *p)
        }
 }
 
-inline void fit_print_contents (const void *fit)
-{
-       __fit_print_contents (fit, "   ");
-}
-
-inline void fit_print_contents_noindent (const void *fit)
-{
-       __fit_print_contents (fit, "");
-}
-
 /**
  * fit_image_print - prints out the FIT component image details
  * @fit: pointer to the FIT format image header
@@ -1860,16 +1903,17 @@ static int calculate_hash (const void *data, int data_len, const char *algo,
                        uint8_t *value, int *value_len)
 {
        if (strcmp (algo, "crc32") == 0 ) {
-               *((uint32_t *)value) = crc32 (0, data, data_len);
+               *((uint32_t *)value) = crc32_wd (0, data, data_len,
+                                                       CHUNKSZ_CRC32);
                *((uint32_t *)value) = cpu_to_uimage (*((uint32_t *)value));
                *value_len = 4;
        } else if (strcmp (algo, "sha1") == 0 ) {
-               sha1_csum ((unsigned char *) data, data_len,
-                               (unsigned char *) value);
+               sha1_csum_wd ((unsigned char *) data, data_len,
+                               (unsigned char *) value, CHUNKSZ_SHA1);
                *value_len = 20;
        } else if (strcmp (algo, "md5") == 0 ) {
-               printf ("MD5 not supported\n");
-               *value_len = 0;
+               md5_wd ((unsigned char *)data, data_len, value, CHUNKSZ_MD5);
+               *value_len = 16;
        } else {
                debug ("Unsupported hash alogrithm\n");
                return -1;
@@ -2382,7 +2426,7 @@ int fit_conf_get_fdt_node (const void *fit, int noffset)
 /**
  * fit_conf_print - prints out the FIT configuration details
  * @fit: pointer to the FIT format image header
- * @conf_noffset: offset of the configuration node
+ * @noffset: offset of the configuration node
  * @p: pointer to prefix string
  *
  * fit_conf_print() lists all mandatory properies for the processed
@@ -2445,19 +2489,23 @@ static int fit_check_ramdisk (const void *fit, int rd_noffset, uint8_t arch, int
                puts ("   Verifying Hash Integrity ... ");
                if (!fit_image_check_hashes (fit, rd_noffset)) {
                        puts ("Bad Data Hash\n");
+                       show_boot_progress (-125);
                        return 0;
                }
                puts ("OK\n");
        }
 
+       show_boot_progress (126);
        if (!fit_image_check_os (fit, rd_noffset, IH_OS_LINUX) ||
            !fit_image_check_arch (fit, rd_noffset, arch) ||
            !fit_image_check_type (fit, rd_noffset, IH_TYPE_RAMDISK)) {
                printf ("No Linux %s Ramdisk Image\n",
                                genimg_get_arch_name(arch));
+               show_boot_progress (-126);
                return 0;
        }
 
+       show_boot_progress (127);
        return 1;
 }
 #endif /* USE_HOSTCC */