glibc/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h
Szabolcs Nagy 9885d13b66 aarch64: Add GCS support for setcontext
Userspace ucontext needs to store GCSPR, it does not have to be
compatible with the kernel ucontext. For now we use the linux
struct gcs_context layout but only use the gcspr field from it.

Similar implementation to the longjmp code, supports switching GCS
if the target GCS is capped, and unwinding a continuous GCS to a
previous state.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2025-01-20 09:22:41 +00:00

50 lines
1.6 KiB
C

/* Copyright (C) 2009-2025 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#define SP_ALIGN_SIZE 15
#define SP_ALIGN_MASK ~15
/* Size of an X register in bytes. */
#define SZREG 8
/* Size of a V register in bytes. */
#define SZVREG 16
/* Number of integer parameter passing registers. */
#define NUMXREGARGS 8
/* Number of FP parameter passing registers. */
#define NUMDREGARGS 8
/* Size of named integer argument in bytes when passed on the
stack. */
#define SIZEOF_NAMED_INT 4
/* Size of an anonymous integer argument in bytes when passed on the
stack. */
#define SIZEOF_ANONYMOUS_INT 8
#define oX21 (oX0 + 21*8)
#define oFP (oX0 + 29*8)
#define oLR (oX0 + 30*8)
/* Use kernel layout for saving GCSPR in ucontext. */
#define GCS_MAGIC 0x47435300
#define GCS_CONTEXT_SIZE 32
#define oGCSPR 8