Example: modptr4a.c

up: index
prev: modptr4.c
next: modptr5.c

    #include <stdint.h>
    #include <inttypes.h>
    #include <stdio.h>
    #include "capprint.h"
    
    union ptr
    {
        int *ptr;
        uintptr_t iptr;
    };
    
    int main()
    {
        int arr[] = {42,43};
        union ptr x;
    
        x.ptr = arr;
    
        fprintf(stderr, "Original:\t%" PTR_FMT ", %" PTR_FMT "\n", sptr((void*)x.ptr), sptr((void*)x.iptr));
    
        x.ptr++;
        fprintf(stderr, "Modified:\t%" PTR_FMT ", %" PTR_FMT "\n", sptr((void*)x.ptr), sptr((void*)x.iptr));
        
        fprintf(stderr,"Value %d\n", *x.ptr);
    }

Experimental data (what does this mean?)

cerberus-cheri-no-pnvi
cerberus-cheri-revocation-no-pnvi
cerberus-cheri-cornucopia-no-pnvi
 Original: (@disabled, 0xffffe6fc [rwRW,0xffffe6fc-0xffffe704]), (@disabled, 0xffffe6fc [rwRW,0xffffe6fc-0xffffe704])
Modified: (@disabled, 0xffffe700 [rwRW,0xffffe6fc-0xffffe704]), (@disabled, 0xffffe700 [rwRW,0xffffe6fc-0xffffe704])
Value 43
 
cerberus-cheri
cerberus-cheri-revocation
cerberus-cheri-cornucopia
 Original: (@82, 0xffffe6fc [rwRW,0xffffe6fc-0xffffe704]), (@82, 0xffffe6fc [rwRW,0xffffe6fc-0xffffe704])
Modified: (@82, 0xffffe700 [rwRW,0xffffe6fc-0xffffe704]), (@82, 0xffffe700 [rwRW,0xffffe6fc-0xffffe704])
Value 43
 
clang-riscv-O3-bounds-conservative
clang-riscv-O3-bounds-subobject-safe
 Original: 0x3fffdfff18 [rwRW,0x3fffdfff18-0x3fffdfff20], 0x3fffdfff18 [rwRW,0x3fffdfff18-0x3fffdfff20]
Modified: 0x3fffdfff1c [rwRW,0x3fffdfff18-0x3fffdfff20], 0x3fffdfff1c [rwRW,0x3fffdfff18-0x3fffdfff20]
Value 43
 
clang-riscv-O0-bounds-conservative
clang-riscv-O0-bounds-references-only
clang-riscv-O0-bounds-subobject-safe
clang-riscv-O0-bounds-aggressive
clang-riscv-O0-bounds-very-aggressive
clang-riscv-O0-bounds-everywhere-unsafe
 Original: 0x3fffdfff68 [rwRW,0x3fffdfff68-0x3fffdfff70], 0x3fffdfff68 [rwRW,0x3fffdfff68-0x3fffdfff70]
Modified: 0x3fffdfff6c [rwRW,0x3fffdfff68-0x3fffdfff70], 0x3fffdfff6c [rwRW,0x3fffdfff68-0x3fffdfff70]
Value 43
 
clang-morello-O3-bounds-subobject-safe Original: 0xfffffff7fee8 [rwRW,0xfffffff7fee8-0xfffffff7fef0], 0xfffffff7fee8 [rwRW,0xfffffff7fee8-0xfffffff7fef0]
Modified: 0xfffffff7feec [rwRW,0xfffffff7fee8-0xfffffff7fef0], 0xfffffff7feec [rwRW,0xfffffff7fee8-0xfffffff7fef0]
Value 43
 
clang-morello-O3-bounds-conservative Original: 0xfffffff7ff08 [rwRW,0xfffffff7ff08-0xfffffff7ff10], 0xfffffff7ff08 [rwRW,0xfffffff7ff08-0xfffffff7ff10]
Modified: 0xfffffff7ff0c [rwRW,0xfffffff7ff08-0xfffffff7ff10], 0xfffffff7ff0c [rwRW,0xfffffff7ff08-0xfffffff7ff10]
Value 43
 
clang-morello-O0-bounds-conservative
clang-morello-O0-bounds-references-only
clang-morello-O0-bounds-subobject-safe
clang-morello-O0-bounds-aggressive
clang-morello-O0-bounds-very-aggressive
clang-morello-O0-bounds-everywhere-unsafe
 Original: 0xfffffff7ff58 [rwRW,0xfffffff7ff58-0xfffffff7ff60], 0xfffffff7ff58 [rwRW,0xfffffff7ff58-0xfffffff7ff60]
Modified: 0xfffffff7ff5c [rwRW,0xfffffff7ff58-0xfffffff7ff60], 0xfffffff7ff5c [rwRW,0xfffffff7ff58-0xfffffff7ff60]
Value 43
 
gcc-morello-O0
gcc-morello-O3
 Original: 0x7fffffd8 [rwRW,0x7fffffd8-0x7fffffe0], 0x7fffffd8 [rwRW,0x7fffffd8-0x7fffffe0]
Modified: 0x7fffffdc [rwRW,0x7fffffd8-0x7fffffe0], 0x7fffffdc [rwRW,0x7fffffd8-0x7fffffe0]
Value 43