mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 06:43:53 -06:00
target/arm: Factor out code for setting MTE TCF0 field
Factor out the code used for setting the MTE TCF0 field from the prctl code into a convenient function. Other subsystems, like gdbstub, need to set this field as well, so keep it as a separate function to avoid duplication and ensure consistency in how this field is set across the board. Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> Message-Id: <20240628050850.536447-7-gustavo.romero@linaro.org> [AJB: clean-up includes, move MTE defines] Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20240705084047.857176-36-alex.bennee@linaro.org>
This commit is contained in:
parent
0c9b437c90
commit
bef6a77f6d
5 changed files with 71 additions and 29 deletions
|
@ -7,6 +7,7 @@
|
|||
#define AARCH64_TARGET_PRCTL_H
|
||||
|
||||
#include "target/arm/cpu-features.h"
|
||||
#include "mte_user_helper.h"
|
||||
|
||||
static abi_long do_prctl_sve_get_vl(CPUArchState *env)
|
||||
{
|
||||
|
@ -173,26 +174,7 @@ static abi_long do_prctl_set_tagged_addr_ctrl(CPUArchState *env, abi_long arg2)
|
|||
env->tagged_addr_enable = arg2 & PR_TAGGED_ADDR_ENABLE;
|
||||
|
||||
if (cpu_isar_feature(aa64_mte, cpu)) {
|
||||
/*
|
||||
* Write PR_MTE_TCF to SCTLR_EL1[TCF0].
|
||||
*
|
||||
* The kernel has a per-cpu configuration for the sysadmin,
|
||||
* /sys/devices/system/cpu/cpu<N>/mte_tcf_preferred,
|
||||
* which qemu does not implement.
|
||||
*
|
||||
* Because there is no performance difference between the modes, and
|
||||
* because SYNC is most useful for debugging MTE errors, choose SYNC
|
||||
* as the preferred mode. With this preference, and the way the API
|
||||
* uses only two bits, there is no way for the program to select
|
||||
* ASYMM mode.
|
||||
*/
|
||||
unsigned tcf = 0;
|
||||
if (arg2 & PR_MTE_TCF_SYNC) {
|
||||
tcf = 1;
|
||||
} else if (arg2 & PR_MTE_TCF_ASYNC) {
|
||||
tcf = 2;
|
||||
}
|
||||
env->cp15.sctlr_el[1] = deposit64(env->cp15.sctlr_el[1], 38, 2, tcf);
|
||||
arm_set_mte_tcf0(env, arg2);
|
||||
|
||||
/*
|
||||
* Write PR_MTE_TAG to GCR_EL1[Exclude].
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue