diff options
author | Marvin Borner | 2021-04-27 17:37:13 +0200 |
---|---|---|
committer | Marvin Borner | 2021-04-27 17:37:13 +0200 |
commit | b1a7c10ba575384e8f4ffb6b642783bfbcf51b32 (patch) | |
tree | 473394adf3c65da1d13060fb107da7249ebbe480 | |
parent | 6ab6e1d1568380f87bf0276cfac4487db553245b (diff) |
Better malloc optimizations
-rw-r--r-- | libs/libc/inc/assert.h | 3 | ||||
-rw-r--r-- | libs/libc/inc/def.h | 1 | ||||
-rw-r--r-- | libs/libc/inc/mem.h | 10 |
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 |