* RFC: parisc regset support
@ 2016-05-01 9:25 Helge Deller
2016-05-01 9:28 ` Helge Deller
0 siblings, 1 reply; 2+ messages in thread
From: Helge Deller @ 2016-05-01 9:25 UTC (permalink / raw)
To: Carlos O'Donell; +Cc: John David Anglin, linux-parisc, Randolph Chung
Hi all,
Earlier this month I posted a patch which adds regset support
to parisc and which I'm planning to push for kernel v4.7:
https://patchwork.kernel.org/patch/8787691/
In this patch is the "new" user-visible regset
which I've laid out like this:
> +struct user_regs_struct {
> + unsigned long gr[32]; /* PSW is in gr[0] */
> + unsigned long sr[8];
> + unsigned long iaoq[2];
> + unsigned long iasq[2];
> + unsigned long sar; /* CR11 */
> + unsigned long iir; /* CR19 */
> + unsigned long isr; /* CR20 */
> + unsigned long ior; /* CR21 */
> + unsigned long ipsw; /* CR22 */
> + unsigned long cr0;
> + unsigned long cr24, cr25, cr26, cr27, cr28, cr29, cr30, cr31;
> + unsigned long cr8, cr9, cr12, cr13, cr10, cr15;
> + unsigned long _pad[80-64]; /* pad to ELF_NGREG (80) */
> +};
Current glibc versions use this definition in
/usr/include/hppa-linux-gnu/sys/ucontext.h
/* Container for all general registers. */
typedef struct gregset
{
greg_t g_regs[32];
greg_t sr_regs[8];
greg_t cr_regs[24];
greg_t g_pad[16];
} gregset_t;
What is you opinion on this change, e.g. using explicit names of the
control registers and their order?
By the way, the order I choosed is modelled after the in-kernel
ELF/core-dump code which can be seen in arch/parisc/include/asm/elf.h:
/*
* Fill in general registers in a core dump. This saves pretty
* much the same registers as hp-ux, although in a different order.
* Registers marked # below are not currently saved in pt_regs, so
* we use their current values here.
*
* gr0..gr31
* sr0..sr7
* iaoq0..iaoq1
* iasq0..iasq1
* cr11 (sar)
* cr19 (iir)
* cr20 (isr)
* cr21 (ior)
* # cr22 (ipsw)
* # cr0 (recovery counter)
* # cr24..cr31 (temporary registers)
* # cr8,9,12,13 (protection IDs)
* # cr10 (scr/ccr)
* # cr15 (ext int enable mask)
*
*/
#define ELF_CORE_COPY_REGS(dst, pt) \
memset(dst, 0, sizeof(dst)); /* don't leak any "random" bits */ \
memcpy(dst + 0, pt->gr, 32 * sizeof(elf_greg_t)); \
memcpy(dst + 32, pt->sr, 8 * sizeof(elf_greg_t)); \
memcpy(dst + 40, pt->iaoq, 2 * sizeof(elf_greg_t)); \
memcpy(dst + 42, pt->iasq, 2 * sizeof(elf_greg_t)); \
dst[44] = pt->sar; dst[45] = pt->iir; \
dst[46] = pt->isr; dst[47] = pt->ior; \
dst[48] = mfctl(22); dst[49] = mfctl(0); \
dst[50] = mfctl(24); dst[51] = mfctl(25); \
dst[52] = mfctl(26); dst[53] = mfctl(27); \
dst[54] = mfctl(28); dst[55] = mfctl(29); \
dst[56] = mfctl(30); dst[57] = mfctl(31); \
dst[58] = mfctl( 8); dst[59] = mfctl( 9); \
dst[60] = mfctl(12); dst[61] = mfctl(13); \
dst[62] = mfctl(10); dst[63] = mfctl(15);
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: RFC: parisc regset support
2016-05-01 9:25 RFC: parisc regset support Helge Deller
@ 2016-05-01 9:28 ` Helge Deller
0 siblings, 0 replies; 2+ messages in thread
From: Helge Deller @ 2016-05-01 9:28 UTC (permalink / raw)
To: Carlos O'Donell; +Cc: John David Anglin, linux-parisc, Randolph Chung
On 01.05.2016 11:25, Helge Deller wrote:
> Hi all,
>
> Earlier this month I posted a patch which adds regset support
> to parisc and which I'm planning to push for kernel v4.7:
> https://patchwork.kernel.org/patch/8787691/
>
> In this patch is the "new" user-visible regset
> which I've laid out like this:
>
>> +struct user_regs_struct {
>> + unsigned long gr[32]; /* PSW is in gr[0] */
>> + unsigned long sr[8];
>> + unsigned long iaoq[2];
>> + unsigned long iasq[2];
>> + unsigned long sar; /* CR11 */
>> + unsigned long iir; /* CR19 */
>> + unsigned long isr; /* CR20 */
>> + unsigned long ior; /* CR21 */
>> + unsigned long ipsw; /* CR22 */
>> + unsigned long cr0;
>> + unsigned long cr24, cr25, cr26, cr27, cr28, cr29, cr30, cr31;
>> + unsigned long cr8, cr9, cr12, cr13, cr10, cr15;
>> + unsigned long _pad[80-64]; /* pad to ELF_NGREG (80) */
>> +};
>
> Current glibc versions use this definition in
> /usr/include/hppa-linux-gnu/sys/ucontext.h
>
> /* Container for all general registers. */
> typedef struct gregset
> {
> greg_t g_regs[32];
> greg_t sr_regs[8];
> greg_t cr_regs[24];
> greg_t g_pad[16];
> } gregset_t;
>
> What is you opinion on this change, e.g. using explicit names of the
> control registers and their order?
I missed to mention, that the glibc header file (/usr/include/hppa-linux-gnu/sys/ucontext.h)
includes a comment at the top which says:
/* Don't rely on this, the interface is currently messed up and may need to
be broken to be fixed. */
I don't know who added this comment, and what exactly was meant with it.
Any ideas?
> By the way, the order I choosed is modelled after the in-kernel
> ELF/core-dump code which can be seen in arch/parisc/include/asm/elf.h:
>
> /*
> * Fill in general registers in a core dump. This saves pretty
> * much the same registers as hp-ux, although in a different order.
> * Registers marked # below are not currently saved in pt_regs, so
> * we use their current values here.
> *
> * gr0..gr31
> * sr0..sr7
> * iaoq0..iaoq1
> * iasq0..iasq1
> * cr11 (sar)
> * cr19 (iir)
> * cr20 (isr)
> * cr21 (ior)
> * # cr22 (ipsw)
> * # cr0 (recovery counter)
> * # cr24..cr31 (temporary registers)
> * # cr8,9,12,13 (protection IDs)
> * # cr10 (scr/ccr)
> * # cr15 (ext int enable mask)
> *
> */
>
> #define ELF_CORE_COPY_REGS(dst, pt) \
> memset(dst, 0, sizeof(dst)); /* don't leak any "random" bits */ \
> memcpy(dst + 0, pt->gr, 32 * sizeof(elf_greg_t)); \
> memcpy(dst + 32, pt->sr, 8 * sizeof(elf_greg_t)); \
> memcpy(dst + 40, pt->iaoq, 2 * sizeof(elf_greg_t)); \
> memcpy(dst + 42, pt->iasq, 2 * sizeof(elf_greg_t)); \
> dst[44] = pt->sar; dst[45] = pt->iir; \
> dst[46] = pt->isr; dst[47] = pt->ior; \
> dst[48] = mfctl(22); dst[49] = mfctl(0); \
> dst[50] = mfctl(24); dst[51] = mfctl(25); \
> dst[52] = mfctl(26); dst[53] = mfctl(27); \
> dst[54] = mfctl(28); dst[55] = mfctl(29); \
> dst[56] = mfctl(30); dst[57] = mfctl(31); \
> dst[58] = mfctl( 8); dst[59] = mfctl( 9); \
> dst[60] = mfctl(12); dst[61] = mfctl(13); \
> dst[62] = mfctl(10); dst[63] = mfctl(15);
>
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-05-01 9:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-05-01 9:25 RFC: parisc regset support Helge Deller
2016-05-01 9:28 ` Helge Deller
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.