* [Qemu-devel] [PATCH v2] linux-user: provide frame information in x86-64 safe_syscall
@ 2016-06-06 18:56 Peter Maydell
2016-06-06 21:03 ` Richard Henderson
0 siblings, 1 reply; 2+ messages in thread
From: Peter Maydell @ 2016-06-06 18:56 UTC (permalink / raw)
To: qemu-devel; +Cc: patches, Richard Henderson, Riku Voipio
Use cfi directives in the x86-64 safe_syscall to allow gdb to get
backtraces right from within it. (In particular this will be
quite a common situation if the user interrupts QEMU while it's
in a blocked safe-syscall: at the point of the syscall insn RBP
is in use for something else, and so gdb can't find the frame then
without assistance.)
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <rth@twiddle.net>
---
v1->v2 changes: minor tweaks as requested by rth
I was planning to send this in a series with some other safe-syscall code
for the other architectures, but I haven't got round to those yet, so
might as well send out the fixed version of this by itself.
linux-user/host/x86_64/safe-syscall.inc.S | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/linux-user/host/x86_64/safe-syscall.inc.S b/linux-user/host/x86_64/safe-syscall.inc.S
index dde434c..e09368d 100644
--- a/linux-user/host/x86_64/safe-syscall.inc.S
+++ b/linux-user/host/x86_64/safe-syscall.inc.S
@@ -24,6 +24,7 @@
* -1-and-errno-set convention is done by the calling wrapper.
*/
safe_syscall_base:
+ .cfi_startproc
/* This saves a frame pointer and aligns the stack for the syscall.
* (It's unclear if the syscall ABI has the same stack alignment
* requirements as the userspace function call ABI, but better safe than
@@ -31,6 +32,8 @@ safe_syscall_base:
* does not list any ABI differences regarding stack alignment.)
*/
push %rbp
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset rbp, 0
/* The syscall calling convention isn't the same as the
* C one:
@@ -70,12 +73,19 @@ safe_syscall_start:
safe_syscall_end:
/* code path for having successfully executed the syscall */
pop %rbp
+ .cfi_remember_state
+ .cfi_def_cfa_offset 8
+ .cfi_restore rbp
ret
return_ERESTARTSYS:
/* code path when we didn't execute the syscall */
+ .cfi_restore_state
mov $-TARGET_ERESTARTSYS, %rax
pop %rbp
+ .cfi_def_cfa_offset 8
+ .cfi_restore rbp
ret
+ .cfi_endproc
.size safe_syscall_base, .-safe_syscall_base
--
1.9.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH v2] linux-user: provide frame information in x86-64 safe_syscall
2016-06-06 18:56 [Qemu-devel] [PATCH v2] linux-user: provide frame information in x86-64 safe_syscall Peter Maydell
@ 2016-06-06 21:03 ` Richard Henderson
0 siblings, 0 replies; 2+ messages in thread
From: Richard Henderson @ 2016-06-06 21:03 UTC (permalink / raw)
To: Peter Maydell, qemu-devel; +Cc: patches, Riku Voipio
On 06/06/2016 11:56 AM, Peter Maydell wrote:
> Use cfi directives in the x86-64 safe_syscall to allow gdb to get
> backtraces right from within it. (In particular this will be
> quite a common situation if the user interrupts QEMU while it's
> in a blocked safe-syscall: at the point of the syscall insn RBP
> is in use for something else, and so gdb can't find the frame then
> without assistance.)
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> Reviewed-by: Richard Henderson <rth@twiddle.net>
> ---
> v1->v2 changes: minor tweaks as requested by rth
Reviewed-by: Richard Henderson <rth@twiddle.net>
r~
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-06-06 21:03 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-06 18:56 [Qemu-devel] [PATCH v2] linux-user: provide frame information in x86-64 safe_syscall Peter Maydell
2016-06-06 21:03 ` Richard Henderson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).