diff options
-rw-r--r-- | payloads/libpayload/arch/arm/main.c | 7 | ||||
-rw-r--r-- | payloads/libpayload/arch/arm64/main.c | 7 | ||||
-rw-r--r-- | payloads/libpayload/arch/x86/coreboot.c | 8 | ||||
-rw-r--r-- | payloads/libpayload/arch/x86/head.S | 19 |
4 files changed, 12 insertions, 29 deletions
diff --git a/payloads/libpayload/arch/arm/main.c b/payloads/libpayload/arch/arm/main.c index 434d946031..8f663e5c2b 100644 --- a/payloads/libpayload/arch/arm/main.c +++ b/payloads/libpayload/arch/arm/main.c @@ -29,11 +29,6 @@ #include <exception.h> #include <libpayload.h> -int main_argc; /**< The argc value to pass to main() */ - -/** The argv value to pass to main() */ -char *main_argv[MAX_ARGC_COUNT]; - /** * This is our C entry function - set up the system * and jump into the payload entry point. @@ -63,7 +58,7 @@ void start_main(void) * In the future we may care about the return value. */ - (void) main(main_argc, (main_argc != 0) ? main_argv : NULL); + (void) main(0, NULL); /* * Returning here will go to the _leave function to return diff --git a/payloads/libpayload/arch/arm64/main.c b/payloads/libpayload/arch/arm64/main.c index 374c8b18e2..2d599f8ef6 100644 --- a/payloads/libpayload/arch/arm64/main.c +++ b/payloads/libpayload/arch/arm64/main.c @@ -30,11 +30,6 @@ #include <libpayload.h> #include <arch/mmu.h> -int main_argc; /**< The argc value to pass to main() */ - -/** The argv value to pass to main() */ -char *main_argv[MAX_ARGC_COUNT]; - /* * Func: pre_sysinfo_scan_mmu_setup * Desc: We need to setup and enable MMU before we can go to scan coreboot @@ -125,7 +120,7 @@ void start_main(void) * In the future we may care about the return value. */ - (void) main(main_argc, (main_argc != 0) ? main_argv : NULL); + (void) main(0, NULL); /* * Returning here will go to the _leave function to return diff --git a/payloads/libpayload/arch/x86/coreboot.c b/payloads/libpayload/arch/x86/coreboot.c index cad13963ec..ea4b8e51a5 100644 --- a/payloads/libpayload/arch/x86/coreboot.c +++ b/payloads/libpayload/arch/x86/coreboot.c @@ -59,6 +59,9 @@ int cb_parse_arch_specific(struct cb_record *rec, struct sysinfo_t *info) return 1; } +/* This pointer gets set in head.S and is passed in from coreboot. */ +void *cb_header_ptr; + int get_coreboot_info(struct sysinfo_t *info) { int ret; @@ -67,7 +70,10 @@ int get_coreboot_info(struct sysinfo_t *info) * an invalid value. */ info->x86_rom_var_mtrr_index = -1; - ret = cb_parse_header(phys_to_virt(0x00000000), 0x1000, info); + ret = cb_parse_header(cb_header_ptr, 1, info); + + if (ret) + ret = cb_parse_header(phys_to_virt(0x00000000), 0x1000, info); if (ret) ret = cb_parse_header(phys_to_virt(0x000f0000), 0x1000, info); diff --git a/payloads/libpayload/arch/x86/head.S b/payloads/libpayload/arch/x86/head.S index 1052b8c94d..87d0037a08 100644 --- a/payloads/libpayload/arch/x86/head.S +++ b/payloads/libpayload/arch/x86/head.S @@ -55,11 +55,6 @@ mb_header: .long _end .long _init -#define CB_MAGIC_VALUE 0x12345678 -#define CB_MAGIC 0x04 -#define CB_ARGV 0x08 -#define CB_ARGC 0x10 - /* * This function saves off the previous stack and switches us to our * own execution environment. @@ -72,18 +67,10 @@ _init: movl %eax, loader_eax movl %ebx, loader_ebx - /* Copy argv[] and argc as demanded by the Payload API, - * see https://www.coreboot.org/Payload_API and exec.S. - */ - cmpl $CB_MAGIC_VALUE, CB_MAGIC(%esp) - jne 1f - - movl CB_ARGV(%esp), %eax - movl %eax, main_argv + /* save pointer to coreboot tables */ + movl 4(%esp), %eax + movl %eax, cb_header_ptr - movl CB_ARGC(%esp), %eax - movl %eax, main_argc -1: /* Store current stack pointer and set up new stack. */ movl %esp, %eax movl $_stack, %esp |