Commit eca9d807 by Eric Botcazou Committed by Eric Botcazou

linux-unwind.h (x86_frob_update_context): New function.

	* config/i386/linux-unwind.h (x86_frob_update_context): New function.
	(MD_FROB_UPDATE_CONTEXT): Define.

From-SVN: r154141
parent 7274deff
2009-11-13 Eric Botcazou <ebotcazou@adacore.com>
* config/i386/linux-unwind.h (x86_frob_update_context): New function.
(MD_FROB_UPDATE_CONTEXT): Define.
2009-11-12 Eric Botcazou <ebotcazou@adacore.com> 2009-11-12 Eric Botcazou <ebotcazou@adacore.com>
Laurent GUERBY <laurent@guerby.net> Laurent GUERBY <laurent@guerby.net>
...@@ -172,6 +172,25 @@ x86_fallback_frame_state (struct _Unwind_Context *context, ...@@ -172,6 +172,25 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
fs->signal_frame = 1; fs->signal_frame = 1;
return _URC_NO_REASON; return _URC_NO_REASON;
} }
#define MD_FROB_UPDATE_CONTEXT x86_frob_update_context
/* Fix up for kernels that have vDSO, but don't have S flag in it. */
static void
x86_frob_update_context (struct _Unwind_Context *context,
_Unwind_FrameState *fs ATTRIBUTE_UNUSED)
{
unsigned char *pc = context->ra;
/* movl $__NR_rt_sigreturn,%eax ; {int $0x80 | syscall} */
if (*(unsigned char *)(pc+0) == 0xb8
&& *(unsigned int *)(pc+1) == 173
&& (*(unsigned short *)(pc+5) == 0x80cd
|| *(unsigned short *)(pc+5) == 0x050f))
_Unwind_SetSignalFrame (context, 1);
}
#endif /* not glibc 2.0 */ #endif /* not glibc 2.0 */
#endif /* ifdef __x86_64__ */ #endif /* ifdef __x86_64__ */
#endif /* ifdef inhibit_libc */ #endif /* ifdef inhibit_libc */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment