df8fb6b528
This fixes fcontext on my PowerBook G4 running Void Linux ppc-musl-20190901, NetBSD/macppc 8.1, or OpenBSD/macppc 6.6-current, all with g++. These systems use fcontext for *ppc32_sysv_elf* (PowerPC 32-bit System V ELF). The assembly code was wrong for BSD and crashing on Linux musl. Linux returns a transfer_t in memory (through a hidden pointer in R3), but other systems (at least NetBSD and OpenBSD) return a transfer_t in registers R3:R4. jump_fcontext() and ontop_fcontext() were always using the hidden pointer. Add checks for `#ifdef__linux__`; start using R3:R4 on other systems. make_fcontext() was calling _exit(0) through the insecure BSS PLT. Set R30 to use the secure PLT. This prevents a crash when musl's ld.so loads the executable; musl seems to require the secure PLT. Fix ontop_fcontext() to restore the hidden pointer on Linux. It was passing the wrong context's hidden pointer to the ontop-function fn(), so fn() returned a transfer_t to the wrong stack. When fn() was context_exit() in <boost/context/continuation_fcontext.hpp>, it freed the old stack, then returned `transfer_t{ nullptr, nullptr }` to free memory. This crashed on Linux musl. Now that ontop_fcontext() restores the hidden pointer, it must stop abusing the same pointer to pass a transfer_t argument to fn(). Add a new ontop_fcontext_tail() in C++, which takes arguments in registers and allocates a transfer_t. The code is in C++ so it can free the transfer_t argument if fn() throws a C++ exception. Rearrange the context frame to shrink it from 244 to 240 bytes. This fixes the stack alignment: the ABI requires R1 % 16 == 0, and make_fcontext() respects this, but jump_fcontext() was adding 244 to R1, so the new context ran with a misaligned stack (244 % 16 == 4). Remove R13 from the context frame, so new contexts stop loading R13 with garbage. The ABI uses R13 to point to the executable's small data, so R13 should have the same value in every context. Add the backchain to the context frame; make room by moving LR to the caller's frame. Order CR, R14 to R31, F14 to F31 at the frame's end, as is typical for this ABI. Provide 8-byte alignment for FPSCR and F14 to F31, to avoid a misalignment penalty.
828 lines
18 KiB
Plaintext
828 lines
18 KiB
Plaintext
|
|
# Boost.Context Library Build Jamfile
|
|
|
|
# Copyright Oliver Kowalke 2009.
|
|
# Distributed under the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
# http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
import common ;
|
|
import feature ;
|
|
import indirect ;
|
|
import modules ;
|
|
import os ;
|
|
import toolset ;
|
|
import ../../config/checks/config : requires ;
|
|
|
|
feature.feature segmented-stacks : on : optional propagated composite ;
|
|
feature.compose <segmented-stacks>on : <define>BOOST_USE_SEGMENTED_STACKS ;
|
|
|
|
feature.feature htm : tsx : optional propagated composite ;
|
|
feature.compose <htm>tsx : <define>BOOST_USE_TSX ;
|
|
|
|
feature.feature valgrind : on : optional propagated composite ;
|
|
feature.compose <valgrind>on : <define>BOOST_USE_VALGRIND ;
|
|
|
|
project boost/context
|
|
: requirements
|
|
<target-os>windows:<define>_WIN32_WINNT=0x0601
|
|
<toolset>gcc,<segmented-stacks>on:<cxxflags>-fsplit-stack
|
|
<toolset>gcc,<segmented-stacks>on:<cxxflags>-DBOOST_USE_SEGMENTED_STACKS
|
|
<toolset>gcc,<segmented-stacks>on:<linkflags>"-static-libgcc"
|
|
<toolset>clang,<segmented-stacks>on:<cxxflags>-fsplit-stack
|
|
<toolset>clang,<segmented-stacks>on:<cxxflags>-DBOOST_USE_SEGMENTED_STACKS
|
|
<toolset>clang,<segmented-stacks>on:<linkflags>"-static-libgcc"
|
|
<toolset>intel,<link>shared:<define>BOOST_CONTEXT_EXPORT=EXPORT
|
|
<toolset>intel,<link>static:<define>BOOST_CONTEXT_EXPORT=
|
|
<toolset>msvc,<link>shared:<define>BOOST_CONTEXT_EXPORT=EXPORT
|
|
<toolset>msvc,<link>static:<define>BOOST_CONTEXT_EXPORT=
|
|
<toolset>clang-win,<link>shared:<define>BOOST_CONTEXT_EXPORT=EXPORT
|
|
<toolset>clang-win,<link>static:<define>BOOST_CONTEXT_EXPORT=
|
|
<link>shared:<define>BOOST_CONTEXT_DYN_LINK=1
|
|
<define>BOOST_CONTEXT_SOURCE
|
|
<threading>multi
|
|
: usage-requirements
|
|
<link>shared:<define>BOOST_CONTEXT_DYN_LINK=1
|
|
<optimization>speed:<define>BOOST_DISABLE_ASSERTS
|
|
<variant>release:<define>BOOST_DISABLE_ASSERTS
|
|
: source-location ../src
|
|
;
|
|
|
|
|
|
local rule default_binary_format ( )
|
|
{
|
|
local tmp = elf ;
|
|
if [ os.name ] = "NT" { tmp = pe ; }
|
|
else if [ os.name ] = "CYGWIN" { tmp = pe ; }
|
|
else if [ os.name ] = "AIX" { tmp = xcoff ; }
|
|
else if [ os.name ] = "MACOSX" { tmp = mach-o ; }
|
|
return $(tmp) ;
|
|
}
|
|
|
|
feature.feature binary-format
|
|
: elf
|
|
mach-o
|
|
pe
|
|
xcoff
|
|
: propagated
|
|
;
|
|
feature.set-default binary-format : [ default_binary_format ] ;
|
|
|
|
|
|
local rule default_abi ( )
|
|
{
|
|
local tmp = sysv ;
|
|
if [ os.name ] = "NT" { tmp = ms ; }
|
|
else if [ os.name ] = "CYGWIN" { tmp = ms ; }
|
|
else if [ os.platform ] = "ARM" { tmp = aapcs ; }
|
|
else if [ os.platform ] = "MIPS" { tmp = o32 ; }
|
|
return $(tmp) ;
|
|
}
|
|
|
|
feature.feature abi
|
|
: aapcs
|
|
eabi
|
|
ms
|
|
n32
|
|
n64
|
|
o32
|
|
o64
|
|
sysv
|
|
x32
|
|
: propagated
|
|
;
|
|
feature.set-default abi : [ default_abi ] ;
|
|
|
|
|
|
feature.feature context-impl
|
|
: fcontext
|
|
ucontext
|
|
winfib
|
|
: propagated
|
|
composite
|
|
;
|
|
feature.set-default context-impl : fcontext ;
|
|
feature.compose <context-impl>ucontext : <define>BOOST_USE_UCONTEXT ;
|
|
feature.compose <context-impl>winfib : <define>BOOST_USE_WINFIB ;
|
|
|
|
# ARM
|
|
# ARM/AAPCS/ELF
|
|
alias asm_sources
|
|
: asm/make_arm_aapcs_elf_gas.S
|
|
asm/jump_arm_aapcs_elf_gas.S
|
|
asm/ontop_arm_aapcs_elf_gas.S
|
|
: <abi>aapcs
|
|
<address-model>32
|
|
<architecture>arm
|
|
<binary-format>elf
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_arm_aapcs_elf_gas.S
|
|
asm/jump_arm_aapcs_elf_gas.S
|
|
asm/ontop_arm_aapcs_elf_gas.S
|
|
: <abi>aapcs
|
|
<address-model>32
|
|
<architecture>arm
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_arm_aapcs_elf_gas.S
|
|
asm/jump_arm_aapcs_elf_gas.S
|
|
asm/ontop_arm_aapcs_elf_gas.S
|
|
: <abi>aapcs
|
|
<address-model>32
|
|
<architecture>arm
|
|
<binary-format>elf
|
|
<toolset>qcc
|
|
;
|
|
|
|
# ARM/AAPCS/MACH-O
|
|
alias asm_sources
|
|
: asm/make_arm_aapcs_macho_gas.S
|
|
asm/jump_arm_aapcs_macho_gas.S
|
|
asm/ontop_arm_aapcs_macho_gas.S
|
|
: <abi>aapcs
|
|
<address-model>32
|
|
<architecture>arm
|
|
<binary-format>mach-o
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_arm_aapcs_macho_gas.S
|
|
asm/jump_arm_aapcs_macho_gas.S
|
|
asm/ontop_arm_aapcs_macho_gas.S
|
|
: <abi>aapcs
|
|
<address-model>32
|
|
<architecture>arm
|
|
<binary-format>mach-o
|
|
<toolset>darwin
|
|
;
|
|
|
|
# ARM/AAPCS/PE
|
|
alias asm_sources
|
|
: asm/make_arm_aapcs_pe_armasm.asm
|
|
asm/jump_arm_aapcs_pe_armasm.asm
|
|
asm/ontop_arm_aapcs_pe_armasm.asm
|
|
untested.cpp
|
|
: <abi>aapcs
|
|
<address-model>32
|
|
<architecture>arm
|
|
<binary-format>pe
|
|
<toolset>msvc
|
|
;
|
|
|
|
# ARM64
|
|
# ARM64/AAPCS/ELF
|
|
alias asm_sources
|
|
: asm/make_arm64_aapcs_elf_gas.S
|
|
asm/jump_arm64_aapcs_elf_gas.S
|
|
asm/ontop_arm64_aapcs_elf_gas.S
|
|
: <abi>aapcs
|
|
<address-model>64
|
|
<architecture>arm
|
|
<binary-format>elf
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_arm64_aapcs_elf_gas.S
|
|
asm/jump_arm64_aapcs_elf_gas.S
|
|
asm/ontop_arm64_aapcs_elf_gas.S
|
|
: <abi>aapcs
|
|
<address-model>64
|
|
<architecture>arm
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
# ARM64/AAPCS/MACH-O
|
|
alias asm_sources
|
|
: asm/make_arm64_aapcs_macho_gas.S
|
|
asm/jump_arm64_aapcs_macho_gas.S
|
|
asm/ontop_arm64_aapcs_macho_gas.S
|
|
: <abi>aapcs
|
|
<address-model>64
|
|
<architecture>arm
|
|
<binary-format>mach-o
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_arm64_aapcs_macho_gas.S
|
|
asm/jump_arm64_aapcs_macho_gas.S
|
|
asm/ontop_arm64_aapcs_macho_gas.S
|
|
: <abi>aapcs
|
|
<address-model>64
|
|
<architecture>arm
|
|
<binary-format>mach-o
|
|
<toolset>darwin
|
|
;
|
|
|
|
# MIPS
|
|
# MIPS32/O32/ELF
|
|
alias asm_sources
|
|
: asm/make_mips32_o32_elf_gas.S
|
|
asm/jump_mips32_o32_elf_gas.S
|
|
asm/ontop_mips32_o32_elf_gas.S
|
|
: <abi>o32
|
|
<address-model>32
|
|
<architecture>mips1
|
|
<binary-format>elf
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_mips32_o32_elf_gas.S
|
|
asm/jump_mips32_o32_elf_gas.S
|
|
asm/ontop_mips32_o32_elf_gas.S
|
|
: <abi>o32
|
|
<address-model>32
|
|
<architecture>mips1
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
# MIPS64/N64/ELF
|
|
alias asm_sources
|
|
: asm/make_mips64_n64_elf_gas.S
|
|
asm/jump_mips64_n64_elf_gas.S
|
|
asm/ontop_mips64_n64_elf_gas.S
|
|
: <abi>n64
|
|
<address-model>64
|
|
<architecture>mips1
|
|
<binary-format>elf
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_mips64_n64_elf_gas.S
|
|
asm/jump_mips64_n64_elf_gas.S
|
|
asm/ontop_mips64_n64_elf_gas.S
|
|
: <abi>n64
|
|
<address-model>64
|
|
<architecture>mips1
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
# POWERPC_32
|
|
# POWERPC_32/SYSV/ELF
|
|
alias asm_sources
|
|
: asm/make_ppc32_sysv_elf_gas.S
|
|
asm/jump_ppc32_sysv_elf_gas.S
|
|
asm/ontop_ppc32_sysv_elf_gas.S
|
|
asm/tail_ppc32_sysv_elf_gas.cpp
|
|
: <abi>sysv
|
|
<address-model>32
|
|
<architecture>power
|
|
<binary-format>elf
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_ppc32_sysv_elf_gas.S
|
|
asm/jump_ppc32_sysv_elf_gas.S
|
|
asm/ontop_ppc32_sysv_elf_gas.S
|
|
asm/tail_ppc32_sysv_elf_gas.cpp
|
|
: <abi>sysv
|
|
<address-model>32
|
|
<architecture>power
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_ppc32_sysv_macho_gas.S
|
|
asm/jump_ppc32_sysv_macho_gas.S
|
|
asm/ontop_ppc32_sysv_macho_gas.S
|
|
: <abi>sysv
|
|
<address-model>32
|
|
<architecture>power
|
|
<binary-format>mach-o
|
|
<toolset>darwin
|
|
;
|
|
|
|
#POWERPC_32/SYSV/XCOFF
|
|
alias asm_sources
|
|
: asm/make_ppc32_sysv_xcoff_gas.S
|
|
asm/jump_ppc32_sysv_xcoff_gas.S
|
|
asm/ontop_ppc32_sysv_xcoff_gas.S
|
|
: <abi>sysv
|
|
<address-model>32
|
|
<architecture>power
|
|
<binary-format>xcoff
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_ppc32_sysv_xcoff_gas.S
|
|
asm/jump_ppc32_sysv_xcoff_gas.S
|
|
asm/ontop_ppc32_sysv_xcoff_gas.S
|
|
: <abi>sysv
|
|
<address-model>32
|
|
<architecture>power
|
|
<binary-format>xcoff
|
|
<toolset>gcc
|
|
;
|
|
|
|
# POWERPC_64
|
|
# POWERPC_64/SYSV/ELF
|
|
alias asm_sources
|
|
: asm/make_ppc64_sysv_elf_gas.S
|
|
asm/jump_ppc64_sysv_elf_gas.S
|
|
asm/ontop_ppc64_sysv_elf_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>power
|
|
<binary-format>elf
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_ppc64_sysv_elf_gas.S
|
|
asm/jump_ppc64_sysv_elf_gas.S
|
|
asm/ontop_ppc64_sysv_elf_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>power
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
# POWERPC_64/SYSV/MACH-O
|
|
alias asm_sources
|
|
: asm/make_ppc64_sysv_macho_gas.S
|
|
asm/jump_ppc64_sysv_macho_gas.S
|
|
asm/ontop_ppc64_sysv_macho_gas.S
|
|
untested.cpp
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>power
|
|
<binary-format>mach-o
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_ppc64_sysv_macho_gas.S
|
|
asm/jump_ppc64_sysv_macho_gas.S
|
|
asm/ontop_ppc64_sysv_macho_gas.S
|
|
untested.cpp
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>power
|
|
<binary-format>mach-o
|
|
<toolset>darwin
|
|
;
|
|
|
|
# POWERPC_64/SYSV/XCOFF
|
|
alias asm_sources
|
|
: asm/make_ppc64_sysv_xcoff_gas.S
|
|
asm/jump_ppc64_sysv_xcoff_gas.S
|
|
asm/ontop_ppc64_sysv_xcoff_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>power
|
|
<binary-format>xcoff
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_ppc64_sysv_xcoff_gas.S
|
|
asm/jump_ppc64_sysv_xcoff_gas.S
|
|
asm/ontop_ppc64_sysv_xcoff_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>power
|
|
<binary-format>xcoff
|
|
<toolset>gcc
|
|
;
|
|
|
|
# POWERPC universal
|
|
# POWERPC_32_64/SYSV/MACH-O
|
|
alias asm_sources
|
|
: asm/make_ppc32_ppc64_sysv_macho_gas.S
|
|
asm/jump_ppc32_ppc64_sysv_macho_gas.S
|
|
asm/ontop_ppc32_ppc64_sysv_macho_gas.S
|
|
: <abi>sysv
|
|
<address-model>32_64
|
|
<architecture>power
|
|
<binary-format>mach-o
|
|
;
|
|
|
|
# RISCV64
|
|
# RISCV64/SYSV/ELF
|
|
alias asm_sources
|
|
: asm/make_riscv64_sysv_elf_gas.S
|
|
asm/jump_riscv64_sysv_elf_gas.S
|
|
asm/ontop_riscv64_sysv_elf_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>riscv
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
# S390X
|
|
# S390X/SYSV/ELF
|
|
alias asm_sources
|
|
: asm/make_s390x_sysv_elf_gas.S
|
|
asm/jump_s390x_sysv_elf_gas.S
|
|
asm/ontop_s390x_sysv_elf_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>s390x
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
# X86
|
|
# X86/SYSV/ELF
|
|
alias asm_sources
|
|
: asm/make_i386_sysv_elf_gas.S
|
|
asm/jump_i386_sysv_elf_gas.S
|
|
asm/ontop_i386_sysv_elf_gas.S
|
|
: <abi>sysv
|
|
<address-model>32
|
|
<architecture>x86
|
|
<binary-format>elf
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_i386_sysv_elf_gas.S
|
|
asm/jump_i386_sysv_elf_gas.S
|
|
asm/ontop_i386_sysv_elf_gas.S
|
|
: <abi>sysv
|
|
<address-model>32
|
|
<architecture>x86
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_i386_sysv_elf_gas.S
|
|
asm/jump_i386_sysv_elf_gas.S
|
|
asm/ontop_i386_sysv_elf_gas.S
|
|
: <abi>sysv
|
|
<address-model>32
|
|
<architecture>x86
|
|
<binary-format>elf
|
|
<toolset>intel
|
|
;
|
|
|
|
# X86/SYSV/MACH-O
|
|
alias asm_sources
|
|
: asm/make_i386_sysv_macho_gas.S
|
|
asm/jump_i386_sysv_macho_gas.S
|
|
asm/ontop_i386_sysv_macho_gas.S
|
|
: <abi>sysv
|
|
<address-model>32
|
|
<architecture>x86
|
|
<binary-format>mach-o
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_i386_sysv_macho_gas.S
|
|
asm/jump_i386_sysv_macho_gas.S
|
|
asm/ontop_i386_sysv_macho_gas.S
|
|
: <abi>sysv
|
|
<address-model>32
|
|
<architecture>x86
|
|
<binary-format>mach-o
|
|
<toolset>darwin
|
|
;
|
|
|
|
# X86/MS/PE
|
|
alias asm_sources
|
|
: asm/make_i386_ms_pe_gas.asm
|
|
asm/jump_i386_ms_pe_gas.asm
|
|
asm/ontop_i386_ms_pe_gas.asm
|
|
dummy.cpp
|
|
: <abi>ms
|
|
<address-model>32
|
|
<architecture>x86
|
|
<binary-format>pe
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_i386_ms_pe_masm.asm
|
|
asm/jump_i386_ms_pe_masm.asm
|
|
asm/ontop_i386_ms_pe_masm.asm
|
|
dummy.cpp
|
|
: <abi>ms
|
|
<address-model>32
|
|
<architecture>x86
|
|
<binary-format>pe
|
|
<toolset>clang-win
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_i386_ms_pe_gas.asm
|
|
asm/jump_i386_ms_pe_gas.asm
|
|
asm/ontop_i386_ms_pe_gas.asm
|
|
dummy.cpp
|
|
: <abi>ms
|
|
<address-model>32
|
|
<architecture>x86
|
|
<binary-format>pe
|
|
<toolset>gcc
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_i386_ms_pe_masm.asm
|
|
asm/jump_i386_ms_pe_masm.asm
|
|
asm/ontop_i386_ms_pe_masm.asm
|
|
dummy.cpp
|
|
: <abi>ms
|
|
<address-model>32
|
|
<architecture>x86
|
|
<binary-format>pe
|
|
<toolset>intel
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_i386_ms_pe_masm.asm
|
|
asm/jump_i386_ms_pe_masm.asm
|
|
asm/ontop_i386_ms_pe_masm.asm
|
|
dummy.cpp
|
|
: <abi>ms
|
|
<address-model>32
|
|
<architecture>x86
|
|
<binary-format>pe
|
|
<toolset>msvc
|
|
;
|
|
|
|
# X86_64
|
|
# X86_64/SYSV/ELF
|
|
alias asm_sources
|
|
: asm/make_x86_64_sysv_elf_gas.S
|
|
asm/jump_x86_64_sysv_elf_gas.S
|
|
asm/ontop_x86_64_sysv_elf_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>elf
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_x86_64_sysv_elf_gas.S
|
|
asm/jump_x86_64_sysv_elf_gas.S
|
|
asm/ontop_x86_64_sysv_elf_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_x86_64_sysv_elf_gas.S
|
|
asm/jump_x86_64_sysv_elf_gas.S
|
|
asm/ontop_x86_64_sysv_elf_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>elf
|
|
<toolset>intel
|
|
;
|
|
|
|
# X86_64/SYSV/MACH-O
|
|
alias asm_sources
|
|
: asm/make_x86_64_sysv_macho_gas.S
|
|
asm/jump_x86_64_sysv_macho_gas.S
|
|
asm/ontop_x86_64_sysv_macho_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>mach-o
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_x86_64_sysv_macho_gas.S
|
|
asm/jump_x86_64_sysv_macho_gas.S
|
|
asm/ontop_x86_64_sysv_macho_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>mach-o
|
|
<toolset>darwin
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_x86_64_sysv_macho_gas.S
|
|
asm/jump_x86_64_sysv_macho_gas.S
|
|
asm/ontop_x86_64_sysv_macho_gas.S
|
|
: <abi>sysv
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>mach-o
|
|
<toolset>intel
|
|
;
|
|
|
|
# X86_64/MS/PE
|
|
alias asm_sources
|
|
: asm/make_x86_64_ms_pe_gas.asm
|
|
asm/jump_x86_64_ms_pe_gas.asm
|
|
asm/ontop_x86_64_ms_pe_gas.asm
|
|
dummy.cpp
|
|
: <abi>ms
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>pe
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_x86_64_ms_pe_masm.asm
|
|
asm/jump_x86_64_ms_pe_masm.asm
|
|
asm/ontop_x86_64_ms_pe_masm.asm
|
|
dummy.cpp
|
|
: <abi>ms
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>pe
|
|
<toolset>clang-win
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_x86_64_ms_pe_gas.asm
|
|
asm/jump_x86_64_ms_pe_gas.asm
|
|
asm/ontop_x86_64_ms_pe_gas.asm
|
|
dummy.cpp
|
|
: <abi>ms
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>pe
|
|
<toolset>gcc
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_x86_64_ms_pe_masm.asm
|
|
asm/jump_x86_64_ms_pe_masm.asm
|
|
asm/ontop_x86_64_ms_pe_masm.asm
|
|
dummy.cpp
|
|
: <abi>ms
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>pe
|
|
<toolset>intel
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_x86_64_ms_pe_masm.asm
|
|
asm/jump_x86_64_ms_pe_masm.asm
|
|
asm/ontop_x86_64_ms_pe_masm.asm
|
|
dummy.cpp
|
|
: <abi>ms
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>pe
|
|
<toolset>msvc
|
|
;
|
|
|
|
# X86_64/SYSV/X32
|
|
alias asm_sources
|
|
: asm/make_x86_64_sysv_elf_gas.S
|
|
asm/jump_x86_64_sysv_elf_gas.S
|
|
asm/ontop_x86_64_sysv_elf_gas.S
|
|
: <abi>x32
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>elf
|
|
<toolset>clang
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_x86_64_sysv_elf_gas.S
|
|
asm/jump_x86_64_sysv_elf_gas.S
|
|
asm/ontop_x86_64_sysv_elf_gas.S
|
|
: <abi>x32
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>elf
|
|
<toolset>gcc
|
|
;
|
|
|
|
alias asm_sources
|
|
: asm/make_x86_64_sysv_elf_gas.S
|
|
asm/jump_x86_64_sysv_elf_gas.S
|
|
asm/ontop_x86_64_sysv_elf_gas.S
|
|
: <abi>x32
|
|
<address-model>64
|
|
<architecture>x86
|
|
<binary-format>elf
|
|
<toolset>intel
|
|
;
|
|
|
|
#X86 universal
|
|
alias asm_sources
|
|
: asm/make_i386_x86_64_sysv_macho_gas.S
|
|
asm/jump_i386_x86_64_sysv_macho_gas.S
|
|
asm/ontop_i386_x86_64_sysv_macho_gas.S
|
|
: <abi>sysv
|
|
<address-model>32_64
|
|
<architecture>x86
|
|
<binary-format>mach-o
|
|
;
|
|
|
|
# COMBINED
|
|
alias asm_sources
|
|
: asm/make_combined_sysv_macho_gas.S
|
|
asm/jump_combined_sysv_macho_gas.S
|
|
asm/ontop_combined_sysv_macho_gas.S
|
|
: <abi>sysv
|
|
<architecture>combined
|
|
<binary-format>mach-o
|
|
;
|
|
|
|
explicit asm_sources ;
|
|
|
|
|
|
# fcontext_t
|
|
alias impl_sources
|
|
: asm_sources
|
|
: <context-impl>fcontext
|
|
;
|
|
|
|
# ucontext_t
|
|
alias impl_sources
|
|
: continuation.cpp
|
|
fiber.cpp
|
|
: <context-impl>ucontext
|
|
[ requires cxx11_auto_declarations
|
|
cxx11_constexpr
|
|
cxx11_defaulted_functions
|
|
cxx11_final
|
|
cxx11_hdr_thread
|
|
cxx11_hdr_tuple
|
|
cxx11_lambdas
|
|
cxx11_noexcept
|
|
cxx11_nullptr
|
|
cxx11_rvalue_references
|
|
cxx11_template_aliases
|
|
cxx11_thread_local
|
|
cxx11_variadic_templates ]
|
|
;
|
|
|
|
# WinFiber
|
|
alias impl_sources
|
|
: continuation.cpp
|
|
fiber.cpp
|
|
: <context-impl>winfib
|
|
[ requires cxx11_auto_declarations
|
|
cxx11_constexpr
|
|
cxx11_defaulted_functions
|
|
cxx11_final
|
|
cxx11_hdr_thread
|
|
cxx11_hdr_tuple
|
|
cxx11_lambdas
|
|
cxx11_noexcept
|
|
cxx11_nullptr
|
|
cxx11_rvalue_references
|
|
cxx11_template_aliases
|
|
cxx11_thread_local
|
|
cxx11_variadic_templates ]
|
|
;
|
|
|
|
explicit impl_sources ;
|
|
|
|
obj cxx11_hdr_mutex_check : ../build/cxx11_hdr_mutex.cpp ;
|
|
explicit cxx11_hdr_mutex_check ;
|
|
local cxx11_mutex = [ check-target-builds
|
|
cxx11_hdr_mutex_check "C++11 mutex"
|
|
:
|
|
: <library>/boost/thread//boost_thread
|
|
] ;
|
|
|
|
alias stack_traits_sources
|
|
: windows/stack_traits.cpp
|
|
: <target-os>windows
|
|
:
|
|
: $(cxx11_mutex)
|
|
;
|
|
|
|
alias stack_traits_sources
|
|
: posix/stack_traits.cpp
|
|
:
|
|
:
|
|
: $(cxx11_mutex)
|
|
;
|
|
|
|
explicit stack_traits_sources ;
|
|
|
|
lib boost_context
|
|
: impl_sources
|
|
stack_traits_sources
|
|
;
|
|
|
|
boost-install boost_context ;
|