3#include <libcopp/utils/config/libcopp_build_features.h>
25#ifdef LIBCOPP_MACRO_USE_SEGMENTED_STACKS
27void *__splitstack_makecontext(std::size_t,
void *[LIBCOPP_MACRO_SEGMENTED_STACK_NUMBER], std::size_t *);
29void __splitstack_releasecontext(
void *[LIBCOPP_MACRO_SEGMENTED_STACK_NUMBER]);
31void __splitstack_resetcontext(
void *[LIBCOPP_MACRO_SEGMENTED_STACK_NUMBER]);
33void __splitstack_block_signals_context(
void *[LIBCOPP_MACRO_SEGMENTED_STACK_NUMBER],
int *new_value,
int *old_value);
37#ifdef LIBCOPP_HAS_ABI_HEADERS
38# include LIBCOPP_ABI_PREFIX
41LIBCOPP_COPP_NAMESPACE_BEGIN
47 LIBCOPP_MACRO_NOEXCEPT {}
54 LIBCOPP_MACRO_NOEXCEPT {}
61 std::size_t size) LIBCOPP_MACRO_NOEXCEPT {
62 void *start_ptr = __splitstack_makecontext(size, ctx.segments_ctx, &ctx.size);
69 ctx.sp =
static_cast<char *
>(start_ptr) + ctx.size;
72 __splitstack_block_signals_context(ctx.segments_ctx, &off, 0);
76 __splitstack_releasecontext(ctx.segments_ctx);
79LIBCOPP_COPP_NAMESPACE_END
81#ifdef LIBCOPP_HAS_ABI_HEADERS
82# include LIBCOPP_ABI_SUFFIX
memory allocator this allocator will create buffer using gcc split segment api
void allocate(stack_context &, std::size_t) LIBCOPP_MACRO_NOEXCEPT
~stack_allocator_split_segment()
void deallocate(stack_context &) LIBCOPP_MACRO_NOEXCEPT
stack_allocator_split_segment & operator=(const stack_allocator_split_segment &other) LIBCOPP_MACRO_NOEXCEPT
stack_allocator_split_segment() LIBCOPP_MACRO_NOEXCEPT