diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.c b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.c index 19a21ed60e40265d2d02791aa8f8a11fb4755162..7d627c5348637d92e28d5c739896899a9bf8db55 100644 --- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.c +++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.c @@ -43,6 +43,8 @@ size_t increase_stack_limit(const size_t size) { if (result != 0) { private_abort("setrlimit: %s \n", strerror(errno)); } + } else { + stacksz = rl.rlim_cur; } } else { private_abort("getrlimit: %s \n", strerror(errno)); @@ -50,21 +52,13 @@ size_t increase_stack_limit(const size_t size) { return (size_t)stacksz; } -size_t get_default_stack_size() { +size_t get_stack_size() { struct rlimit rlim; private_assert(!getrlimit(RLIMIT_STACK, &rlim), "Cannot detect program's stack size", NULL); return rlim.rlim_cur; } -size_t get_stack_size() { -#ifndef E_ACSL_STACK_SIZE - return get_default_stack_size(); -#else - return increase_stack_limit(E_ACSL_STACK_SIZE*MB); -#endif -} - uintptr_t get_stack_start(int *argc_ref, char *** argv_ref) { char **env = environ; while (env[1]) diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.h b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.h index 098074488b3b30128e27ddc2892567c6a1fc79a1..b15415383d498ef48e84b392a5e6323cbbac5912 100644 --- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.h +++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.h @@ -134,13 +134,20 @@ static __thread int id_tbss; extern char ** environ; /*! \brief Set a new soft stack limit - * \param size - new stack size in bytes */ + * + * If the new stack size is greater than the max stack size, then set to the max + * stack size. If the new stack size is less than the current stack size, don't + * do anything. + * + * Abort if an error occur when retrieving or setting the stack size. + * + * \param size - new stack size in bytes + * \return the new stack size in bytes. + */ size_t increase_stack_limit(const size_t size); /*! \brief Return byte-size of a program's stack. The return value is the soft * stack limit, i.e., it can be programmatically increased at runtime. */ -size_t get_default_stack_size(); - size_t get_stack_size(); /*! \brief Return greatest (known) address on a program's stack.