Example: ghost1.c

up: index
prev: prov2a.c
next: ghost2.c

    #include <stdio.h>
    #include <cheriintrin.h>
    #include "capprint.h"
    
    int main(void)
    {
        int x;
        int *px0 = &x;
        
        fprintf(stderr,"Original px0: %" PTR_FMT "\n", sptr((void*)px0));
        int *px1 = cheri_tag_clear(px0);
        fprintf(stderr,"Original px1: %" PTR_FMT "\n", sptr((void*)px1));
        unsigned char *p0 = (unsigned char*) &px0; p0[0] = 42;
        unsigned char *p1 = (unsigned char*) &px1; p1[0] = 42;
        fprintf(stderr,"Modified px0: %" PTR_FMT "\n", sptr((void*)px0));
        fprintf(stderr,"Modified px1: %" PTR_FMT "\n", sptr((void*)px1));
    }

Experimental data (what does this mean?)

cerberus-cheri-no-pnvi
cerberus-cheri-revocation-no-pnvi
cerberus-cheri-cornucopia-no-pnvi
 Original px0: (@disabled, 0xffffe6e0 [rwRW,0xffffe6e0-0xffffe6e4])
Original px1: (@disabled, 0xffffe6e0 [rwRW,0xffffe6e0-0xffffe6e4] (invalid))
Modified px0: (@disabled, 0xffffe62a [rwRW,0xffffe6e0-0xffffe6e4] (notag))
Modified px1: (@disabled, 0xffffe62a [rwRW,0xffffe6e0-0xffffe6e4] (invalid))
 
cerberus-cheri
cerberus-cheri-revocation
cerberus-cheri-cornucopia
 Original px0: (@83, 0xffffe6e0 [rwRW,0xffffe6e0-0xffffe6e4])
Original px1: (@83, 0xffffe6e0 [rwRW,0xffffe6e0-0xffffe6e4] (invalid))
Modified px0: (@empty, 0xffffe62a [rwRW,0xffffe6e0-0xffffe6e4] (notag))
Modified px1: (@empty, 0xffffe62a [rwRW,0xffffe6e0-0xffffe6e4] (invalid))
 
clang-riscv-O3-bounds-conservative
clang-riscv-O3-bounds-subobject-safe
 Original px0: 0x3fffdfff2c [rwRW,0x3fffdfff2c-0x3fffdfff30]
Original px1: 0x3fffdfff2c [rwRW,0x3fffdfff2c-0x3fffdfff30] (invalid)
Modified px0: 0x3fffdfff2a [rwRW,0x3fffdfff2c-0x3fffdfff30] (invalid)
Modified px1: 0x3fffdfff2a [rwRW,0x3fffdfff2c-0x3fffdfff30] (invalid)
 
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 px0: 0x3fffdfff6c [rwRW,0x3fffdfff6c-0x3fffdfff70]
Original px1: 0x3fffdfff6c [rwRW,0x3fffdfff6c-0x3fffdfff70] (invalid)
Modified px0: 0x3fffdfff2a [rwRW,0x3fffdfff6c-0x3fffdfff70] (invalid)
Modified px1: 0x3fffdfff2a [rwRW,0x3fffdfff6c-0x3fffdfff70] (invalid)
 
clang-morello-O3-bounds-subobject-safe Original px0: 0xfffffff7fefc [rwRW,0xfffffff7fefc-0xfffffff7ff00]
Original px1: 0xfffffff7fefc [rwRW,0xfffffff7fefc-0xfffffff7ff00] (invalid)
Modified px0: 0xfffffff7fe2a [rwRW,0xfffffff7fefc-0xfffffff7ff00] (invalid)
Modified px1: 0xfffffff7fe2a [rwRW,0xfffffff7fefc-0xfffffff7ff00] (invalid)
 
clang-morello-O0-bounds-subobject-safe
clang-morello-O0-bounds-aggressive
clang-morello-O0-bounds-very-aggressive
clang-morello-O0-bounds-everywhere-unsafe
 Original px0: 0xfffffff7ff4c [rwRW,0xfffffff7ff4c-0xfffffff7ff50]
Original px1: 0xfffffff7ff4c [rwRW,0xfffffff7ff4c-0xfffffff7ff50] (invalid)
Modified px0: 0xfffffff7ff2a [rwRW,0xfffffff7ff4c-0xfffffff7ff50] (invalid)
Modified px1: 0xfffffff7ff2a [rwRW,0xfffffff7ff4c-0xfffffff7ff50] (invalid)
 
clang-morello-O3-bounds-conservative Original px0: 0xfffffff7ff1c [rwRW,0xfffffff7ff1c-0xfffffff7ff20]
Original px1: 0xfffffff7ff1c [rwRW,0xfffffff7ff1c-0xfffffff7ff20] (invalid)
Modified px0: 0xfffffff7ff2a [rwRW,0xfffffff7ff1c-0xfffffff7ff20] (invalid)
Modified px1: 0xfffffff7ff2a [rwRW,0xfffffff7ff1c-0xfffffff7ff20] (invalid)
 
clang-morello-O0-bounds-conservative
clang-morello-O0-bounds-references-only
 Original px0: 0xfffffff7ff5c [rwRW,0xfffffff7ff5c-0xfffffff7ff60]
Original px1: 0xfffffff7ff5c [rwRW,0xfffffff7ff5c-0xfffffff7ff60] (invalid)
Modified px0: 0xfffffff7ff2a [rwRW,0xfffffff7ff5c-0xfffffff7ff60] (invalid)
Modified px1: 0xfffffff7ff2a [rwRW,0xfffffff7ff5c-0xfffffff7ff60] (invalid)
 
gcc-morello-O3 Original px0: 0x7fffffdc [rwRW,0x7fffffdc-0x7fffffe0]
Original px1: 0x7fffffdc [rwRW,0x7fffffdc-0x7fffffe0] (invalid)
Modified px0: 0x7fffff2a [rwRW,0x7fffffdc-0x7fffffe0] (invalid)
Modified px1: 0x7fffff2a [rwRW,0x7fffffdc-0x7fffffe0] (invalid)
 
gcc-morello-O0 Original px0: 0x7fffffbc [rwRW,0x7fffffbc-0x7fffffc0]
Original px1: 0x7fffffbc [rwRW,0x7fffffbc-0x7fffffc0] (invalid)
Modified px0: 0x7fffff2a [rwRW,0x7fffffbc-0x7fffffc0] (invalid)
Modified px1: 0x7fffff2a [rwRW,0x7fffffbc-0x7fffffc0] (invalid)