aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJingyun Hua <huajingyun@loongson.cn>2024-04-26 03:33:49 +0000
committerAndy Postnikov <apostnikov@gmail.com>2024-04-26 14:33:58 +0000
commit461d47632d8821a44631fcea58ffa870089becab (patch)
treed8741fa6a6c244450c6e17a0f4e7b4015644bf00
parent519ef0d6b40d296ebcee539a8c355ed38ea3227e (diff)
community/php83: add loongarch64 support
Patch backported from: https://github.com/php/php-src/pull/13914 https://github.com/php/php-src/commit/0766ac6e357282eafb51cbdc5383345e7487260b
-rw-r--r--community/php83/APKBUILD4
-rw-r--r--community/php83/loongarch64-support-for-fibers.patch246
2 files changed, 249 insertions, 1 deletions
diff --git a/community/php83/APKBUILD b/community/php83/APKBUILD
index 3de24e542c0..00fe6ea56dc 100644
--- a/community/php83/APKBUILD
+++ b/community/php83/APKBUILD
@@ -113,6 +113,7 @@ source="php-$pkgver.tar.xz::https://php.net/distributions/php-$pkgver.tar.xz
fix-tests-devserver.patch
phpinfo-avif.patch
fix-lfs64-2.patch
+ loongarch64-support-for-fibers.patch
"
builddir="$srcdir/php-$pkgver"
@@ -237,7 +238,7 @@ _build() {
[ "$CARCH" = "s390x" ] && without_pcre_jit="--without-pcre-jit"
case "$CARCH" in
- arm*|aarch64|riscv64)
+ arm*|aarch64|riscv64|loongarch64)
export CFLAGS="${CFLAGS/-fstack-clash-protection}"
export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection}"
;;
@@ -634,4 +635,5 @@ ec206639d076ddac6c2d1db697a5428ed3be979157db39417af7fbe6ab837e8dc00315ae0e55aea4
1b64a7cef9e81387f955cb60ffa4e3d2277b4f6072e9328d779c0d447c202c8ee9dff0d8d8c34abc82c150311f51c4e9316a3b72a383ca6c9a6e683bc5b349a0 fix-tests-devserver.patch
8833c5c6f5225f5e85a9cd842274e4e6b2f55dc572a13bdb3066c624f82c9f39fa07cb2f8f242092ff814f61f0cb8abaa792b1f93c16ad341f1a8dec05a6ca2d phpinfo-avif.patch
6f90c6b80a1fd72094877d52e2d6a26712a3d54ee83c8d4d75cad5505a2225cbca576085acf82c08b91220550b8a3527323e1a9f4a821e4e159b5c03efc083c6 fix-lfs64-2.patch
+517441fdf14b7855b1843bd0d1c86126017af7a340fbf7177202db7c9e67912332abdb62e7477f45e7922c910672396ba4f953eb7dc052ed06624c682bd12791 loongarch64-support-for-fibers.patch
"
diff --git a/community/php83/loongarch64-support-for-fibers.patch b/community/php83/loongarch64-support-for-fibers.patch
new file mode 100644
index 00000000000..cb39daa6151
--- /dev/null
+++ b/community/php83/loongarch64-support-for-fibers.patch
@@ -0,0 +1,246 @@
+Patch-Source: https://github.com/php/php-src/commit/0766ac6e357282eafb51cbdc5383345e7487260b
+From 0766ac6e357282eafb51cbdc5383345e7487260b Mon Sep 17 00:00:00 2001
+From: qiangxuhui <qiangxuhui@loongson.cn>
+Date: Mon, 1 Apr 2024 07:16:47 +0000
+Subject: [PATCH] loongarch64 support for fibers
+
+Add loongarch64 assembly files from Boost, needed for fibers support,
+and hook up loongarch64 fibers support during configure.
+
+Close GH-13914
+---
+ Zend/asm/jump_loongarch64_sysv_elf_gas.S | 121 +++++++++++++++++++++++
+ Zend/asm/make_loongarch64_sysv_elf_gas.S | 72 ++++++++++++++
+ configure.ac | 2 +
+ 3 files changed, 195 insertions(+)
+ create mode 100644 Zend/asm/jump_loongarch64_sysv_elf_gas.S
+ create mode 100644 Zend/asm/make_loongarch64_sysv_elf_gas.S
+
+diff --git a/Zend/asm/jump_loongarch64_sysv_elf_gas.S b/Zend/asm/jump_loongarch64_sysv_elf_gas.S
+new file mode 100644
+index 0000000000..74c081e07f
+--- /dev/null
++++ b/Zend/asm/jump_loongarch64_sysv_elf_gas.S
+@@ -0,0 +1,121 @@
++/*******************************************************
++ * *
++ * ------------------------------------------------- *
++ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
++ * ------------------------------------------------- *
++ * | 0 | 8 | 16 | 24 | *
++ * ------------------------------------------------- *
++ * | FS0 | FS1 | FS2 | FS3 | *
++ * ------------------------------------------------- *
++ * ------------------------------------------------- *
++ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
++ * ------------------------------------------------- *
++ * | 32 | 40 | 48 | 56 | *
++ * ------------------------------------------------- *
++ * | FS4 | FS5 | FS6 | FS7 | *
++ * ------------------------------------------------- *
++ * ------------------------------------------------- *
++ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
++ * ------------------------------------------------- *
++ * | 64 | 72 | 80 | 88 | *
++ * ------------------------------------------------- *
++ * | S0 | S1 | S2 | S3 | *
++ * ------------------------------------------------- *
++ * ------------------------------------------------- *
++ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
++ * ------------------------------------------------- *
++ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
++ * ------------------------------------------------- *
++ * | S4 | S5 | S6 | S7 | *
++ * ------------------------------------------------- *
++ * ------------------------------------------------- *
++ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
++ * ------------------------------------------------- *
++ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
++ * ------------------------------------------------- *
++ * | S8 | FP | RA | PC | *
++ * ------------------------------------------------- *
++ * *
++ * *****************************************************/
++
++.file "jump_loongarch64_sysv_elf_gas.S"
++.text
++.globl jump_fcontext
++.align 2
++.type jump_fcontext,@function
++jump_fcontext:
++ # reserve space on stack
++ addi.d $sp, $sp, -160
++
++ # save fs0 - fs7
++ fst.d $fs0, $sp, 0
++ fst.d $fs1, $sp, 8
++ fst.d $fs2, $sp, 16
++ fst.d $fs3, $sp, 24
++ fst.d $fs4, $sp, 32
++ fst.d $fs5, $sp, 40
++ fst.d $fs6, $sp, 48
++ fst.d $fs7, $sp, 56
++
++ # save s0 - s8, fp, ra
++ st.d $s0, $sp, 64
++ st.d $s1, $sp, 72
++ st.d $s2, $sp, 80
++ st.d $s3, $sp, 88
++ st.d $s4, $sp, 96
++ st.d $s5, $sp, 104
++ st.d $s6, $sp, 112
++ st.d $s7, $sp, 120
++ st.d $s8, $sp, 128
++ st.d $fp, $sp, 136
++ st.d $ra, $sp, 144
++
++ # save RA as PC
++ st.d $ra, $sp, 152
++
++ # store SP (pointing to context-data) in A2
++ move $a2, $sp
++
++ # restore SP (pointing to context-data) from A0
++ move $sp, $a0
++
++ # load fs0 - fs7
++ fld.d $fs0, $sp, 0
++ fld.d $fs1, $sp, 8
++ fld.d $fs2, $sp, 16
++ fld.d $fs3, $sp, 24
++ fld.d $fs4, $sp, 32
++ fld.d $fs5, $sp, 40
++ fld.d $fs6, $sp, 48
++ fld.d $fs7, $sp, 56
++
++ #load s0 - s7
++ ld.d $s0, $sp, 64
++ ld.d $s1, $sp, 72
++ ld.d $s2, $sp, 80
++ ld.d $s3, $sp, 88
++ ld.d $s4, $sp, 96
++ ld.d $s5, $sp, 104
++ ld.d $s6, $sp, 112
++ ld.d $s7, $sp, 120
++ ld.d $s8, $sp, 128
++ ld.d $fp, $sp, 136
++ ld.d $ra, $sp, 144
++
++ # return transfer_t from jump
++ # pass transfer_t as first arg in context function
++ # a0 == FCTX, a1 == DATA
++ move $a0, $a2
++
++ # load PC
++ ld.d $a2, $sp, 152
++
++ # restore stack
++ addi.d $sp, $sp, 160
++
++ # jump to context
++ jr $a2
++.size jump_fcontext, .-jump_fcontext
++
++/* Mark that we don't need executable stack. */
++.section .note.GNU-stack,"",%progbits
+diff --git a/Zend/asm/make_loongarch64_sysv_elf_gas.S b/Zend/asm/make_loongarch64_sysv_elf_gas.S
+new file mode 100644
+index 0000000000..55062702f1
+--- /dev/null
++++ b/Zend/asm/make_loongarch64_sysv_elf_gas.S
+@@ -0,0 +1,72 @@
++/*******************************************************
++ * *
++ * ------------------------------------------------- *
++ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
++ * ------------------------------------------------- *
++ * | 0 | 8 | 16 | 24 | *
++ * ------------------------------------------------- *
++ * | FS0 | FS1 | FS2 | FS3 | *
++ * ------------------------------------------------- *
++ * ------------------------------------------------- *
++ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
++ * ------------------------------------------------- *
++ * | 32 | 40 | 48 | 56 | *
++ * ------------------------------------------------- *
++ * | FS4 | FS5 | FS6 | FS7 | *
++ * ------------------------------------------------- *
++ * ------------------------------------------------- *
++ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
++ * ------------------------------------------------- *
++ * | 64 | 72 | 80 | 88 | *
++ * ------------------------------------------------- *
++ * | S0 | S1 | S2 | S3 | *
++ * ------------------------------------------------- *
++ * ------------------------------------------------- *
++ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
++ * ------------------------------------------------- *
++ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
++ * ------------------------------------------------- *
++ * | S4 | S5 | S6 | S7 | *
++ * ------------------------------------------------- *
++ * ------------------------------------------------- *
++ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
++ * ------------------------------------------------- *
++ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
++ * ------------------------------------------------- *
++ * | S8 | FP | RA | PC | *
++ * ------------------------------------------------- *
++ * *
++ * *****************************************************/
++
++.file "make_loongarch64_sysv_elf_gas.S"
++.text
++.globl make_fcontext
++.align 2
++.type make_fcontext,@function
++make_fcontext:
++ # shift address in A0 to lower 16 byte boundary
++ bstrins.d $a0, $zero, 3, 0
++
++ # reserve space for context-data on context-stack
++ addi.d $a0, $a0, -160
++
++ # third arg of make_fcontext() == address of context-function
++ st.d $a2, $a0, 152
++
++ # save address of finish as return-address for context-function
++ # will be entered after context-function returns
++ la.local $a4, finish
++ st.d $a4, $a0, 144
++
++ # return pointer to context-data
++ jr $ra
++
++finish:
++ # exit code is zero
++ li.d $a0, 0
++ # call _exit(0)
++ b %plt(_exit)
++
++.size make_fcontext, .-make_fcontext
++/* Mark that we don't need executable stack. */
++.section .note.GNU-stack,"",%progbits
+diff --git a/configure.ac b/configure.ac
+index 2bf60c434d..da646ac69f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1253,6 +1253,7 @@ AS_CASE([$host_cpu],
+ [riscv64*], [fiber_cpu="riscv64"],
+ [sparc64], [fiber_cpu="sparc64"],
+ [s390x*], [fiber_cpu="s390x"],
++ [loongarch64*], [fiber_cpu="loongarch64"],
+ [mips64*], [fiber_cpu="mips64"],
+ [mips*], [fiber_cpu="mips32"],
+ [fiber_cpu="unknown"]
+@@ -1275,6 +1276,7 @@ AS_CASE([$fiber_cpu],
+ [riscv64], [fiber_asm_file_prefix="riscv64_sysv"],
+ [sparc64], [fiber_asm_file_prefix="sparc64_sysv"],
+ [s390x], [fiber_asm_file_prefix="s390x_sysv"],
++ [loongarch64], [fiber_asm_file_prefix="loongarch64_sysv"],
+ [mips64], [fiber_asm_file_prefix="mips64_n64"],
+ [mips32], [fiber_asm_file_prefix="mips32_o32"],
+ [fiber_asm_file_prefix="unknown"]
+--
+2.44.0
+