--- /dev/null
+/* zArchitecture specifies that operation exception(illegal opcode) is
+suppressing. That means that the program check old psw will point to
+the instruction after the illegal one (according to the calculated length).
+There are some programs out there that use this mechanism to detect available
+intruction (sigh).
+This patch checks, that valgrind makes forard progress. */
+#include <signal.h>
+#include <stdio.h>
+#include <string.h>
+static volatile int got_ill;
+static void handle_ill(int sig)
+{
+ got_ill = 1;
+}
+int main()
+{
+ struct sigaction sa;
+
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_handler = handle_ill;
+ sigaction(SIGILL, &sa, NULL);
+
+ got_ill = 0;
+ /* most architectures loop here, but on s390 this would increase the
+ PSW by 2 and then by 2 */
+ asm volatile(".long 0\n");
+ if (got_ill)
+ printf("0x00000000 does not loop\n");
+
+ got_ill = 0;
+ /* most architectures loop here, but on s390 this would increase the
+ PSW by 6 and then by 2*/
+ asm volatile(".long 0xffffffff\n.long 0xffff0000\n");
+ if (got_ill)
+ printf("0xffffffff does not loop\n");
+
+}
+
--- /dev/null
+
+vex s390->IR: unknown insn: 0000
+valgrind: Unrecognised instruction at address 0x.........
+ at 0x........: main (op_exception.c:23)
+Your program just tried to execute an instruction that Valgrind
+did not recognise. There are two possible reasons for this.
+1. Your program has a bug and erroneously jumped to a non-code
+ location. If you are running Memcheck and you just saw a
+ warning about a bad jump, it's probably your program's fault.
+2. The instruction is legitimate but Valgrind doesn't handle it,
+ i.e. it's Valgrind's fault. If you think this is the case or
+ you are not sure, please let us know and we'll try to fix it.
+Either way, Valgrind will now raise a SIGILL signal which will
+probably kill your program.
+vex s390->IR: unknown insn: 0000
+valgrind: Unrecognised instruction at address 0x.........
+ at 0x........: main (op_exception.c:27)
+Your program just tried to execute an instruction that Valgrind
+did not recognise. There are two possible reasons for this.
+1. Your program has a bug and erroneously jumped to a non-code
+ location. If you are running Memcheck and you just saw a
+ warning about a bad jump, it's probably your program's fault.
+2. The instruction is legitimate but Valgrind doesn't handle it,
+ i.e. it's Valgrind's fault. If you think this is the case or
+ you are not sure, please let us know and we'll try to fix it.
+Either way, Valgrind will now raise a SIGILL signal which will
+probably kill your program.
+vex s390->IR: unknown insn: FFFF FFFF FFFF
+valgrind: Unrecognised instruction at address 0x.........
+ at 0x........: main (op_exception.c:30)
+Your program just tried to execute an instruction that Valgrind
+did not recognise. There are two possible reasons for this.
+1. Your program has a bug and erroneously jumped to a non-code
+ location. If you are running Memcheck and you just saw a
+ warning about a bad jump, it's probably your program's fault.
+2. The instruction is legitimate but Valgrind doesn't handle it,
+ i.e. it's Valgrind's fault. If you think this is the case or
+ you are not sure, please let us know and we'll try to fix it.
+Either way, Valgrind will now raise a SIGILL signal which will
+probably kill your program.
+vex s390->IR: unknown insn: 0000
+valgrind: Unrecognised instruction at address 0x.........
+ at 0x........: main (op_exception.c:34)
+Your program just tried to execute an instruction that Valgrind
+did not recognise. There are two possible reasons for this.
+1. Your program has a bug and erroneously jumped to a non-code
+ location. If you are running Memcheck and you just saw a
+ warning about a bad jump, it's probably your program's fault.
+2. The instruction is legitimate but Valgrind doesn't handle it,
+ i.e. it's Valgrind's fault. If you think this is the case or
+ you are not sure, please let us know and we'll try to fix it.
+Either way, Valgrind will now raise a SIGILL signal which will
+probably kill your program.
+