| #include <features.h> |
| #include <fpu_control.h> |
| #include <signal.h> |
| #include <sys/types.h> |
| #include <signal.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <ucontext.h> |
| #include <unistd.h> |
| |
| char source[40] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\0"; |
| char target[40] = " \0"; |
| |
| void handle_SIG(int sig) |
| { |
| static int counter; |
| char buf2[40]; |
| |
| counter++; |
| asm volatile( "larl 1,1f\n" |
| "ex 0,0(1)\n" |
| "j 2f\n" |
| "1: mvc 0(30,%0),0(%1)\n" |
| "2:\n" |
| ::"a" (buf2), "a" (source) |
| : "1"); |
| if (counter == 2) { |
| printf("%s\n", target); |
| exit(1); |
| } else |
| alarm(1); |
| } |
| |
| int main() |
| { |
| signal(SIGALRM, handle_SIG); |
| alarm(1); |
| |
| asm volatile( "larl 1,1f\n" |
| "0: ex 0,0(1)\n" |
| "j 0b\n" |
| "1: mvc 0(20,%0),0(%1)\n" |
| ::"a" (target), "a" (source) |
| : "1"); |
| exit(0); |
| } |