boost: build context for mips64 14728/head
authorRosen Penev <rosenp@gmail.com>
Sat, 13 Feb 2021 02:06:06 +0000 (18:06 -0800)
committerRosen Penev <rosenp@gmail.com>
Sun, 14 Feb 2021 02:40:50 +0000 (18:40 -0800)
It turns out there's upstream support for it. A small patch is needed
to fix softfloat support.

Also added patch to fix boost-fiber on octeon+. Failure happens because
the platform is based on an old MIPSr2 standard that lacks the pause
instruction.

It also turns out that MIPS64 builds are done with the wrong ABI.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
libs/boost/Makefile
libs/boost/patches/010-mips64.patch [new file with mode: 0644]
libs/boost/patches/020-mips64-fiber.patch [new file with mode: 0644]

index 3daf5594afdc294779a7649fb1ad92bcd8203ef4..a39680e5bfece9f49c57d8d5b60a46ac60994abe 100644 (file)
@@ -13,7 +13,7 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=boost
 PKG_VERSION:=1.75.0
 PKG_SOURCE_VERSION:=1_75_0
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)_$(PKG_SOURCE_VERSION).tar.bz2
 PKG_SOURCE_URL:=@SF/$(PKG_NAME)/$(PKG_NAME)/$(PKG_VERSION) https://dl.bintray.com/boostorg/release/$(PKG_VERSION)/source/
@@ -117,7 +117,7 @@ define Package/boost/config
        # Invisible config dependency
        config boost-context-exclude
                bool
-               default y if (TARGET_arc770 || TARGET_archs38 || TARGET_octeon || TARGET_octeontx)
+               default y if (TARGET_arc770 || TARGET_archs38)
                default n
 
        config boost-coroutine-exclude
@@ -387,7 +387,7 @@ EXTRA_CXXFLAGS += $(if $(CONFIG_GCC_USE_VERSION_10),-std=gnu++20,$(if $(CONFIG_G
 ifneq ($(findstring mips,$(ARCH)),)
     BOOST_ABI = o32
     ifneq ($(findstring 64,$(ARCH)),)
-        BOOST_ABI = o64
+        BOOST_ABI = n64
     endif
 else ifneq ($(findstring arm,$(ARCH)),)
     BOOST_ABI = aapcs
diff --git a/libs/boost/patches/010-mips64.patch b/libs/boost/patches/010-mips64.patch
new file mode 100644 (file)
index 0000000..513e206
--- /dev/null
@@ -0,0 +1,70 @@
+--- a/libs/context/src/asm/jump_mips64_n64_elf_gas.S
++++ b/libs/context/src/asm/jump_mips64_n64_elf_gas.S
+@@ -67,7 +67,7 @@ jump_fcontext:
+     sd  $ra, 144($sp) # save RA
+     sd  $ra, 152($sp) # save RA as PC
+-
++#if defined(__mips_hard_float)
+     s.d  $f24, 0($sp)   # save F24
+     s.d  $f25, 8($sp)   # save F25
+     s.d  $f26, 16($sp)  # save F26
+@@ -76,6 +76,7 @@ jump_fcontext:
+     s.d  $f29, 40($sp)  # save F29
+     s.d  $f30, 48($sp)  # save F30
+     s.d  $f31, 56($sp)  # save F31
++#endif
+     # store SP (pointing to old context-data) in v0 as return
+     move  $v0, $sp
+@@ -83,6 +84,7 @@ jump_fcontext:
+     # get SP (pointing to new context-data) from a0 param
+     move  $sp, $a0
++#if defined(__mips_hard_float)
+     l.d  $f24, 0($sp)   # restore F24
+     l.d  $f25, 8($sp)   # restore F25
+     l.d  $f26, 16($sp)  # restore F26
+@@ -91,6 +93,7 @@ jump_fcontext:
+     l.d  $f29, 40($sp)  # restore F29
+     l.d  $f30, 48($sp)  # restore F30
+     l.d  $f31, 56($sp)  # restore F31
++#endif
+     ld  $s0, 64($sp)  # restore S0
+     ld  $s1, 72($sp)  # restore S1
+--- a/libs/context/src/asm/ontop_mips64_n64_elf_gas.S
++++ b/libs/context/src/asm/ontop_mips64_n64_elf_gas.S
+@@ -67,7 +67,7 @@ ontop_fcontext:
+     sd  $ra, 144($sp) # save RA
+     sd  $ra, 152($sp) # save RA as PC
+-
++#if defined(__mips_hard_float)
+     s.d  $f24, 0($sp)   # save F24
+     s.d  $f25, 8($sp)   # save F25
+     s.d  $f26, 16($sp)  # save F26
+@@ -76,6 +76,7 @@ ontop_fcontext:
+     s.d  $f29, 40($sp)  # save F29
+     s.d  $f30, 48($sp)  # save F30
+     s.d  $f31, 56($sp)  # save F31
++#endif
+     # store SP (pointing to context-data) in t0
+     move  $t0, $sp
+@@ -83,6 +84,7 @@ ontop_fcontext:
+     # restore SP (pointing to context-data) from a0
+     move  $sp, $a0
++#if defined(__mips_hard_float)
+     l.d  $f24, 0($sp)   # restore F24
+     l.d  $f25, 8($sp)   # restore F25
+     l.d  $f26, 16($sp)  # restore F26
+@@ -91,6 +93,7 @@ ontop_fcontext:
+     l.d  $f29, 40($sp)  # restore F29
+     l.d  $f30, 48($sp)  # restore F30
+     l.d  $f31, 56($sp)  # restore F31
++#endif
+     ld  $s0, 64($sp)  # restore S0
+     ld  $s1, 72($sp)  # restore S1
diff --git a/libs/boost/patches/020-mips64-fiber.patch b/libs/boost/patches/020-mips64-fiber.patch
new file mode 100644 (file)
index 0000000..33be4c2
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/boost/fiber/detail/cpu_relax.hpp
++++ b/boost/fiber/detail/cpu_relax.hpp
+@@ -47,7 +47,7 @@ namespace detail {
+ # else
+ #  define cpu_relax() asm volatile ("nop" ::: "memory");
+ # endif
+-#elif BOOST_ARCH_MIPS && (__mips_isa_rev > 1)
++#elif BOOST_ARCH_MIPS && (__mips_isa_rev > 1) && !defined(_MIPS_ARCH_OCTEONP)
+ # define cpu_relax() asm volatile ("pause" ::: "memory");
+ #elif BOOST_ARCH_PPC
+ // http://code.metager.de/source/xref/gnu/glibc/sysdeps/powerpc/sys/platform/ppc.h