From dc29ef72df49d88fa1c0866d362803f920a6e2d5 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sun, 14 Feb 2021 20:08:52 -0800 Subject: [PATCH] core: Pass stack change user requests on to tools Since DRD tracks the lowest and highest stack address that has been used, it needs to know about stack registration events. Hence pass on stack registration events to tools. --- coregrind/m_scheduler/scheduler.c | 1 + coregrind/m_tooliface.c | 2 ++ coregrind/pub_core_tooliface.h | 2 ++ include/pub_tool_tooliface.h | 3 +++ 4 files changed, 8 insertions(+) diff --git a/coregrind/m_scheduler/scheduler.c b/coregrind/m_scheduler/scheduler.c index 77f78ebbc7..dc22dca176 100644 --- a/coregrind/m_scheduler/scheduler.c +++ b/coregrind/m_scheduler/scheduler.c @@ -2050,6 +2050,7 @@ void do_client_request ( ThreadId tid ) 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: { diff --git a/coregrind/m_tooliface.c b/coregrind/m_tooliface.c index efa991debf..cbafe47c52 100644 --- a/coregrind/m_tooliface.c +++ b/coregrind/m_tooliface.c @@ -438,6 +438,8 @@ DEF0(track_die_mem_stack, Addr, SizeT) 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) diff --git a/coregrind/pub_core_tooliface.h b/coregrind/pub_core_tooliface.h index 4da8cd29e9..5f75d49972 100644 --- a/coregrind/pub_core_tooliface.h +++ b/coregrind/pub_core_tooliface.h @@ -226,6 +226,8 @@ typedef struct { 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); diff --git a/include/pub_tool_tooliface.h b/include/pub_tool_tooliface.h index c7eef06eb1..62c9969612 100644 --- a/include/pub_tool_tooliface.h +++ b/include/pub_tool_tooliface.h @@ -609,6 +609,9 @@ void VG_(track_die_mem_stack) (void(*f)(Addr a, SizeT len)); /* 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)); -- 2.47.2