blob: 2170a7baf6afd006270be2b5da94b53e55165b2b [file] [log] [blame]
#ifndef SIZEOF_STRUCT_SPARC_STACKF
# define SIZEOF_STRUCT_SPARC_STACKF sizeof(struct sparc_stackf)
#endif
#ifndef SIZEOF_STRUCT_PT_REGS
# define SIZEOF_STRUCT_PT_REGS sizeof(struct pt_regs)
#endif
#ifndef PERSONALITY_WORDSIZE
# define PERSONALITY_WORDSIZE PERSONALITY0_WORDSIZE
#endif
static void
arch_sigreturn(struct tcb *tcp)
{
unsigned long addr = sparc_regs.u_regs[U_REG_FP] +
SIZEOF_STRUCT_SPARC_STACKF + SIZEOF_STRUCT_PT_REGS;
struct {
unsigned int mask;
char fpu_save[PERSONALITY_WORDSIZE];
char insns[PERSONALITY_WORDSIZE * 2] ATTRIBUTE_ALIGNED(8);
unsigned int extramask[NSIG_BYTES / sizeof(int) - 1];
} frame;
if (umove(tcp, addr, &frame) < 0) {
tprintf("{mask=%#lx}", addr);
} else {
unsigned int mask[NSIG_BYTES / sizeof(int)];
mask[0] = frame.mask;
memcpy(mask + 1, frame.extramask, sizeof(frame.extramask));
tprintsigmask_addr("{mask=", mask);
tprints("}");
}
}
#undef PERSONALITY_WORDSIZE
#undef SIZEOF_STRUCT_PT_REGS
#undef SIZEOF_STRUCT_SPARC_STACKF