php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #66934 PHP compiled with Sun Studio dies with a SIGILL
Submitted: 2014-03-19 14:26 UTC Modified: 2014-05-29 19:25 UTC
Votes:4
Avg. Score:4.5 ± 0.9
Reproduced:4 of 4 (100.0%)
Same Version:1 (25.0%)
Same OS:4 (100.0%)
From: eric dot w dot sprague dot ctr at navy dot mil Assigned:
Status: Open Package: *Compile Issues
PHP Version: 5.5.10 OS: Solaris 10 SPARC
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2014-03-19 14:26 UTC] eric dot w dot sprague dot ctr at navy dot mil
Description:
------------
When building PHP 5.5.10 with the Sun Studio 12 compiler on Solaris 10 Update 11 SPARC, the compile succeeds but "make test" or "make install" fail due to the PHP binary crashing with a bus error.

CFLAGS/CXXFLAGS tested: "-xO0 -xarch=generic -m32" for testing and debugging, "-xO3 -xarch=sparcvis2 -m32" for production build; symptoms identical in both cases.

=====================================================================
PHP         : /export/home/jade/php-5.5.10/sapi/cli/php 
PHP_SAPI    : cli
PHP_VERSION : 5.5.10
ZEND_VERSION: 2.5.0
PHP_OS      : SunOS - SunOS daedalus 5.10 Generic_150400-09 sun4u
INI actual  : /export/home/jade/php-5.5.10/tmp-php.ini
More .INIs  :  
CWD         : /export/home/jade/php-5.5.10
Extra dirs  : 
VALGRIND    : Not used
=====================================================================
TIME START 2014-03-19 13:47:55
=====================================================================
PASS EXPECT [tests/run-test/test001.phpt] 
/bin/bash: line 21:  9295 Bus Error               (core dumped) TEST_PHP_EXECUTABLE=/export/home/jade/php-5.5.10/sapi/cli/php TEST_PHP_SRCDIR=/export/home/jade/php-5.5.10 CC="cc" /export/home/jade/php-5.5.10/sapi/cli/php -n -c /export/home/jade/php-5.5.10/tmp-php.ini -d 'open_basedir=' -d 'output_buffering=0' -d 'memory_limit=-1' /export/home/jade/php-5.5.10/run-tests.php -n -c /export/home/jade/php-5.5.10/tmp-php.ini -d extension_dir=/export/home/jade/php-5.5.10/modules/ ` if test "x" != "x"; then for i in ""; do . $i; /export/home/jade/php-5.5.10/build/shtool echo -n -- " -d extension=$dlname"; done; fi; if test "x" != "x"; then for i in ""; do . $i; /export/home/jade/php-5.5.10/build/shtool echo -n -- " -d zend_extension=/export/home/jade/php-5.5.10/modules/$dlname"; done; fi`
gmake: *** [test] Error 138


When running in gdb I see a SEGV, not a bus error.

PHP 5.5.9 does not suffer from this issue, with the same compiler, same configure options.

Expected result:
----------------
make test or make install should succeed.

Actual result:
--------------
(gdb) backtrace
#0  0x0013b284 in compare_opcodes (code=0x134d3cc "\035\nn", utf=0, cd=0xffbfe8e8, base_list=0xffbfd704, base_end=0x134d3ca "W\a\035\nn")
    at /export/home/jade/php-5.5.10/ext/pcre/pcrelib/pcre_compile.c:3266
#1  0x0013cef8 in auto_possessify (code=0x134d3a8 "n", utf=0, cd=0xffbfe8e8) at /export/home/jade/php-5.5.10/ext/pcre/pcrelib/pcre_compile.c:3649
#2  0x00149f44 in php_pcre_compile2 (
    pattern=0x1116040 "^\\d+\n[+-]?\\d+\n[+-]?\\d+\n[+-]?\\.?\\d+\\.?\\d*(?:[Ee][+-]?\\d+)?\n[^\\r\\n]+\n[0-9a-fA-F]+\n.$", options=4, 
    errorcodeptr=0x0, errorptr=0xffbfeae0, erroroffset=0xffbfeadc, tables=0x134cf20 "")
    at /export/home/jade/php-5.5.10/ext/pcre/pcrelib/pcre_compile.c:9210
