#ifndef COMMON_H #define COMMON_H #include <libelf.h> #include <elf.h> #define unlikely(expr) __builtin_expect (expr, 0) #define likely(expr) __builtin_expect (expr, 1) #define MIN(a,b) ((a)<(b)?(a):(b)) /* no side effects in arguments allowed! */ typedef int (*section_match_fn_t)(Elf *, Elf_Scn *, void *); void map_over_sections(Elf *, section_match_fn_t, void *); typedef int (*segment_match_fn_t)(Elf *, Elf32_Phdr *, void *); void map_over_segments(Elf *, segment_match_fn_t, void *); typedef struct { Elf_Scn *sect; Elf32_Shdr *hdr; Elf_Data *data; size_t index; } section_info_t; static inline void get_section_info(Elf_Scn *sect, section_info_t *info) { info->sect = sect; info->data = elf_getdata(sect, 0); info->hdr = elf32_getshdr(sect); info->index = elf_ndxscn(sect); } static inline int is_host_little(void) { short val = 0x10; return ((char *)&val)[0] != 0; } static inline long switch_endianness(long val) { long newval; ((char *)&newval)[3] = ((char *)&val)[0]; ((char *)&newval)[2] = ((char *)&val)[1]; ((char *)&newval)[1] = ((char *)&val)[2]; ((char *)&newval)[0] = ((char *)&val)[3]; return newval; } #endif/*COMMON_H*/