2 * common.h - Common internal operations performed by the module subsystem
4 * Created on: Aug 11, 2008
5 * Author: Stefan Bucur <stefanb@zytor.com>
13 #include <sys/module.h>
14 #include <linux/list.h>
18 // Performs an operation and jumps to a given label if an error occurs
19 #define CHECKED(res, expr, error) \
26 #define MIN(x,y) (((x) < (y)) ? (x) : (y))
27 #define MAX(x,y) (((x) > (y)) ? (x) : (y))
29 static inline Elf_Sym
*symbol_get_entry(struct elf_module
*module
, int entry
)
31 char *sym_table
= (char *)module
->sym_table
;
32 int index
= entry
* module
->syment_size
;
34 return (Elf_Sym
*)(sym_table
+ index
);
40 #define DBG_PRINT(fmt, args...) fprintf(stderr, "[ELF] " fmt, ##args)
42 #define DBG_PRINT(fmt, args...) // Expand to nothing
45 // User-space debugging routines
47 extern void print_elf_ehdr(Elf_Ehdr
*ehdr
);
48 extern void print_elf_symbols(struct elf_module
*module
);
53 * Image files manipulation routines
56 extern int image_load(struct elf_module
*module
);
57 extern int image_unload(struct elf_module
*module
);
58 extern int image_read(void *buff
, size_t size
, struct elf_module
*module
);
59 extern int image_skip(size_t size
, struct elf_module
*module
);
60 extern int image_seek(Elf_Off offset
, struct elf_module
*module
);
62 extern struct module_dep
*module_dep_alloc(struct elf_module
*module
);
64 extern int check_header_common(Elf_Ehdr
*elf_hdr
);
66 extern int enforce_dependency(struct elf_module
*req
, struct elf_module
*dep
);
67 extern int clear_dependency(struct elf_module
*req
, struct elf_module
*dep
);
69 extern int check_symbols(struct elf_module
*module
);
72 #endif /* COMMON_H_ */