Replace image->entry with image->priv.
authorMichael Brown <mcb30@etherboot.org>
Sun, 14 Jan 2007 04:04:28 +0000 (04:04 +0000)
committerMichael Brown <mcb30@etherboot.org>
Sun, 14 Jan 2007 04:04:28 +0000 (04:04 +0000)
src/arch/i386/image/multiboot.c
src/arch/i386/image/nbi.c
src/image/elf.c
src/include/gpxe/image.h

index 7e89fef..a198ef7 100644 (file)
@@ -218,6 +218,7 @@ static struct multiboot_module __data16_array ( mbmodules, [MAX_MODULES] );
  * @ret rc             Return status code
  */
 static int multiboot_exec ( struct image *image ) {
+       physaddr_t entry = image->priv.phys;
 
        /* Populate multiboot information structure */
        memset ( &mbinfo, 0, sizeof ( mbinfo ) );
@@ -241,7 +242,7 @@ static int multiboot_exec ( struct image *image ) {
        __asm__ __volatile__ ( PHYS_CODE ( "call *%%edi\n\t" )
                               : : "a" ( MULTIBOOT_BOOTLOADER_MAGIC ),
                                   "b" ( virt_to_phys ( &mbinfo ) ),
-                                  "D" ( image->entry )
+                                  "D" ( entry )
                               : "ecx", "edx", "esi", "ebp", "memory" );
 
        DBGC ( image, "MULTIBOOT %p returned\n", image );
@@ -328,8 +329,8 @@ static int multiboot_load_raw ( struct image *image,
        /* Copy image to segment */
        memcpy_user ( buffer, 0, image->data, offset, filesz );
 
-       /* Record execution entry point */
-       image->entry = hdr->mb.entry_addr;
+       /* Record execution entry point in image private data field */
+       image->priv.phys = hdr->mb.entry_addr;
 
        return 0;
 }
index 974b1b0..ad483b4 100644 (file)
@@ -277,6 +277,10 @@ int nbi_load ( struct image *image ) {
                                           nbi_load_segment ) ) != 0 )
                return rc;
 
+       /* Record header address in image private data field */
+       image->priv.user = real_to_user ( imgheader.location.segment,
+                                         imgheader.location.offset );
+
        return 0;
 }
 
@@ -370,7 +374,7 @@ static int nbi_boot32 ( struct image *image, struct imgheader *imgheader ) {
 static int nbi_exec ( struct image *image ) {
        struct imgheader imgheader;
 
-       copy_from_user ( &imgheader, phys_to_user ( image->entry ), 0,
+       copy_from_user ( &imgheader, image->priv.user, 0,
                         sizeof ( imgheader ) );
 
        if ( NBI_LINEAR_EXEC_ADDR ( imgheader.flags ) ) {
index 167ef2b..75c976e 100644 (file)
@@ -136,8 +136,8 @@ int elf_load ( struct image *image ) {
                        return rc;
        }
 
-       /* Fill in entry point address */
-       image->entry = ehdr.e_entry;
+       /* Record execution entry point in image private data field */
+       image->priv.phys = ehdr.e_entry;
 
        return 0;
 }
index de10c36..3bfe834 100644 (file)
@@ -35,8 +35,11 @@ struct image {
 
        /** Image type, if known */
        struct image_type *type;
-       /** Entry point */
-       physaddr_t entry;
+       /** Image type private data */
+       union {
+               physaddr_t phys;
+               userptr_t user;
+       } priv;
 };
 
 /** Image is loaded */