1 #ifndef COMMON_H 2 #define COMMON_H 3 4 #include <libelf.h> 5 #include <elf.h> 6 7 #define unlikely(expr) __builtin_expect (expr, 0) 8 #define likely(expr) __builtin_expect (expr, 1) 9 10 #define MIN(a,b) ((a)<(b)?(a):(b)) /* no side effects in arguments allowed! */ 11 12 typedef int (*section_match_fn_t)(Elf *, Elf_Scn *, void *); 13 void map_over_sections(Elf *, section_match_fn_t, void *); 14 15 typedef int (*segment_match_fn_t)(Elf *, Elf32_Phdr *, void *); 16 void map_over_segments(Elf *, segment_match_fn_t, void *); 17 18 typedef struct { 19 Elf_Scn *sect; 20 Elf32_Shdr *hdr; 21 Elf_Data *data; 22 size_t index; 23 } section_info_t; 24 25 static inline void get_section_info(Elf_Scn *sect, section_info_t *info) 26 { 27 info->sect = sect; 28 info->data = elf_getdata(sect, 0); 29 info->hdr = elf32_getshdr(sect); 30 info->index = elf_ndxscn(sect); 31 } 32 33 static inline int is_host_little(void) 34 { 35 short val = 0x10; 36 return ((char *)&val)[0] != 0; 37 } 38 39 static inline long switch_endianness(long val) 40 { 41 long newval; 42 ((char *)&newval)[3] = ((char *)&val)[0]; 43 ((char *)&newval)[2] = ((char *)&val)[1]; 44 ((char *)&newval)[1] = ((char *)&val)[2]; 45 ((char *)&newval)[0] = ((char *)&val)[3]; 46 return newval; 47 } 48 49 #endif/*COMMON_H*/ 50