php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #80435 Bus Error compiling phar.phar on Apple M1
Submitted: 2020-11-27 20:59 UTC Modified: 2022-08-08 22:26 UTC
Votes:8
Avg. Score:4.9 ± 0.3
Reproduced:8 of 8 (100.0%)
Same Version:2 (25.0%)
Same OS:7 (87.5%)
From: cja987 at gmail dot com Assigned: kelunik (profile)
Status: Assigned Package: Compile Failure
PHP Version: 8.0Git-2020-11-27 (Git) OS: macOS 11
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: cja987 at gmail dot com
New email:
PHP Version: OS:

 

 [2020-11-27 20:59 UTC] 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.



Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2020-11-27 21:01 UTC] 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-30 14:54 UTC] 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-30 16:33 UTC] 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.
 [2021-05-08 01:15 UTC] 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.
 [2022-08-08 21:28 UTC] kelunik@php.net
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+.
 [2022-08-08 21:29 UTC] kelunik@php.net
-Assigned To: +Assigned To: kelunik
 [2022-08-08 22:26 UTC] kelunik@php.net
See https://github.com/php/php-src/pull/9279 for PHP 8.1.
 [2022-11-23 05:53 UTC] Daniel9895hah at gmail dot com
Thanks for the info I will try to figure it out for more.
(https://www.gmglobalconnect.one/)github.com
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 17:01:31 2024 UTC