1 /* zArchitecture specifies that operation exception(illegal opcode) is 2 suppressing. That means that the program check old psw will point to 3 the instruction after the illegal one (according to the calculated length). 4 There are some programs out there that use this mechanism to detect available 5 intruction (sigh). 6 This patch checks, that valgrind makes forard progress. */ 7 #include <signal.h> 8 #include <stdio.h> 9 #include <string.h> 10 static volatile int got_ill; 11 static void handle_ill(int sig) 12 { 13 got_ill = 1; 14 } 15 int main() 16 { 17 struct sigaction sa; 18 19 memset(&sa, 0, sizeof(sa)); 20 sa.sa_handler = handle_ill; 21 sigaction(SIGILL, &sa, NULL); 22 23 got_ill = 0; 24 /* most architectures loop here, but on s390 this would increase the 25 PSW by 2 and then by 2 */ 26 asm volatile(".long 0\n"); 27 if (got_ill) 28 printf("0x00000000 does not loop\n"); 29 30 got_ill = 0; 31 /* most architectures loop here, but on s390 this would increase the 32 PSW by 6 and then by 2*/ 33 asm volatile(".long 0xffffffff\n.long 0xffff0000\n"); 34 if (got_ill) 35 printf("0xffffffff does not loop\n"); 36 return 0; 37 } 38 39