ex_sig.c revision 8f943afc22a6a683b78271836c8ddc462b4824a9
1#include <features.h>
2#include <fpu_control.h>
3#include <signal.h>
4#include <sys/types.h>
5#include <signal.h>
6#include <stdio.h>
7#include <stdlib.h>
8#include <ucontext.h>
9#include <unistd.h>
10
11char source[40] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\0";
12char target[40] = "                                       \0";
13
14void handle_SIG(int sig)
15{
16	static int counter;
17	char buf2[40];
18
19	counter++;
20	asm volatile(	"larl 1,1f\n"
21			"ex 0,0(1)\n"
22			"j 2f\n"
23			"1: mvc 0(30,%0),0(%1)\n"
24			"2:\n"
25		::"a" (buf2), "a" (source)
26		: "1");
27	if (counter == 2) {
28		printf("%s\n", target);
29		exit(1);
30	} else
31		alarm(1);
32}
33
34int main()
35{
36	signal(SIGALRM, handle_SIG);
37	alarm(1);
38
39	asm volatile(	"larl 1,1f\n"
40			"0: ex 0,0(1)\n"
41			"j 0b\n"
42			"1: mvc 0(20,%0),0(%1)\n"
43		::"a" (target), "a" (source)
44		: "1");
45	exit(0);
46}
47