Bug #80435 [Opn]: Bus Error compiling phar.phar on Apple M1

From: Date: Mon, 08 Aug 2022 21:28:54 +0000
Subject: Bug #80435 [Opn]: Bus Error compiling phar.phar on Apple M1
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-242156@lists.php.net to get a copy of this message
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)

« previous php.bugs (#242156) next »