blob: 81f949e3019ec1ca12ba104cac138a5decfe4e44 [file] [log] [blame]
Peter Collingbournefa9f5ae2013-08-12 23:51:33 +00001//===-- dfsan.h -------------------------------------------------*- C++ -*-===//
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 DataFlowSanitizer.
11//
12// Private DFSan header.
13//===----------------------------------------------------------------------===//
14
15#ifndef DFSAN_H
16#define DFSAN_H
17
Alexey Samsonovc85d6272013-11-17 09:41:47 +000018#include "sanitizer_common/sanitizer_internal_defs.h"
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080019#include "dfsan_platform.h"
Alexey Samsonovc85d6272013-11-17 09:41:47 +000020
21// Copy declarations from public sanitizer/dfsan_interface.h header here.
22typedef u16 dfsan_label;
23
24struct dfsan_label_info {
25 dfsan_label l1;
26 dfsan_label l2;
27 const char *desc;
28 void *userdata;
29};
30
31extern "C" {
Stephen Hines6a211c52014-07-21 00:49:56 -070032void dfsan_add_label(dfsan_label label, void *addr, uptr size);
Alexey Samsonovc85d6272013-11-17 09:41:47 +000033void dfsan_set_label(dfsan_label label, void *addr, uptr size);
34dfsan_label dfsan_read_label(const void *addr, uptr size);
35dfsan_label dfsan_union(dfsan_label l1, dfsan_label l2);
36} // extern "C"
37
38template <typename T>
39void dfsan_set_label(dfsan_label label, T &data) { // NOLINT
40 dfsan_set_label(label, (void *)&data, sizeof(T));
41}
Peter Collingbournefa9f5ae2013-08-12 23:51:33 +000042
43namespace __dfsan {
44
Peter Collingbourne6e4c46d2013-08-15 21:18:53 +000045void InitializeInterceptors();
46
Peter Collingbournefa9f5ae2013-08-12 23:51:33 +000047inline dfsan_label *shadow_for(void *ptr) {
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080048 return (dfsan_label *) ((((uptr) ptr) & ShadowMask()) << 1);
Peter Collingbournefa9f5ae2013-08-12 23:51:33 +000049}
50
51inline const dfsan_label *shadow_for(const void *ptr) {
52 return shadow_for(const_cast<void *>(ptr));
53}
54
Peter Collingbourne78d737c2013-09-10 01:51:35 +000055struct Flags {
Stephen Hines86277eb2015-03-23 12:06:32 -070056#define DFSAN_FLAG(Type, Name, DefaultValue, Description) Type Name;
57#include "dfsan_flags.inc"
58#undef DFSAN_FLAG
59
60 void SetDefaults();
Peter Collingbourne78d737c2013-09-10 01:51:35 +000061};
62
63extern Flags flags_data;
64inline Flags &flags() {
65 return flags_data;
66}
67
Peter Collingbournefa9f5ae2013-08-12 23:51:33 +000068} // namespace __dfsan
69
70#endif // DFSAN_H