1 /* 2 * common.h - Common internal operations performed by the module subsystem 3 * 4 * Created on: Aug 11, 2008 5 * Author: Stefan Bucur <stefanb@zytor.com> 6 */ 7 8 #ifndef COMMON_H_ 9 #define COMMON_H_ 10 11 #include <stdio.h> 12 13 #include <sys/module.h> 14 #include <linux/list.h> 15 16 #include "elfutils.h" 17 18 // Performs an operation and jumps to a given label if an error occurs 19 #define CHECKED(res, expr, error) \ 20 do { \ 21 (res) = (expr); \ 22 if ((res) < 0) \ 23 goto error; \ 24 } while (0) 25 26 #define MIN(x,y) (((x) < (y)) ? (x) : (y)) 27 #define MAX(x,y) (((x) > (y)) ? (x) : (y)) 28 29 //#define ELF_DEBUG 30 31 #ifdef ELF_DEBUG 32 #define DBG_PRINT(fmt, args...) fprintf(stderr, "[ELF] " fmt, ##args) 33 #else 34 #define DBG_PRINT(fmt, args...) // Expand to nothing 35 #endif 36 37 // User-space debugging routines 38 #ifdef ELF_DEBUG 39 extern void print_elf_ehdr(Elf32_Ehdr * ehdr); 40 extern void print_elf_symbols(struct elf_module *module); 41 #endif //ELF_DEBUG 42 43 /* 44 * Image files manipulation routines 45 */ 46 47 extern int image_load(struct elf_module *module); 48 extern int image_unload(struct elf_module *module); 49 extern int image_read(void *buff, size_t size, struct elf_module *module); 50 extern int image_skip(size_t size, struct elf_module *module); 51 extern int image_seek(Elf32_Off offset, struct elf_module *module); 52 53 extern struct module_dep *module_dep_alloc(struct elf_module *module); 54 55 extern int check_header_common(Elf32_Ehdr * elf_hdr); 56 57 extern int enforce_dependency(struct elf_module *req, struct elf_module *dep); 58 extern int clear_dependency(struct elf_module *req, struct elf_module *dep); 59 60 extern int check_symbols(struct elf_module *module); 61 62 #endif /* COMMON_H_ */ 63