qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/85] target/arm: Implement FEAT_GCS
@ 2025-08-02 23:28 Richard Henderson
  2025-08-02 23:28 ` [PATCH v2 01/85] linux-user/aarch64: Split out signal_for_exception Richard Henderson
                   ` (85 more replies)
  0 siblings, 86 replies; 109+ messages in thread
From: Richard Henderson @ 2025-08-02 23:28 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-arm

Based-on: 20250727074202.83141-1-richard.henderson@linaro.org
("[PATCH for-10.2 v9 0/6] target/arm: Add FEAT_MEC to max cpu")

Tree: https://gitlab.com/rth7680/qemu/-/tree/tgt-arm-gcs

This includes the prerequisite features, ATS1A and S1PIE, and
not a prerequisite but closely related, S2PIE.

This passes the linux kselftests for gcs, with a 48-bit VA.
I also include a few smoke tests in tests/tcg/.

There's something subtly wrong with a 52-bit VA.  Most everything
works fine, but the first GCS lookup faults on a missing level 3
page table entry: a Translation fault, not a Permission fault.
The kernel then panics.  Either there's something amiss with our
implementation of FEAT_LPA2, or there's a kernel bug.

This includes a best-effort linux-user implementation.  Since we
don't have softmmu in user-only (yet), gcs stack pages get normal
read/write access.  This means we cannot write-protect the pages
in the same way the system implementation can.  But all of the
other parts of GCS work fine, which is good enough for testing.

Changes for v2:
  - Add arm_mmuidx_is_valid
  - Revise and merge back the linux-user/aarch64 changes for
    syndromes and ESR records.


r~


