mirror of git://sourceware.org/git/glibc.git
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.
This commit is contained in:
parent
4bab9ad854
commit
337a7b74fa
|
@ -37,10 +37,12 @@
|
||||||
" movl %6, %%eax\n" \
|
" movl %6, %%eax\n" \
|
||||||
" jmp _hurd_intr_rpc_msg_sp_restored\n" \
|
" jmp _hurd_intr_rpc_msg_sp_restored\n" \
|
||||||
"_hurd_intr_rpc_msg_do: movl %%esp, %%ecx\n" \
|
"_hurd_intr_rpc_msg_do: movl %%esp, %%ecx\n" \
|
||||||
|
" .cfi_def_cfa_register %%ecx\n" \
|
||||||
" leal %4, %%esp\n" \
|
" leal %4, %%esp\n" \
|
||||||
"_hurd_intr_rpc_msg_cx_sp: movl $-25, %%eax\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_do_trap: lcall $7, $0 # status in %0\n" \
|
||||||
"_hurd_intr_rpc_msg_in_trap: movl %%ecx, %%esp\n" \
|
"_hurd_intr_rpc_msg_in_trap: movl %%ecx, %%esp\n" \
|
||||||
|
" .cfi_def_cfa_register %%esp\n" \
|
||||||
"_hurd_intr_rpc_msg_sp_restored:" \
|
"_hurd_intr_rpc_msg_sp_restored:" \
|
||||||
: "=a" (err), "+m" (option), "+m" (timeout), "=m" (*intr_port_p) \
|
: "=a" (err), "+m" (option), "+m" (timeout), "=m" (*intr_port_p) \
|
||||||
: "m" ((&msg)[-1]), "m" (*cancel_p), "i" (EINTR) \
|
: "m" ((&msg)[-1]), "m" (*cancel_p), "i" (EINTR) \
|
||||||
|
|
Loading…
Reference in New Issue