Date: Sun, 05 Dec 2021 13:25:18 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=259294 --- Comment #2 from Paul Floyd <email@example.com> --- With a debug build of libc, if I run a canonical C 'printf hello world' as follows LD_PRELOAD=/home/paulf/build/src/obj/usr/home/paulf/build/src/amd64.amd64/lib/libc/libc.so.7.full /home/paulf/scratch/valgrind/vg-in-place --default-suppressions=no --leak-check=yes --show-reachable=yes ./hello_world then it tells me that the still reachable memory is ==89763== 4,096 bytes in 1 blocks are still reachable in loss record 1 of 1 ==89763== at 0x484C894: malloc (vg_replace_malloc.c:385) ==89763== by 0x49716D2: __smakebuf (lib/libc/stdio/makebuf.c:73) ==89763== by 0x4984164: __swsetup (lib/libc/stdio/wsetup.c:82) ==89763== by 0x4977D82: __vfprintf (lib/libc/stdio/vfprintf.c:462) ==89763== by 0x4977AF9: vfprintf_l (lib/libc/stdio/vfprintf.c:285) ==89763== by 0x4972703: printf (lib/libc/stdio/printf.c:57) ==89763== by 0x2018A8: main (hello_world.c:5) Looking at the source, calls to printf pass through #define prepwrite(fp) \ ((((fp)->_flags & __SWR) == 0 || \ ((fp)->_bf._base == NULL && ((fp)->_flags & __SSTR) == 0)) && \ __swsetup(fp) This checks that the buffer associated with stdout (also applies to stderr) is allocated and if not allocates it. I'll add a patch in a moment that seems to work, at least for stdout (should work for stderr, not tested) paulf> LD_PRELOAD=/home/paulf/build/src/obj/usr/home/paulf/build/src/amd64.amd64/lib/libc/libc.so.7.full /home/paulf/scratch/valgrind/vg-in-place --default-suppressions=no --leak-check=yes --show-reachable=yes ./hello_world ==69502== Memcheck, a memory error detector ==69502== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==69502== Using Valgrind-3.19.0.GIT and LibVEX; rerun with -h for copyright info ==69502== Command: ./hello_world ==69502== Hellw, World! ==69502== ==69502== HEAP SUMMARY: ==69502== in use at exit: 0 bytes in 0 blocks ==69502== total heap usage: 1 allocs, 1 frees, 4,096 bytes allocated ==69502== ==69502== All heap blocks were freed -- no leaks are possible ==69502== ==69502== For lists of detected and suppressed errors, rerun with: -s ==69502== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) -- You are receiving this mail because: You are the assignee for the bug.