serenity/AK/StackInfo.h
Andrew Kaster 7d71acf1bb AK: Use __builtin_frame_address to find current stack depth remaining
Instead of checking the address of a temporary, grab the address of the
current frame pointer to determine how much memory is left on the stack.

This better communicates to the compiler what we're trying to do, and
resolves some crashes with ASAN in test-js while the option
detect_stack_use_after_return is turned on.
2023-07-01 07:03:11 +02:00

36 lines
593 B
C++

/*
* Copyright (c) 2020, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Types.h>
namespace AK {
class StackInfo {
public:
StackInfo();
FlatPtr base() const { return m_base; }
FlatPtr top() const { return m_top; }
size_t size() const { return m_size; }
size_t size_free() const
{
auto p = reinterpret_cast<FlatPtr>(__builtin_frame_address(0));
return p - m_base;
}
private:
FlatPtr m_base;
FlatPtr m_top;
size_t m_size;
};
}
#if USING_AK_GLOBALLY
using AK::StackInfo;
#endif