aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Borner2021-04-27 17:37:13 +0200
committerMarvin Borner2021-04-27 17:37:13 +0200
commitb1a7c10ba575384e8f4ffb6b642783bfbcf51b32 (patch)
tree473394adf3c65da1d13060fb107da7249ebbe480
parent6ab6e1d1568380f87bf0276cfac4487db553245b (diff)
Better malloc optimizations
-rw-r--r--libs/libc/inc/assert.h3
-rw-r--r--libs/libc/inc/def.h1
-rw-r--r--libs/libc/inc/mem.h10
3 files changed, 10 insertions, 4 deletions
diff --git a/libs/libc/inc/assert.h b/libs/libc/inc/assert.h
index fb5a857..6b35dd3 100644
--- a/libs/libc/inc/assert.h
+++ b/libs/libc/inc/assert.h
@@ -18,9 +18,10 @@
#elif defined(USER)
#define assert(exp) \
{ \
- if (!(exp)) \
+ if (!(exp)) { \
err(1, "%s:%d: %s: Assertion '%s' failed\n", __FILE__, __LINE__, __func__, \
#exp); \
+ } \
}
#endif
diff --git a/libs/libc/inc/def.h b/libs/libc/inc/def.h
index f1201b9..134d8bb 100644
--- a/libs/libc/inc/def.h
+++ b/libs/libc/inc/def.h
@@ -35,6 +35,7 @@ typedef unsigned long long u64;
#define NOINLINE ATTR((noinline))
#define DEPRECATED ATTR((deprecated))
#define NONNULL ATTR((nonnull))
+#define RET_NONNULL ATTR((returns_nonnull))
#define PURE ATTR((pure))
#define CONST ATTR((const))
#define FLATTEN ATTR((flatten))
diff --git a/libs/libc/inc/mem.h b/libs/libc/inc/mem.h
index de2a84f..63a1b14 100644
--- a/libs/libc/inc/mem.h
+++ b/libs/libc/inc/mem.h
@@ -5,12 +5,16 @@
#include <def.h>
-void *malloc_debug(u32 size, const char *file, int line, const char *func, const char *inp) NONNULL;
+ATTR((malloc))
+ATTR((alloc_size(1)))
+RET_NONNULL void *malloc_debug(u32 size, const char *file, int line, const char *func,
+ const char *inp) NONNULL;
+ATTR((malloc)) ATTR((alloc_size(2))) RET_NONNULL void *realloc(void *ptr, u32 size);
+ATTR((malloc)) ATTR((alloc_size(1))) RET_NONNULL void *zalloc(u32 size);
void free_debug(void *ptr, const char *file, int line, const char *func, const char *inp) NONNULL;
+
#define malloc(size) malloc_debug((u32)(size), __FILE__, __LINE__, __func__, #size)
#define free(ptr) free_debug((void *)(ptr), __FILE__, __LINE__, __func__, #ptr)
-void *realloc(void *ptr, u32 size);
-void *zalloc(u32 size);
#ifdef KERNEL
#define STACK_START 0x00500000 // Defined in bootloader