Skip to content

loongarch64 support for fibers #13914

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed

Conversation

qiangxuhui
Copy link
Contributor

Add the necessary asm functions for loongarch64 to support Zend fibers.

The current PHP codebase omits the loongarch64 assembly files for make_fcontext/jump_fcontext from Boost.Context. Sync those from boostorg/context and hook them up.

All fiber related test pass on my Linux/loongarch64 machine.

Add loongarch64 assembly files from Boost, needed for fibers support,
and hook up loongarch64 fibers support during configure.
@qiangxuhui
Copy link
Contributor Author

qiangxuhui commented Apr 8, 2024

Basic testing was done on Linux/loongarch64 using the php-src git repo master branch:

php-test@php-test ~/php-src (loongarch64)> sapi/cli/php run-tests.php Zend/tests/fibers/ 

=====================================================================
PHP         : /home/php-test/php-src/sapi/cli/php 
PHP_SAPI    : cli
PHP_VERSION : 8.4.0-dev
ZEND_VERSION: 4.4.0-dev
PHP_OS      : Linux - Linux php-test 6.9.0-rc1-20240330 #16 SMP PREEMPT_DYNAMIC Sat Mar 30 14:51:34 CST 2024 loongarch64
INI actual  : /home/php-test/php-src
More .INIs  :  
---------------------------------------------------------------------
PHP         : /home/php-test/php-src/sapi/cgi/php-cgi 
PHP_SAPI    : cgi-fcgi
PHP_VERSION : 8.4.0-dev
ZEND_VERSION: 4.4.0-dev
PHP_OS      : Linux - Linux php-test 6.9.0-rc1-20240330 #16 SMP PREEMPT_DYNAMIC Sat Mar 30 14:51:34 CST 2024 loongarch64
INI actual  : /home/php-test/php-src
More .INIs  : 
--------------------------------------------------------------------- 
---------------------------------------------------------------------
PHP         : /home/php-test/php-src/sapi/phpdbg/phpdbg 
PHP_SAPI    : phpdbg
PHP_VERSION : 8.4.0-dev
ZEND_VERSION: 4.4.0-dev
PHP_OS      : Linux - Linux php-test 6.9.0-rc1-20240330 #16 SMP PREEMPT_DYNAMIC Sat Mar 30 14:51:34 CST 2024 loongarch64
INI actual  : /home/php-test/php-src
More .INIs  : 
---------------------------------------------------------------------
CWD         : /home/php-test/php-src
Extra dirs  : 
VALGRIND    : Not used
=====================================================================
Running selected tests.
PASS Backtrace in deeply nested function call [Zend/tests/fibers/backtrace-deep-nesting.phpt] 
PASS Backtrace in nested function call [Zend/tests/fibers/backtrace-nested.phpt] 
PASS Backtrace in with object as fiber callback [Zend/tests/fibers/backtrace-object.phpt] 
PASS Multiple calls to constructor are prevented after fiber terminated [Zend/tests/fibers/call-to-ctor-of-terminated-fiber.phpt] 
PASS Catch exception thrown into fiber, then suspend again [Zend/tests/fibers/catch-then-suspend.phpt] 
PASS Catch exception thrown into fiber [Zend/tests/fibers/catch.phpt] 
PASS Print backtrace in fiber [Zend/tests/fibers/debug-backtrace.phpt] 
PASS Start on already running fiber [Zend/tests/fibers/double-start.phpt] 
PASS Error reporting change reflected inside fiber [Zend/tests/fibers/error-reporting.phpt] 
PASS Exit from fiber [Zend/tests/fibers/exit-in-fiber.phpt] 
PASS Test throwing from fiber [Zend/tests/fibers/failing-fiber.phpt] 
PASS Test throwing from fiber [Zend/tests/fibers/failing-nested-fiber.phpt] 
PASS Fast finishing fiber does not leak [Zend/tests/fibers/fast-finish-fiber.phpt] 
PASS Fatal error in new fiber [Zend/tests/fibers/fatal-error-in-fiber.phpt] 
PASS Fatal error within a nested fiber [Zend/tests/fibers/fatal-error-in-nested-fiber.phpt] 
PASS Fatal error in a fiber with other active fibers [Zend/tests/fibers/fatal-error-with-multiple-fibers.phpt] 
PASS FiberError cannot be constructed in user code [Zend/tests/fibers/fiber-error-construct.phpt] 
PASS Fiber::getCurrent() [Zend/tests/fibers/fiber-get-current.phpt] 
PASS Fiber in shutdown function [Zend/tests/fibers/fiber-in-shutdown-function.phpt] 
PASS Fiber status methods [Zend/tests/fibers/fiber-status.phpt] 
PASS GC can cleanup cycle when callback references fiber [Zend/tests/fibers/gc-cycle-callback.phpt] 
PASS GC can cleanup cycle when fiber result references fiber [Zend/tests/fibers/gc-cycle-result.phpt] 
PASS Fiber::getReturn() after bailout [Zend/tests/fibers/get-return-after-bailout.phpt] 
PASS Fiber::getReturn() after a fiber throws [Zend/tests/fibers/get-return-after-throwing.phpt] 
PASS Fiber::getReturn() from unstarted fiber [Zend/tests/fibers/get-return-from-unstarted-fiber.phpt] 
PASS Fiber::getReturn() in unfinished fiber [Zend/tests/fibers/get-return-in-unfinished-fiber.phpt] 
PASS Test fiber return value [Zend/tests/fibers/get-return.phpt] 
PASS GH-10249 (Assertion `size >= page_size + 1 * page_size' failed.) [Zend/tests/fibers/gh10249.phpt] 
PASS Bug GH-10340 001 (Assertion in zend_fiber_object_gc()) [Zend/tests/fibers/gh10340-001.phpt] 
PASS Bug GH-10340 002 (Assertion in zend_fiber_object_gc()) [Zend/tests/fibers/gh10340-002.phpt] 
PASS Bug GH-10340 003 (Assertion in zend_fiber_object_gc()) [Zend/tests/fibers/gh10340-003.phpt] 
PASS GH-10437 (Segfault/assertion when using fibers in shutdown function after bailout) [Zend/tests/fibers/gh10437.phpt] 
PASS Bug GH-10496 001 (Segfault when garbage collector is invoked inside of fiber) [Zend/tests/fibers/gh10496-001.phpt] 
PASS Bug GH-10496 002 (Segfault when garbage collector is invoked inside of fiber) [Zend/tests/fibers/gh10496-002.phpt] 
PASS Bug GH-9735 001 (Fiber stack variables do not participate in cycle collector) [Zend/tests/fibers/gh9735-001.phpt] 
PASS Bug GH-9735 002 (Fiber stack variables do not participate in cycle collector) [Zend/tests/fibers/gh9735-002.phpt] 
PASS Bug GH-9735 003 (Fiber stack variables do not participate in cycle collector) [Zend/tests/fibers/gh9735-003.phpt] 
PASS Bug GH-9735 004 (Fiber stack variables do not participate in cycle collector) [Zend/tests/fibers/gh9735-004.phpt] 
PASS Bug GH-9735 005 (Fiber stack variables do not participate in cycle collector) [Zend/tests/fibers/gh9735-005.phpt] 
PASS Bug GH-9735 006 (Fiber stack variables do not participate in cycle collector) [Zend/tests/fibers/gh9735-006.phpt] 
PASS Bug GH-9735 007 (Fiber stack variables do not participate in cycle collector) [Zend/tests/fibers/gh9735-007.phpt] 
PASS Bug GH-9735 008 (Fiber stack variables do not participate in cycle collector) [Zend/tests/fibers/gh9735-008.phpt] 
PASS Bug GH-9735 009 (Fiber stack variables do not participate in cycle collector) [Zend/tests/fibers/gh9735-009.phpt] 
PASS Reference to invocable class retained while running [Zend/tests/fibers/invocable-class.phpt] 
PASS Multiple calls to constructor are prevented [Zend/tests/fibers/multiple-calls-to-ctor.phpt] 
PASS fiber.stack_size must be a positive number [Zend/tests/fibers/negative_stack_size.phpt] 
PASS Cannot resume fiber within destructor [Zend/tests/fibers/no-switch-dtor-resume.phpt] 
PASS Cannot start fiber within destructor [Zend/tests/fibers/no-switch-dtor-start.phpt] 
PASS Cannot suspend fiber within destructor [Zend/tests/fibers/no-switch-dtor-suspend.phpt] 
PASS Cannot resume fiber within destructor [Zend/tests/fibers/no-switch-dtor-throw.phpt] 
PASS Cannot start a new fiber in a finally block in a force-closed fiber [Zend/tests/fibers/no-switch-force-close-finally.phpt] 
PASS Context switches are prevented during GC collect cycles [Zend/tests/fibers/no-switch-gc.phpt] 
PASS Out of Memory in a fiber [Zend/tests/fibers/out-of-memory-in-fiber.phpt] 
PASS Out of Memory in a nested fiber [Zend/tests/fibers/out-of-memory-in-nested-fiber.phpt] 
PASS Out of Memory from recursive fiber creation [Zend/tests/fibers/out-of-memory-in-recursive-fiber.phpt] 
PASS Resume non-running fiber [Zend/tests/fibers/resume-non-running-fiber.phpt] 
PASS Resume previous fiber [Zend/tests/fibers/resume-previous-fiber.phpt] 
PASS Resume running fiber [Zend/tests/fibers/resume-running-fiber.phpt] 
PASS Resume terminated fiber [Zend/tests/fibers/resume-terminated-fiber.phpt] 
PASS Test resume [Zend/tests/fibers/resume.phpt] 
PASS Fiber function may return by ref, but getReturn() always returns by val [Zend/tests/fibers/return-by-ref.phpt] 
SKIP Prevent switching fibers when async signals are enabled [Zend/tests/fibers/signal-async.phpt] reason: Required extension missing: pcntl
SKIP Prevent switching fibers when dispatching pending signals [Zend/tests/fibers/signal-dispatch.phpt] reason: Required extension missing: pcntl
PASS Silence operator does not leak out of fiber [Zend/tests/fibers/silence-operator-inside-fiber.phpt] 
PASS Silence operator does not leak into fiber [Zend/tests/fibers/silence-operator-outside-fiber.phpt] 
PASS Arguments to fiber callback [Zend/tests/fibers/start-arguments.phpt] 
PASS Suspend in force-closed fiber after shutdown [Zend/tests/fibers/suspend-in-force-close-fiber-after-shutdown.phpt] 
PASS Suspend in force-closed fiber, catching exception thrown from destructor [Zend/tests/fibers/suspend-in-force-close-fiber-catching-exception.phpt] 
PASS Suspend in force-closed fiber [Zend/tests/fibers/suspend-in-force-close-fiber.phpt] 
PASS Suspend within nested function call [Zend/tests/fibers/suspend-in-nested-function.phpt] 
PASS Suspend outside fiber [Zend/tests/fibers/suspend-outside-fiber.phpt] 
PASS Make sure exceptions are rethrown when throwing from fiber destructor [Zend/tests/fibers/throw-during-fiber-destruct.phpt] 
PASS Throw in multiple destroyed fibers after shutdown [Zend/tests/fibers/throw-in-multiple-destroyed-fibers-after-shutdown.phpt] 
PASS Throw into non-running fiber [Zend/tests/fibers/throw-into-non-running-fiber.phpt] 
PASS Test throwing into fiber [Zend/tests/fibers/throw.phpt] 
PASS Prevent switching fibers in tick function [Zend/tests/fibers/ticks.phpt] 
PASS Test unfinished fiber with finally block [Zend/tests/fibers/unfinished-fiber-with-finally.phpt] 
PASS Test unfinished fiber with nested try/catch blocks [Zend/tests/fibers/unfinished-fiber-with-nested-try-catch.phpt] 
PASS Test unfinished fiber with suspend in finally [Zend/tests/fibers/unfinished-fiber-with-suspend-in-finally.phpt] 
PASS Test unfinished fiber with suspend in finally [Zend/tests/fibers/unfinished-fiber-with-throw-in-finally.phpt] 
PASS Test unfinished fiber [Zend/tests/fibers/unfinished-fiber.phpt] 
PASS Not starting a fiber does not leak [Zend/tests/fibers/unstarted-fiber.phpt] 
=====================================================================
Number of tests :    82                80
Tests skipped   :     2 (  2.4%) --------
Tests warned    :     0 (  0.0%) (  0.0%)
Tests failed    :     0 (  0.0%) (  0.0%)
Tests passed    :    80 ( 97.6%) (100.0%)
---------------------------------------------------------------------
Time taken      : 0.757 seconds
=====================================================================

@devnexen devnexen closed this in 0766ac6 Apr 8, 2024
@devnexen
Copy link
Member

devnexen commented Apr 8, 2024

Thank you !

algitbot pushed a commit to alpinelinux/aports that referenced this pull request Apr 26, 2024
algitbot pushed a commit to alpinelinux/aports that referenced this pull request Apr 26, 2024
bell-sw pushed a commit to bell-sw/alpaquita-aports that referenced this pull request May 3, 2024
[ commit 461d47632d8821a44631fcea58ffa870089becab ]

Patch backported from:
php/php-src#13914
php/php-src@0766ac6
algitbot pushed a commit to alpinelinux/aports that referenced this pull request May 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants