Bug #80435 [Opn]: Bus Error compiling phar.phar on Apple M1
Edit report at https://bugs.php.net/bug.php?id=80435&edit=1
ID: 80435
Updated by: kelunik@php.net
Reported by: cja987 at gmail dot com
Summary: Bus Error compiling phar.phar on Apple M1
Status: Open
Type: Bug
Package: Compile Failure
Operating System: macOS 11
PHP Version: 8.0Git-2020-11-27 (Git)
Block user comment: N
Private report: N
New Comment:
The current error I get building on M2 is this:
Fatal error: Uncaught InvalidArgumentException: RegexIterator::__construct(): Allocation of JIT
memory failed, PCRE JIT will be disabled. This is likely caused by security restrictions. Either
grant PHP permission to allocate executable memory, or set pcre.jit=0 in
/Users/kelunik/.php-build/release/ext/phar/phar.php:1145
Stack trace:
#0 /Users/kelunik/.php-build/release/ext/phar/phar.php(1145):
RegexIterator->__construct(Object(RecursiveIteratorIterator), '/\\.svn/')
#1 /Users/kelunik/.php-build/release/ext/phar/phar.php(1089): PharCommand::phar_add(Object(Phar), 0,
'/Users/kelunik/...', NULL, '/\\.svn/', Object(SplFileInfo), NULL, false)
#2 /Users/kelunik/.php-build/release/ext/phar/phar.php(225): PharCommand->cli_cmd_run_pack(Array)
#3 /Users/kelunik/.php-build/release/ext/phar/phar.php(2101): CLICommand->__construct(19, Array)
#4 {main}
thrown in /Users/kelunik/.php-build/release/ext/phar/phar.php on line 1145
make: *** [ext/phar/phar.phar] Error 255
This is caused by Apple's default protection on Apple Silicon chips, see https://developer.apple.com/documentation/apple-silicon/porting-just-in-time-compilers-to-apple-silicon
It's been fixed in https://github.com/zherczeg/sljit/pull/105,
which is contained in libpcre2 10.40.
https://github.com/php/php-src/commit/32cceb75bf5e42bebbf4d12bab4369924f1d6885
updates php-src to libpcre2 10.40, but only for the 8.2+.
Previous Comments:
------------------------------------------------------------------------
[2021-05-08 01:15:17] hao dot sun at arm dot com
In my Apple M1 machine, using the method mentioned in this
link(https://qiita.com/shirai_suguru/items/894dc1e71cbc96f4a857) would fix this bug.
$ brew install pcre2
$ ./configure --with-external-pcre=$(brew --prefix pcre2)
$ make
$ make test
Note: the link is in Japanese. you may need to translate it to English.
------------------------------------------------------------------------
[2020-11-30 16:33:48] cja987 at gmail dot com
sapi/cli/php -v does work, but it does immediately get run over by the bus (error) when running the
test suite. I can't convince gdb to install either, so there's not a lot that's
debuggable. Homebrew does build php successfully, and it appears it even applies a patch or two, so
I'll work backwards from that.
------------------------------------------------------------------------
[2020-11-30 14:54:59] nikic@php.net
I suspect the build might be entirely borked, and the phar generation is just the first part that
actually uses the produced binary.
Does running sapi/cli/php -v work? If so, does running sapi/cli/php run-tests.php
Zend -j8 produce any failures?
------------------------------------------------------------------------
[2020-11-27 21:01:41] cja987 at gmail dot com
As requested, these values from the makefile:
PHP_PHARCMD_SETTINGS = -n -d 'open_basedir=' -d 'output_buffering=0' -d
'memory_limit=-1' -d phar.readonly=0
PHP_PHARCMD_BANG = $(top_srcdir)/build/shtool echo -n --
"$(INSTALL_ROOT)$(bindir)/$(program_prefix)php$(program_suffix)$(EXEEXT)";
------------------------------------------------------------------------
[2020-11-27 20:59:26] cja987 at gmail dot com
Description:
------------
Using the compile command shown in the test script below, compilation proceeds normally and it even
builds some of the SAPIs, but once it gets to phar, things go sideways:
Generating phar.php
Generating phar.phar
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be
enabled.
make: *** [ext/phar/phar.phar] Bus error: 10
Test script:
---------------
make distclean; ./buildconf && PATH=/opt/homebrew/opt/bison/bin:$PATH ./configure
--with-iconv=/opt/homebrew/opt/libiconv && make -j10 YACC=/opt/homebrew/opt/bison/bin/bison
# The above shows another minor bug: I should not have to set YACC,
# but the makefile sets it to just "bison" rather than the full path,
# which causes it to find the obsolete system bison in the path instead.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=80435&edit=1
Thread (8 messages)