Skip to content

Commit

Permalink
helper/log: Fix build using _DEBUG_FREE_SPACE_
Browse files Browse the repository at this point in the history
The glibc API 'mallinfo' is deprecated and the new 'mallinfo2'
should be used from glibc 2.33 (2021-02-01).

Throw an error when '--enable-malloc-logging' is used on systems
that compile without glibc.
Detect the glibc version and, for backward compatibility, define
'mallinfo2' as the old 'mallinfo'. Define a macro for the format
of 'fordblks'.

Change-Id: I68bff7b1b58f0ec2669db0b911f19c1c5a26ed30
Reported-by: Steven J. Hill <[email protected]>
Signed-off-by: Antonio Borneo <[email protected]>
Reviewed-on: https://review.openocd.org/c/openocd/+/8589
Tested-by: jenkins
  • Loading branch information
borneoa committed Jan 25, 2025
1 parent 8038e2f commit fceccde
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions src/helper/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,18 @@
#else
#error "malloc.h is required to use --enable-malloc-logging"
#endif

#ifdef __GLIBC__
#if __GLIBC_PREREQ(2, 33)
#define FORDBLKS_FORMAT " %zu"
#else
/* glibc older than 2.33 (2021-02-01) use mallinfo(). Overwrite it */
#define mallinfo2 mallinfo
#define FORDBLKS_FORMAT " %d"
#endif
#else
#error "GNU glibc is required to use --enable-malloc-logging"
#endif
#endif

int debug_level = LOG_LVL_INFO;
Expand Down Expand Up @@ -105,12 +117,11 @@ static void log_puts(enum log_levels level,
/* print with count and time information */
int64_t t = timeval_ms() - start;
#ifdef _DEBUG_FREE_SPACE_
struct mallinfo info;
info = mallinfo();
struct mallinfo2 info = mallinfo2();
#endif
fprintf(log_output, "%s%d %" PRId64 " %s:%d %s()"
#ifdef _DEBUG_FREE_SPACE_
" %d"
FORDBLKS_FORMAT
#endif
": %s", log_strings[level + 1], count, t, file, line, function,
#ifdef _DEBUG_FREE_SPACE_
Expand Down

0 comments on commit fceccde

Please sign in to comment.