Loading...
--- libmalloc/libmalloc-140.50.6/src/printf.h
+++ libmalloc/libmalloc-792.41.1/src/printf.h
@@ -21,11 +21,78 @@
* @APPLE_LICENSE_HEADER_END@
*/
-extern void malloc_printf(const char *fmt, ...);
+#include <stdarg.h>
+#include <stdint.h>
-#define MALLOC_PRINTF_LEVEL_MASK 0x0f
-#define MALLOC_PRINTF_NOLOG 0x10
-#define MALLOC_PRINTF_NOPREFIX 0x20
+#include <malloc/_ptrcheck.h>
+__ptrcheck_abi_assume_single()
-extern void _malloc_printf(int flags, const char *fmt, ...);
-extern void _malloc_vprintf(int flags, const char *fmt, va_list ap);
+#define MALLOC_REPORT_NOLOG 0x010
+#define MALLOC_REPORT_NOPREFIX 0x020
+#define MALLOC_REPORT_CRASH 0x040
+#define MALLOC_REPORT_DEBUG 0x080
+#define MALLOC_REPORT_BACKTRACE 0x100
+#define MALLOC_REPORT_NOWRITE 0x200
+
+#define MALLOC_REPORT_LOG_ONLY \
+ (MALLOC_REPORT_NOPREFIX | MALLOC_REPORT_NOWRITE)
+
+// Most internal logging should use malloc_report() or malloc_vreport(). The
+// flags argument should be a combination of the MALLOC_REPORT_xxx values and
+// an optional log level encoded using the ASL_LEVEL_xxx constants. The log
+// level is ignored if MALLOC_REPORT_NOLOG is set.
+//
+// The flags do the following:
+// MALLOC_REPORT_NOLOG:
+// Does not send the text to _simple_asl_log().
+// MALLOC_REPORT_NO_PREFIX:
+// Does not write the program name, pid and thread identifier before
+// the report text.
+// MALLOC_REPORTDEBUG:
+// includes text suggesting that a breakpoint could be set
+// on malloc_error_break() to debug this kind of error.
+// MALLOC_REPORT_CRASH:
+// Same as MALLOC_REPORTDEBUG, but crashes after writing the report
+// message.
+// MALLOC_REPORT_BACKTRACE:
+// Append a UUID+offset backtrace to the report text.
+// MALLOC_REPORT_NOWRITE:
+// Does not send the text to malloc_debug_file.
+//
+// In addition, if MALLOC_REPORT_CRASH or MALLOC_REPORTDEBUG are specified, this
+// function will sleep for an hour or send a SIGSTOP signal to the process if
+// the MallocErrorSleep and MallocErrorStop environment variables were set and
+// the report text will include a message indicating that this is
+// happening. In the case of MALLOC_REPORT_CRASH, the crash occurs after all of
+// the other actions have completed.
+MALLOC_NOEXPORT MALLOC_NOINLINE void
+malloc_report(uint32_t flags, const char * __null_terminated fmt, ...) __printflike(2,3);
+
+// Like malloc_report(), but does not send the text to _simple_asl_log() and
+// does not write the program name, pid and thread identifier before the report
+// text. Equivalent to malloc_report(MALLOC_REPORT_NOLOG|MALLOC_REPORT_NO_PREFIX)
+MALLOC_NOEXPORT MALLOC_NOINLINE void
+malloc_report_simple(const char * __null_terminated fmt, ...) __printflike(1,2);
+
+// Like malloc_report(), but precedes the output message with prefix_msg
+// as a format string using prefix_arg as a single substition parameter,
+// allows the length of time to sleep while reporting an error to be
+// specified and passes the arguments to the fmt parameter in a va_list.
+MALLOC_NOEXPORT MALLOC_NOINLINE void
+malloc_vreport(uint32_t flags, unsigned sleep_time, const char * __null_terminated prefix_msg,
+ const void *prefix_arg, const char * __null_terminated fmt, va_list ap) __printflike(5,0);
+
+// Higher-level functions used by zone implementations to report errors.
+MALLOC_NOEXPORT MALLOC_NOINLINE void
+malloc_zone_error(uint32_t flags, bool is_corruption, const char * __null_terminated fmt, ...) __printflike(3,4);
+
+MALLOC_NOEXPORT MALLOC_NOINLINE void
+malloc_zone_check_fail(const char * __null_terminated msg, const char * __null_terminated fmt, ...) __printflike(2,3);
+
+// Configures where malloc logging goes based on environment variables. By
+// default, goes to stderr if it's a tty, and is otherwise dropped.
+MALLOC_NOEXPORT void
+malloc_print_configure(bool restricted);
+
+MALLOC_NOEXPORT unsigned
+_malloc_default_debug_sleep_time(void);