]> git.pld-linux.org Git - packages/boost.git/commitdiff
- context and coroutine do not build on x32 (added TODO)
authorJan Rękorajski <baggins@pld-linux.org>
Sun, 28 Dec 2014 19:11:55 +0000 (19:11 +0000)
committerJan Rękorajski <baggins@pld-linux.org>
Sun, 28 Dec 2014 19:11:55 +0000 (19:11 +0000)
boost-x32-context.patch [new file with mode: 0644]
boost.spec

diff --git a/boost-x32-context.patch b/boost-x32-context.patch
new file mode 100644 (file)
index 0000000..f3f69c8
--- /dev/null
@@ -0,0 +1,85 @@
+Index: libs/context/src/asm/jump_x86_64_sysv_elf_gas.S
+===================================================================
+--- libs/context/src/asm/jump_x86_64_sysv_elf_gas.S    (revision 86799)
++++ libs/context/src/asm/jump_x86_64_sysv_elf_gas.S    (working copy)
+@@ -38,6 +38,12 @@
+  *                                                                                      *
+  * **************************************************************************************/
++#ifdef __ILP32__
++# define SIZEOF_FCONTEXT_T 0x50
++#else
++# define SIZEOF_FCONTEXT_T 0x58
++#endif
++
+ .text
+ .globl jump_fcontext
+ .type jump_fcontext,@function
+@@ -53,11 +59,11 @@ jump_fcontext:
+     cmp      $0,         %rcx
+     je       1f
+-    stmxcsr  0x50(%rdi)             /* save MMX control and status word */
+-    fnstcw   0x54(%rdi)             /* save x87 control word */
++    stmxcsr  (SIZEOF_FCONTEXT_T - 8)(%rdi)             /* save MMX control and status word */
++    fnstcw   (SIZEOF_FCONTEXT_T - 4)(%rdi)             /* save x87 control word */
+-    ldmxcsr  0x50(%rsi)             /* restore MMX control and status word */
+-    fldcw    0x54(%rsi)             /* restore x87 control word */
++    ldmxcsr  (SIZEOF_FCONTEXT_T - 8)(%rsi)             /* restore MMX control and status word */
++    fldcw    (SIZEOF_FCONTEXT_T - 4)(%rsi)             /* restore x87 control word */
+ 1:
+     leaq     0x8(%rsp),  %rax       /* exclude the return address and save as stack pointer */
+Index: libs/context/src/asm/make_x86_64_sysv_elf_gas.S
+===================================================================
+--- libs/context/src/asm/make_x86_64_sysv_elf_gas.S    (revision 86799)
++++ libs/context/src/asm/make_x86_64_sysv_elf_gas.S    (working copy)
+@@ -38,26 +38,43 @@
+  *                                                                                      *
+  * **************************************************************************************/
++#ifdef __ILP32__
++# define SIZEOF_FCONTEXT_T 0x50
++#else
++# define SIZEOF_FCONTEXT_T 0x58
++#endif
++
+ .text
+ .globl make_fcontext
+ .type make_fcontext,@function
+ .align 16
+-make_fcontext:
+-    leaq   -0x58(%rdi),    %rax        /* reserve space for fcontext_t at top of context stack */
++make_fcontext: // (rax, rsi, rdx)
++    leaq   -SIZEOF_FCONTEXT_T(%rdi), %rax /* reserve space for fcontext_t at top of context stack */
+     /* shift address in RAX to lower 16 byte boundary */
+     /* == pointer to fcontext_t and address of context stack */
+     andq   $-16,           %rax
++#ifdef __ILP32__
++    mov    %edi,           0x40(%rax) /* save address of context stack pointer (base) in fcontext_t */
++    mov    %esi,           0x44(%rax) /* save context stack size in fcontext_t */
++    mov    %edx,           0x38(%rax) /* save address of context function in fcontext_t */
++#else
+     movq   %rdi,           0x40(%rax) /* save address of context stack pointer (base) in fcontext_t */
+     movq   %rsi,           0x48(%rax) /* save context stack size in fcontext_t */
+     movq   %rdx,           0x38(%rax) /* save address of context function in fcontext_t */
++#endif
+-    stmxcsr  0x50(%rax)                /* save MMX control and status word */
+-    fnstcw   0x54(%rax)                /* save x87 control word */
++    stmxcsr  (SIZEOF_FCONTEXT_T - 8)(%rax)                /* save MMX control and status word */
++    fnstcw   (SIZEOF_FCONTEXT_T - 4)(%rax)                /* save x87 control word */
++#ifdef __ILP32__
++    leaq   -0x10(%rax),     %rdx       /* reserve space for the return address on context stack, (RSP - 0x8) % 16 == 0 */
++    mov    %edx,            0x30(%rax) /* save address in RDX as stack pointer for context function */
++#else
+     leaq   -0x8(%rax),      %rdx       /* reserve space for the return address on context stack, (RSP - 0x8) % 16 == 0 */
+     movq   %rdx,            0x30(%rax) /* save address in RDX as stack pointer for context function */
++#endif
+     leaq   finish(%rip),    %rcx       /* compute abs address of label finish */
+     movq   %rcx,            (%rdx)     /* save address of finish as return address for context function */
index 9f3390427f0ac1b520ffb984a6c992cd9b1a1519..b92ee57e4fdc8c6681627df7c8f60e1874dc236b 100644 (file)
@@ -2,6 +2,7 @@
 # TODO:
 #      - think about building MPI.
 #      - split shared libs from core package into -iostreams/-serialization.
