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 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 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 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 63 static inline void FREE(void *ptr) { 64 free(ptr); 65 } 66 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 #define PUTCHAR(c) do { \ 86 extern int verbose_flag; \ 87 if(unlikely(verbose_flag)) \ 88 putc((c), stdout); \ 89 } while(0) 90 91 /* Prints a hex and ASCII dump of the selected buffer to the selected stream. */ 92 int dump_hex_buffer(FILE *s, void *b, size_t l, size_t elsize); 93 94 #endif/*DEBUG_H*/ 95