elf
elf = elf_begin(fd, ELF_C_READ, NULL);
if (elf == NULL) {
elf_end(elf);
if (gelf_getehdr(elf, &ehdr) == NULL) {
elf_end(elf);
while ((scn = elf_nextscn(elf, scn)) != NULL) {
elf_strptr(elf, shdr.sh_link, sym.st_name),
elf_strptr(elf, shdr.sh_link, sym.st_name));
elf_end(elf);
elf_end(elf);
Elf *elf;
#define ELFNAME(x) CONCAT(elf,CONCAT(ELFSIZE,CONCAT(_,x)))
Elf32_Ehdr elf;
if (Mem::Compare((TUint8 *)hdr.elf.e_ident, SELFMAG,
#define ELFNAME(x) CONCAT(elf,CONCAT(ELFSIZE,CONCAT(_,x)))
Elf_Ehdr elf;
if (header.elf.e_ident[EI_MAG0] == ELFMAG0 &&
header.elf.e_ident[EI_MAG1] == ELFMAG1 &&
header.elf.e_ident[EI_MAG2] == ELFMAG2 &&
header.elf.e_ident[EI_MAG3] == ELFMAG3)
Elf_Ehdr elfx, *elf = &elfx;
if (read(fd, (void*)elf, sizeof(Elf_Ehdr)) != sizeof(Elf_Ehdr)) {
if ((phtbl = (Elf_Phdr *)alloc(sizeof(*phtbl) * elf->e_phnum)) == NULL ||
(shtbl = (Elf_Shdr *)alloc(sizeof(*shtbl) * elf->e_shnum)) == NULL) {
if (lseek(fd, elf->e_phoff, SEEK_SET) == -1) {
if (read(fd, (void *)phtbl, sizeof(Elf_Phdr) * elf->e_phnum)
!= (int)(sizeof(Elf_Phdr) * elf->e_phnum)) {
if (lseek(fd, elf->e_shoff, SEEK_SET) == -1) {
if (read(fd, (void *)shtbl, sizeof(Elf_Shdr) * elf->e_shnum)
!= (int)(sizeof(Elf_Shdr) * elf->e_shnum)) {
for (i = 0; i < elf->e_phnum; i++) {
elf->e_entry, min_addr, max_addr);
for (i = 0; i < elf->e_shnum; i++) {
memcpy(dbg_eh.e_ident, elf->e_ident,
sizeof(elf->e_ident));
dbg_eh.e_machine = elf->e_machine;
dbg_eh.e_version = elf->e_version;
dbg_eh.e_flags = elf->e_flags;
if (phtbl) dealloc(phtbl, sizeof(*phtbl) * elf->e_phnum);
if (shtbl) dealloc(shtbl, sizeof(*shtbl) * elf->e_shnum);
if (entry) *entry = (void *)elf->e_entry;
if (phtbl) dealloc(phtbl, sizeof(*phtbl) * elf->e_phnum);
if (shtbl) dealloc(shtbl, sizeof(*shtbl) * elf->e_shnum);
Elf32_Ehdr elf;
} else if (memcmp(hdr.elf.e_ident, ELFMAG, SELFMAG) == 0) {
size_t off = sizeof(hdr.elf);
read(io, (char *)&hdr.elf + sizeof(hdr.aout),
sizeof(hdr.elf) - sizeof(hdr.aout));
if (hdr.elf.e_machine != EM_VAX || hdr.elf.e_type != ET_EXEC
|| hdr.elf.e_phnum != 1)
entry = hdr.elf.e_entry;
if (hdr.elf.e_phoff != sizeof(hdr.elf))
read(io, (void *) hdr.elf.e_entry, ph.p_filesz);
memset((void *) (hdr.elf.e_entry + ph.p_filesz), 0,
#define phdr ((Elf32_Phdr *)((char *)elf + elf->e_phoff))
if (memcmp(elf->e_ident, ELFMAG, SELFMAG) != 0 ||
elf->e_ident[EI_CLASS] != ELFCLASS32)
for (i = 0; i < elf->e_phnum; i++) {
sz = elf->e_shnum * sizeof(Elf_Shdr);
shp = (Elf_Shdr *)((vaddr_t)elf + elf->e_shoff);
for (havesyms = i = 0; i < elf->e_shnum; i++)
for (i = 0; i < elf->e_shnum; i++) {
((char *)elf +
((char *)elfv)[sz] = ((char *)elf)[sz];
sz = elf->e_shnum * sizeof(Elf_Shdr);
for (i = 0; esymp != 0 && i < elf->e_phnum; i++) {
for (i = 0; i < elf->e_phnum; i++) {
(((char *)elf) + phdr[i].p_offset)[sz];
addr = (int *)(elf->e_entry);
Elf_Ehdr *elf;
elf = (Elf_Ehdr *)symtab;
if (memcmp(elf->e_ident, ELFMAG, SELFMAG) != 0 ||
elf->e_ident[EI_CLASS] != ELFCLASS)
switch (elf->e_machine) {
if (elf->e_shoff == 0)
shp = (Elf_Shdr *)((char *)symtab + elf->e_shoff);
for (i = 0; i < elf->e_shnum; i++) {
Elf_Ehdr *elf = STAB_TO_EHDR(stab);
Elf_Shdr *shp = STAB_TO_SHDR(stab, elf);
if ((Elf_Sym *)elf == STAB_TO_SYMSTART(stab)) {
for (i = 0; i < elf->e_shnum; i++) {
return ((char*)elf + shp[shp[i].sh_link].sh_offset);
ELFNAMEEND(loadfile_dynamic)(int fd, Elf_Ehdr *elf, u_long *marks, int flags)
internalize_ehdr(elf->e_ident[EI_DATA], elf);
if (elf->e_type != ET_REL) {
shdrsz = elf->e_shnum * sizeof(Elf_Shdr);
ret = ELFNAMEEND(readfile_local)(fd, elf->e_shoff, shdr, shdrsz);
elf->e_phoff = 0;
elf->e_shoff = sizeof(Elf_Ehdr);
elf->e_phentsize = 0;
elf->e_phnum = 0;
externalize_ehdr(elf->e_ident[EI_DATA], elf);
BCOPY(elf, elfp, sizeof(*elf));
internalize_ehdr(elf->e_ident[EI_DATA], elf);
for (i = 0; i < elf->e_shnum; i++)
internalize_shdr(elf->e_ident[EI_DATA], &shdr[i]);
for (i = 0; i < elf->e_shnum; i++) {
for (i = 0; i < elf->e_shnum; i++) {
for (j = 0; j < elf->e_shnum; j++)
if (elf->e_shstrndx == i)
for (i = 0; i < elf->e_shnum; i++)
externalize_shdr(elf->e_ident[EI_DATA], &shdr[i]);
ELFNAMEEND(loadsym)(int fd, Elf_Ehdr *elf, Elf_Addr maxp, Elf_Addr elfp,
sz = elf->e_shnum * sizeof(Elf_Shdr);
ret = ELFNAMEEND(readfile_local)(fd, elf->e_shoff, shp, sz);
for (i = 0; i < elf->e_shnum; i++)
internalize_shdr(elf->e_ident[EI_DATA], &shp[i]);
if (boot_load_ctf && (elf->e_shstrndx != SHN_UNDEF)) {
Elf_Off shstroff = shp[elf->e_shstrndx].sh_offset;
shstrsz = shp[elf->e_shstrndx].sh_size;
shp[elf->e_shstrndx].sh_offset = maxp - elfp;
for (i = 1; i < elf->e_shnum; i++) {
if (i == elf->e_shstrndx) {
for (j = 1; j < elf->e_shnum; j++)
for (i = 0; i < elf->e_shnum; i++)
externalize_shdr(elf->e_ident[EI_DATA], &shp[i]);
ELFNAMEEND(loadfile_static)(int fd, Elf_Ehdr *elf, u_long *marks, int flags)
internalize_ehdr(elf->e_ident[EI_DATA], elf);
if (elf->e_type != ET_EXEC) {
sz = elf->e_phnum * sizeof(Elf_Phdr);
ret = ELFNAMEEND(readfile_local)(fd, elf->e_phoff, phdr, sz);
for (i = 0; i < elf->e_phnum; i++) {
internalize_phdr(elf->e_ident[EI_DATA], &phdr[i]);
if (ELFNAMEEND(loadsym)(fd, elf, maxp, elfp, marks, flags,
elf->e_phoff = 0;
elf->e_shoff = sizeof(Elf_Ehdr);
elf->e_phentsize = 0;
elf->e_phnum = 0;
externalize_ehdr(elf->e_ident[EI_DATA], elf);
BCOPY(elf, elfp, sizeof(*elf));
internalize_ehdr(elf->e_ident[EI_DATA], elf);
marks[MARK_ENTRY] = LOADADDR(elf->e_entry);
ELFNAMEEND(loadfile)(int fd, Elf_Ehdr *elf, u_long *marks, int flags)
return ELFNAMEEND(loadfile_dynamic)(fd, elf, marks, flags);
return ELFNAMEEND(loadfile_static)(fd, elf, marks, flags);
Elf_Ehdr *elf;
elf = sstab;
if (elf->e_shoff == 0)
switch (elf->e_machine) {
shp = (Elf_Shdr *)((char *)sstab + elf->e_shoff);
for (i = 0; i < elf->e_shnum; i++) {
#define ELFNAME(x) CONCAT(elf,CONCAT(ELFSIZE,CONCAT(_,x)))
#define ELFNAME(x) CONCAT(elf,CONCAT(ELFSIZE,CONCAT(_,x)))
#define ELFNAME(x) CONCAT(elf,CONCAT(ELFSIZE,CONCAT(_,x)))
#define ELFNAME(x) CONCAT(elf,CONCAT(ELFSIZE,CONCAT(_,x)))
void *elf;
elf = malloc(sz);
if (elf == NULL) {
sz = read(fd, elf, sz);
elf = mmap(NULL, sz, PROT_READ, MAP_PRIVATE|MAP_FILE, fd, 0);
if (elf == MAP_FAILED) {
ddb_init(sz, elf, (char *)elf + sz);