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[2]); >> } >> >> +#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. ?? cheers