diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping index 2146d9cb..2ab842e6 100644 --- a/src/Makefile.housekeeping +++ b/src/Makefile.housekeeping @@ -286,10 +286,6 @@ CFLAGS += $(EXTRA_CFLAGS) ASFLAGS += $(EXTRA_ASFLAGS) LDFLAGS += $(EXTRA_LDFLAGS) -# Embedded image(s), or default if not set -# -EMBEDDED_IMAGE = image/default.gpxe - # Inhibit -Werror if NO_WERROR is specified on make command line # ifneq ($(NO_WERROR),1) diff --git a/src/core/main.c b/src/core/main.c index 8d360c42..bd2428f0 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -71,13 +71,17 @@ __asmcall int main ( void ) { shell(); } else { /* User doesn't want shell; load and execute the first - * image. If booting fails (i.e. if the image - * returns, or fails to execute), offer a second - * chance to enter the shell for diagnostics. + * image, or autoboot() if we have no images. If + * booting fails for any reason, offer a second chance + * to enter the shell for diagnostics. */ - for_each_image ( image ) { - image_exec ( image ); - break; + if ( have_images() ) { + for_each_image ( image ) { + image_exec ( image ); + break; + } + } else { + autoboot(); } if ( shell_banner() ) diff --git a/src/hci/commands/image_cmd.c b/src/hci/commands/image_cmd.c index befa5a64..6d8b5908 100644 --- a/src/hci/commands/image_cmd.c +++ b/src/hci/commands/image_cmd.c @@ -222,13 +222,13 @@ static int kernel_exec ( int argc, char **argv ) { } /** - * The "imgauto" command + * The "chain" command * * @v argc Argument count * @v argv Argument list * @ret rc Exit code */ -static int imgauto_exec ( int argc, char **argv) { +static int chain_exec ( int argc, char **argv) { int rc; if ( ( rc = imgfetch_core_exec ( NULL, IMG_EXEC, argc, argv ) ) != 0 ) @@ -563,8 +563,8 @@ struct command image_commands[] __command = { .exec = kernel_exec, }, { - .name = "imgauto", - .exec = imgauto_exec, + .name = "chain", + .exec = chain_exec, }, { .name = "imgload", diff --git a/src/image/default.gpxe b/src/image/default.gpxe deleted file mode 100644 index 0b080b58..00000000 --- a/src/image/default.gpxe +++ /dev/null @@ -1,2 +0,0 @@ -#!gpxe -autoboot diff --git a/src/image/embedded.c b/src/image/embedded.c index f76ca11b..4f763578 100644 --- a/src/image/embedded.c +++ b/src/image/embedded.c @@ -16,7 +16,8 @@ * * @v refcnt Reference counter */ -static void embedded_image_free ( struct refcnt *refcnt __unused ) { +static void __attribute__ (( unused )) +embedded_image_free ( struct refcnt *refcnt __unused ) { /* Do nothing */ } @@ -51,14 +52,18 @@ static struct image embedded_images[] = { * Register all embedded images */ static void embedded_init ( void ) { - unsigned int i; + int i; struct image *image; void *data; int rc; + /* Skip if we have no embedded images */ + if ( ! sizeof ( embedded_images ) ) + return; + /* Fix up data pointers and register images */ - for ( i = 0 ; i < ( sizeof ( embedded_images ) / - sizeof ( embedded_images[0] ) ) ; i++ ) { + for ( i = 0 ; i < ( int ) ( sizeof ( embedded_images ) / + sizeof ( embedded_images[0] ) ) ; i++ ) { image = &embedded_images[i]; /* virt_to_user() cannot be used in a static diff --git a/src/include/gpxe/image.h b/src/include/gpxe/image.h index f8b1482e..b953e150 100644 --- a/src/include/gpxe/image.h +++ b/src/include/gpxe/image.h @@ -133,6 +133,15 @@ extern struct list_head images; #define for_each_image( image ) \ list_for_each_entry ( (image), &images, list ) +/** + * Test for existence of images + * + * @ret existence Some images exist + */ +static inline int have_images ( void ) { + return ( ! list_empty ( &images ) ); +} + extern struct image * alloc_image ( void ); extern int image_set_uri ( struct image *image, struct uri *uri ); extern int image_set_cmdline ( struct image *image, const char *cmdline );