Changeset View
Changeset View
Standalone View
Standalone View
sys/boot/efi/loader/bootinfo.c
Show First 20 Lines • Show All 215 Lines • ▼ Show 20 Lines | bi_copymodules(vm_offset_t addr) | ||||
c = addr != 0; | c = addr != 0; | ||||
/* Start with the first module on the list, should be the kernel. */ | /* Start with the first module on the list, should be the kernel. */ | ||||
for (fp = file_findfile(NULL, NULL); fp != NULL; fp = fp->f_next) { | for (fp = file_findfile(NULL, NULL); fp != NULL; fp = fp->f_next) { | ||||
MOD_NAME(addr, fp->f_name, c); /* This must come first. */ | MOD_NAME(addr, fp->f_name, c); /* This must come first. */ | ||||
MOD_TYPE(addr, fp->f_type, c); | MOD_TYPE(addr, fp->f_type, c); | ||||
if (fp->f_args) | if (fp->f_args) | ||||
MOD_ARGS(addr, fp->f_args, c); | MOD_ARGS(addr, fp->f_args, c); | ||||
v = fp->f_addr; | v = fp->f_addr; | ||||
#if defined(__arm__) | #if defined(__arm__) || defined(__aarch64__) | ||||
andrew: Are these changes still needed? I don't think they are needed for `__arm__` as… | |||||
skiboAuthorUnsubmitted Not Done Inline ActionsOk. I reverted this whole file and it still works. I haven't tested loading modules. New revision coming soon. skibo: Ok. I reverted this whole file and it still works. I haven't tested loading modules. New… | |||||
v -= __elfN(relocation_offset); | v -= __elfN(relocation_offset); | ||||
#endif | #endif | ||||
MOD_ADDR(addr, v, c); | MOD_ADDR(addr, v, c); | ||||
v = fp->f_size; | v = fp->f_size; | ||||
MOD_SIZE(addr, v, c); | MOD_SIZE(addr, v, c); | ||||
for (md = fp->f_metadata; md != NULL; md = md->md_next) | for (md = fp->f_metadata; md != NULL; md = md->md_next) | ||||
if (!(md->md_type & MODINFOMD_NOCOPY)) | if (!(md->md_type & MODINFOMD_NOCOPY)) | ||||
MOD_METADATA(addr, md, c); | MOD_METADATA(addr, md, c); | ||||
▲ Show 20 Lines • Show All 113 Lines • ▼ Show 20 Lines | bi_load(char *args, vm_offset_t *modulep, vm_offset_t *kernendp) | ||||
uint64_t envp; | uint64_t envp; | ||||
vm_offset_t size; | vm_offset_t size; | ||||
char *rootdevname; | char *rootdevname; | ||||
int howto; | int howto; | ||||
#if defined(LOADER_FDT_SUPPORT) | #if defined(LOADER_FDT_SUPPORT) | ||||
vm_offset_t dtbp; | vm_offset_t dtbp; | ||||
int dtb_size; | int dtb_size; | ||||
#endif | #endif | ||||
#if defined(__arm__) | #if defined(__arm__) || defined(__aarch64__) | ||||
vm_offset_t vaddr; | vm_offset_t vaddr; | ||||
size_t i; | size_t i; | ||||
/* | /* | ||||
* These metadata addreses must be converted for kernel after | * These metadata addreses must be converted for kernel after | ||||
* relocation. | * relocation. | ||||
*/ | */ | ||||
uint32_t mdt[] = { | uint32_t mdt[] = { | ||||
MODINFOMD_SSYM, MODINFOMD_ESYM, MODINFOMD_KERNEND, | MODINFOMD_SSYM, MODINFOMD_ESYM, MODINFOMD_KERNEND, | ||||
▲ Show 20 Lines • Show All 72 Lines • ▼ Show 20 Lines | #endif | ||||
size = bi_copymodules(0); | size = bi_copymodules(0); | ||||
kernend = roundup(addr + size, PAGE_SIZE); | kernend = roundup(addr + size, PAGE_SIZE); | ||||
*kernendp = kernend; | *kernendp = kernend; | ||||
/* patch MODINFOMD_KERNEND */ | /* patch MODINFOMD_KERNEND */ | ||||
md = file_findmetadata(kfp, MODINFOMD_KERNEND); | md = file_findmetadata(kfp, MODINFOMD_KERNEND); | ||||
bcopy(&kernend, md->md_data, sizeof kernend); | bcopy(&kernend, md->md_data, sizeof kernend); | ||||
#if defined(__arm__) | #if defined(__arm__) || defined(__aarch64__) | ||||
*modulep -= __elfN(relocation_offset); | *modulep -= __elfN(relocation_offset); | ||||
/* Do relocation fixup on metadata of each module. */ | /* Do relocation fixup on metadata of each module. */ | ||||
for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) { | for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) { | ||||
for (i = 0; i < sizeof mdt / sizeof mdt[0]; i++) { | for (i = 0; i < sizeof mdt / sizeof mdt[0]; i++) { | ||||
md = file_findmetadata(xp, mdt[i]); | md = file_findmetadata(xp, mdt[i]); | ||||
if (md) { | if (md) { | ||||
bcopy(md->md_data, &vaddr, sizeof vaddr); | bcopy(md->md_data, &vaddr, sizeof vaddr); | ||||
Show All 12 Lines |
Are these changes still needed? I don't think they are needed for __arm__ as relocation_offset will be zero.