File tree Expand file tree Collapse file tree 2 files changed +48
-0
lines changed Expand file tree Collapse file tree 2 files changed +48
-0
lines changed Original file line number Diff line number Diff line change @@ -35,9 +35,15 @@ SANITIZER_INTERFACE_ATTRIBUTE void __memprof_version_mismatch_check_v1();
35
35
SANITIZER_INTERFACE_ATTRIBUTE
36
36
void __memprof_record_access (void const volatile *addr);
37
37
38
+ SANITIZER_INTERFACE_ATTRIBUTE
39
+ void __memprof_record_access_hist (void const volatile *addr);
40
+
38
41
SANITIZER_INTERFACE_ATTRIBUTE
39
42
void __memprof_record_access_range (void const volatile *addr, uptr size);
40
43
44
+ SANITIZER_INTERFACE_ATTRIBUTE
45
+ void __memprof_record_access_range_hist (void const volatile *addr, uptr size);
46
+
41
47
SANITIZER_INTERFACE_ATTRIBUTE void __memprof_print_accumulated_stats ();
42
48
43
49
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE extern char
@@ -51,6 +57,10 @@ extern uptr __memprof_shadow_memory_dynamic_address;
51
57
52
58
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE extern char
53
59
__memprof_profile_filename[1 ];
60
+
61
+ SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE extern bool
62
+ __memprof_histogram;
63
+
54
64
SANITIZER_INTERFACE_ATTRIBUTE int __memprof_profile_dump ();
55
65
SANITIZER_INTERFACE_ATTRIBUTE void __memprof_profile_reset ();
56
66
Original file line number Diff line number Diff line change
1
+ // Test the histogram support in memprof using the text format output.
2
+ // Shadow memory counters per object are limited to 8b. In memory counters
3
+ // aggregating counts across multiple objects are 64b.
4
+
5
+ // RUN: %clangxx_memprof -O0 -mllvm -memprof-histogram -mllvm -memprof-use-callbacks=true %s -o %t
6
+ // RUN: %env_memprof_opts=print_text=1:histogram=1:log_path=stdout %run %t 2>&1 | FileCheck %s
7
+
8
+ #include < stdio.h>
9
+ #include < stdlib.h>
10
+
11
+ int main () {
12
+ // Allocate memory that will create a histogram
13
+ char *buffer = (char *)malloc (1024 );
14
+ if (!buffer)
15
+ return 1 ;
16
+
17
+ for (int i = 0 ; i < 10 ; ++i) {
18
+ // Access every 8th byte (since shadow granularity is 8b.
19
+ buffer[i * 8 ] = ' A' ;
20
+ }
21
+
22
+ for (int j = 0 ; j < 200 ; ++j) {
23
+ buffer[8 ] = ' B' ; // Count = previous count + 200
24
+ }
25
+
26
+ for (int j = 0 ; j < 400 ; ++j) {
27
+ buffer[16 ] = ' B' ; // Count is saturated at 255
28
+ }
29
+
30
+ // Free the memory to trigger MIB creation with histogram
31
+ free (buffer);
32
+
33
+ printf (" Test completed successfully\n " );
34
+ return 0 ;
35
+ }
36
+
37
+ // CHECK: AccessCountHistogram[128]: 1 201 255 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
38
+ // CHECK: Test completed successfully
You can’t perform that action at this time.
0 commit comments