1b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes#ifndef S390_FRAME_PTR
2b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes# define S390_FRAME_PTR s390_frame_ptr
3b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes#endif
4b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes#ifndef SIGNAL_FRAMESIZE
5b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes# define SIGNAL_FRAMESIZE __SIGNAL_FRAMESIZE
6b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes#endif
7b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes#ifndef PTR_TYPE
8b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes# define PTR_TYPE unsigned long
9b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes#endif
10b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes
11527b42ff8da3f52fa7c48eb766b2b57fb0f0b977Dmitry V. Levinstatic void
12527b42ff8da3f52fa7c48eb766b2b57fb0f0b977Dmitry V. Levinarch_sigreturn(struct tcb *tcp)
13527b42ff8da3f52fa7c48eb766b2b57fb0f0b977Dmitry V. Levin{
14b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes	PTR_TYPE mask[NSIG_BYTES / sizeof(PTR_TYPE)];
15b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes	const PTR_TYPE addr = *S390_FRAME_PTR + SIGNAL_FRAMESIZE;
16a3c483545a7fb3a075f885a01a3c58b2f84db8faDmitry V. Levin
17527b42ff8da3f52fa7c48eb766b2b57fb0f0b977Dmitry V. Levin	if (umove(tcp, addr, &mask) < 0) {
18b755614143ce6aab5265ed32c1bb6c8f748e7898Elliott Hughes		tprintf("{mask=%#llx}", zero_extend_signed_to_ull(addr));
19527b42ff8da3f52fa7c48eb766b2b57fb0f0b977Dmitry V. Levin	} else {
20527b42ff8da3f52fa7c48eb766b2b57fb0f0b977Dmitry V. Levin		tprintsigmask_addr("{mask=", mask);
21527b42ff8da3f52fa7c48eb766b2b57fb0f0b977Dmitry V. Levin		tprints("}");
22527b42ff8da3f52fa7c48eb766b2b57fb0f0b977Dmitry V. Levin	}
23a3c483545a7fb3a075f885a01a3c58b2f84db8faDmitry V. Levin}
24