compiler.h: Add malloc_like? and realloc_like macro

and apply them to the related functions

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
Xiang Xiao
2022-12-12 16:03:43 +08:00
committed by Alan Carvalho de Assis
parent 6e66603da5
commit e1f45857e3
5 changed files with 56 additions and 20 deletions
+35
View File
@@ -233,6 +233,20 @@
# define used_code __attribute__((used))
# define used_data __attribute__((used))
/* The allocation function annonations */
# if __GNUC__ >= 11
# define malloc_like __attribute__((__malloc__(__builtin_free, 1)))
# define malloc_like1(a) __attribute__((__malloc__(__builtin_free, 1))) __attribute__((__alloc_size__(a)))
# define malloc_like2(a, b) __attribute__((__malloc__(__builtin_free, 1))) __attribute__((__alloc_size__(a, b)))
# define realloc_like(a) __attribute__((__alloc_size__(a)))
# else
# define malloc_like __attribute__((__malloc__))
# define malloc_like1(a) __attribute__((__malloc__)) __attribute__((__alloc_size__(a)))
# define malloc_like2(a, b) __attribute__((__malloc__)) __attribute__((__alloc_size__(a, b)))
# define realloc_like(a) __attribute__((__alloc_size__(a)))
# endif
/* Some versions of GCC have a separate __syslog__ format.
* http://mail-index.netbsd.org/source-changes/2015/10/14/msg069435.html
* Use it if available. Otherwise, assume __printf__ accepts %m.
@@ -481,6 +495,11 @@
# define used_code
# define used_data
# define malloc_like
# define malloc_like1(a)
# define malloc_like2(a, b)
# define realloc_like(a)
# define formatlike(a)
# define printflike(a, b)
# define sysloglike(a, b)
@@ -612,6 +631,10 @@
# define unused_data
# define used_code
# define used_data
# define malloc_like
# define malloc_like1(a)
# define malloc_like2(a, b)
# define realloc_like(a)
# define formatlike(a)
# define printflike(a, b)
# define sysloglike(a, b)
@@ -714,6 +737,10 @@
# define unused_data
# define used_code
# define used_data
# define malloc_like
# define malloc_like1(a)
# define malloc_like2(a, b)
# define realloc_like(a)
# define formatlike(a)
# define printflike(a, b)
# define sysloglike(a, b)
@@ -795,6 +822,10 @@
# define unused_data
# define used_code
# define used_data
# define malloc_like
# define malloc_like1(a)
# define malloc_like2(a, b)
# define realloc_like(a)
# define formatlike(a)
# define printflike(a, b)
# define sysloglike(a, b)
@@ -851,6 +882,10 @@
# define unused_data
# define used_code
# define used_data
# define malloc_like
# define malloc_like1(a)
# define malloc_like2(a, b)
# define realloc_like(a)
# define formatlike(a)
# define printflike(a, b)
# define sysloglike(a, b)
+11 -10
View File
@@ -180,12 +180,12 @@ void kmm_addregion(FAR void *heapstart, size_t heapsize);
/* Functions contained in mm_malloc.c ***************************************/
FAR void *mm_malloc(FAR struct mm_heap_s *heap, size_t size);
FAR void *mm_malloc(FAR struct mm_heap_s *heap, size_t size) malloc_like1(2);
/* Functions contained in kmm_malloc.c **************************************/
#ifdef CONFIG_MM_KERNEL_HEAP
FAR void *kmm_malloc(size_t size);
FAR void *kmm_malloc(size_t size) malloc_like1(1);
#endif
/* Functions contained in mm_malloc_size.c **********************************/
@@ -211,32 +211,33 @@ void kmm_free(FAR void *mem);
/* Functions contained in mm_realloc.c **************************************/
FAR void *mm_realloc(FAR struct mm_heap_s *heap, FAR void *oldmem,
size_t size);
size_t size) realloc_like(3);
/* Functions contained in kmm_realloc.c *************************************/
#ifdef CONFIG_MM_KERNEL_HEAP
FAR void *kmm_realloc(FAR void *oldmem, size_t newsize);
FAR void *kmm_realloc(FAR void *oldmem, size_t newsize) realloc_like(2);
#endif
/* Functions contained in mm_calloc.c ***************************************/
FAR void *mm_calloc(FAR struct mm_heap_s *heap, size_t n, size_t elem_size);
FAR void *mm_calloc(FAR struct mm_heap_s *heap, size_t n,
size_t elem_size) malloc_like2(2, 3);
/* Functions contained in kmm_calloc.c **************************************/
#ifdef CONFIG_MM_KERNEL_HEAP
FAR void *kmm_calloc(size_t n, size_t elem_size);
FAR void *kmm_calloc(size_t n, size_t elem_size) malloc_like2(1, 2);
#endif
/* Functions contained in mm_zalloc.c ***************************************/
FAR void *mm_zalloc(FAR struct mm_heap_s *heap, size_t size);
FAR void *mm_zalloc(FAR struct mm_heap_s *heap, size_t size) malloc_like1(2);
/* Functions contained in kmm_zalloc.c **************************************/
#ifdef CONFIG_MM_KERNEL_HEAP
FAR void *kmm_zalloc(size_t size);
FAR void *kmm_zalloc(size_t size) malloc_like1(1);
#endif
/* Functions contained in kmm_memdump.c *************************************/
@@ -248,12 +249,12 @@ void kmm_memdump(pid_t pid);
/* Functions contained in mm_memalign.c *************************************/
FAR void *mm_memalign(FAR struct mm_heap_s *heap, size_t alignment,
size_t size);
size_t size) malloc_like1(3);
/* Functions contained in kmm_memalign.c ************************************/
#ifdef CONFIG_MM_KERNEL_HEAP
FAR void *kmm_memalign(size_t alignment, size_t size);
FAR void *kmm_memalign(size_t alignment, size_t size) malloc_like1(2);
#endif
/* Functions contained in mm_heapmember.c ***********************************/
+1 -1
View File
@@ -229,7 +229,7 @@ int vdprintf(int fd, FAR const IPTR char *fmt, va_list ap)
FAR FILE *tmpfile(void);
FAR char *tmpnam(FAR char *s);
FAR char *tempnam(FAR const char *dir, FAR const char *pfx);
FAR char *tempnam(FAR const char *dir, FAR const char *pfx) malloc_like;
int remove(FAR const char *path);
/* Shell operations. These are not actually implemented in the OS. See
+7 -7
View File
@@ -213,14 +213,14 @@ size_t wcstombs(FAR char *dst, FAR const wchar_t *src, size_t len);
/* Memory Management */
FAR void *malloc(size_t);
FAR void *valloc(size_t);
FAR void *malloc(size_t) malloc_like1(1);
FAR void *valloc(size_t) malloc_like1(1);
void free(FAR void *);
FAR void *realloc(FAR void *, size_t);
FAR void *memalign(size_t, size_t);
FAR void *zalloc(size_t);
FAR void *calloc(size_t, size_t);
FAR void *aligned_alloc(size_t, size_t);
FAR void *realloc(FAR void *, size_t) realloc_like(2);
FAR void *memalign(size_t, size_t) malloc_like1(2);
FAR void *zalloc(size_t) malloc_like1(1);
FAR void *calloc(size_t, size_t) malloc_like2(1, 2);
FAR void *aligned_alloc(size_t, size_t) malloc_like1(2);
int posix_memalign(FAR void **, size_t, size_t);
/* Pseudo-Terminals */
+2 -2
View File
@@ -51,8 +51,8 @@ extern "C"
#define EXTERN extern
#endif
FAR char *strdup(FAR const char *s);
FAR char *strndup(FAR const char *s, size_t size);
FAR char *strdup(FAR const char *s) malloc_like;
FAR char *strndup(FAR const char *s, size_t size) malloc_like;
FAR char *strerror(int);
int strerror_r(int, FAR char *, size_t);
size_t strlen(FAR const char *);