On 16/05/08 02:08 +0200, Uwe Hermann wrote:
On Tue, May 13, 2008 at 05:34:09PM -0600, jordan.crouse@amd.com wrote:
Add functions for libpayload to execute other payloads in memory, and have those functions return cleanly.
Signed-off-by: Jordan Crouse jordan.crouse@amd.com Index: libpayload/i386/Makefile.inc =================================================================== --- libpayload.orig/i386/Makefile.inc 2008-05-13 13:40:07.000000000 -0600 +++ libpayload/i386/Makefile.inc 2008-05-13 13:42:59.000000000 -0600 @@ -29,3 +29,4 @@
TARGETS-y += i386/head.o i386/main.o i386/sysinfo.o TARGETS-y += i386/timer.o i386/coreboot.o i386/util.o +TARGETS-y += i386/exec.o Index: libpayload/i386/exec.S =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ libpayload/i386/exec.S 2008-05-13 13:42:59.000000000 -0600 @@ -0,0 +1,64 @@ +/* calling syntax: i386_do_exec(long addr, int argc, char **argv, int *ret) */
+.align 4 +.text
+.global i386_do_exec
.type i386_do_exec,@function
+i386_do_exec:
- pushl %ebp
movl %esp, %ebp
- pushl %eax
- # Put the run address in %eax
- movl 8(%ebp), %eax
- # Save off the rest of the registers
- pushl %esi
- pushl %ecx
- pushl %ebp
- # Push the argc and argv pointers on to the stack
- movl 12(%ebp), %esi
- movl 16(%ebp), %ecx
- pushl %esi
- pushl %ecx
- # Move a "magic" number on the stack - the other
- # payload will use this as a clue that the argc
- # and argv are sane
- movl $12345678, %ecx
This should probably be documented somewhere and/or agreed upon on the list, as it introduces sort an "API" of some sort? It'll be only relevant for "our" payloads ("well-behaved" payloads), right?
Yeah - this needs to be documented. Most of it should be similar to how libc behaves, but there will be differences. The magic number was added to avoid the possiblity that the 'argc' we pop off of the stack is a random and very large number. That would suck.
Index: libpayload/i386/head.S
--- libpayload.orig/i386/head.S 2008-05-13 13:40:07.000000000 -0600 +++ libpayload/i386/head.S 2008-05-13 13:42:59.000000000 -0600 @@ -63,13 +63,14 @@
/* Let's rock. */ call start_main
- /* %eax has the return value - pass it on unmolested */
_leave: /* Get old stack pointer. */ popl %ebx
/* Restore old stack. */
- movl %esp, %ebx
- movl %ebx, %esp
Is this related, or was it a bug before?
Existing bug, but clearly relevant now that we have something to return.
Jordan