From 9f41a64eb230fd1c343999400564e3e14747c3e9 Mon Sep 17 00:00:00 2001 From: otto <> Date: Thu, 22 Jun 2023 11:04:16 +0000 Subject: Allow to ask for deeper callers for leak reports using malloc options. ok deraadt@ --- src/lib/libc/stdlib/malloc.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/lib/libc/stdlib/malloc.c') diff --git a/src/lib/libc/stdlib/malloc.c b/src/lib/libc/stdlib/malloc.c index 04f211c4ef..7bc660525b 100644 --- a/src/lib/libc/stdlib/malloc.c +++ b/src/lib/libc/stdlib/malloc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: malloc.c,v 1.286 2023/06/07 12:56:22 aoyama Exp $ */ +/* $OpenBSD: malloc.c,v 1.287 2023/06/22 11:04:16 otto Exp $ */ /* * Copyright (c) 2008, 2010, 2011, 2016, 2023 Otto Moerbeek * Copyright (c) 2012 Matthew Dempsky @@ -255,7 +255,11 @@ void malloc_dump(void); PROTO_NORMAL(malloc_dump); static void malloc_exit(void); #endif -#define CALLER (DO_STATS ? __builtin_return_address(0) : NULL) +#define CALLER ( \ + DO_STATS == 0 ? NULL : (__builtin_extract_return_addr( \ + DO_STATS == 1 ? __builtin_return_address(0) : \ + DO_STATS == 2 ? __builtin_return_address(1) : \ + DO_STATS == 3 ? __builtin_return_address(2) : NULL))) /* low bits of r->p determine size: 0 means >= page size and r->size holding * real size, otherwise low bits is the bucket + 1 @@ -365,8 +369,15 @@ omalloc_parseopt(char opt) mopts.malloc_stats = 0; break; case 'D': + case '1': mopts.malloc_stats = 1; break; + case '2': + mopts.malloc_stats = 2; + break; + case '3': + mopts.malloc_stats = 3; + break; #endif /* MALLOC_STATS */ case 'f': mopts.malloc_freecheck = 0; -- cgit v1.2.3-55-g6feb