case VG_USERREQ__STACK_REGISTER: {
UWord sid = VG_(register_stack)((Addr)arg[1], (Addr)arg[2]);
SET_CLREQ_RETVAL( tid, sid );
+ VG_TRACK(register_stack, (Addr)arg[1], (Addr)arg[2]);
break; }
case VG_USERREQ__STACK_DEREGISTER: {
DEF0(track_ban_mem_stack, Addr, SizeT)
+DEF0(track_register_stack, Addr, Addr)
+
DEF0(track_pre_mem_read, CorePart, ThreadId, const HChar*, Addr, SizeT)
DEF0(track_pre_mem_read_asciiz, CorePart, ThreadId, const HChar*, Addr)
DEF0(track_pre_mem_write, CorePart, ThreadId, const HChar*, Addr, SizeT)
void (*track_ban_mem_stack)(Addr, SizeT);
+ void (*track_register_stack)(Addr, Addr);
+
void (*track_pre_mem_read) (CorePart, ThreadId, const HChar*, Addr, SizeT);
void (*track_pre_mem_read_asciiz)(CorePart, ThreadId, const HChar*, Addr);
void (*track_pre_mem_write) (CorePart, ThreadId, const HChar*, Addr, SizeT);
/* Used for redzone at end of thread stacks */
void VG_(track_ban_mem_stack) (void(*f)(Addr a, SizeT len));
+/* Used to report VG_USERREQ__STACK_REGISTER client requests */
+void VG_(track_register_stack) (void(*f)(Addr start, Addr end));
+
/* These ones occur around syscalls, signal handling, etc */
void VG_(track_pre_mem_read) (void(*f)(CorePart part, ThreadId tid,
const HChar* s, Addr a, SizeT size));