strace/linux/i386/arch_sigreturn.c
Dmitry V. Levin 527b42ff8d cleanup: make arch_sigreturn.c files more readable
Make arch_sigreturn.c files more self-sustained.  While they are
still being included by sigreturn.c, the latter no longer defines
arch_sigreturn function.

* linux/alpha/arch_sigreturn.c (arch_sigreturn): Define.
* linux/arm/arch_sigreturn.c: Likewise.
* linux/crisv10/arch_sigreturn.c: Likewise.
* linux/i386/arch_sigreturn.c: Likewise.
* linux/ia64/arch_sigreturn.c: Likewise.
* linux/m68k/arch_sigreturn.c: Likewise.
* linux/microblaze/arch_sigreturn.c: Likewise.
* linux/mips/arch_sigreturn.c: Likewise.
* linux/powerpc/arch_sigreturn.c: Likewise.
* linux/s390/arch_sigreturn.c: Likewise.
* linux/sparc/arch_sigreturn.c: Likewise.
* linux/tile/arch_sigreturn.c: Likewise.
* linux/x32/arch_sigreturn.c: Remove code.
Include "x86_64/arch_sigreturn.c".
* linux/x86_64/arch_sigreturn.c: Stop including "x32/arch_sigreturn.c".
Include "i386/arch_sigreturn.c" with arch_sigreturn temporarily defined
to i386_arch_sigreturn.
(arch_sigreturn): Define.  Add x32 personality support there.
* sigreturn.c: Remove arch_sigreturn header and footer.

Requested-by: Denys Vlasenko <dvlasenk@redhat.com>
2015-11-28 02:58:29 +00:00

25 lines
617 B
C

static void
arch_sigreturn(struct tcb *tcp)
{
/*
* On i386, sigcontext is followed on stack by struct fpstate
* and after it an additional u32 extramask which holds
* upper half of the mask.
*/
struct {
uint32_t struct_sigcontext_padding1[20];
uint32_t oldmask;
uint32_t struct_sigcontext_padding2;
uint32_t struct_fpstate_padding[156];
uint32_t extramask;
} frame;
if (umove(tcp, *i386_esp_ptr, &frame) < 0) {
tprintf("{mask=%#lx}", (unsigned long) *i386_esp_ptr);
} else {
uint32_t mask[2] = { frame.oldmask, frame.extramask };
tprintsigmask_addr("{mask=", mask);
tprints("}");
}
}