|
From: <sv...@va...> - 2006-02-07 20:56:44
|
Author: sewardj
Date: 2006-02-07 20:56:41 +0000 (Tue, 07 Feb 2006)
New Revision: 5617
Log:
Synthesise and deliver SIGTRAP to clients when requested to do so by vex.
Modified:
trunk/coregrind/m_scheduler/scheduler.c
trunk/coregrind/m_signals.c
trunk/coregrind/pub_core_signals.h
trunk/include/vki-linux.h
Modified: trunk/coregrind/m_scheduler/scheduler.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_scheduler/scheduler.c 2006-02-06 23:22:31 UTC (rev =
5616)
+++ trunk/coregrind/m_scheduler/scheduler.c 2006-02-07 20:56:41 UTC (rev =
5617)
@@ -950,6 +950,10 @@
break;
}
=20
+ case VEX_TRC_JMP_TRAP:
+ VG_(synth_sigtrap)(tid);
+ break;
+
case VEX_TRC_JMP_NODECODE:
#define M(a) VG_(message)(Vg_UserMsg, a);
M("Your program just tried to execute an instruction that Valgrind" )=
;
Modified: trunk/coregrind/m_signals.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_signals.c 2006-02-06 23:22:31 UTC (rev 5616)
+++ trunk/coregrind/m_signals.c 2006-02-07 20:56:41 UTC (rev 5617)
@@ -1352,6 +1352,20 @@
deliver_signal(tid, &info);
}
=20
+// Synthesise a SIGTRAP.
+void VG_(synth_sigtrap)(ThreadId tid)
+{
+ vki_siginfo_t info;
+
+ vg_assert(VG_(threads)[tid].status =3D=3D VgTs_Runnable);
+
+ info.si_signo =3D VKI_SIGTRAP;
+ info.si_code =3D VKI_TRAP_TRACE; /* jrs: no idea what this should be =
*/
+
+ resume_scheduler(tid);
+ deliver_signal(tid, &info);
+}
+
/* Make a signal pending for a thread, for later delivery.
VG_(poll_signals) will arrange for it to be delivered at the right
time.=20
Modified: trunk/coregrind/pub_core_signals.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_signals.h 2006-02-06 23:22:31 UTC (rev 5616)
+++ trunk/coregrind/pub_core_signals.h 2006-02-07 20:56:41 UTC (rev 5617)
@@ -72,6 +72,7 @@
extern void VG_(synth_fault_mapping)(ThreadId tid, Addr addr);
extern void VG_(synth_fault_perms) (ThreadId tid, Addr addr);
extern void VG_(synth_sigill) (ThreadId tid, Addr addr);
+extern void VG_(synth_sigtrap) (ThreadId tid);
=20
/* Extend the stack to cover addr, if possible */
extern Bool VG_(extend_stack)(Addr addr, UInt maxsize);
Modified: trunk/include/vki-linux.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/include/vki-linux.h 2006-02-06 23:22:31 UTC (rev 5616)
+++ trunk/include/vki-linux.h 2006-02-07 20:56:41 UTC (rev 5617)
@@ -430,6 +430,12 @@
#define VKI_BUS_OBJERR (__VKI_SI_FAULT|3) /* object specific hardware er=
ror */
=20
/*
+ * SIGTRAP si_codes
+ */
+#define VKI_TRAP_BRKPT (__VKI_SI_FAULT|1) /* process breakpoint */
+#define VKI_TRAP_TRACE (__VKI_SI_FAULT|2) /* process trace trap */
+
+/*
* This works because the alignment is ok on all current architectures
* but we leave open this being overridden in the future
*/
|