1 #ifndef DEBUG_H
2 #define DEBUG_H
3
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <common.h>
7
8 #ifdef DEBUG
9
10 #define FAILIF(cond, msg...) do { \
11 if (unlikely(cond)) { \
12 fprintf(stderr, "%s(%d): ", __FILE__, __LINE__); \
13 fprintf(stderr, ##msg); \
14 exit(1); \
15 } \
16 } while(0)
17
18 /* Debug enabled */
19 #define ASSERT(x) do { \
20 if (unlikely(!(x))) { \
21 fprintf(stderr, \
22 "ASSERTION FAILURE %s:%d: [%s]\n", \
23 __FILE__, __LINE__, #x); \
24 exit(1); \
25 } \
26 } while(0)
27
28 #else
29
30 #define FAILIF(cond, msg...) do { \
31 if (unlikely(cond)) { \
32 fprintf(stderr, ##msg); \
33 exit(1); \
34 } \
35 } while(0)
36
37 /* No debug */
38 #define ASSERT(x) do { } while(0)
39
40 #endif/* DEBUG */
41
42 #define FAILIF_LIBELF(cond, function) \
43 FAILIF(cond, "%s(): %s\n", #function, elf_errmsg(elf_errno()));
44
MALLOC(unsigned int size)45 static inline void *MALLOC(unsigned int size) {
46 void *m = malloc(size);
47 FAILIF(NULL == m, "malloc(%d) failed!\n", size);
48 return m;
49 }
50
CALLOC(unsigned int num_entries,unsigned int entry_size)51 static inline void *CALLOC(unsigned int num_entries, unsigned int entry_size) {
52 void *m = calloc(num_entries, entry_size);
53 FAILIF(NULL == m, "calloc(%d, %d) failed!\n", num_entries, entry_size);
54 return m;
55 }
56
REALLOC(void * ptr,unsigned int size)57 static inline void *REALLOC(void *ptr, unsigned int size) {
58 void *m = realloc(ptr, size);
59 FAILIF(NULL == m, "realloc(%p, %d) failed!\n", ptr, size);
60 return m;
61 }
62
FREE(void * ptr)63 static inline void FREE(void *ptr) {
64 free(ptr);
65 }
66
FREEIF(void * ptr)67 static inline void FREEIF(void *ptr) {
68 if (ptr) FREE(ptr);
69 }
70
71 #define PRINT(x...) do { \
72 extern int quiet_flag; \
73 if(likely(!quiet_flag)) \
74 fprintf(stdout, ##x); \
75 } while(0)
76
77 #define ERROR(x...) fprintf(stderr, ##x)
78
79 #define INFO(x...) do { \
80 extern int verbose_flag; \
81 if(unlikely(verbose_flag)) \
82 fprintf(stdout, ##x); \
83 } while(0)
84
85 /* Prints a hex and ASCII dump of the selected buffer to the selected stream. */
86 int dump_hex_buffer(FILE *s, void *b, size_t l, size_t elsize);
87
88 #endif/*DEBUG_H*/
89