linux-user/s390x: Use uint16_t for signal retcode
Using the right type simplifies the frame setup. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: David Hildenbrand <david@redhat.com> Message-Id: <20210428193408.233706-3-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
5d79bd111f
commit
cb1f198296
@ -25,7 +25,6 @@
|
|||||||
#define __NUM_FPRS 16
|
#define __NUM_FPRS 16
|
||||||
#define __NUM_ACRS 16
|
#define __NUM_ACRS 16
|
||||||
|
|
||||||
#define S390_SYSCALL_SIZE 2
|
|
||||||
#define __SIGNAL_FRAMESIZE 160 /* FIXME: 31-bit mode -> 96 */
|
#define __SIGNAL_FRAMESIZE 160 /* FIXME: 31-bit mode -> 96 */
|
||||||
|
|
||||||
#define _SIGCONTEXT_NSIG 64
|
#define _SIGCONTEXT_NSIG 64
|
||||||
@ -62,7 +61,7 @@ typedef struct {
|
|||||||
target_sigcontext sc;
|
target_sigcontext sc;
|
||||||
target_sigregs sregs;
|
target_sigregs sregs;
|
||||||
int signo;
|
int signo;
|
||||||
uint8_t retcode[S390_SYSCALL_SIZE];
|
uint16_t retcode;
|
||||||
} sigframe;
|
} sigframe;
|
||||||
|
|
||||||
struct target_ucontext {
|
struct target_ucontext {
|
||||||
@ -75,7 +74,7 @@ struct target_ucontext {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t callee_used_stack[__SIGNAL_FRAMESIZE];
|
uint8_t callee_used_stack[__SIGNAL_FRAMESIZE];
|
||||||
uint8_t retcode[S390_SYSCALL_SIZE];
|
uint16_t retcode;
|
||||||
struct target_siginfo info;
|
struct target_siginfo info;
|
||||||
struct target_ucontext uc;
|
struct target_ucontext uc;
|
||||||
} rt_sigframe;
|
} rt_sigframe;
|
||||||
@ -155,7 +154,7 @@ void setup_frame(int sig, struct target_sigaction *ka,
|
|||||||
env->regs[14] = (frame_addr + offsetof(sigframe, retcode))
|
env->regs[14] = (frame_addr + offsetof(sigframe, retcode))
|
||||||
| PSW_ADDR_AMODE;
|
| PSW_ADDR_AMODE;
|
||||||
__put_user(S390_SYSCALL_OPCODE | TARGET_NR_sigreturn,
|
__put_user(S390_SYSCALL_OPCODE | TARGET_NR_sigreturn,
|
||||||
(uint16_t *)(frame->retcode));
|
&frame->retcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set up backchain. */
|
/* Set up backchain. */
|
||||||
@ -216,7 +215,7 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
|
|||||||
env->regs[14] = (frame_addr + offsetof(typeof(*frame), retcode))
|
env->regs[14] = (frame_addr + offsetof(typeof(*frame), retcode))
|
||||||
| PSW_ADDR_AMODE;
|
| PSW_ADDR_AMODE;
|
||||||
__put_user(S390_SYSCALL_OPCODE | TARGET_NR_rt_sigreturn,
|
__put_user(S390_SYSCALL_OPCODE | TARGET_NR_rt_sigreturn,
|
||||||
(uint16_t *)(frame->retcode));
|
&frame->retcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set up backchain. */
|
/* Set up backchain. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user