linux: adjust ordering of Linux auxv and add dummy AT_HWCAP2
This should be a no-op; the purpose of this is to reduce a spurious difference between Linuxulator and Linux, to make debugging core dumps slightly easier. Note that AT_HWCAP2 we pass to Linux binaries is always 0, instead of being equal to 'cpu_feature2'. This matches what I've observed under Ubuntu Focal VM. Reviewed By: chuck, dchagin Sponsored By: EPSRC Differential Revision: https://reviews.freebsd.org/D29609
This commit is contained in:
parent
73c14cc76b
commit
ca6e1fa3ce
@ -88,7 +88,7 @@ typedef struct {
|
||||
/*
|
||||
* Miscellaneous
|
||||
*/
|
||||
#define LINUX_AT_COUNT 19 /* Count of used aux entry types. */
|
||||
#define LINUX_AT_COUNT 20 /* Count of used aux entry types. */
|
||||
|
||||
struct l___sysctl_args
|
||||
{
|
||||
|
@ -265,11 +265,11 @@ linux_copyout_auxargs(struct image_params *imgp, uintptr_t base)
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO_EHDR,
|
||||
imgp->proc->p_sysent->sv_shared_page_base);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_HWCAP, cpu_feature);
|
||||
AUXARGS_ENTRY(pos, AT_PAGESZ, args->pagesz);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_CLKTCK, stclohz);
|
||||
AUXARGS_ENTRY(pos, AT_PHDR, args->phdr);
|
||||
AUXARGS_ENTRY(pos, AT_PHENT, args->phent);
|
||||
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_FLAGS, args->flags);
|
||||
AUXARGS_ENTRY(pos, AT_ENTRY, args->entry);
|
||||
@ -278,12 +278,13 @@ linux_copyout_auxargs(struct image_params *imgp, uintptr_t base)
|
||||
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, LINUX_AT_SECURE, issetugid);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_PLATFORM, PTROUT(linux_platform));
|
||||
AUXARGS_ENTRY_PTR(pos, LINUX_AT_RANDOM, imgp->canary);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_HWCAP2, 0);
|
||||
if (imgp->execpathp != 0)
|
||||
AUXARGS_ENTRY_PTR(pos, LINUX_AT_EXECFN, imgp->execpathp);
|
||||
if (args->execfd != -1)
|
||||
AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_PLATFORM, PTROUT(linux_platform));
|
||||
AUXARGS_ENTRY(pos, AT_NULL, 0);
|
||||
|
||||
free(imgp->auxargs, M_TEMP);
|
||||
|
@ -101,7 +101,7 @@ typedef struct {
|
||||
/*
|
||||
* Miscellaneous
|
||||
*/
|
||||
#define LINUX_AT_COUNT 20 /* Count of used aux entry types.
|
||||
#define LINUX_AT_COUNT 21 /* Count of used aux entry types.
|
||||
* Keep this synchronized with
|
||||
* linux_fixup_elf() code.
|
||||
*/
|
||||
|
@ -199,10 +199,11 @@ linux_copyout_auxargs(struct image_params *imgp, uintptr_t base)
|
||||
M_WAITOK | M_ZERO);
|
||||
|
||||
issetugid = imgp->proc->p_flag & P_SUGID ? 1 : 0;
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO, linux32_vsyscall);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO_EHDR,
|
||||
imgp->proc->p_sysent->sv_shared_page_base);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO, linux32_vsyscall);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_HWCAP, cpu_feature);
|
||||
AUXARGS_ENTRY(pos, AT_PAGESZ, args->pagesz);
|
||||
|
||||
/*
|
||||
* Do not export AT_CLKTCK when emulating Linux kernel prior to 2.4.0,
|
||||
@ -217,21 +218,21 @@ linux_copyout_auxargs(struct image_params *imgp, uintptr_t base)
|
||||
AUXARGS_ENTRY(pos, AT_PHDR, args->phdr);
|
||||
AUXARGS_ENTRY(pos, AT_PHENT, args->phent);
|
||||
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_FLAGS, args->flags);
|
||||
AUXARGS_ENTRY(pos, AT_ENTRY, args->entry);
|
||||
AUXARGS_ENTRY(pos, AT_BASE, args->base);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_SECURE, issetugid);
|
||||
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_GID, imgp->proc->p_ucred->cr_rgid);
|
||||
AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_ucred->cr_svgid);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_PLATFORM, PTROUT(linux_platform));
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_SECURE, issetugid);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_RANDOM, PTROUT(imgp->canary));
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_HWCAP2, 0);
|
||||
if (imgp->execpathp != 0)
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_EXECFN, PTROUT(imgp->execpathp));
|
||||
if (args->execfd != -1)
|
||||
AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd);
|
||||
AUXARGS_ENTRY(pos, LINUX_AT_PLATFORM, PTROUT(linux_platform));
|
||||
AUXARGS_ENTRY(pos, AT_NULL, 0);
|
||||
|
||||
free(imgp->auxargs, M_TEMP);
|
||||
|
@ -88,6 +88,7 @@ extern const char *linux_kplatform;
|
||||
* differ from AT_PLATFORM.
|
||||
*/
|
||||
#define LINUX_AT_RANDOM 25 /* address of random bytes */
|
||||
#define LINUX_AT_HWCAP2 26 /* CPU capabilities, second part */
|
||||
#define LINUX_AT_EXECFN 31 /* filename of program */
|
||||
#define LINUX_AT_SYSINFO 32 /* vsyscall */
|
||||
#define LINUX_AT_SYSINFO_EHDR 33 /* vdso header */
|
||||
|
Loading…
Reference in New Issue
Block a user