85 #define ELFLOADER_OK 0
90 #define ELFLOADER_BAD_ELF_HEADER 1
95 #define ELFLOADER_NO_SYMTAB 2
100 #define ELFLOADER_NO_STRTAB 3
105 #define ELFLOADER_NO_TEXT 4
113 #define ELFLOADER_SYMBOL_NOT_FOUND 5
118 #define ELFLOADER_SEGMENT_NOT_FOUND 6
123 #define ELFLOADER_NO_STARTPOINT 7
129 #define ELFLOADER_UNHANDLED_RELOC 8
135 #define ELFLOADER_OUTOF_RANGE 9
141 #define ELFLOADER_RELOC_NOT_SORTED 10
147 #define ELFLOADER_INPUT_ERROR 11
153 #define ELFLOADER_OUTPUT_ERROR 12
156 #define ELFLOADER_SEG_TEXT 1
157 #define ELFLOADER_SEG_RODATA 2
158 #define ELFLOADER_SEG_DATA 3
159 #define ELFLOADER_SEG_BSS 4
169 const struct elfloader_output_ops *ops;
183 unsigned int type,
int size);
196 unsigned int type,
void *addr,
int size);
225 #define elfloader_output_alloc_segment(output, type, size) \
226 ((output)->ops->allocate_segment(output, type, size))
228 #define elfloader_output_start_segment(output, type, addr, size) \
229 ((output)->ops->start_segment(output, type, addr, size))
231 #define elfloader_output_end_segment(output) \
232 ((output)->ops->end_segment(output))
234 #define elfloader_output_write_segment(output, buf, len) \
235 ((output)->ops->write_segment(output, buf, len))
237 #define elfloader_output_segment_offset(output) \
238 ((output)->ops->segment_offset(output))
241 struct elfloader_output_ops {
243 unsigned int type,
int size);
245 unsigned int type,
void *addr,
int size);
286 #ifdef ELFLOADER_CONF_DATAMEMORY_SIZE
287 #define ELFLOADER_DATAMEMORY_SIZE ELFLOADER_CONF_DATAMEMORY_SIZE
289 #define ELFLOADER_DATAMEMORY_SIZE 0x100
292 #ifdef ELFLOADER_CONF_TEXTMEMORY_SIZE
293 #define ELFLOADER_TEXTMEMORY_SIZE ELFLOADER_CONF_TEXTMEMORY_SIZE
295 #define ELFLOADER_TEXTMEMORY_SIZE 0x100
298 typedef unsigned long elf32_word;
299 typedef signed long elf32_sword;
300 typedef unsigned short elf32_half;
301 typedef unsigned long elf32_off;
302 typedef unsigned long elf32_addr;
307 elf32_sword r_addend;
int elfloader_start_segment(struct elfloader_output *output, unsigned int type, void *addr, int size)
Start writing to a new segment.
void elfloader_init(void)
elfloader initialization function.
unsigned int elfloader_segment_offset(struct elfloader_output *output)
Get the current offset in the file where the next data will be written.
int elfloader_end_segment(struct elfloader_output *output)
Mark end of segment.
int elfloader_load(int fd)
Load and relocate an ELF file.
void * elfloader_allocate_segment(struct elfloader_output *output, unsigned int type, int size)
Allocate a new segment.
cle_scratch elfloader_unknown
If elfloader_load() could not find a specific symbol, it is copied into this array.
struct process *const * elfloader_autostart_processes
A pointer to the processes loaded with elfloader_load().
int elfloader_write_segment(struct elfloader_output *output, const char *buf, unsigned int len)
Write data to a segment.