Our PHP 5.x package is getting old

James Lee james at opencsw.org
Mon Mar 31 11:41:58 CEST 2014


On 27/03/2014 08:59, Dagobert Michelsen wrote:
>
>> dam at unstable10s [unstable10s]:/home/dam/mgar/pkg/php5/branches/php-5.5.x/work/solaris10-sparc/build-isa-sparcv8plus-sapi-cgi/php-5.5.10 > pstack core
>> core 'core' of 16636:   /home/dam/mgar/pkg/php5/branches/php-5.5.x/work/solaris10-sparc/build-
>>   000a6500 compare_opcodes (c1d7ad, 0, ffbfe5b8, ffbfd3d8, c1d789, c1d7ad) + 1178
>>   000a6944 auto_possessify (c1d767, 0, ffbfe5b8, 64, ffbfd3d8, 661eb4) + 284
>>   000b0114 php_pcre_compile2 (b9, 0, 20000, 0, c1d6c0, 96372c) + d90
>>   000d4138 pcre_get_compiled_regex_cache (a5e4ac, 2f, 2f, 2f, 0, 961064) + 444
>>   000d4680 php_do_pcre_match (3, dde418, ffbfe770, 961064, ffbfe774, 0) + 7c
>>   005acaa0 zend_do_fcall_common_helper_SPEC (9ee560, 100, 100, 961064, d646cc, 9e4798) + 320
>>   005ac448 execute_ex (9ee560, 9e45f0, 1, 961064, 8358c, 0) + 3c
>>   00533ce4 zend_execute_scripts (8, 0, ffbff3c8, 1, 9e4714, ffbfe8ac) + 678
>>   0043eb94 php_execute_script (9e4f30, ffbff3c8, 9e4f30, 961064, 1, 83c00) + 32c
>>   005ff608 do_cli   (961064, 8, 0, 83c00, 961064, 83c00) + d3c
>>   00600684 main     (10, ffbff674, ffbff6b8, 963000, 96be44, 96be44) + 660
>>   0004d9c0 _start   (0, 0, 0, 0, 0, 0) + 108
> Everything is committed, if you have a great idea let me know.

PHP build adds -xmemalign=8s to the compile options.  The 's' says 
throws a bus error if a memory misalignment is detected. The 'i' 
xmemalign option say to me it will work but might be slower.

The misalignment is in compare_opcodes which is part of prce 8.34 and 
the misalignment is right after the comment "Compare 4 bytes to improve 
speed".  What it's doing is:

function(char *cp)
{
     int *ip;
     ip = (int *) cp;
     ... *ip ...;  // handle in 4 byte chucks

which is not 8 byte aligned when "cp % 8 !=  0". On the Sparc and Intel 
chips I've tested it doesn't seem to make a difference but it must 
depends on the chip design and perhaps there are some where the speed 
difference is greater.

Workaround: remove or change to 'i' xmemalign from PHP's configure:
   sparc*)
     if test "$SUNCC" = "yes"; then
       CFLAGS="$CFLAGS -xmemalign=8s"
     fi


Fix:
http://bugs.exim.org/show_bug.cgi?id=1427


James.






More information about the maintainers mailing list