Change all linux/*/arch_regs.c to provide either ARCH_SP_REG or ARCH_SP_PEEK_ADDR. Introduce get_stack_pointer(), rewrite all code accessing stack pointers to use get_stack_pointer(). On some architectures stack pointers were referred to as frame pointers, clean up this confusion. * defs.h (get_stack_pointer): New prototype. * syscall.c (get_stack_pointer): New function. * linux/arch_rt_sigframe.c: New file. * linux/aarch64/arch_regs.c (aarch64_sp_ptr, arm_sp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/alpha/arch_regs.c: Import linux/alpha/arch_regs.h. (REG_FP): Rename to REG_SP. (ARCH_SP_PEEK_ADDR): New macro. * linux/alpha/arch_sigreturn.c (arch_sigreturn): Use get_stack_pointer. * linux/arc/arch_regs.c (arc_sp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/arm/arch_regs.c (arm_sp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/arm/arch_sigreturn.c (arch_sigreturn): Use get_stack_pointer. * linux/avr32/arch_regs.c (avr32_sp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/bfin/arch_regs.c (ARCH_SP_PEEK_ADDR): New macro. * linux/hppa/arch_regs.c: Import linux/hppa/arch_regs.h. (PT_GR30, ARCH_SP_PEEK_ADDR): New macros. * linux/hppa/arch_rt_sigframe.c (FUNC_GET_RT_SIGFRAME_ADDR): Use get_stack_pointer. * linux/i386/arch_regs.c (i386_esp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/i386/arch_rt_sigframe.c (FUNC_GET_RT_SIGFRAME_ADDR): Use get_stack_pointer. * linux/i386/arch_sigreturn.c (arch_sigreturn): Likewise. * linux/ia64/arch_regs.c (ia64_frame_ptr): Remove. (ARCH_SP_REG): New macro. * linux/ia64/arch_regs.h (ia64_frame_ptr): Remove. * linux/ia64/arch_rt_sigframe.c (FUNC_GET_RT_SIGFRAME_ADDR): Use get_stack_pointer. * linux/m68k/arch_regs.c (m68k_usp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/m68k/arch_rt_sigframe.c: Link to i386/arch_rt_sigframe.c. * linux/m68k/arch_sigreturn.c (arch_sigreturn): Use get_stack_pointer. * linux/metag/arch_regs.c (metag_sp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/metag/arch_rt_sigframe.c (FUNC_GET_RT_SIGFRAME_ADDR): Use get_stack_pointer. * linux/microblaze/arch_regs.c (ARCH_SP_PEEK_ADDR): New macro. * linux/mips/arch_regs.c: Import linux/mips/arch_regs.h. (mips_regs): Add static qualifier. (ARCH_SP_REG): New macro. * linux/mips/arch_sigreturn.c (arch_sigreturn): Use get_stack_pointer. * linux/nios2/arch_regs.c (nios2_sp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/or1k/arch_regs.c (or1k_sp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/powerpc/arch_regs.c (ppc_regs): Add static qualifier. (ARCH_SP_REG): New macro. * linux/powerpc/arch_rt_sigframe.c (FUNC_GET_RT_SIGFRAME_ADDR): Use get_stack_pointer. * linux/powerpc/arch_sigreturn.c (arch_sigreturn): Use get_stack_pointer. * linux/powerpc64/arch_rt_sigframe.c (FUNC_GET_RT_SIGFRAME_ADDR): Use get_stack_pointer. * linux/riscv/arch_regs.c (riscv_sp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/s390/arch_regs.c (s390_frame_ptr): Remove. (ARCH_SP_REG): New macro. * linux/s390/arch_sigreturn.c (S390_FRAME_PTR): Remove. (arch_sigreturn): Use get_stack_pointer. * linux/s390x/arch_regs.c (s390_frame_ptr, s390x_frame_ptr): Remove. (ARCH_SP_REG): New macro. * linux/s390x/arch_sigreturn.c (S390_FRAME_PTR): Remove. * linux/sh/arch_regs.c (ARCH_SP_PEEK_ADDR): New macro. * linux/sh64/arch_regs.c: Likewise. * linux/sparc/arch_regs.c: Import linux/sparc/arch_regs.h. (sparc_regs): Add static qualifier. (ARCH_SP_REG): New macro. * linux/sparc/arch_sigreturn.c (arch_sigreturn): Use get_stack_pointer. * linux/sparc64/arch_rt_sigframe.c (FUNC_GET_RT_SIGFRAME_ADDR): Use get_stack_pointer. * linux/tile/arch_regs.c (tile_regs): Add static qualifier. (ARCH_SP_REG): New macro. * linux/tile/arch_sigreturn.c (arch_sigreturn): Use get_stack_pointer. * linux/x86_64/arch_regs.c (i386_esp_ptr, x86_64_rsp_ptr): Remove. (ARCH_SP_REG): New macro. * linux/x86_64/arch_regs.h (i386_esp_ptr, x86_64_rsp_ptr): Remove. * linux/x86_64/arch_rt_sigframe.c: Link to i386/arch_rt_sigframe.c. * linux/xtensa/arch_regs.c (ARCH_SP_PEEK_ADDR): New macro. * linux/aarch64/arch_regs.h: Remove. * linux/aarch64/arch_rt_sigframe.c: Remove. * linux/alpha/arch_regs.h: Remove. * linux/alpha/arch_rt_sigframe.c: Remove. * linux/arc/arch_regs.h: Remove. * linux/arc/arch_rt_sigframe.c: Remove. * linux/arm/arch_regs.h: Remove. * linux/arm/arch_rt_sigframe.c: Remove. * linux/avr32/arch_regs.h: Remove. * linux/avr32/arch_rt_sigframe.c: Remove. * linux/bfin/arch_rt_sigframe.c: Remove. * linux/hppa/arch_regs.h: Remove. * linux/i386/arch_regs.h: Remove. * linux/m68k/arch_regs.h: Remove. * linux/metag/arch_regs.h: Remove. * linux/microblaze/arch_rt_sigframe.c: Remove. * linux/mips/arch_regs.h: Remove. * linux/mips/arch_rt_sigframe.c: Remove. * linux/nios2/arch_regs.h: Remove. * linux/nios2/arch_rt_sigframe.c: Remove. * linux/or1k/arch_regs.h: Remove. * linux/or1k/arch_rt_sigframe.c: Remove. * linux/powerpc/arch_regs.h: Remove. * linux/powerpc64/arch_regs.h: Remove. * linux/riscv/arch_regs.h: Remove. * linux/riscv/arch_rt_sigframe.c: Remove. * linux/s390/arch_regs.h: Remove. * linux/s390/arch_rt_sigframe.c: Remove. * linux/s390x/arch_regs.h: Remove. * linux/s390x/arch_rt_sigframe.c: Remove. * linux/sh/arch_rt_sigframe.c: Remove. * linux/sh64/arch_rt_sigframe.c: Remove. * linux/sparc/arch_regs.h: Remove. * linux/sparc/arch_rt_sigframe.c: Remove. * linux/sparc64/arch_regs.h: Remove. * linux/tile/arch_regs.h: Remove. * linux/tile/arch_rt_sigframe.c: Remove. * linux/xtensa/arch_rt_sigframe.c: Remove. * Makefile.am (EXTRA_DIST): Remove them, add linux/arch_rt_sigframe.c.
39 lines
959 B
C
39 lines
959 B
C
#ifndef HAVE_S390_COMPAT_REGS
|
|
typedef struct {
|
|
uint32_t mask;
|
|
uint32_t addr;
|
|
} ATTRIBUTE_ALIGNED(8) psw_compat_t;
|
|
|
|
typedef struct {
|
|
psw_compat_t psw;
|
|
uint32_t gprs[NUM_GPRS];
|
|
uint32_t acrs[NUM_ACRS];
|
|
uint32_t orig_gpr2;
|
|
} s390_compat_regs;
|
|
#endif
|
|
|
|
static union {
|
|
s390_compat_regs s390_regs;
|
|
s390_regs s390x_regs;
|
|
} s390x_regs_union;
|
|
|
|
#define s390_regset s390x_regs_union.s390_regs
|
|
#define s390x_regset s390x_regs_union.s390x_regs
|
|
|
|
static struct iovec s390x_io = {
|
|
.iov_base = &s390x_regs_union,
|
|
};
|
|
|
|
|
|
#define ARCH_REGS_FOR_GETREGSET s390x_regs_union
|
|
#define ARCH_IOVEC_FOR_GETREGSET s390x_io
|
|
#define ARCH_PC_REG \
|
|
(s390x_io.iov_len == sizeof(s390_regset) ? \
|
|
s390_regset.psw.addr : s390x_regset.psw.addr)
|
|
#define ARCH_SP_REG \
|
|
(s390x_io.iov_len == sizeof(s390_regset) ? \
|
|
s390_regset.gprs[15] : s390x_regset.gprs[15])
|
|
|
|
#define ARCH_PERSONALITY_0_IOV_SIZE sizeof(s390x_regset)
|
|
#define ARCH_PERSONALITY_1_IOV_SIZE sizeof(s390_regset)
|