Files
Toooba/Tests/isa/CPrograms/main.c
2026-05-01 15:47:18 +01:00

104 lines
1.9 KiB
C

// #include <cheriintrin.h>
// #include <stdint.h>
#include <cheriintrin.h>
#include <stdint.h>
#include <stddef.h>
#include "riscv_test.h"
// void free(void *ptr);
// void *malloc(size_t size);
void free(void * __capability ptr);
void * __capability malloc(size_t size);
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 (
// "candperm %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;
// void *__capability base = cheri_ddc_get();
// uintptr_t addr = 0x80001000; // must be valid RAM in your system
// csp1 = cheri_address_set(base, addr);
// csp1 = cheri_bounds_set(csp1, 16);
// csp1 = add_delta(csp1, 15);
// *((char *__capability)csp1) = 'Z';
// char val = *((char *__capability)csp1);
// char val1 = *((char *__capability)csp1);
// if (val != 'Z') {
// while (1);
// }
// return 0;
// }
int main(void) {
int * __capability a = malloc(30);
char * __capability b = malloc(16);
// if (!a || !b) return -1;
a[0] = 1;
a[1] = 'C';
b[0] = 'B';
b[10] = 'D';
// This will fault (out-of-bounds)
// a[20] = 'X';
if (a[0] != 1) {
while (1);
}
if (b[10] != 'D') {
while (1);
}
free(a);
// b = NULL;
// if (b[0] == 'B') {
// while (1);
// }
// char * __capability c = malloc(16);
// if (c[0] != 'B') {
// while (1);
// }
return 0;
}