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
168 const struct elfloader_output_ops *ops;
182 unsigned int type,
int size);
194 unsigned int type,
void *
addr,
int size);
221 #define elfloader_output_alloc_segment(output, type, size) \
222 ((output)->ops->allocate_segment(output, type, size))
224 #define elfloader_output_start_segment(output, type, addr, size) \
225 ((output)->ops->start_segment(output, type, addr, size))
227 #define elfloader_output_end_segment(output) \
228 ((output)->ops->end_segment(output))
230 #define elfloader_output_write_segment(output, buf, len) \
231 ((output)->ops->write_segment(output, buf, len))
233 #define elfloader_output_segment_offset(output) \
234 ((output)->ops->segment_offset(output))
237 struct elfloader_output_ops {
239 unsigned int type,
int size);
241 unsigned int type,
void *
addr,
int size);
281 #ifdef ELFLOADER_CONF_DATAMEMORY_SIZE
282 #define ELFLOADER_DATAMEMORY_SIZE ELFLOADER_CONF_DATAMEMORY_SIZE
284 #define ELFLOADER_DATAMEMORY_SIZE 0x100
287 #ifdef ELFLOADER_CONF_TEXTMEMORY_SIZE
288 #define ELFLOADER_TEXTMEMORY_SIZE ELFLOADER_CONF_TEXTMEMORY_SIZE
290 #define ELFLOADER_TEXTMEMORY_SIZE 0x100
293 typedef unsigned long elf32_word;
294 typedef signed long elf32_sword;
295 typedef unsigned short elf32_half;
296 typedef unsigned long elf32_off;
297 typedef unsigned long elf32_addr;
302 elf32_sword r_addend;
char elfloader_unknown[30]
If elfloader_load() could not find a specific symbol, it is copied into this array.
static uip_ds6_addr_t * addr
Pointer to a router list entry.
struct process ** elfloader_autostart_processes
A pointer to the processes loaded with elfloader_load().
int elfloader_end_segment(struct elfloader_output *output)
Mark end of segment.
unsigned int elfloader_segment_offset(struct elfloader_output *output)
Get the current offset in the file where the next data will be written.
void elfloader_init(void)
elfloader initialization function.
int elfloader_load(int input_fd, struct elfloader_output *output)
Load and relocate an ELF file.
int elfloader_start_segment(struct elfloader_output *output, unsigned int type, void *addr, int size)
Start writing to a new segment.
int elfloader_write_segment(struct elfloader_output *output, const char *buf, unsigned int len)
Write data to a segment.
static uint8_t output(const uip_lladdr_t *localdest)
Take an IP packet and format it to be sent on an 802.15.4 network using 6lowpan.
void * elfloader_allocate_segment(struct elfloader_output *output, unsigned int type, int size)
Allocate a new segment.