Home | History | Annotate | Download | only in s390x
      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