summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyles Watson <mylesgw@gmail.com>2009-03-20 18:29:49 +0000
committerMyles Watson <mylesgw@gmail.com>2009-03-20 18:29:49 +0000
commit2a63ea580a754f65ef8f2cf2f4682a51e6b7a9da (patch)
treed638f1cfc91f05ff3ead45d4916fd63ae6ef9cfe
parent5dd4a20b96f2bb563ae724c4eaf2524529bc46d0 (diff)
downloadcoreboot-2a63ea580a754f65ef8f2cf2f4682a51e6b7a9da.tar.xz
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
-rw-r--r--src/arch/i386/boot/boot.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/arch/i386/boot/boot.c b/src/arch/i386/boot/boot.c
index c1cdf594a4..9e79cd332f 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
);
}