+#      - fix building context and corouting on x32 (patch1)
 #
 # Conditional build:
 %bcond_without python  # without boost-python support
@@ -17,6 +18,7 @@ Group:                Libraries
 Source0:       http://downloads.sourceforge.net/boost/%{name}_%{fver}.tar.bz2
 # Source0-md5: a744cf167b05d72335f27c88115f211d
 Patch0:                %{name}-link.patch
+Patch1:                %{name}-x32-context.patch
 # FC Patches:
 # https://svn.boost.org/trac/boost/ticket/5637
 Patch203:      %{name}-1.54.0-mpl-print.patch
@@ -395,6 +397,7 @@ Dokumentacja dla biblioteki Boost C++.
 %prep
 %setup -q -n %{name}_%{fver}
 %patch0 -p1
+#patch1 -p0
 
 %patch203 -p0
 %patch211 -p1
@@ -433,10 +436,20 @@ PYTHON_VERSION=
 EXPAT_INCLUDE=%{_includedir} \
 EXPAT_LIBPATH=%{_libdir} \
 ICU_PATH=%{_prefix} \
-./bootstrap.sh --prefix=%{_prefix}
+./bootstrap.sh \
+       --prefix=%{_prefix}
+
 ./b2 \
+%ifarch x32
+       --without-context \
+       --without-coroutine \
+%endif
        -d2 --toolset=gcc \
-       variant=release debug-symbols=on inlining=on link=static,shared threading=multi
+       variant=release \
+       debug-symbols=on \
+       inlining=on \
+       link=static,shared \
+       threading=multi
 
 %install
 rm -rf $RPM_BUILD_ROOT
@@ -550,7 +563,9 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_libdir}/libboost_atomic.so.*.*.*
 %attr(755,root,root) %{_libdir}/libboost_container.so.*.*.*
+%ifnarch x32
 %attr(755,root,root) %{_libdir}/libboost_coroutine.so.*.*.*
+%endif
 %attr(755,root,root) %{_libdir}/libboost_iostreams.so.*.*.*
 %attr(755,root,root) %{_libdir}/libboost_math_*.so.*.*.*
 %attr(755,root,root) %{_libdir}/libboost_random.so.*.*.*
@@ -562,8 +577,10 @@ rm -rf $RPM_BUILD_ROOT
 %attr(755,root,root) %{_libdir}/libboost_atomic.so
 %attr(755,root,root) %{_libdir}/libboost_chrono.so
 %attr(755,root,root) %{_libdir}/libboost_container.so
+%ifnarch x32
 %attr(755,root,root) %{_libdir}/libboost_context.so
 %attr(755,root,root) %{_libdir}/libboost_coroutine.so
+%endif
 %attr(755,root,root) %{_libdir}/libboost_date_time.so
 %attr(755,root,root) %{_libdir}/libboost_filesystem.so
 %attr(755,root,root) %{_libdir}/libboost_graph.so
@@ -593,8 +610,10 @@ rm -rf $RPM_BUILD_ROOT
 %{_libdir}/libboost_atomic.a
 %{_libdir}/libboost_chrono.a
 %{_libdir}/libboost_container.a
+%ifnarch x32
 %{_libdir}/libboost_context.a
 %{_libdir}/libboost_coroutine.a
+%endif
 %{_libdir}/libboost_date_time.a
 %{_libdir}/libboost_exception.a
 %{_libdir}/libboost_filesystem.a
@@ -638,9 +657,11 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_libdir}/libboost_chrono.so.*.*.*
 
+%ifnarch x32
 %files context
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_libdir}/libboost_context.so.*.*.*
+%endif
 
 %files date_time
 %defattr(644,root,root,755)
This page took 0.152677 seconds and 4 git commands to generate.