diff options
| author | Richard Henderson | 2021-02-12 19:48:55 +0100 |
|---|---|---|
| committer | Peter Maydell | 2021-02-16 14:08:46 +0100 |
| commit | d109b46d8d3568bcab76295ac31aa1d9d4268e11 (patch) | |
| tree | 9dde8a0f8e003593e63617c213bf2a240a600d10 /linux-user | |
| parent | linux-user/aarch64: Implement PR_MTE_TCF and PR_MTE_TAG (diff) | |
| download | qemu-d109b46d8d3568bcab76295ac31aa1d9d4268e11.tar.gz qemu-d109b46d8d3568bcab76295ac31aa1d9d4268e11.tar.xz qemu-d109b46d8d3568bcab76295ac31aa1d9d4268e11.zip | |
linux-user/aarch64: Implement PROT_MTE
Remember the PROT_MTE bit as PAGE_MTE/PAGE_TARGET_2.
Otherwise this does not yet have effect.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20210212184902.1251044-25-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'linux-user')
| -rw-r--r-- | linux-user/mmap.c | 22 | ||||
| -rw-r--r-- | linux-user/syscall_defs.h | 1 |
2 files changed, 15 insertions, 8 deletions
diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 9fe0c634e2..7e3b245036 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -84,18 +84,24 @@ static int validate_prot_to_pageflags(int *host_prot, int prot) | (prot & PROT_EXEC ? PROT_READ : 0); #ifdef TARGET_AARCH64 - /* - * The PROT_BTI bit is only accepted if the cpu supports the feature. - * Since this is the unusual case, don't bother checking unless - * the bit has been requested. If set and valid, record the bit - * within QEMU's page_flags. - */ - if (prot & TARGET_PROT_BTI) { + { ARMCPU *cpu = ARM_CPU(thread_cpu); - if (cpu_isar_feature(aa64_bti, cpu)) { + + /* + * The PROT_BTI bit is only accepted if the cpu supports the feature. + * Since this is the unusual case, don't bother checking unless + * the bit has been requested. If set and valid, record the bit + * within QEMU's page_flags. + */ + if ((prot & TARGET_PROT_BTI) && cpu_isar_feature(aa64_bti, cpu)) { valid |= TARGET_PROT_BTI; page_flags |= PAGE_BTI; } + /* Similarly for the PROT_MTE bit. */ + if ((prot & TARGET_PROT_MTE) && cpu_isar_feature(aa64_mte, cpu)) { + valid |= TARGET_PROT_MTE; + page_flags |= PAGE_MTE; + } } #endif diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h index f98c1c1c8d..46a960fccb 100644 --- a/linux-user/syscall_defs.h +++ b/linux-user/syscall_defs.h @@ -1311,6 +1311,7 @@ struct target_winsize { #ifdef TARGET_AARCH64 #define TARGET_PROT_BTI 0x10 +#define TARGET_PROT_MTE 0x20 #endif /* Common */ |
