57 DBGC (
image,
"ELF %s loading segment [%x,%x) to [%lx,%lx,%lx)\n",
64 DBGC (
image,
"ELF %s could not prepare segment: %s\n",
94 unsigned long e_offset;
115 DBGC (
image,
"ELF %s segment loads to physical address 0\n",
132 DBGC (
image,
"ELF %s found physical entry point at %lx\n",
137 *entry = (
dest + e_offset );
138 DBGC (
image,
"ELF %s found virtual entry point at %lx" 140 ( (
unsigned long ) ehdr->
e_entry ) );
177 ( (
image->
len - phoff ) < sizeof ( *phdr ) ) ) {
178 DBGC (
image,
"ELF %s program header %d outside " 184 entry,
max ) ) != 0 )
190 DBGC (
image,
"ELF %s entry point %lx outside image\n",
207 static const uint8_t e_ident[] = {
218 if (
image->
len < sizeof ( *ehdr ) ) {
219 DBGC (
image,
"ELF %s too short for ELF header\n",
224 if (
memcmp ( ehdr->
e_ident, e_ident, sizeof ( e_ident ) ) != 0 ) {
231 entry,
max ) ) != 0 )
struct arbelprm_rc_send_wqe rc
const void * data
Read-only data.
#define ENOEXEC
Exec format error.
uint32_t buffer
Buffer index (or NETVSC_RNDIS_NO_BUFFER)
static int elf_segment(struct image *image, const Elf_Ehdr *ehdr, const Elf_Phdr *phdr, int(*process)(struct image *image, const Elf_Phdr *phdr, physaddr_t dest), physaddr_t *entry, physaddr_t *max)
Process ELF segment.
int elf_segments(struct image *image, const Elf_Ehdr *ehdr, int(*process)(struct image *image, const Elf_Phdr *phdr, physaddr_t dest), physaddr_t *entry, physaddr_t *max)
Process ELF segments.
Executable image segments.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
Access to external ("user") memory.
int elf_load(struct image *image, physaddr_t *entry, physaddr_t *max)
Load ELF image into memory.
unsigned char e_ident[EI_NIDENT]
char * strerror(int errno)
Retrieve string representation of error number.
size_t len
Length of raw file image.
static int elf_load_segment(struct image *image, const Elf_Phdr *phdr, physaddr_t dest)
Load ELF segment into memory.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
uint32_t end
Ending offset.
int prep_segment(void *segment, size_t filesz, size_t memsz)
Prepare segment for loading.
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.