• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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