Hi, I've had the following bug report submitted; if the submitter is correct (which seems likely, but I don't have a G4 powerpc box to test on), then the jit code in 8.39 is using G5 instructions inappropriately (where the 8.38 code didn't).
Obviously, I could just disable jit for this architecture, but I'd rather avoid it if possible... Regards, Matthew -------- Forwarded Message -------- Subject: Bug#840354: src:pcre3: FTBFS on powerpc (G4 CPU) Resent-Date: Mon, 10 Oct 2016 20:39:06 +0000 Resent-From: Christoph Biedl <debian.a...@manchmal.in-ulm.de> Resent-To: debian-bugs-d...@lists.debian.org Resent-CC: Matthew Vernon <matt...@debian.org> Date: Mon, 10 Oct 2016 22:37:40 +0200 From: Christoph Biedl <debian.a...@manchmal.in-ulm.de> Reply-To: Christoph Biedl <debian.a...@manchmal.in-ulm.de>, 840...@bugs.debian.org To: Debian Bug Tracking System <sub...@bugs.debian.org> Package: src:pcre3 Version: 2:8.39-2 Severity: important Usertag: debian-powe...@lists.debian.org Dear Maintainer, Rebuilding syslog-ng 3.7.3-3 on a PowerMac G4 failed with SIGILL, debugging led to libpcre, and finally rebuilding src:pcre3 itself fails with very similar symptoms: (...) /usr/bin/make check-TESTS make[3]: Entering directory '/tmp/pcre3/pcre3-8.39' make[4]: Entering directory '/tmp/pcre3/pcre3-8.39' ./test-driver: line 107: 12195 Illegal instruction "$@" > $log_file 2>&1 FAIL: pcre_jit_test PASS: pcrecpp_unittest PASS: pcre_scanner_unittest (...) The failing program is .libs/lt-pcre_jit_test. Using gdb is no help at all, the failures happen at a different point every invocation: Program received signal SIGILL, Illegal instruction. 0xb7faf0ec in ?? () (gdb) bt #0 0xb7faf0ec in ?? () #1 0x1ff30718 in ?? () #2 0x1ff30718 in ?? () #3 0x1ff0adf4 in ?? () #4 0x200061c8 in ?? () #5 0x20004a3c in ?? () #6 0x1fc97274 in ?? () #7 0x1fc9747c in ?? () #8 0x00000000 in ?? () (gdb) disassemble 0xb7faf0ec,0xb7faf0ff Dump of assembler code from 0xb7faf0ec to 0xb7faf0ff: => 0xb7faf0ec: li r3,-1 0xb7faf0f0: addi r5,r30,6 0xb7faf0f4: cmplw cr1,r5,r29 0xb7faf0f8: bgt cr1,0xb7faf1b8 0xb7faf0fc: lwz r5,36(r1) Program received signal SIGILL, Illegal instruction. 0xb7fe5008 in ?? () (gdb) bt #0 0xb7fe5008 in ?? () #1 0x1ffb8b80 in ?? () #2 0x1ff91820 in ?? () #3 0x20006110 in ?? () #4 0x20004a3c in ?? () #5 0x1fc97274 in ?? () #6 0x1fc9747c in ?? () #7 0x00000000 in ?? () (gdb) disassemble 0xb7fe5008,0xb7fe5020 Dump of assembler code from 0xb7fe5008 to 0xb7fe5020: => 0xb7fe5008: mflr r0 0xb7fe500c: stw r31,-4(r1) 0xb7fe5010: stw r30,-8(r1) 0xb7fe5014: stw r29,-12(r1) 0xb7fe5018: stw r28,-16(r1) 0xb7fe501c: stw r27,-20(r1) Program received signal SIGILL, Illegal instruction. 0xb7faf060 in ?? () (gdb) bt #0 0xb7faf060 in ?? () #1 0x1ff30718 in ?? () #2 0x1ff30718 in ?? () #3 0x1ff0adf4 in ?? () #4 0x200061c8 in ?? () #5 0x20004a3c in ?? () #6 0x1fc97274 in ?? () #7 0x1fc9747c in ?? () #8 0x00000000 in ?? () (gdb) disassemble 0xb7faf060,0xb7faf070 Dump of assembler code from 0xb7faf060 to 0xb7faf070: => 0xb7faf060: lwz r28,8(r5) 0xb7faf064: addi r3,r3,1 0xb7faf068: stw r3,32(r1) 0xb7faf06c: b 0xb7faf0cc My last rebuild of syslog-ng in July, using pcre3 version 2:8.38-3.1, succeded. Therefore I guess it's the changes between 8.38 and 8.39. Very likely this was introduced by the changes in the ppc_jit code which unfortunately I was unable to understand. Disabling jit for powerpc using the following patch: --- pcre3-8.39.orig/sljit/sljitConfigInternal.h +++ pcre3-8.39/sljit/sljitConfigInternal.h @@ -135,11 +135,7 @@ #elif defined(__ppc64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) || (defined(_POWER) && defined(__64BIT__)) #define SLJIT_CONFIG_PPC_64 1 #elif defined(__ppc__) || defined(__powerpc__) || defined(_ARCH_PPC) || defined(_ARCH_PWR) || defined(_ARCH_PWR2) || defined(_POWER) -# ifndef __NO_FPRS__ -# define SLJIT_CONFIG_PPC_32 1 -# else # define SLJIT_CONFIG_UNSUPPORTED 1 -# endif #elif defined(__mips__) && !defined(_LP64) #define SLJIT_CONFIG_MIPS_32 1 #elif defined(__mips64) resulted in a successful pcre3 build, and using the created packages also syslog-ng passes the failing test again. So I'm asking you to bring this upstream to sort out how the breakage was introduced. From other bug reports I guess the created code uses G5 instructions; the Debian powerpc buildds didn't notice as they actually are such newer boxes. As a hopefully temporary workaround you could disable jit for powerpc, of course a the cost of a performance penalty. Christoph -- System Information: Debian Release: stretch/sid APT prefers testing APT policy: (500, 'testing') Architecture: powerpc (ppc) Kernel: Linux 4.4.23 Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Shell: /bin/sh linked to /bin/dash Init: unable to detect -- ## List details at https://lists.exim.org/mailman/listinfo/pcre-dev