diff options
author | Myles Watson <mylesgw@gmail.com> | 2009-03-20 18:29:49 +0000 |
---|---|---|
committer | Myles Watson <mylesgw@gmail.com> | 2009-03-20 18:29:49 +0000 |
commit | 2a63ea580a754f65ef8f2cf2f4682a51e6b7a9da (patch) | |
tree | d638f1cfc91f05ff3ead45d4916fd63ae6ef9cfe /src/arch | |
parent | 5dd4a20b96f2bb563ae724c4eaf2524529bc46d0 (diff) | |
download | coreboot-staging-2a63ea580a754f65ef8f2cf2f4682a51e6b7a9da.zip coreboot-staging-2a63ea580a754f65ef8f2cf2f4682a51e6b7a9da.tar.gz |
Kevin O'Connor said:
The bug is in src/arch/i386/boot/boot.c. The inline assembly in
jmp_to_elf_entry uses the "g" flag to pass in parameters. However,
"g" allows gcc to use stack relative addressing of parameters.
Easiest fix would be to change "g" to "ri" - put the parameter either
in a register or as an immediate value.
That's what this patch does.
Signed-off-by: Myles Watson <mylesgw@gmail.com>
Acked-by: Stefan Reinauer <stepan@coresystems.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4023 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/i386/boot/boot.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/arch/i386/boot/boot.c b/src/arch/i386/boot/boot.c index c1cdf59..9e79cd3 100644 --- a/src/arch/i386/boot/boot.c +++ b/src/arch/i386/boot/boot.c @@ -175,12 +175,12 @@ void jmp_to_elf_entry(void *entry, unsigned long buffer) " popl %%esi\n\t" :: - "g" (lb_start), "g" (buffer), "g" (lb_size), - "g" (entry), + "ri" (lb_start), "ri" (buffer), "ri" (lb_size), + "ri" (entry), #if CONFIG_MULTIBOOT - "g"(mbi), "g" (MB_MAGIC2) + "ri"(mbi), "ri" (MB_MAGIC2) #else - "g"(adjusted_boot_notes), "g" (0x0E1FB007) + "ri"(adjusted_boot_notes), "ri" (0x0E1FB007) #endif ); } |