__elfN
#ifdef __elfN
extern uint64_t __elfN(relocation_offset);
int __elfN(reloc)(struct elf_file *ef, symaddr_fn *symaddr,
#ifdef __elfN
static const char __elfN(bad_symtable)[] = "elf" __XSTRING(__ELF_WORD_SIZE)
__elfN(lookup_symbol)(struct preloaded_file *fp __unused, elf_file_t ef,
printf(__elfN(bad_symtable));
printf(__elfN(bad_symtable));
__elfN(reloc_ptr)(struct preloaded_file *mp __unused, elf_file_t ef,
error = __elfN(reloc)(ef, __elfN(symaddr), &r, ELF_RELOC_REL,
error = __elfN(reloc)(ef, __elfN(symaddr), &a, ELF_RELOC_RELA,
__elfN(symaddr)(struct elf_file *ef __unused, Elf_Size symidx __unused)
__elfN(loadfile)(char *filename, uint64_t dest, struct preloaded_file **result)
return (__elfN(loadfile_raw)(filename, dest, result, 0));
__elfN(loadfile_raw)(char *filename, uint64_t dest,
err = __elfN(load_elf_header)(filename, &ef);
kfp = file_findfile(NULL, __elfN(kerneltype));
if (strcmp(__elfN(kerneltype), kfp->f_type)) {
__elfN(kerneltype) : __elfN(moduletype));
fp->f_size = __elfN(loadimage)(fp, &ef, dest);
__elfN(loadimage)(struct preloaded_file *fp, elf_file_t ef, uint64_t off)
__elfN(relocation_offset) = off;
static int __elfN(loadimage)(struct preloaded_file *, elf_file_t, uint64_t);
static int __elfN(lookup_symbol)(struct preloaded_file *, elf_file_t,
if (__elfN(lookup_symbol)(fp, ef, "__start_set_modmetadata_set",
if (__elfN(lookup_symbol)(fp, ef, "__stop_set_modmetadata_set",
if (__elfN(parse_modmetadata)(fp, ef, p_start, p_end) == 0)
static int __elfN(reloc_ptr)(struct preloaded_file *, elf_file_t,
static int __elfN(parse_modmetadata)(struct preloaded_file *, elf_file_t,
static symaddr_fn __elfN(symaddr);
__elfN(load_modmetadata)(struct preloaded_file *fp, uint64_t dest)
const char *__elfN(kerneltype) = "elf kernel";
err = __elfN(load_elf_header)(fp->f_name, &ef);
const char *__elfN(moduletype) = "elf module";
uint64_t __elfN(relocation_offset) = 0;
__elfN(load_elf_header)(char *filename, elf_file_t ef)
err = __elfN(parse_modmetadata)(fp, &ef, p_start, p_end);
__elfN(parse_modmetadata)(struct preloaded_file *fp, elf_file_t ef,
error = __elfN(reloc_ptr)(fp, ef, p, &v, sizeof (v));
error = __elfN(reloc_ptr)(fp, ef, v, &md64, sizeof (md64));
error = __elfN(reloc_ptr)(fp, ef, v, &md32, sizeof (md32));
error = __elfN(reloc_ptr)(fp, ef, v, &md, sizeof (md));
kfp = file_findfile(NULL, __elfN(obj_kerneltype));
fp->f_type = strdup(__elfN(obj_moduletype));
fp->f_size = __elfN(obj_loadimage)(fp, &ef, dest);
__elfN(obj_loadimage)(struct preloaded_file *fp, elf_file_t ef, u_int64_t off)
res = __elfN(obj_parse_modmetadata)(fp, ef);
__elfN(obj_parse_modmetadata)(struct preloaded_file *fp, elf_file_t ef)
if (__elfN(obj_lookup_set)(fp, ef, "modmetadata_set", &p, &p_stop,
error = __elfN(obj_reloc_ptr)(fp, ef, p, &v, sizeof(v));
error = __elfN(obj_reloc_ptr)(fp, ef, v, &md64, sizeof(md64));
error = __elfN(obj_reloc_ptr)(fp, ef, v, &md, sizeof(md));
__elfN(obj_lookup_set)(struct preloaded_file *fp __unused, elf_file_t ef,
__elfN(obj_reloc_ptr)(struct preloaded_file *mp, elf_file_t ef, Elf_Addr p,
error = __elfN(reloc)(ef, __elfN(obj_symaddr),
error = __elfN(reloc)(ef, __elfN(obj_symaddr),
__elfN(obj_symaddr)(struct elf_file *ef, Elf_Size symidx)
static int __elfN(obj_loadimage)(struct preloaded_file *mp, elf_file_t ef,
static int __elfN(obj_lookup_set)(struct preloaded_file *mp, elf_file_t ef,
static int __elfN(obj_reloc_ptr)(struct preloaded_file *mp, elf_file_t ef,
static int __elfN(obj_parse_modmetadata)(struct preloaded_file *mp,
static Elf_Addr __elfN(obj_symaddr)(struct elf_file *ef, Elf_Size symidx);
const char *__elfN(obj_kerneltype) = "elf kernel";
const char *__elfN(obj_moduletype) = "elf obj module";
__elfN(obj_loadfile)(char *filename, u_int64_t dest,
__elfN(reloc)(struct elf_file *ef, symaddr_fn *symaddr, const void *reldata,
__elfN(arm_load)(char *filename, u_int64_t dest,
r = __elfN(loadfile)(filename, dest, result);
printf("relocation_offset %llx\n", __elfN(relocation_offset));
__elfN(arm_load),
__elfN(arm_exec)
v -= __elfN(relocation_offset);
*modulep -= __elfN(relocation_offset);
vaddr -= __elfN(relocation_offset);