mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
target/xtensa: linux-user: add call0 ABI support
Xtensa binaries built for call0 ABI don't rotate register window on function calls and returns. Invocation of signal handlers from the kernel is therefore different in windowed and call0 ABIs. There's currently no way to determine xtensa ELF binary ABI from the binary itself. Add handler for the -xtensa-abi-call0 command line parameter/QEMU_XTENSA_ABI_CALL0 envitonment variable to the qemu-user and record ABI choice. Use it to initialize PS.WOE in xtensa_cpu_reset. Check PS.WOE in setup_rt_frame to determine how a signal should be delivered. Reviewed-by: Laurent Vivier <laurent@vivier.eu> Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> Message-Id: <20190906165713.5558-1-jcmvbkbc@gmail.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
dc12567a53
commit
130ea8322b
4 changed files with 51 additions and 12 deletions
|
@ -391,6 +391,13 @@ static void handle_arg_trace(const char *arg)
|
|||
trace_file = trace_opt_parse(arg);
|
||||
}
|
||||
|
||||
#if defined(TARGET_XTENSA)
|
||||
static void handle_arg_abi_call0(const char *arg)
|
||||
{
|
||||
xtensa_set_abi_call0();
|
||||
}
|
||||
#endif
|
||||
|
||||
struct qemu_argument {
|
||||
const char *argv;
|
||||
const char *env;
|
||||
|
@ -444,6 +451,10 @@ static const struct qemu_argument arg_table[] = {
|
|||
"", "[[enable=]<pattern>][,events=<file>][,file=<file>]"},
|
||||
{"version", "QEMU_VERSION", false, handle_arg_version,
|
||||
"", "display version information and exit"},
|
||||
#if defined(TARGET_XTENSA)
|
||||
{"xtensa-abi-call0", "QEMU_XTENSA_ABI_CALL0", false, handle_arg_abi_call0,
|
||||
"", "assume CALL0 Xtensa ABI"},
|
||||
#endif
|
||||
{NULL, NULL, false, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue