#include #include void test() { void *__capability c1; // Set address c1 = (void *__capability)0x80001009; c1 = cheri_bounds_set(c1, 8); } // Add delta value for TLB translation static inline void * __capability add_delta(void * __capability cap, int offset) { void * __capability result; asm volatile ( "cincoffset %0, %1, %2" : "=C" (result) // Output: %0 (result) : "C" (cap), // Input: %1 (original cap) "r" (offset) // Input: %2 (offset register) : // No clobbered registers ); return result; } int main(void) { void *__capability csp1; // Set address csp1 = (void *__capability)0x80001000; // Set bounds csp1 = cheri_bounds_set(csp1, 1); // Increment offset // csp = cheri_offset_increment(csp, 10); csp1 = add_delta(csp1, 10); // uint64_t val = *(uint64_t * __capability)csp1; // uint64_t val = *(uint64_t *__capability)csp1; test(); return 0; }