From db38b9d368fbe561ed1ac79564b08857d6451841 Mon Sep 17 00:00:00 2001 From: q66 Date: Mon, 28 Jan 2019 01:58:13 +0100 Subject: [PATCH] adjustments for platforms with 64k page size --- src/posix/context_stack.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/posix/context_stack.cc b/src/posix/context_stack.cc index b9dd914..901739c 100644 --- a/src/posix/context_stack.cc +++ b/src/posix/context_stack.cc @@ -102,8 +102,10 @@ OSTD_EXPORT std::size_t stack_traits::page_size() noexcept { } OSTD_EXPORT std::size_t stack_traits::minimum_size() noexcept { - /* typically 8 KiB but can be much larger on some platforms */ - return SIGSTKSZ; + /* always at least 2 pages, typically 8k on x86_64, but for + * example on ppc64 this will be 128k because 64k page size + */ + return std::max(std::size_t(SIGSTKSZ), 2 * page_size()); } OSTD_EXPORT std::size_t stack_traits::maximum_size() noexcept { @@ -112,8 +114,8 @@ OSTD_EXPORT std::size_t stack_traits::maximum_size() noexcept { } OSTD_EXPORT std::size_t stack_traits::default_size() noexcept { - /* default to at least 64 KiB (see minimum_size comment) */ - constexpr std::size_t r = std::max(8 * 8 * 1024, SIGSTKSZ); + /* at least 64k unless minimum is bigger (typically 64k page platforms) */ + std::size_t r = std::max(std::size_t(8 * 8 * 1024), minimum_size()); if (is_unbounded()) { return r; }