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