From fe2a2b57f45cdc594d08fde788211d346dba4ce4 Mon Sep 17 00:00:00 2001 From: Ben Gamari <ben@smart-cactus.org> Date: Sat, 19 Dec 2020 15:54:16 +0000 Subject: [PATCH] gdb.find_refs: Things --- gdb/ghc_gdb/find_refs.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gdb/ghc_gdb/find_refs.py b/gdb/ghc_gdb/find_refs.py index 67d991a..0d7c155 100644 --- a/gdb/ghc_gdb/find_refs.py +++ b/gdb/ghc_gdb/find_refs.py @@ -14,6 +14,8 @@ T = TypeVar('T') stg_STACK_info = gdb.parse_and_eval('&stg_STACK_info') +CLOSURE_HEADER_SIZE = gdb.parse_and_eval('sizeof(StgHeader)') # bytes + def search_memory_many(inferior: gdb.Inferior, start: Ptr, end: Ptr, val: bytes) -> Iterator[Ptr]: #print('Searching for %r in %d to %d' % (val, start.addr(), end.addr())) assert end.addr() > start.addr() @@ -167,7 +169,7 @@ def find_containing_closure(inferior: gdb.Inferior, if ptr.addr() - start.addr() > 8: # Only trace the indirectee of IND_STATICs return None - elif i <= nptrs + 5: # A bit of fudge for the headers + elif i <= nptrs + CLOSURE_HEADER_SIZE: # A bit of fudge for the headers return start elif int(info['type']) == closure.ClosureType.STACK: stack = gdb.parse_and_eval('(StgStack *) %d' % start.addr()) @@ -182,8 +184,7 @@ def find_containing_closure(inferior: gdb.Inferior, except gdb.MemoryError as e: print('failed to find containing closure of 0x%x:' % ptr.addr()) traceback.print_exc() - continue - + return None return None -- GitLab