| #ifndef RUST_STACK_H |
| #define RUST_STACK_H |
| |
| #include "rust_globals.h" |
| #include "memory_region.h" |
| |
| struct rust_task; |
| |
| struct stk_seg { |
| stk_seg *prev; |
| stk_seg *next; |
| uintptr_t end; |
| unsigned int valgrind_id; |
| #ifndef _LP64 |
| uint32_t pad; |
| #endif |
| |
| rust_task *task; |
| uintptr_t canary; |
| |
| uint8_t data[]; |
| }; |
| |
| stk_seg * |
| create_stack(memory_region *region, size_t sz); |
| |
| void |
| destroy_stack(memory_region *region, stk_seg *stk); |
| |
| // Must be called before each time a stack is reused to tell valgrind |
| // that the stack is accessible. |
| void |
| reuse_valgrind_stack(stk_seg *stk, uint8_t *sp); |
| |
| // Run a sanity check |
| void |
| check_stack_canary(stk_seg *stk); |
| |
| #endif /* RUST_STACK_H */ |