trampoline_data
struct trampoline_data *trampoline_data;
trampoline_data = (void *)trampoline + tramp_data_offset;
memset(trampoline_data, 0, sizeof(*trampoline_data));
trampoline_data->entry = ehdr->e_entry - fp->f_addr + staging;
trampoline_data->modulep = modulep;
trampoline_data->memmap_src = efi_map_phys_src;
trampoline_data->memmap_dst = efi_map_phys_dst;
trampoline_data->memmap_len = efi_map_size - roundup2(sizeof(struct efi_map_header), 16);
trampoline_data->memmap_dst,
trampoline_data->memmap_len);
printf("Trampoline bouncing to %#llx\n", (long long)trampoline_data->entry);
_Static_assert(sizeof(struct trampoline_data) == 56, "Bad size for trampoline data");
struct trampoline_data *trampoline_data;
trampoline_data = (void *)trampoline + tramp_data_offset;
trampoline_data->entry = ehdr->e_entry; /* VA since we start MMU with KERNBASE, etc */
trampoline_data->memmap_src = efi_map_phys_src;
trampoline_data->memmap_dst = efi_map_phys_dst;
trampoline_data->memmap_len = efi_map_size - roundup2(sizeof(struct efi_map_header), 16);
trampoline_data->memmap_src,
trampoline_data->memmap_dst,
trampoline_data->memmap_len);
trampoline_data->pt4 = trampolinebase + LOADER_PAGE_SIZE;
trampoline_data->modulep = modulep; /* Offset from KERNBASE */
trampoline_data->kernend = kernend; /* Offset from the load address */
trampoline_data->fill1 = trampoline_data->fill2 = 0;
archsw.arch_copyin(PT4, trampoline_data->pt4 - staging, 9 * LOADER_PAGE_SIZE);
trampoline_data = (void*)&trampoline[2];
trampoline_data->kernel_entry = htobe32(entry + elf64_relocation_offset);
trampoline_data->phys_mem_offset = htobe32(0);
trampoline_data->of_entry = htobe32(0);
trampoline_data->dtb = htobe32(dtb);
trampoline_data->mdp = htobe32(mdp);
trampoline_data->mdp_size = htobe32(0xfb5d104d);
entry, be32toh(trampoline_data->kernel_entry));
be32toh(trampoline_data->dtb), be32toh(trampoline_data->mdp));
struct trampoline_data *trampoline_data;