llvm-project

Форк
0
77 строк · 2.8 Кб
1
// RUN: %clang_dfsan -gmlt -DTEST64 -DALIGN=8 -mllvm -dfsan-track-origins=1 %s -o %t && \
2
// RUN:     %run %t >%t.out 2>&1
3
// RUN: FileCheck %s < %t.out
4
//
5
// RUN: %clang_dfsan -gmlt -DTEST32 -DALIGN=4 -mllvm -dfsan-track-origins=1 %s -o %t && \
6
// RUN:     %run %t >%t.out 2>&1
7
// RUN: FileCheck %s < %t.out
8
//
9
// RUN: %clang_dfsan -gmlt -DALIGN=2 -mllvm -dfsan-track-origins=1 %s -o %t && \
10
// RUN:     %run %t >%t.out 2>&1
11
// RUN: FileCheck %s < %t.out
12
//
13
// RUN: %clang_dfsan -gmlt -DTEST64 -DALIGN=4 -mllvm -dfsan-track-origins=1 %s -o %t && \
14
// RUN:     %run %t >%t.out 2>&1
15
// RUN: FileCheck %s < %t.out
16
//
17
// RUN: %clang_dfsan -gmlt -DTEST32 -DALIGN=2 -mllvm -dfsan-track-origins=1 %s -o %t && \
18
// RUN:     %run %t >%t.out 2>&1
19
// RUN: FileCheck %s < %t.out
20
//
21
// RUN: %clang_dfsan -gmlt -DALIGN=1 -mllvm -dfsan-track-origins=1 %s -o %t && \
22
// RUN:     %run %t >%t.out 2>&1
23
// RUN: FileCheck %s < %t.out
24
//
25
// Test origin tracking is accurate in terms of partial store/load, and
26
// different aligments. Do not test alignments that are not power of 2.
27
// Compilers do not always allow this.
28

29
#include <sanitizer/dfsan_interface.h>
30

31
#ifdef TEST64
32
typedef uint64_t FULL_TYPE;
33
typedef uint32_t HALF_TYPE;
34
#elif defined(TEST32)
35
typedef uint32_t FULL_TYPE;
36
typedef uint16_t HALF_TYPE;
37
#else
38
typedef uint16_t FULL_TYPE;
39
typedef uint8_t HALF_TYPE;
40
#endif
41

42
__attribute__((noinline)) FULL_TYPE foo(FULL_TYPE a, FULL_TYPE b) { return a + b; }
43

44
int main(int argc, char *argv[]) {
45
  char x __attribute__((aligned(ALIGN))) = 1, y = 2;
46
  dfsan_set_label(8, &x, sizeof(x));
47
  char z __attribute__((aligned(ALIGN))) = x + y;
48
  dfsan_print_origin_trace(&z, NULL);
49

50
  FULL_TYPE a __attribute__((aligned(ALIGN))) = 1;
51
  FULL_TYPE b = 10;
52
  dfsan_set_label(4, (HALF_TYPE *)&a + 1, sizeof(HALF_TYPE));
53
  FULL_TYPE c __attribute__((aligned(ALIGN))) = foo(a, b);
54
  dfsan_print_origin_trace(&c, NULL);
55
  dfsan_print_origin_trace((HALF_TYPE *)&c + 1, NULL);
56
}
57

58
// CHECK: Taint value 0x8 {{.*}} origin tracking ()
59
// CHECK: Origin value: {{.*}}, Taint value was stored to memory at
60
// CHECK: #0 {{.*}} in main {{.*}}origin_ldst.c:[[@LINE-13]]
61

62
// CHECK: Origin value: {{.*}}, Taint value was created at
63
// CHECK: #0 {{.*}} in main {{.*}}origin_ldst.c:[[@LINE-17]]
64

65
// CHECK: Taint value 0x4 {{.*}} origin tracking ()
66
// CHECK: Origin value: {{.*}}, Taint value was stored to memory at
67
// CHECK: #0 {{.*}} in main {{.*}}origin_ldst.c:[[@LINE-14]]
68

69
// CHECK: Origin value: {{.*}}, Taint value was created at
70
// CHECK: #0 {{.*}} in main {{.*}}origin_ldst.c:[[@LINE-18]]
71

72
// CHECK: Taint value 0x4 {{.*}} origin tracking ()
73
// CHECK: Origin value: {{.*}}, Taint value was stored to memory at
74
// CHECK: #0 {{.*}} in main {{.*}}origin_ldst.c:[[@LINE-21]]
75

76
// CHECK: Origin value: {{.*}}, Taint value was created at
77
// CHECK: #0 {{.*}} in main {{.*}}origin_ldst.c:[[@LINE-25]]
78

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.