qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Cc: Richard Henderson <richard.henderson@linaro.org>,
	qemu-devel@nongnu.org,  qemu-arm@nongnu.org
Subject: Re: [PATCH 47/82] target/arm: Expand pstate to 64 bits
Date: Fri, 1 Aug 2025 14:22:45 +0100	[thread overview]
Message-ID: <CAFEAcA_9tkv1EoM33=G=zW6Pw0gBirvjs-SsDaC8ar8feyH_8g@mail.gmail.com> (raw)
In-Reply-To: <b2e40787-6043-4d4c-9cbb-731d0e92e25c@linaro.org>

On Thu, 31 Jul 2025 at 21:34, Pierrick Bouvier
<pierrick.bouvier@linaro.org> wrote:
>
> On 7/27/25 1:02 AM, Richard Henderson wrote:
> > diff --git a/target/arm/gdbstub64.c b/target/arm/gdbstub64.c
> > index 64ee9b3b56..3cef47281a 100644
> > --- a/target/arm/gdbstub64.c
> > +++ b/target/arm/gdbstub64.c
> > @@ -47,6 +47,7 @@ int aarch64_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
> >       case 32:
> >           return gdb_get_reg64(mem_buf, env->pc);
> >       case 33:
> > +        /* pstate is now a 64-bit value; can we simply adjust the xml? */
> >           return gdb_get_reg32(mem_buf, pstate_read(env));
> >       }
>
> If I'm correct, we currently don't expose PSTATE through gdbstub, but
> only CPSR. This was a bit confusing for me, considering that CPSR is not
> even supposed to exist in Aarch64.
> Maybe it's a good opportunity to expose PSTATE instead, which could have
> a 64 bits size. This way, we don't break any workflow.

Architecturally, PSTATE is simply an abstract bundling together of
different information: it is not a particular format of a value,
whether 32 or 64 bit or otherwise. (This makes it different to
AArch32 CPSR, which really is a guest-visible register.)

