The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=8f2668b0605e26b04a103f63096cfcc856d950c1

commit 8f2668b0605e26b04a103f63096cfcc856d950c1
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2022-09-12 19:36:24 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2022-09-16 20:23:32 +0000

    _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
---
 lib/libc/gen/auxv.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/lib/libc/gen/auxv.c b/lib/libc/gen/auxv.c
index ae21d088a8d1..af59a2dda90a 100644
--- a/lib/libc/gen/auxv.c
+++ b/lib/libc/gen/auxv.c
@@ -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;

Reply via email to