Hi Daniel, thank you very much for fixing these issues. I hope JIT is working well on your system now (If you can share some performance results as well, I am really interested). I would like to add your changes to the project but the patch has a strange syntax on my machine:
--_e03c4e17-38a7-4221-a4b1-fe0372a519e7_ Content-Transfer-Encoding: uuencode Content-Disposition: attachment; filename="pcre-fixes.patch" Content-Type: application/octet-stream; name="pcre-fixes.patch" begin 666 pcre-fixes.patch M26YD97@Z(%)U;E1E<W0*/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/0HM+2T@4G5N M5&5S= DH<F5V:7-I;VX@.3@R*0HK*RL@4G5N5&5S= DH=V]R:VEN9R!C;W!Y M*0I 0" M,34U+#<@*S$U-2PX($! "B C(%-E="!U<"!A('-U:71A8FQE(")D M:69F(B!C;VUM86YD(&9O<B!C;VUP87)I<V]N+B!3;VUE('-Y<W1E;7,*(",@ ... How can I decode your patch? Regards, Zoltan "Daniel Richard G." <o...@teragram.com> írta: >Hello folks,> > I've put in some work on PCRE lately, and would like to submit my changes.> They largely address (1) compatibility with the IBM C compiler (xlc), and> (2) memory leaks in the pcretest test driver.> > Everything is in the attached patch, against SVN trunk. A walk-through is> below:> > > ++ RunTest> > @ The initial goal here was to quell the "illegal option" error message> from older diff(1) programs; the restructuring of the conditional is a> parallel to my changes to RunGrepTest> > ++ pcre_jit_compile.c> > @ This comment is intended to help folks who are led to that> SLJIT_MALLOC() by Valgrind. It certainly would have helped me, as> pcretest was doing the clear-the-PCRE_EXTRA_EXECUTABLE_JIT-flag thing!> > ++ sljit/sljitNativePPC_common.c> > @ Allow this file to be compiled by IBM's xlc compiler, which specifically> supports GCC asm syntax, but does not define __GNUC__. This support can> be switched off with -qnoasm, however...> > http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/topic/com.ibm.xlcpp8l.doc/compiler/ref/ruoptasm.htm> > ... so give a more helpful error in that case.> > Use __asm__ instead of plain "asm", as the latter can be de-recognized as> a keyword with -qnokeyword=asm, and so the former is more robust:> > http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/topic/com.ibm.xlcpp8l.doc/compiler/ref/ruoptkey.htm> > Also, I encountered a mysterious assembly error when building with -O3> and -qfuncsect:> > --------8<--------> libtool: compile: /usr/vac/bin/xlc_r -DHAVE_CONFIG_H -I. -I/srcdir/pcre-8.30 -O3 -q64 -qfuncsect -c -M> /srcdir/pcre-8.30/pcre_jit_compile.c -DPIC -o pcre_jit_compile.o> "/srcdir/pcre-8.30/sljit/sljitNativePPC_common.c", line 42.2: 1506-948 (W) #warning "This file may fail to compile if -qfuncsect is> used"> Assembler:> pcre_jit_compile.s: line 59973: undefined symbol "S.8704.IPRA._sljit_emit_cmp"> pcre_jit_compile.s: line 59973: illegal expression> pcre_jit_compile.s: line 59988: undefined symbol "S.8705.IPRA._compile_xclass_hotpath"> pcre_jit_compile.s: line 59988: illegal expression> pcre_jit_compile.s: line 59991: undefined symbol "S.8706.IPRA._compile_char1_hotpath"> pcre_jit_compile.s: line 59991: illegal expression> pcre_jit_compile.s: line 60000: undefined symbol "S.8707.IPRA._compile_iterator_hotpath"> pcre_jit_compile.s: line 60000: illegal expression> 1500-067: (S) asm statement generates errors in assembler output.> 1586-346 (U) An error occurred during code generation. The code generation return code was 1.> make: The error code from the last command is 1.> > Stop.> make: The error code from the last command is 2.> -------->8--------> > (I was using a handful of other options as well, but they had no bearing> on this failure mode.)> > This error appears to be due to the inline assembly of ppc_cache_flush(),> because if I comment out the asm statement, the error goes away.> > Removing -qfuncsect allows the source to compile, asm and all, so I added> a #warning for folks using the IBM compiler to help them diagnose the> problem.> > @ Quelled a warning about converting a function pointer to void*> > ++ sljit/sljitNativePPC_64.c> > @ Allow compilation with the IBM compiler and use __asm__ instead of "asm"> > ++ sljit/sljitConfigInternal.h> > @ The IBM compiler does define __powerpc__, but not __powerpc64__, even in> 64-bit mode. It does, however, define _ARCH_PPC and _ARCH_PPC64:> > http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/topic/com.ibm.xlcpp8a.doc/compiler/ref/ruoptarc.htm> > ++ pcretest.c> > @ There were a few "if (re != NULL) ..." bits below this, and I thought,> this is silly---just check whether "re" is NULL right after the> new_malloc() call, and bail out if it is> > @ "re" was being leaked> > @ new_free(re) unconditionally, because we know it's not NULL> > @ "re" and "f" were being leaked> > @ extra->executable_jit was being leaked because an existing pcre_extra> object with JIT data would enter this block, then have its> PCRE_EXTRA_EXECUTABLE_JIT cleared, and then there was no way to> subsequently tell whether extra->executable_jit was a valid pointer or not.> > I resolved this just by calling PCRE_FREE_STUDY() and allocating a new> pcre_extra object every time. (Maybe there would be a use for a> pcre_clear_study() routine, that does everything pcre_free_study() does> except for the final free().)> > @ dfa_workspace was being leaked> > ++ autogen.sh> > @ test(1) a.k.a. "[" has "=" as an operator, not "=="> > ++ RunGrepTest> > @ Rewrote the diff check. Again, the initial goal was to quash the error> message printed by older diff programs that don't do -u. The secondary> goal was to simplify the nested shell conditionals into something more> elegant; here, I've implemented a progression from the least-desirable> diff invocation to the most. Subjectively, I think this is cleaner.> > > Comments and critique welcome,> > > --Daniel> > > --> Daniel Richard G. || dani...@teragram.com || Software Developer> Teragram Linguistic Technologies (a division of SAS)> http://www.teragram.com/> > > -- > ## List details at https://lists.exim.org/mailman/listinfo/pcre-dev -- ## List details at https://lists.exim.org/mailman/listinfo/pcre-dev