mirror of
https://github.com/apache/nuttx.git
synced 2026-05-21 04:52:02 +08:00
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:
committed by
Alan Carvalho de Assis
parent
6e66603da5
commit
e1f45857e3
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 *);
|
||||
|
||||
Reference in New Issue
Block a user