summaryrefslogtreecommitdiffstats
path: root/src/arch
diff options
context:
space:
mode:
authorMichael Brown2008-11-18 02:52:40 +0100
committerMichael Brown2008-11-18 02:52:40 +0100
commit54fbd11221e69eb2c840517b1fb7c1613930f899 (patch)
tree5a0d72d4c4af5a393109b2832037272173544221 /src/arch
parent[linda] Add missing copyright notices (diff)
downloadipxe-54fbd11221e69eb2c840517b1fb7c1613930f899.tar.gz
ipxe-54fbd11221e69eb2c840517b1fb7c1613930f899.tar.xz
ipxe-54fbd11221e69eb2c840517b1fb7c1613930f899.zip
[build] Keep gcc 4.4 happy
gcc 4.4 adds another few warnings, and also seems to complain if we place %ebp in the clobber list for any inline asm.
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/i386/firmware/pcbios/memmap.c14
-rw-r--r--src/arch/i386/image/multiboot.c6
2 files changed, 12 insertions, 8 deletions
diff --git a/src/arch/i386/firmware/pcbios/memmap.c b/src/arch/i386/firmware/pcbios/memmap.c
index 848979e9..2e9627c0 100644
--- a/src/arch/i386/firmware/pcbios/memmap.c
+++ b/src/arch/i386/firmware/pcbios/memmap.c
@@ -158,7 +158,7 @@ static int meme820 ( struct memory_map *memmap ) {
uint32_t smap;
size_t size;
unsigned int flags;
- unsigned int discard_d, discard_D;
+ unsigned int discard_D;
/* Clear the E820 buffer. Do this once before starting,
* rather than on each call; some BIOSes rely on the contents
@@ -171,13 +171,15 @@ static int meme820 ( struct memory_map *memmap ) {
* this by telling gcc that all non-output registers
* may be corrupted.
*/
- __asm__ __volatile__ ( REAL_CODE ( "stc\n\t"
+ __asm__ __volatile__ ( REAL_CODE ( "pushl %%ebp\n\t"
+ "stc\n\t"
"int $0x15\n\t"
"pushfw\n\t"
- "popw %w0\n\t" )
- : "=r" ( flags ), "=a" ( smap ),
- "=b" ( next ), "=D" ( discard_D ),
- "=c" ( size ), "=d" ( discard_d )
+ "popw %%dx\n\t"
+ "popl %%ebp\n\t" )
+ : "=a" ( smap ), "=b" ( next ),
+ "=c" ( size ), "=d" ( flags ),
+ "=D" ( discard_D )
: "a" ( 0xe820 ), "b" ( next ),
"D" ( __from_data16 ( &e820buf ) ),
"c" ( sizeof ( e820buf ) ),
diff --git a/src/arch/i386/image/multiboot.c b/src/arch/i386/image/multiboot.c
index a4a340fd..49adf951 100644
--- a/src/arch/i386/image/multiboot.c
+++ b/src/arch/i386/image/multiboot.c
@@ -282,11 +282,13 @@ static int multiboot_exec ( struct image *image ) {
/* Jump to OS with flat physical addressing */
DBGC ( image, "MULTIBOOT %p starting execution at %lx\n",
image, entry );
- __asm__ __volatile__ ( PHYS_CODE ( "call *%%edi\n\t" )
+ __asm__ __volatile__ ( PHYS_CODE ( "pushl %%ebp\n\t"
+ "call *%%edi\n\t"
+ "popl %%ebp\n\t" )
: : "a" ( MULTIBOOT_BOOTLOADER_MAGIC ),
"b" ( virt_to_phys ( &mbinfo ) ),
"D" ( entry )
- : "ecx", "edx", "esi", "ebp", "memory" );
+ : "ecx", "edx", "esi", "memory" );
DBGC ( image, "MULTIBOOT %p returned\n", image );