Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/linux/linux_sysvec.c
Show First 20 Lines • Show All 166 Lines • ▼ Show 20 Lines | argarray = pos = malloc(LINUX_AT_COUNT * sizeof(*pos), M_TEMP, | ||||
M_WAITOK | M_ZERO); | M_WAITOK | M_ZERO); | ||||
issetugid = p->p_flag & P_SUGID ? 1 : 0; | issetugid = p->p_flag & P_SUGID ? 1 : 0; | ||||
AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO_EHDR, | AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO_EHDR, | ||||
imgp->proc->p_sysent->sv_shared_page_base); | imgp->proc->p_sysent->sv_shared_page_base); | ||||
#if 0 /* LINUXTODO: implement arm64 LINUX_AT_HWCAP */ | #if 0 /* LINUXTODO: implement arm64 LINUX_AT_HWCAP */ | ||||
AUXARGS_ENTRY(pos, LINUX_AT_HWCAP, cpu_feature); | AUXARGS_ENTRY(pos, LINUX_AT_HWCAP, cpu_feature); | ||||
#endif | #endif | ||||
AUXARGS_ENTRY(pos, AT_PAGESZ, args->pagesz); | |||||
AUXARGS_ENTRY(pos, LINUX_AT_CLKTCK, stclohz); | AUXARGS_ENTRY(pos, LINUX_AT_CLKTCK, stclohz); | ||||
AUXARGS_ENTRY(pos, AT_PHDR, args->phdr); | AUXARGS_ENTRY(pos, AT_PHDR, args->phdr); | ||||
AUXARGS_ENTRY(pos, AT_PHENT, args->phent); | AUXARGS_ENTRY(pos, AT_PHENT, args->phent); | ||||
AUXARGS_ENTRY(pos, AT_PHNUM, args->phnum); | AUXARGS_ENTRY(pos, AT_PHNUM, args->phnum); | ||||
AUXARGS_ENTRY(pos, AT_PAGESZ, args->pagesz); | |||||
AUXARGS_ENTRY(pos, AT_BASE, args->base); | AUXARGS_ENTRY(pos, AT_BASE, args->base); | ||||
AUXARGS_ENTRY(pos, AT_FLAGS, args->flags); | AUXARGS_ENTRY(pos, AT_FLAGS, args->flags); | ||||
AUXARGS_ENTRY(pos, AT_ENTRY, args->entry); | AUXARGS_ENTRY(pos, AT_ENTRY, args->entry); | ||||
AUXARGS_ENTRY(pos, AT_UID, imgp->proc->p_ucred->cr_ruid); | AUXARGS_ENTRY(pos, AT_UID, imgp->proc->p_ucred->cr_ruid); | ||||
AUXARGS_ENTRY(pos, AT_EUID, imgp->proc->p_ucred->cr_svuid); | AUXARGS_ENTRY(pos, AT_EUID, imgp->proc->p_ucred->cr_svuid); | ||||
AUXARGS_ENTRY(pos, AT_GID, imgp->proc->p_ucred->cr_rgid); | AUXARGS_ENTRY(pos, AT_GID, imgp->proc->p_ucred->cr_rgid); | ||||
AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_ucred->cr_svgid); | AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_ucred->cr_svgid); | ||||
AUXARGS_ENTRY(pos, LINUX_AT_SECURE, issetugid); | AUXARGS_ENTRY(pos, LINUX_AT_SECURE, issetugid); | ||||
#if 0 /* LINUXTODO: implement arm64 LINUX_AT_PLATFORM */ | |||||
AUXARGS_ENTRY(pos, LINUX_AT_PLATFORM, PTROUT(linux_platform)); | |||||
#endif | |||||
AUXARGS_ENTRY_PTR(pos, LINUX_AT_RANDOM, imgp->canary); | AUXARGS_ENTRY_PTR(pos, LINUX_AT_RANDOM, imgp->canary); | ||||
AUXARGS_ENTRY(pos, LINUX_AT_HWCAP2, 0); | |||||
if (imgp->execpathp != 0) | if (imgp->execpathp != 0) | ||||
AUXARGS_ENTRY_PTR(pos, LINUX_AT_EXECFN, imgp->execpathp); | AUXARGS_ENTRY_PTR(pos, LINUX_AT_EXECFN, imgp->execpathp); | ||||
if (args->execfd != -1) | if (args->execfd != -1) | ||||
AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd); | AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd); | ||||
AUXARGS_ENTRY(pos, LINUX_AT_PLATFORM, PTROUT(linux_platform)); | |||||
AUXARGS_ENTRY(pos, AT_NULL, 0); | AUXARGS_ENTRY(pos, AT_NULL, 0); | ||||
free(imgp->auxargs, M_TEMP); | free(imgp->auxargs, M_TEMP); | ||||
imgp->auxargs = NULL; | imgp->auxargs = NULL; | ||||
KASSERT(pos - argarray <= LINUX_AT_COUNT, ("Too many auxargs")); | KASSERT(pos - argarray <= LINUX_AT_COUNT, ("Too many auxargs")); | ||||
error = copyout(argarray, (void *)base, | error = copyout(argarray, (void *)base, | ||||
sizeof(*argarray) * LINUX_AT_COUNT); | sizeof(*argarray) * LINUX_AT_COUNT); | ||||
free(argarray, M_TEMP); | free(argarray, M_TEMP); | ||||
return (error); | return (error); | ||||
▲ Show 20 Lines • Show All 254 Lines • ▼ Show 20 Lines | linux_shared_page_obj = __elfN(linux_shared_page_init) | ||||
(&linux_shared_page_mapping); | (&linux_shared_page_mapping); | ||||
__elfN(linux_vdso_reloc)(&elf_linux_sysvec); | __elfN(linux_vdso_reloc)(&elf_linux_sysvec); | ||||
memcpy(linux_shared_page_mapping, elf_linux_sysvec.sv_sigcode, | memcpy(linux_shared_page_mapping, elf_linux_sysvec.sv_sigcode, | ||||
linux_szsigcode); | linux_szsigcode); | ||||
elf_linux_sysvec.sv_shared_page_obj = linux_shared_page_obj; | elf_linux_sysvec.sv_shared_page_obj = linux_shared_page_obj; | ||||
printf("LINUXTODO: %s: fix linux_kplatform\n", __func__); | |||||
#if 0 | |||||
linux_kplatform = linux_shared_page_mapping + | linux_kplatform = linux_shared_page_mapping + | ||||
(linux_platform - (caddr_t)elf_linux_sysvec.sv_shared_page_base); | (linux_platform - (caddr_t)elf_linux_sysvec.sv_shared_page_base); | ||||
#else | |||||
linux_kplatform = "arm64"; | |||||
#endif | |||||
} | } | ||||
SYSINIT(elf_linux_vdso_init, SI_SUB_EXEC, SI_ORDER_ANY, | SYSINIT(elf_linux_vdso_init, SI_SUB_EXEC, SI_ORDER_ANY, | ||||
linux_vdso_install, NULL); | linux_vdso_install, NULL); | ||||
static void | static void | ||||
linux_vdso_deinstall(const void *param) | linux_vdso_deinstall(const void *param) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 110 Lines • Show Last 20 Lines |