| // RUN: %clangxx_hwasan -DSIZE=16 -O0 %s -o %t && %run %t 2>&1 | FileCheck %s |
| |
| // REQUIRES: stable-runtime |
| |
| #include <assert.h> |
| #include <stdlib.h> |
| #include <sys/mman.h> |
| #include <sanitizer/hwasan_interface.h> |
| |
| int main() { |
| char *alloc = (char *)malloc(4096); |
| |
| // Simulate short granule tags. |
| alloc[15] = 0x00; |
| alloc[31] = 0xbb; |
| alloc[47] = 0xcc; |
| alloc[63] = 0xdd; |
| alloc[79] = 0xee; |
| alloc[95] = 0xff; |
| |
| char *p = alloc; |
| |
| // Write tags to shadow. |
| __hwasan_tag_memory(p, 1, 32); |
| __hwasan_tag_memory(p + 32, 16, 16); |
| __hwasan_tag_memory(p + 48, 0, 32); |
| __hwasan_tag_memory(p + 80, 4, 16); |
| |
| char *q = (char *)__hwasan_tag_pointer(p, 7); |
| __hwasan_print_shadow(q + 5, 89 - 5); |
| // CHECK: HWASan shadow map for {{.*}}5 .. {{.*}}9 (pointer tag 7) |
| // CHECK-NEXT: {{.*}}0: 01(00) |
| // CHECK-NEXT: {{.*}}0: 01(bb) |
| // CHECK-NEXT: {{.*}}0: 10 |
| // CHECK-NEXT: {{.*}}0: 00 |
| // CHECK-NEXT: {{.*}}0: 00 |
| // CHECK-NEXT: {{.*}}0: 04(ff) |
| |
| free(alloc); |
| } |