|  | #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); | 
|  | } | 
|  | } |