#3  0x001485d8 in php_pcre_compile (
    pattern=0x1116040 "^\\d+\n[+-]?\\d+\n[+-]?\\d+\n[+-]?\\.?\\d+\\.?\\d*(?:[Ee][+-]?\\d+)?\n[^\\r\\n]+\n[0-9a-fA-F]+\n.$", options=4, 
    errorptr=0xffbfeae0, erroroffset=0xffbfeadc, tables=0x134cf20 "") at /export/home/jade/php-5.5.10/ext/pcre/pcrelib/pcre_compile.c:8686
#4  0x0017dbe0 in pcre_get_compiled_regex_cache (
    regex=0x1375358 "/^\\d+\n[+-]?\\d+\n[+-]?\\d+\n[+-]?\\.?\\d+\\.?\\d*(?:[Ee][+-]?\\d+)?\n[^\\r\\n]+\n[0-9a-fA-F]+\n.$/s", regex_len=85)
    at /export/home/jade/php-5.5.10/ext/pcre/php_pcre.c:403
#5  0x0017e4e4 in php_do_pcre_match (ht=2, return_value=0x16dd1c0, return_value_ptr=0x0, this_ptr=0x0, return_value_used=1, global=0)
    at /export/home/jade/php-5.5.10/ext/pcre/php_pcre.c:549
#6  0x0017f65c in zif_preg_match (ht=2, return_value=0x16dd1c0, return_value_ptr=0x0, this_ptr=0x0, return_value_used=1)
    at /export/home/jade/php-5.5.10/ext/pcre/php_pcre.c:805
#7  0x00c0c534 in zend_do_fcall_common_helper_SPEC (execute_data=0x1100030) at /export/home/jade/php-5.5.10/Zend/zend_vm_execute.h:550
#8  0x00c14164 in ZEND_DO_FCALL_SPEC_CONST_HANDLER (execute_data=0x1100030) at /export/home/jade/php-5.5.10/Zend/zend_vm_execute.h:2329
#9  0x00c0b7dc in execute_ex (execute_data=0x1100030) at /export/home/jade/php-5.5.10/Zend/zend_vm_execute.h:363
#10 0x00c0b94c in zend_execute (op_array=0x1115038) at /export/home/jade/php-5.5.10/Zend/zend_vm_execute.h:388
#11 0x00b36fc8 in zend_execute_scripts (type=8, retval=0x0, file_count=3, ...=0x0) at /export/home/jade/php-5.5.10/Zend/zend.c:1316
#12 0x009659e8 in php_execute_script (primary_file=0xffbff8d4) at /export/home/jade/php-5.5.10/main/main.c:2506
#13 0x00ce76e4 in do_cli (argc=16, argv=0x10f6d18) at /export/home/jade/php-5.5.10/sapi/cli/php_cli.c:994
#14 0x00ce90b4 in main (argc=16, argv=0x10f6d18) at /export/home/jade/php-5.5.10/sapi/cli/php_cli.c:1378


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2014-03-19 16:10 UTC] eric dot w dot sprague dot ctr at navy dot mil
Amplifying information: PCRE 8.34 on its own compiles and 'make test' is successful. (Using Sun Studio 12, -xO0 -xarch=generic -m32)
 [2014-03-19 18:16 UTC] eric dot w dot sprague dot ctr at navy dot mil
Typo - Problem does not occur with 5.5.8.
 [2014-05-29 16:10 UTC] eric dot w dot sprague dot ctr at navy dot mil
Fault is due to PCRE bug #1427, misaligned memory access on SPARC. See: https://lists.exim.org/lurker/message/20131231.005837.c62b68a4.en.html

Working on a workaround now.
 [2014-05-29 19:25 UTC] eric dot w dot sprague dot ctr at navy dot mil
Problem can be worked around with Sun Studio by adding the -misalign CFLAG.

Looking for similar workaround for gcc.
 [2014-06-14 16:09 UTC] urs dot traber at gmail dot com
checked with 5.5.12 on Tru64 4.0F and 5.1B:

line 3266:

if ((*set1++ & *set2++) != 0) return FALSE;

of the compare_opcodes function in pcre_compile.c also produces an "unaligned access". Tru64 can deal with it and doesn't die though.
 [2014-06-14 17:16 UTC] urs dot traber at gmail dot com
workaround is to build against an external PCRE library from ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

e.g. 8.33 is fine for Tru64 4.0F 5.1B. The included tests don't produce any alignment errors.
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Thu Dec 12 19:01:25 2019 UTC