The thing that *is* defined architecturally is the SPSR_ELx format, which
is where various bits of PSTATE get saved when reporting an exception up
to a higher exception level (and which is pretty much the AArch32 CPSR
format when the lower EL is AArch32). (Note that not *all* of PSTATE
appears in the SPSR_ELx: for example the SME SM and ZA bits are
considered part of PSTATE but they aren't saved into SPSR_ELx.)

For convenience, various pieces of software pass around information
in that SPSR_ELx format. Calling this either "CPSR" or "PSTATE"
is not really correct, but either is perhaps less confusing than
calling it SPSR when the context is that of the code running at the
lower EL rather than the higher.

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/include/asm/kgdb.h#n41
suggests that expanding the existing pstate to 64 bits is probably
likely to produce problems. Perhaps we should define a pstate_high
or something for the top 32 bits?

(I'll see if I can find out if anybody's already looked at this
for the native debug case.)

thanks
-- PMM


  parent reply	other threads:[~2025-08-01 13:33 UTC|newest]

Thread overview: 188+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-27  8:01 [PATCH for-10.2 00/82] target/arm: Implement FEAT_GCS Richard Henderson
2025-07-27  8:01 ` [PATCH 01/82] target/arm: Add prot_check parameter to pmsav8_mpu_lookup Richard Henderson
2025-07-30 20:27   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 02/82] target/arm: Add in_prot_check to S1Translate Richard Henderson
2025-07-30 20:27   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 03/82] target/arm: Skip permission check from arm_cpu_get_phys_page_attrs_debug Richard Henderson
2025-07-30 20:28   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 04/82] target/arm: Introduce get_phys_addr_for_at Richard Henderson
2025-07-30 20:29   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 05/82] target/arm: Skip AF and DB updates for AccessType_AT Richard Henderson
2025-07-30 20:31   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 06/82] target/arm: Add prot_check parameter to do_ats_write Richard Henderson
2025-07-30 20:35   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 07/82] target/arm: Fill in HFG[RWI]TR_EL2 bits for Arm v9.5 Richard Henderson
2025-07-30 20:35   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 08/82] target/arm: Remove outdated comment for ZCR_EL12 Richard Henderson
2025-07-30 20:36   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 09/82] target/arm: Implement FEAT_ATS1A Richard Henderson
2025-07-30 20:38   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 10/82] target/arm: Add isar feature test for FEAT_S1PIE, FEAT_S2PIE Richard Henderson
2025-07-30 20:38   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 11/82] target/arm: Enable TCR2_ELx.PIE Richard Henderson
2025-07-30 20:39   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 12/82] target/arm: Implement PIR_ELx, PIRE0_ELx, S2PIR_EL2 registers Richard Henderson
2025-07-30 20:41   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 13/82] target/arm: Force HPD for stage2 translations Richard Henderson
2025-07-30 20:42   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 14/82] target/arm: Cache NV1 early in get_phys_addr_lpae Richard Henderson
2025-07-30 20:43   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 15/82] target/arm: Populate PIE in aa64_va_parameters Richard Henderson
2025-07-30 20:45   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 16/82] target/arm: Implement get_S1prot_indirect Richard Henderson
2025-07-31 21:15   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 17/82] target/arm: Implement get_S2prot_indirect Richard Henderson
2025-07-31 21:13   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 18/82] target/arm: Do not migrate env->exception Richard Henderson
2025-07-30 20:46   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 19/82] target/arm: Expand CPUARMState.exception.syndrome to 64 bits Richard Henderson
2025-07-30 20:47   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 20/82] target/arm: Expand syndrome parameter to raise_exception* Richard Henderson
2025-07-30 20:47   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 21/82] target/arm: Implement dirtybit check for PIE Richard Henderson
2025-07-30 20:50   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 22/82] target/arm: Enable FEAT_S1PIE and FEAT_S2PIE on -cpu max Richard Henderson
2025-07-30 20:50   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 23/82] include/hw/core/cpu: Introduce MMUIdxMap Richard Henderson
2025-07-30 20:52   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 24/82] include/hw/core/cpu: Introduce cpu_tlb_fast Richard Henderson
2025-07-30 20:53   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 25/82] include/hw/core/cpu: Invert the indexing into CPUTLBDescFast Richard Henderson
2025-07-30 21:00   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 26/82] target/hppa: Adjust mmu indexes to begin with 0 Richard Henderson
2025-07-30 21:03   ` Pierrick Bouvier
2025-07-27  8:01 ` [PATCH 27/82] include/exec/memopidx: Adjust for 32 mmu indexes Richard Henderson
2025-07-30 21:03   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 28/82] include/hw/core/cpu: Widen MMUIdxMap Richard Henderson
2025-07-30 21:07   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 29/82] target/arm: Split out mmuidx.h from cpu.h Richard Henderson
2025-07-30 21:07   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 30/82] target/arm: Convert arm_mmu_idx_to_el from switch to table Richard Henderson
2025-07-30 21:10   ` Pierrick Bouvier
2025-07-30 21:12     ` Pierrick Bouvier
2025-07-30 21:31       ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 31/82] target/arm: Remove unused env argument from regime_el Richard Henderson
2025-07-30 21:13   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 32/82] target/arm: Convert regime_el from switch to table Richard Henderson
2025-07-30 21:15   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 33/82] target/arm: Convert regime_has_2_ranges " Richard Henderson
2025-07-30 21:16   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 34/82] target/arm: Remove unused env argument from regime_is_pan Richard Henderson
2025-07-30 21:17   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 35/82] target/arm: Convert regime_is_pan from switch to table Richard Henderson
2025-07-30 21:17   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 36/82] target/arm: Remove unused env argument from regime_is_user Richard Henderson
2025-07-30 21:18   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 37/82] target/arm: Convert regime_is_user from switch to table Richard Henderson
2025-07-30 21:21   ` Pierrick Bouvier
2025-08-01  3:53     ` Richard Henderson
2025-08-01 16:10       ` Pierrick Bouvier
2025-08-01 18:06       ` Peter Maydell
2025-07-27  8:02 ` [PATCH 38/82] target/arm: Convert arm_mmu_idx_is_stage1_of_2 " Richard Henderson
2025-07-30 21:23   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 39/82] target/arm: Convert regime_is_stage2 " Richard Henderson
2025-07-30 21:23   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 40/82] target/arm: Introduce mmu indexes for GCS Richard Henderson
2025-07-30 21:28   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 41/82] target/arm: Introduce regime_to_gcs Richard Henderson
2025-07-30 21:33   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 42/82] target/arm: Support page protections for GCS mmu indexes Richard Henderson
2025-07-31 18:40   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 43/82] target/arm: Implement gcs bit for data abort Richard Henderson
2025-07-31 18:41   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 44/82] target/arm: Add GCS cpregs Richard Henderson
2025-07-31 18:45   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 45/82] target/arm: Add GCS enable and trap levels to DisasContext Richard Henderson
2025-07-31 18:54   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 46/82] target/arm: Implement FEAT_CHK Richard Henderson
2025-07-29 16:01   ` Gustavo Romero
2025-07-29 17:21     ` Richard Henderson
2025-07-31 18:59   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 47/82] target/arm: Expand pstate to 64 bits Richard Henderson
2025-07-31 19:13   ` Pierrick Bouvier
2025-08-01  4:24     ` Richard Henderson
2025-08-01 12:35       ` Manos Pitsidianakis
2025-08-01  4:29     ` Richard Henderson
2025-08-01 16:12       ` Pierrick Bouvier
2025-08-01 20:19         ` Richard Henderson
2025-08-01 13:22     ` Peter Maydell [this message]
2025-08-01 16:26       ` Pierrick Bouvier
2025-08-01 16:37         ` Peter Maydell
2025-08-01 16:41           ` Pierrick Bouvier
2025-08-01 16:44             ` Peter Maydell
2025-08-01 16:53               ` Pierrick Bouvier
2025-08-01 16:55                 ` Pierrick Bouvier
2025-08-01 18:45       ` Manos Pitsidianakis
2025-08-02  3:14         ` Thiago Jung Bauermann
2025-08-01 20:22   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 48/82] target/arm: Add syndrome data for EC_GCS Richard Henderson
2025-07-31 19:35   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 49/82] target/arm: Implement EXLOCKException for ELR_ELx and SPSR_ELx Richard Henderson
2025-07-31 20:53   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 50/82] target/arm: Split {arm,core}_user_mem_index Richard Henderson
2025-07-31 21:06   ` Pierrick Bouvier
2025-07-31 21:24     ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 51/82] target/arm: Introduce delay_exception{_el} Richard Henderson
2025-07-31 21:09   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 52/82] target/arm: Emit HSTR trap exception out of line Richard Henderson
2025-07-31 21:10   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 53/82] target/arm: Emit v7m LTPSIZE " Richard Henderson
2025-07-31 21:10   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 54/82] target/arm: Implement GCSSTR, GCSSTTR Richard Henderson
2025-07-31 21:25   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 55/82] target/arm: Implement GCSB Richard Henderson
2025-07-31 21:27   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 56/82] target/arm: Implement GCSPUSHM Richard Henderson
2025-07-31 21:33   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 57/82] target/arm: Implement GCSPOPM Richard Henderson
2025-07-31 21:34   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 58/82] target/arm: Implement GCSPUSHX Richard Henderson
2025-07-31 21:36   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 59/82] target/arm: Implement GCSPOPX Richard Henderson
2025-07-31 21:37   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 60/82] target/arm: Implement GCSPOPCX Richard Henderson
2025-07-31 21:38   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 61/82] target/arm: Implement GCSSS1 Richard Henderson
2025-07-31 21:43   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 62/82] target/arm: Implement GCSSS2 Richard Henderson
2025-07-31 21:45   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 63/82] target/arm: Add gcs record for BL Richard Henderson
2025-07-31 21:45   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 64/82] target/arm: Add gcs record for BLR Richard Henderson
2025-07-31 21:46   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 65/82] target/arm: Add gcs record for BLR with PAuth Richard Henderson
2025-07-31 21:46   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 66/82] target/arm: Load gcs record for RET Richard Henderson
2025-07-31 21:47   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 67/82] target/arm: Load gcs record for RET with PAuth Richard Henderson
2025-07-31 21:48   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 68/82] target/arm: Copy EXLOCKEn to EXLOCK on exception to the same EL Richard Henderson
2025-07-31 21:48   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 69/82] target/arm: Implement EXLOCK check during exception return Richard Henderson
2025-07-31 21:49   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 70/82] target/arm: Enable FEAT_GCS with -cpu max Richard Henderson
2025-07-31 21:49   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 71/82] linux-user/aarch64: Implement prctls for GCS Richard Henderson
2025-07-31 21:53   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 72/82] linux-user/aarch64: Allocate new gcs stack on clone Richard Henderson
2025-07-31 21:54   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 73/82] linux-user/aarch64: Release gcs stack on thread exit Richard Henderson
2025-07-31 21:54   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 74/82] linux-user/aarch64: Implement map_shadow_stack syscall Richard Henderson
2025-07-31 21:55   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 75/82] target/arm: Enable GCSPR_EL0 for read in user-mode Richard Henderson
2025-07-31 21:56   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 76/82] linux-user/aarch64: Inject SIGSEGV for GCS faults Richard Henderson
2025-07-31 21:56   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 77/82] linux-user/aarch64: Generate GCS signal records Richard Henderson
2025-07-31 21:57   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 78/82] linux-user: Change exported get_elf_hwcap to abi_ulong Richard Henderson
2025-07-31 21:58   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 79/82] linux-user/aarch64: Enable GCS in HWCAP Richard Henderson
2025-07-31 21:58   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 80/82] tests/tcg/aarch64: Add gcsstr Richard Henderson
2025-07-31 22:05   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 81/82] tests/tcg/aarch64: Add gcspushm Richard Henderson
2025-07-31 22:11   ` Pierrick Bouvier
2025-07-27  8:02 ` [PATCH 82/82] tests/tcg/aarch64: Add gcsss Richard Henderson
2025-07-31 22:14   ` Pierrick Bouvier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAFEAcA_9tkv1EoM33=G=zW6Pw0gBirvjs-SsDaC8ar8feyH_8g@mail.gmail.com' \
    --to=peter.maydell@linaro.org \
    --cc=pierrick.bouvier@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).