| #include "../timing.h" |
| #include "callee.h" |
| #include <compartment.h> |
| #include <locks.hh> |
| |
| void __cheri_compartment("caller") run() |
| { |
| printf("#board\tstack_use\tcall\treturn\n"); |
| for (size_t s = 1; s < 0x1000; s <<= 1) |
| { |
| auto [callPath, returnPath] = CHERI::with_interrupts_disabled([&]() { |
| use_stack(s); |
| auto callPath = noop_call(rdcycle()); |
| auto returnPath = noop_return(s); |
| returnPath = rdcycle() - returnPath; |
| check_stack_zeroed(); |
| return std::tuple{callPath, returnPath}; |
| }); |
| printf(__XSTRING(BOARD) "\t%d\t%d\t%d\n", s, callPath, returnPath); |
| } |
| } |