1 2 // Copyright Oliver Kowalke 2014. 3 // Distributed under the Boost Software License, Version 1.0. 4 // (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 #ifndef BOOST_CONTEXT_STACK_CONTEXT_H 8 #define BOOST_CONTEXT_STACK_CONTEXT_H 9 10 #include <cstddef> 11 12 #include <boost/config.hpp> 13 14 #include <boost/context/detail/config.hpp> 15 16 #ifdef BOOST_HAS_ABI_HEADERS 17 # include BOOST_ABI_PREFIX 18 #endif 19 20 namespace boost { 21 namespace context { 22 23 #if ! defined(BOOST_CONTEXT_NO_CXX11) 24 struct BOOST_CONTEXT_DECL stack_context { 25 # if defined(BOOST_USE_SEGMENTED_STACKS) 26 typedef void * segments_context[BOOST_CONTEXT_SEGMENTS]; 27 # endif 28 29 std::size_t size{ 0 }; 30 void * sp{ nullptr }; 31 # if defined(BOOST_USE_SEGMENTED_STACKS) 32 segments_context segments_ctx{}; 33 # endif 34 # if defined(BOOST_USE_VALGRIND) 35 unsigned valgrind_stack_id{ 0 }; 36 # endif 37 }; 38 #else 39 struct BOOST_CONTEXT_DECL stack_context { 40 # if defined(BOOST_USE_SEGMENTED_STACKS) 41 typedef void * segments_context[BOOST_CONTEXT_SEGMENTS]; 42 # endif 43 44 std::size_t size; 45 void * sp; 46 # if defined(BOOST_USE_SEGMENTED_STACKS) 47 segments_context segments_ctx; 48 # endif 49 # if defined(BOOST_USE_VALGRIND) 50 unsigned valgrind_stack_id; 51 # endif 52 53 stack_context() : 54 size( 0), 55 sp( 0) 56 # if defined(BOOST_USE_SEGMENTED_STACKS) 57 , segments_ctx() 58 # endif 59 # if defined(BOOST_USE_VALGRIND) 60 , valgrind_stack_id( 0) 61 # endif 62 {} 63 }; 64 #endif 65 66 }} 67 68 #ifdef BOOST_HAS_ABI_HEADERS 69 # include BOOST_ABI_SUFFIX 70 #endif 71 72 #endif // BOOST_CONTEXT_STACK_CONTEXT_H 73