Tweaks to make libthread tell Valgrind about its stack limits,
so that Valgrind can detect stack overflow for me.
This commit is contained in:
parent
cdd61ab0ae
commit
a3785ca2cc
7 changed files with 60 additions and 8 deletions
|
|
@ -1,8 +1,23 @@
|
|||
#include "threadimpl.h"
|
||||
/*
|
||||
* To use this you need some patches to Valgrind that
|
||||
* let it help out with detecting stack overflow.
|
||||
*/
|
||||
#define USEVALGRIND 0
|
||||
#ifdef USEVALGRIND
|
||||
#include <valgrind/memcheck.h>
|
||||
#endif
|
||||
|
||||
static void
|
||||
launcher386(void (*f)(void *arg), void *arg)
|
||||
{
|
||||
Proc *p;
|
||||
Thread *t;
|
||||
|
||||
p = _threadgetproc();
|
||||
t = p->thread;
|
||||
_threadstacklimit(t->stk);
|
||||
|
||||
(*f)(arg);
|
||||
threadexits(nil);
|
||||
}
|
||||
|
|
@ -19,3 +34,24 @@ _threadinitstack(Thread *t, void (*f)(void*), void *arg)
|
|||
t->sched.sp = (ulong)tos - 8; /* old PC and new PC */
|
||||
}
|
||||
|
||||
void
|
||||
_threadinswitch(int enter)
|
||||
{
|
||||
USED(enter);
|
||||
#ifdef USEVALGRIND
|
||||
if(enter)
|
||||
VALGRIND_SET_STACK_LIMIT(0, 0, 1);
|
||||
else
|
||||
VALGRIND_SET_STACK_LIMIT(0, 0, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
_threadstacklimit(void *addr)
|
||||
{
|
||||
USED(addr);
|
||||
|
||||
#ifdef USEVALGRIND
|
||||
VALGRIND_SET_STACK_LIMIT(1, addr, 0);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue