mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
Add support for syscall ptrace(traceme)
It fixes Bug 377376. Patch by Aleksandra Karadzic. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16273
This commit is contained in:
parent
85075802b2
commit
30717ab5a2
@ -1667,6 +1667,7 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
|
||||
Bool core = False; /* kills process w/ core */
|
||||
struct vki_rlimit corelim;
|
||||
Bool could_core;
|
||||
ThreadState* tst = VG_(get_ThreadState)(tid);
|
||||
|
||||
vg_assert(VG_(is_running_thread)(tid));
|
||||
|
||||
@ -1728,6 +1729,12 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
|
||||
if (!terminate)
|
||||
return; /* nothing to do */
|
||||
|
||||
if (terminate && (tst->ptrace & VKI_PT_PTRACED)
|
||||
&& (sigNo != VKI_SIGKILL)) {
|
||||
VG_(kill)(VG_(getpid)(), VKI_SIGSTOP);
|
||||
return;
|
||||
}
|
||||
|
||||
could_core = core;
|
||||
|
||||
if (core) {
|
||||
@ -1746,7 +1753,6 @@ static void default_action(const vki_siginfo_t *info, ThreadId tid)
|
||||
if (VG_(clo_xml)) {
|
||||
VG_(printf_xml)("<fatal_signal>\n");
|
||||
VG_(printf_xml)(" <tid>%d</tid>\n", tid);
|
||||
ThreadState* tst = VG_(get_ThreadState)(tid);
|
||||
if (tst->thread_name) {
|
||||
VG_(printf_xml)(" <threadname>%s</threadname>\n",
|
||||
tst->thread_name);
|
||||
|
||||
@ -318,6 +318,7 @@ extern void ML_(linux_POST_sys_sendmmsg) ( TId, UW, UW, UW, UW, UW );
|
||||
// Linux-specific (but non-arch-specific) ptrace wrapper helpers
|
||||
extern void ML_(linux_PRE_getregset) ( ThreadId, long, long );
|
||||
extern void ML_(linux_PRE_setregset) ( ThreadId, long, long );
|
||||
extern void ML_(linux_POST_traceme) ( ThreadId );
|
||||
extern void ML_(linux_POST_getregset)( ThreadId, long, long );
|
||||
|
||||
#undef TId
|
||||
|
||||
@ -349,6 +349,9 @@ PRE(sys_ptrace)
|
||||
POST(sys_ptrace)
|
||||
{
|
||||
switch (ARG1) {
|
||||
case VKI_PTRACE_TRACEME:
|
||||
ML_(linux_POST_traceme)(tid);
|
||||
break;
|
||||
case VKI_PTRACE_PEEKTEXT:
|
||||
case VKI_PTRACE_PEEKDATA:
|
||||
case VKI_PTRACE_PEEKUSR:
|
||||
|
||||
@ -482,6 +482,9 @@ PRE(sys_ptrace)
|
||||
POST(sys_ptrace)
|
||||
{
|
||||
switch (ARG1) {
|
||||
case VKI_PTRACE_TRACEME:
|
||||
ML_(linux_POST_traceme)(tid);
|
||||
break;
|
||||
case VKI_PTRACE_PEEKTEXT:
|
||||
case VKI_PTRACE_PEEKDATA:
|
||||
case VKI_PTRACE_PEEKUSR:
|
||||
|
||||
@ -11100,6 +11100,13 @@ ML_(linux_POST_sys_sendmmsg) (ThreadId tid, UWord res,
|
||||
ptrace wrapper helpers
|
||||
------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
ML_(linux_POST_traceme) ( ThreadId tid )
|
||||
{
|
||||
ThreadState *tst = VG_(get_ThreadState)(tid);
|
||||
tst->ptrace = VKI_PT_PTRACED;
|
||||
}
|
||||
|
||||
void
|
||||
ML_(linux_PRE_getregset) ( ThreadId tid, long arg3, long arg4 )
|
||||
{
|
||||
|
||||
@ -471,6 +471,9 @@ PRE(sys_ptrace)
|
||||
POST(sys_ptrace)
|
||||
{
|
||||
switch (ARG1) {
|
||||
case VKI_PTRACE_TRACEME:
|
||||
ML_(linux_POST_traceme)(tid);
|
||||
break;
|
||||
case VKI_PTRACE_PEEKTEXT:
|
||||
case VKI_PTRACE_PEEKDATA:
|
||||
case VKI_PTRACE_PEEKUSR:
|
||||
|
||||
@ -365,6 +365,9 @@ PRE(sys_ptrace)
|
||||
POST(sys_ptrace)
|
||||
{
|
||||
switch (ARG1) {
|
||||
case VKI_PTRACE_TRACEME:
|
||||
ML_(linux_POST_traceme)(tid);
|
||||
break;
|
||||
case VKI_PTRACE_PEEKTEXT:
|
||||
case VKI_PTRACE_PEEKDATA:
|
||||
case VKI_PTRACE_PEEKUSR:
|
||||
|
||||
@ -271,6 +271,9 @@ PRE(sys_ptrace)
|
||||
POST(sys_ptrace)
|
||||
{
|
||||
switch (ARG1) {
|
||||
case VKI_PTRACE_TRACEME:
|
||||
ML_(linux_POST_traceme)(tid);
|
||||
break;
|
||||
case VKI_PTRACE_PEEKTEXT:
|
||||
case VKI_PTRACE_PEEKDATA:
|
||||
case VKI_PTRACE_PEEKUSR:
|
||||
|
||||
@ -900,6 +900,9 @@ PRE(sys_ptrace)
|
||||
POST(sys_ptrace)
|
||||
{
|
||||
switch (ARG1) {
|
||||
case VKI_PTRACE_TRACEME:
|
||||
ML_(linux_POST_traceme)(tid);
|
||||
break;
|
||||
case VKI_PTRACE_PEEKTEXT:
|
||||
case VKI_PTRACE_PEEKDATA:
|
||||
case VKI_PTRACE_PEEKUSR:
|
||||
|
||||
@ -407,6 +407,7 @@ typedef struct {
|
||||
|
||||
/* This thread's name. NULL, if no name. */
|
||||
HChar *thread_name;
|
||||
UInt ptrace;
|
||||
}
|
||||
ThreadState;
|
||||
|
||||
|
||||
@ -2324,6 +2324,8 @@ typedef __vki_kernel_uid32_t vki_qid_t; /* Type in which we store ids in memory
|
||||
#define VKI_PTRACE_GETREGSET 0x4204
|
||||
#define VKI_PTRACE_SETREGSET 0x4205
|
||||
|
||||
#define VKI_PT_PTRACED 0x00000001
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// From linux-2.6.14/include/sound/asound.h
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user