sketchbook
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
msan_interface.h
Go to the documentation of this file.
1 //===-- msan_interface.h --------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file is a part of MemorySanitizer.
11 //
12 // Public interface header.
13 //===----------------------------------------------------------------------===//
14 #ifndef MSAN_INTERFACE_H
15 #define MSAN_INTERFACE_H
16 
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22  /* Set raw origin for the memory range. */
23  void __msan_set_origin(const volatile void *a, size_t size, uint32_t origin);
24 
25  /* Get raw origin for an address. */
26  uint32_t __msan_get_origin(const volatile void *a);
27 
28  /* Test that this_id is a descendant of prev_id (or they are simply equal).
29  * "descendant" here means they are part of the same chain, created with
30  * __msan_chain_origin. */
31  int __msan_origin_is_descendant_or_same(uint32_t this_id, uint32_t prev_id);
32 
33  /* Returns non-zero if tracking origins. */
35 
36  /* Returns the origin id of the latest UMR in the calling thread. */
37  uint32_t __msan_get_umr_origin();
38 
39  /* Make memory region fully initialized (without changing its contents). */
40  void __msan_unpoison(const volatile void *a, size_t size);
41 
42  /* Make a null-terminated string fully initialized (without changing its
43  contents). */
44  void __msan_unpoison_string(const volatile char *a);
45 
46  /* Make memory region fully uninitialized (without changing its contents).
47  This is a legacy interface that does not update origin information. Use
48  __msan_allocated_memory() instead. */
49  void __msan_poison(const volatile void *a, size_t size);
50 
51  /* Make memory region partially uninitialized (without changing its contents).
52  */
53  void __msan_partial_poison(const volatile void *data, void *shadow,
54  size_t size);
55 
56  /* Returns the offset of the first (at least partially) poisoned byte in the
57  memory range, or -1 if the whole range is good. */
58  intptr_t __msan_test_shadow(const volatile void *x, size_t size);
59 
60  /* Checks that memory range is fully initialized, and reports an error if it
61  * is not. */
62  void __msan_check_mem_is_initialized(const volatile void *x, size_t size);
63 
64  /* For testing:
65  __msan_set_expect_umr(1);
66  ... some buggy code ...
67  __msan_set_expect_umr(0);
68  The last line will verify that a UMR happened. */
69  void __msan_set_expect_umr(int expect_umr);
70 
71  /* Change the value of keep_going flag. Non-zero value means don't terminate
72  program execution when an error is detected. This will not affect error in
73  modules that were compiled without the corresponding compiler flag. */
74  void __msan_set_keep_going(int keep_going);
75 
76  /* Print shadow and origin for the memory range to stderr in a human-readable
77  format. */
78  void __msan_print_shadow(const volatile void *x, size_t size);
79 
80  /* Print shadow for the memory range to stderr in a minimalistic
81  human-readable format. */
82  void __msan_dump_shadow(const volatile void *x, size_t size);
83 
84  /* Returns true if running under a dynamic tool (DynamoRio-based). */
86 
87  /* Tell MSan about newly allocated memory (ex.: custom allocator).
88  Memory will be marked uninitialized, with origin at the call site. */
89  void __msan_allocated_memory(const volatile void* data, size_t size);
90 
91  /* Tell MSan about newly destroyed memory. Mark memory as uninitialized. */
92  void __sanitizer_dtor_callback(const volatile void* data, size_t size);
93 
94  /* This function may be optionally provided by user and should return
95  a string containing Msan runtime options. See msan_flags.h for details. */
96  const char* __msan_default_options();
97 
98  /* Deprecated. Call __sanitizer_set_death_callback instead. */
99  void __msan_set_death_callback(void (*callback)(void));
100 
101  /* Update shadow for the application copy of size bytes from src to dst.
102  Src and dst are application addresses. This function does not copy the
103  actual application memory, it only updates shadow and origin for such
104  copy. Source and destination regions can overlap. */
105  void __msan_copy_shadow(const volatile void *dst, const volatile void *src,
106  size_t size);
107 #ifdef __cplusplus
108 } // extern "C"
109 #endif
110 
111 #endif
void __msan_copy_shadow(const volatile void *dst, const volatile void *src, size_t size)
int __msan_has_dynamic_component()
void __msan_set_death_callback(void(*callback)(void))
void __msan_unpoison(const volatile void *a, size_t size)
void __sanitizer_dtor_callback(const volatile void *data, size_t size)
uint32_t __msan_get_origin(const volatile void *a)
uint32_t __msan_get_umr_origin()
void __msan_check_mem_is_initialized(const volatile void *x, size_t size)
void __msan_unpoison_string(const volatile char *a)
void __msan_allocated_memory(const volatile void *data, size_t size)
tuple size
Definition: unpack-test.py:15
void __msan_dump_shadow(const volatile void *x, size_t size)
tuple data
Definition: ser-mon-AS7265X.py:40
int __msan_origin_is_descendant_or_same(uint32_t this_id, uint32_t prev_id)
void __msan_set_keep_going(int keep_going)
intptr_t __msan_test_shadow(const volatile void *x, size_t size)
void __msan_print_shadow(const volatile void *x, size_t size)
int __msan_get_track_origins()
void __msan_set_origin(const volatile void *a, size_t size, uint32_t origin)
void __msan_set_expect_umr(int expect_umr)
void __msan_partial_poison(const volatile void *data, void *shadow, size_t size)
void __msan_poison(const volatile void *a, size_t size)
const char * __msan_default_options()