Richard Henderson (85):
  linux-user/aarch64: Split out signal_for_exception
  linux-user/aarch64: Check syndrome for EXCP_UDEF
  linux-user/aarch64: Generate ESR signal records
  target/arm: Add prot_check parameter to pmsav8_mpu_lookup
  target/arm: Add in_prot_check to S1Translate
  target/arm: Skip permission check from
    arm_cpu_get_phys_page_attrs_debug
  target/arm: Introduce get_phys_addr_for_at
  target/arm: Skip AF and DB updates for AccessType_AT
  target/arm: Add prot_check parameter to do_ats_write
  target/arm: Fill in HFG[RWI]TR_EL2 bits for Arm v9.5
  target/arm: Remove outdated comment for ZCR_EL12
  target/arm: Implement FEAT_ATS1A
  target/arm: Add isar feature test for FEAT_S1PIE, FEAT_S2PIE
  target/arm: Enable TCR2_ELx.PIE
  target/arm: Implement PIR_ELx, PIRE0_ELx, S2PIR_EL2 registers
  target/arm: Force HPD for stage2 translations
  target/arm: Cache NV1 early in get_phys_addr_lpae
  target/arm: Populate PIE in aa64_va_parameters
  target/arm: Implement get_S1prot_indirect
  target/arm: Implement get_S2prot_indirect
  target/arm: Do not migrate env->exception
  target/arm: Expand CPUARMState.exception.syndrome to 64 bits
  target/arm: Expand syndrome parameter to raise_exception*
  target/arm: Implement dirtybit check for PIE
  target/arm: Enable FEAT_S1PIE and FEAT_S2PIE on -cpu max
  include/hw/core/cpu: Introduce MMUIdxMap
  include/hw/core/cpu: Introduce cpu_tlb_fast
  include/hw/core/cpu: Invert the indexing into CPUTLBDescFast
  target/hppa: Adjust mmu indexes to begin with 0
  include/exec/memopidx: Adjust for 32 mmu indexes
  include/hw/core/cpu: Widen MMUIdxMap
  target/arm: Split out mmuidx.h from cpu.h
  target/arm: Convert arm_mmu_idx_to_el from switch to table
  target/arm: Remove unused env argument from regime_el
  target/arm: Convert regime_el from switch to table
  target/arm: Convert regime_has_2_ranges from switch to table
  target/arm: Remove unused env argument from regime_is_pan
  target/arm: Convert regime_is_pan from switch to table
  target/arm: Remove unused env argument from regime_is_user
  target/arm: Convert regime_is_user from switch to table
  target/arm: Convert arm_mmu_idx_is_stage1_of_2 from switch to table
  target/arm: Convert regime_is_stage2 to table
  target/arm: Introduce mmu indexes for GCS
  target/arm: Introduce regime_to_gcs
  target/arm: Support page protections for GCS mmu indexes
  target/arm: Implement gcs bit for data abort
  target/arm: Add GCS cpregs
  target/arm: Add GCS enable and trap levels to DisasContext
  target/arm: Implement FEAT_CHK
  target/arm: Expand pstate to 64 bits
  target/arm: Add syndrome data for EC_GCS
  target/arm: Implement EXLOCKException for ELR_ELx and SPSR_ELx
  target/arm: Split {arm,core}_user_mem_index
  target/arm: Introduce delay_exception{_el}
  target/arm: Emit HSTR trap exception out of line
  target/arm: Emit v7m LTPSIZE exception out of line
  target/arm: Implement GCSSTR, GCSSTTR
  target/arm: Implement GCSB
  target/arm: Implement GCSPUSHM
  target/arm: Implement GCSPOPM
  target/arm: Implement GCSPUSHX
  target/arm: Implement GCSPOPX
  target/arm: Implement GCSPOPCX
  target/arm: Implement GCSSS1
  target/arm: Implement GCSSS2
  target/arm: Add gcs record for BL
  target/arm: Add gcs record for BLR
  target/arm: Add gcs record for BLR with PAuth
  target/arm: Load gcs record for RET
  target/arm: Load gcs record for RET with PAuth
  target/arm: Copy EXLOCKEn to EXLOCK on exception to the same EL
  target/arm: Implement EXLOCK check during exception return
  target/arm: Enable FEAT_GCS with -cpu max
  linux-user/aarch64: Implement prctls for GCS
  linux-user/aarch64: Allocate new gcs stack on clone
  linux-user/aarch64: Release gcs stack on thread exit
  linux-user/aarch64: Implement map_shadow_stack syscall
  target/arm: Enable GCSPR_EL0 for read in user-mode
  linux-user/aarch64: Inject SIGSEGV for GCS faults
  linux-user/aarch64: Generate GCS signal records
  linux-user: Change exported get_elf_hwcap to abi_ulong
  linux-user/aarch64: Enable GCS in HWCAP
  tests/tcg/aarch64: Add gcsstr
  tests/tcg/aarch64: Add gcspushm
  tests/tcg/aarch64: Add gcsss

 include/exec/cputlb.h              |  32 +--
 include/exec/memopidx.h            |   9 +-
 include/hw/core/cpu.h              |  25 +-
 linux-user/aarch64/gcs-internal.h  |  38 +++
 linux-user/aarch64/target_prctl.h  |  96 +++++++
 linux-user/aarch64/target_signal.h |   1 +
 linux-user/loader.h                |   2 +-
 linux-user/qemu.h                  |   5 +
 target/arm/cpregs.h                |  46 ++-
 target/arm/cpu-features.h          |  20 ++
 target/arm/cpu.h                   | 242 ++--------------
 target/arm/internals.h             | 170 ++---------
 target/arm/mmuidx-internal.h       | 113 ++++++++
 target/arm/mmuidx.h                | 241 ++++++++++++++++
 target/arm/syndrome.h              |  35 +++
 target/arm/tcg/translate.h         |  46 ++-
 target/hppa/cpu.h                  |  28 +-
 tests/tcg/aarch64/gcs.h            |  80 ++++++
 accel/tcg/cputlb.c                 |  49 ++--
 linux-user/aarch64/cpu_loop.c      | 158 ++++++++---
 linux-user/aarch64/signal.c        | 161 ++++++++++-
 linux-user/elfload.c               |  11 +-
 linux-user/syscall.c               | 114 ++++++++
 target/arm/cpregs-gcs.c            | 141 ++++++++++
 target/arm/cpu.c                   |  17 +-
 target/arm/gdbstub64.c             |   1 +
 target/arm/helper.c                | 270 ++++++++++++++----
 target/arm/machine.c               |  62 +++-
 target/arm/mmuidx.c                |  66 +++++
 target/arm/ptw.c                   | 430 +++++++++++++++++++++-------
 target/arm/tcg-stubs.c             |   2 +-
 target/arm/tcg/cpregs-at.c         |  69 +++--
 target/arm/tcg/cpu64.c             |   4 +
 target/arm/tcg/helper-a64.c        |  13 +-
 target/arm/tcg/hflags.c            |  38 +++
 target/arm/tcg/m_helper.c          |   4 +-
 target/arm/tcg/mte_helper.c        |   2 +-
 target/arm/tcg/op_helper.c         |   8 +-
 target/arm/tcg/tlb-insns.c         |  47 +++-
 target/arm/tcg/tlb_helper.c        |  13 +-
 target/arm/tcg/translate-a64.c     | 437 ++++++++++++++++++++++++++---
 target/arm/tcg/translate.c         |  78 +++--
 tcg/tcg.c                          |   3 +-
 tests/tcg/aarch64/gcspushm.c       |  71 +++++
 tests/tcg/aarch64/gcsss.c          |  74 +++++
 tests/tcg/aarch64/gcsstr.c         |  48 ++++
 docs/system/arm/emulation.rst      |   5 +
 target/arm/meson.build             |   9 +-
 target/arm/tcg/a64.decode          |   5 +
 tcg/aarch64/tcg-target.c.inc       |   2 +-
 tcg/arm/tcg-target.c.inc           |   2 +-
 tests/tcg/aarch64/Makefile.target  |   5 +
 52 files changed, 2914 insertions(+), 734 deletions(-)
 create mode 100644 linux-user/aarch64/gcs-internal.h
 create mode 100644 target/arm/mmuidx-internal.h
 create mode 100644 target/arm/mmuidx.h
 create mode 100644 tests/tcg/aarch64/gcs.h
 create mode 100644 target/arm/cpregs-gcs.c
 create mode 100644 target/arm/mmuidx.c
 create mode 100644 tests/tcg/aarch64/gcspushm.c
 create mode 100644 tests/tcg/aarch64/gcsss.c
 create mode 100644 tests/tcg/aarch64/gcsstr.c

-- 
2.43.0



^ permalink raw reply	[flat|nested] 109+ messages in thread

end of thread, other threads:[~2025-08-14 10:16 UTC | newest]

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

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).