Thiago Jung Bauermann <bauer...@linux.vnet.ibm.com> writes:
> Ram Pai <linux...@us.ibm.com> writes:
>> The value of the AMR register at the time of exception
>> is made available in gp_regs[PT_AMR] of the siginfo.
>> The value of the pkey, whose protection got violated,
>> is made available in si_pkey field of the siginfo structure.
> Should the IAMR also be made available?
> Also, should the AMR and IAMR be accesible to userspace (e.g., to GDB)
> via ptrace and the core file?
Yes if they're part of the thread's context they should be accessible
via ptrace and in core files.
>> --- a/arch/powerpc/kernel/signal_32.c
>> +++ b/arch/powerpc/kernel/signal_32.c
>> @@ -500,6 +500,11 @@ static int save_user_regs(struct pt_regs *regs, struct
>> mcontext __user *frame,
>> (unsigned long) &frame->tramp);
>> +#ifdef CONFIG_PPC64_MEMORY_PROTECTION_KEYS
>> + if (__put_user(get_paca()->paca_amr, &frame->mc_gregs[PT_AMR]))
>> + return 1;
>> +#endif /* CONFIG_PPC64_MEMORY_PROTECTION_KEYS */
>> return 0;
> frame->mc_gregs[PT_AMR] has 32 bits, but paca_amr has 64 bits. Does this
> work as intended?
I don't understand why we are putting it in there at all?
Is there some special handling of the actual register on signals? I
haven't seen it. In which case the process can get the value of AMR by
reading the register. ??