ksyms_hdr
struct ksyms_hdr khdr;
ksyms_hdr.kh_ehdr.e_phentsize = sizeof(Elf_Phdr);
ksyms_hdr.kh_ehdr.e_phnum = NPRGHDR;
ksyms_hdr.kh_ehdr.e_shoff = offsetof(struct ksyms_hdr, kh_shdr[0]);
ksyms_hdr.kh_ehdr.e_shentsize = sizeof(Elf_Shdr);
ksyms_hdr.kh_ehdr.e_shnum = NSECHDR;
ksyms_hdr.kh_ehdr.e_shstrndx = SHSTRTAB;
ksyms_hdr.kh_phdr[0].p_type = PT_LOAD;
ksyms_hdr.kh_phdr[0].p_memsz = (unsigned long)-1L;
ksyms_hdr.kh_phdr[0].p_flags = PF_R | PF_X | PF_W;
#define SHTCOPY(name) strlcpy(&ksyms_hdr.kh_strtab[offs], (name), \
sizeof(ksyms_hdr.kh_strtab) - offs), offs += sizeof(name)
ksyms_hdr.kh_shdr[SHNOTE].sh_name = offs;
ksyms_hdr.kh_shdr[SHNOTE].sh_type = SHT_NOTE;
ksyms_hdr.kh_shdr[SHNOTE].sh_offset =
offsetof(struct ksyms_hdr, kh_note[0]);
ksyms_hdr.kh_shdr[SHNOTE].sh_size = sizeof(ksyms_hdr.kh_note);
ksyms_hdr.kh_shdr[SHNOTE].sh_addralign = sizeof(int);
ksyms_hdr.kh_shdr[SYMTAB].sh_name = offs;
ksyms_hdr.kh_shdr[SYMTAB].sh_type = SHT_SYMTAB;
ksyms_hdr.kh_shdr[SYMTAB].sh_offset = sizeof(struct ksyms_hdr);
ksyms_hdr.kh_shdr[SYMTAB].sh_link = STRTAB; /* Corresponding strtab */
ksyms_hdr.kh_shdr[SYMTAB].sh_addralign = sizeof(long);
ksyms_hdr.kh_shdr[SYMTAB].sh_entsize = sizeof(Elf_Sym);
ksyms_hdr.kh_shdr[STRTAB].sh_name = offs;
ksyms_hdr.kh_shdr[STRTAB].sh_type = SHT_STRTAB;
ksyms_hdr.kh_shdr[STRTAB].sh_addralign = sizeof(char);
ksyms_hdr.kh_shdr[SHSTRTAB].sh_name = offs;
ksyms_hdr.kh_shdr[SHSTRTAB].sh_type = SHT_STRTAB;
ksyms_hdr.kh_shdr[SHSTRTAB].sh_offset =
offsetof(struct ksyms_hdr, kh_strtab);
ksyms_hdr.kh_shdr[SHSTRTAB].sh_size = SHSTRSIZ;
ksyms_hdr.kh_shdr[SHSTRTAB].sh_addralign = sizeof(char);
ksyms_hdr.kh_shdr[SHBSS].sh_name = offs;
ksyms_hdr.kh_shdr[SHBSS].sh_type = SHT_NOBITS;
ksyms_hdr.kh_shdr[SHBSS].sh_offset = 0;
ksyms_hdr.kh_shdr[SHBSS].sh_size = (unsigned long)-1L;
ksyms_hdr.kh_shdr[SHBSS].sh_addralign = PAGE_SIZE;
ksyms_hdr.kh_shdr[SHBSS].sh_flags = SHF_ALLOC | SHF_EXECINSTR;
ksyms_hdr.kh_shdr[SHCTF].sh_name = offs;
ksyms_hdr.kh_shdr[SHCTF].sh_type = SHT_PROGBITS;
ksyms_hdr.kh_shdr[SHCTF].sh_link = SYMTAB; /* Corresponding symtab */
ksyms_hdr.kh_shdr[SHCTF].sh_addralign = sizeof(char);
error = ubc_copyfrombuf(uobj, &uio, &ksyms_hdr, sizeof(ksyms_hdr));
KASSERT(uio.uio_offset == sizeof(struct ksyms_hdr));
KASSERT(uio.uio_offset == sizeof(struct ksyms_hdr) +
ksyms_hdr.kh_shdr[SYMTAB].sh_size);
KASSERT(uio.uio_offset == sizeof(struct ksyms_hdr) +
ksyms_hdr.kh_shdr[SYMTAB].sh_size +
ksyms_hdr.kh_shdr[STRTAB].sh_size);
KASSERT(uio.uio_offset == sizeof(struct ksyms_hdr) +
ksyms_hdr.kh_shdr[SYMTAB].sh_size +
ksyms_hdr.kh_shdr[STRTAB].sh_size +
ksyms_hdr.kh_shdr[SHCTF].sh_size);
size = sizeof(struct ksyms_hdr);
ksyms_hdr.kh_shdr[SYMTAB].sh_size = ksyms_symsz;
ksyms_hdr.kh_shdr[SYMTAB].sh_info = ksyms_symsz / sizeof(Elf_Sym);
ksyms_hdr.kh_shdr[STRTAB].sh_offset = ksyms_symsz +
ksyms_hdr.kh_shdr[SYMTAB].sh_offset;
ksyms_hdr.kh_shdr[STRTAB].sh_size = ksyms_strsz;
ksyms_hdr.kh_shdr[SHCTF].sh_offset = ksyms_strsz +
ksyms_hdr.kh_shdr[STRTAB].sh_offset;
ksyms_hdr.kh_shdr[SHCTF].sh_size = ksyms_ctfsz;
struct ksyms_hdr ksyms_hdr;
int32_t *note = ksyms_hdr.kh_note;
memcpy(&ksyms_hdr.kh_ehdr, hdraddr, sizeof(Elf_Ehdr));
ksyms_hdr.kh_ehdr.e_phoff = offsetof(struct ksyms_hdr, kh_phdr[0]);