summaryrefslogtreecommitdiff
path: root/sysdeps/mach
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2020-06-07 17:51:21 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2020-06-07 23:36:10 +0000
commit337a7b74faed2c8daf8c91cbb3038dc4984f3207 (patch)
tree425207379c84774e80d8000ba3a087d710d51e45 /sysdeps/mach
parent4bab9ad854b50fab23eacf29550325552e7a9f4b (diff)
downloadglibc-337a7b74faed2c8daf8c91cbb3038dc4984f3207.tar.gz
hurd: Fix unwinding over interruptible RPC
* sysdeps/mach/hurd/i386/intr-msg.h (INTR_MSG_TRAP): Set CFA register to %ecx while %esp is altered.
Diffstat (limited to 'sysdeps/mach')
-rw-r--r--sysdeps/mach/hurd/i386/intr-msg.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/i386/intr-msg.h b/sysdeps/mach/hurd/i386/intr-msg.h
index 54420fed01..70e6cc6592 100644
--- a/sysdeps/mach/hurd/i386/intr-msg.h
+++ b/sysdeps/mach/hurd/i386/intr-msg.h
@@ -37,10 +37,12 @@
" movl %6, %%eax\n" \
" jmp _hurd_intr_rpc_msg_sp_restored\n" \
"_hurd_intr_rpc_msg_do: movl %%esp, %%ecx\n" \
+ " .cfi_def_cfa_register %%ecx\n" \
" leal %4, %%esp\n" \
"_hurd_intr_rpc_msg_cx_sp: movl $-25, %%eax\n" \
"_hurd_intr_rpc_msg_do_trap: lcall $7, $0 # status in %0\n" \
"_hurd_intr_rpc_msg_in_trap: movl %%ecx, %%esp\n" \
+ " .cfi_def_cfa_register %%esp\n" \
"_hurd_intr_rpc_msg_sp_restored:" \
: "=a" (err), "+m" (option), "+m" (timeout), "=m" (*intr_port_p) \
: "m" ((&msg)[-1]), "m" (*cancel_p), "i" (EINTR) \