diff options
author | Mathias Krause <minipli@googlemail.com> | 2017-02-07 19:03:29 +0100 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2017-02-17 17:25:11 +0100 |
commit | 7b681c5926d3699b33c936e34a8176833a03eaf2 (patch) | |
tree | 6ed8055eff3abda79242f285eb65a11746827522 /payloads/libpayload | |
parent | 9fa78c136d6a6538576fb15ccd05d8483ea05ab5 (diff) | |
download | coreboot-7b681c5926d3699b33c936e34a8176833a03eaf2.tar.xz |
libpayload: x86/main - propagate return value of main()
According to coreboot’s payload API [1], the called payload should be
able to return a value via %eax. Support this by changing the prototype
of start_main() and pass on the return value of main() to the caller
instead of discarding it.
[1] https://www.coreboot.org/Payload_API
Change-Id: I8442faea19cc8e04487092f8e61aa4e5cba3ba76
Signed-off-by: Mathias Krause <minipli@googlemail.com>
Reviewed-on: https://review.coreboot.org/18334
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'payloads/libpayload')
-rw-r--r-- | payloads/libpayload/arch/x86/main.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/payloads/libpayload/arch/x86/main.c b/payloads/libpayload/arch/x86/main.c index fbd4dc4e18..f9a5e2cf83 100644 --- a/payloads/libpayload/arch/x86/main.c +++ b/payloads/libpayload/arch/x86/main.c @@ -42,8 +42,8 @@ char *main_argv[MAX_ARGC_COUNT]; * This is our C entry function - set up the system * and jump into the payload entry point. */ -void start_main(void); -void start_main(void) +int start_main(void); +int start_main(void) { extern int main(int argc, char **argv); @@ -67,10 +67,9 @@ void start_main(void) * In the future we may care about the return value. */ - (void) main(main_argc, (main_argc != 0) ? main_argv : NULL); - /* - * Returning here will go to the _leave function to return + * Returning from main() will go to the _leave function to return * us to the original context. */ + return main(main_argc, (main_argc != 0) ? main_argv : NULL); } |