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)
7 #include "boost/context/stack_traits.hpp"
11 #include <sys/resource.h>
16 //#if _POSIX_C_SOURCE >= 200112L
21 #include <boost/assert.hpp>
22 #include <boost/config.hpp>
24 #if !defined (SIGSTKSZ)
25 # define SIGSTKSZ (32768) // 32kb minimum allowable stack
26 # define UDEF_SIGSTKSZ
29 #if !defined (MINSIGSTKSZ)
30 # define MINSIGSTKSZ (131072) // 128kb recommended stack size
31 # define UDEF_MINSIGSTKSZ
34 #ifdef BOOST_HAS_ABI_HEADERS
35 # include BOOST_ABI_PREFIX
40 std::size_t pagesize() BOOST_NOEXCEPT_OR_NOTHROW
{
41 // conform to POSIX.1-2001
42 return ::sysconf( _SC_PAGESIZE
);
45 rlim_t
stacksize_limit_() BOOST_NOEXCEPT_OR_NOTHROW
{
47 // conforming to POSIX.1-2001
48 ::getrlimit( RLIMIT_STACK
, & limit
);
49 return limit
.rlim_max
;
52 rlim_t
stacksize_limit() BOOST_NOEXCEPT_OR_NOTHROW
{
53 static rlim_t limit
= stacksize_limit_();
63 stack_traits::is_unbounded() BOOST_NOEXCEPT_OR_NOTHROW
{
64 return RLIM_INFINITY
== stacksize_limit();
68 stack_traits::page_size() BOOST_NOEXCEPT_OR_NOTHROW
{
69 static std::size_t size
= pagesize();
74 stack_traits::default_size() BOOST_NOEXCEPT_OR_NOTHROW
{
79 stack_traits::minimum_size() BOOST_NOEXCEPT_OR_NOTHROW
{
84 stack_traits::maximum_size() BOOST_NOEXCEPT_OR_NOTHROW
{
85 BOOST_ASSERT( ! is_unbounded() );
86 return static_cast< std::size_t >( stacksize_limit() );
91 #ifdef BOOST_HAS_ABI_HEADERS
92 # include BOOST_ABI_SUFFIX
99 #ifdef UDEF_MINSIGSTKSZ