From dc2190d477b8fe4145170f3a029d9b53c2157140 Mon Sep 17 00:00:00 2001 From: Merlin Scholz Date: Mon, 29 May 2023 01:33:11 +0200 Subject: Add file, line, func logging for memory allocs/frees --- sys/sys/lockdoc.h | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/sys/sys/lockdoc.h b/sys/sys/lockdoc.h index e599787bb78..7a2c4d4d7cd 100644 --- a/sys/sys/lockdoc.h +++ b/sys/sys/lockdoc.h @@ -78,18 +78,26 @@ krw_t rw_lock_op(krwlock_t *rw); #define x86_disable_intr() __x86_disable_intr(__FILE__, __LINE__, __func__) #define x86_enable_intr() __x86_enable_intr(__FILE__, __LINE__, __func__) +/* + * TODO Why no __func__ here? + */ #define trace_irqs_on() __trace_irqs_on(__FILE__, __LINE__) #define trace_irqs_on_check(frame) __trace_irqs_on_check(frame, __FILE__, __LINE__) #define trace_irqs_off() __trace_irqs_off(__FILE__, __LINE__) #define trace_irqs_off_check(frame) __trace_irqs_off_check(frame, __FILE__, __LINE__) +/* + * Define LOCKDOC_LOG_MEMORY to automatically include file, line and function + */ + +#define lockdoc_log_memory(alloc, datatype, ptr, size) __lockdoc_log_memory(alloc, datatype, ptr, size, __FILE__, __LINE__, __func__) static inline void lockdoc_outb(u_int8_t v, u_int16_t port) { __asm __volatile("outb %0,%1" : : "a" (v), "dN" (port)); } -static inline void lockdoc_log_memory(int alloc, const char *datatype, const void *ptr, size_t size) { +static inline void __lockdoc_log_memory(int alloc, const char *datatype, const void *ptr, size_t size, const char *file, int line, const char* func) { u_long eflags; eflags = x86_read_flags(); _x86_disable_intr(); @@ -101,6 +109,13 @@ static inline void lockdoc_log_memory(int alloc, const char *datatype, const voi la_buffer.size = size; la_buffer.ctx = lockdoc_get_ctx(); + // file + strncpy(la_buffer.file, file, LOG_CHAR_BUFFER_LEN); + la_buffer.file[LOG_CHAR_BUFFER_LEN - 1] = '\0'; + la_buffer.line = line; + strncpy(la_buffer.function, func, LOG_CHAR_BUFFER_LEN); + la_buffer.function[LOG_CHAR_BUFFER_LEN - 1] = '\0'; + /* * One could use a more safe string function, e.g., strlcpy. * However, we want these *log* functions to be fast. -- cgit