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>
This commit is contained in:
Mathias Krause 2017-02-07 19:03:29 +01:00 committed by Martin Roth
parent 9fa78c136d
commit 7b681c5926
1 changed files with 4 additions and 5 deletions

View File

@ -42,8 +42,8 @@ char *main_argv[MAX_ARGC_COUNT];
* This is our C entry function - set up the system * This is our C entry function - set up the system
* and jump into the payload entry point. * and jump into the payload entry point.
*/ */
void start_main(void); int start_main(void);
void start_main(void) int start_main(void)
{ {
extern int main(int argc, char **argv); 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. * 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. * us to the original context.
*/ */
return main(main_argc, (main_argc != 0) ? main_argv : NULL);
} }