mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-28 18:10:32 +00:00
arm64/ptrace: add support for FEAT_POE
Add a regset for POE containing POR_EL0. Signed-off-by: Joey Gouly <joey.gouly@arm.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Reviewed-by: Mark Brown <broonie@kernel.org> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> Link: https://lore.kernel.org/r/20240822151113.1479789-21-joey.gouly@arm.com Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
9160f7e909
commit
1751981992
@ -1440,6 +1440,39 @@ static int tagged_addr_ctrl_set(struct task_struct *target, const struct
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARM64_POE
|
||||||
|
static int poe_get(struct task_struct *target,
|
||||||
|
const struct user_regset *regset,
|
||||||
|
struct membuf to)
|
||||||
|
{
|
||||||
|
if (!system_supports_poe())
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return membuf_write(&to, &target->thread.por_el0,
|
||||||
|
sizeof(target->thread.por_el0));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int poe_set(struct task_struct *target, const struct
|
||||||
|
user_regset *regset, unsigned int pos,
|
||||||
|
unsigned int count, const void *kbuf, const
|
||||||
|
void __user *ubuf)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
long ctrl;
|
||||||
|
|
||||||
|
if (!system_supports_poe())
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &ctrl, 0, -1);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
target->thread.por_el0 = ctrl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
enum aarch64_regset {
|
enum aarch64_regset {
|
||||||
REGSET_GPR,
|
REGSET_GPR,
|
||||||
REGSET_FPR,
|
REGSET_FPR,
|
||||||
@ -1469,6 +1502,9 @@ enum aarch64_regset {
|
|||||||
#ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
|
#ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
|
||||||
REGSET_TAGGED_ADDR_CTRL,
|
REGSET_TAGGED_ADDR_CTRL,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_ARM64_POE
|
||||||
|
REGSET_POE
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct user_regset aarch64_regsets[] = {
|
static const struct user_regset aarch64_regsets[] = {
|
||||||
@ -1628,6 +1664,16 @@ static const struct user_regset aarch64_regsets[] = {
|
|||||||
.set = tagged_addr_ctrl_set,
|
.set = tagged_addr_ctrl_set,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_ARM64_POE
|
||||||
|
[REGSET_POE] = {
|
||||||
|
.core_note_type = NT_ARM_POE,
|
||||||
|
.n = 1,
|
||||||
|
.size = sizeof(long),
|
||||||
|
.align = sizeof(long),
|
||||||
|
.regset_get = poe_get,
|
||||||
|
.set = poe_set,
|
||||||
|
},
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct user_regset_view user_aarch64_view = {
|
static const struct user_regset_view user_aarch64_view = {
|
||||||
|
@ -441,6 +441,7 @@ typedef struct elf64_shdr {
|
|||||||
#define NT_ARM_ZA 0x40c /* ARM SME ZA registers */
|
#define NT_ARM_ZA 0x40c /* ARM SME ZA registers */
|
||||||
#define NT_ARM_ZT 0x40d /* ARM SME ZT registers */
|
#define NT_ARM_ZT 0x40d /* ARM SME ZT registers */
|
||||||
#define NT_ARM_FPMR 0x40e /* ARM floating point mode register */
|
#define NT_ARM_FPMR 0x40e /* ARM floating point mode register */
|
||||||
|
#define NT_ARM_POE 0x40f /* ARM POE registers */
|
||||||
#define NT_ARC_V2 0x600 /* ARCv2 accumulator/extra registers */
|
#define NT_ARC_V2 0x600 /* ARCv2 accumulator/extra registers */
|
||||||
#define NT_VMCOREDD 0x700 /* Vmcore Device Dump Note */
|
#define NT_VMCOREDD 0x700 /* Vmcore Device Dump Note */
|
||||||
#define NT_MIPS_DSP 0x800 /* MIPS DSP ASE registers */
|
#define NT_MIPS_DSP 0x800 /* MIPS DSP ASE registers */
|
||||||
|
Loading…
Reference in New Issue
Block a user