_elf_aux_info(3): add support for AT_USRSTACK{BASE,LIM}

Reviewed by:	brooks, imp (previous version)
Discussed with:	markj
Sponsored by:	The FreeBSD Foundation
MFC after:	2 weeks
Differential revision:	https://reviews.freebsd.org/D36540
This commit is contained in:
Konstantin Belousov 2022-09-12 22:36:24 +03:00
parent ff41239f58
commit 8f2668b060

View File

@ -73,6 +73,7 @@ static char *canary, *pagesizes, *execpath;
static void *ps_strings, *timekeep;
static u_long hwcap, hwcap2;
static void *fxrng_seed_version;
static u_long usrstackbase, usrstacklim;
#ifdef __powerpc__
static int powerpc_new_auxv_format = 0;
@ -144,6 +145,14 @@ init_aux(void)
case AT_FXRNG:
fxrng_seed_version = aux->a_un.a_ptr;
break;
case AT_USRSTACKBASE:
usrstackbase = aux->a_un.a_val;
break;
case AT_USRSTACKLIM:
usrstacklim = aux->a_un.a_val;
break;
#ifdef __powerpc__
/*
* Since AT_STACKPROT is always set, and the common
@ -370,6 +379,20 @@ _elf_aux_info(int aux, void *buf, int buflen)
} else
res = EINVAL;
break;
case AT_USRSTACKBASE:
if (buflen == sizeof(u_long)) {
*(u_long *)buf = usrstackbase;
res = 0;
} else
res = EINVAL;
break;
case AT_USRSTACKLIM:
if (buflen == sizeof(u_long)) {
*(u_long *)buf = usrstacklim;
res = 0;
} else
res = EINVAL;
break;
default:
res = ENOENT;
break;