1//===-- asan_mapping_myriad.h -----------------------------------*- C++ -*-===//
2//
3// This file is distributed under the University of Illinois Open Source
4// License. See LICENSE.TXT for details.
5//
6//===----------------------------------------------------------------------===//
7//
8// This file is a part of AddressSanitizer, an address sanity checker.
9//
10// Myriad-specific definitions for ASan memory mapping.
11//===----------------------------------------------------------------------===//
12#ifndef ASAN_MAPPING_MYRIAD_H
13#define ASAN_MAPPING_MYRIAD_H
14
15#define RAW_ADDR(mem) ((mem) & ~kMyriadCacheBitMask32)
16#define MEM_TO_SHADOW(mem) \
17  (((RAW_ADDR(mem) - kLowMemBeg) >> SHADOW_SCALE) + (SHADOW_OFFSET))
18
19#define kLowMemBeg     kMyriadMemoryOffset32
20#define kLowMemEnd     (SHADOW_OFFSET - 1)
21
22#define kLowShadowBeg  SHADOW_OFFSET
23#define kLowShadowEnd  MEM_TO_SHADOW(kLowMemEnd)
24
25#define kHighMemBeg    0
26
27#define kHighShadowBeg 0
28#define kHighShadowEnd 0
29
30#define kMidShadowBeg  0
31#define kMidShadowEnd  0
32
33#define kShadowGapBeg  (kLowShadowEnd + 1)
34#define kShadowGapEnd  kMyriadMemoryEnd32
35
36#define kShadowGap2Beg 0
37#define kShadowGap2End 0
38
39#define kShadowGap3Beg 0
40#define kShadowGap3End 0
41
42namespace __asan {
43
44static inline bool AddrIsInLowMem(uptr a) {
45  PROFILE_ASAN_MAPPING();
46  a = RAW_ADDR(a);
47  return a >= kLowMemBeg && a <= kLowMemEnd;
48}
49
50static inline bool AddrIsInLowShadow(uptr a) {
51  PROFILE_ASAN_MAPPING();
52  a = RAW_ADDR(a);
53  return a >= kLowShadowBeg && a <= kLowShadowEnd;
54}
55
56static inline bool AddrIsInMidMem(uptr a) {
57  PROFILE_ASAN_MAPPING();
58  return false;
59}
60
61static inline bool AddrIsInMidShadow(uptr a) {
62  PROFILE_ASAN_MAPPING();
63  return false;
64}
65
66static inline bool AddrIsInHighMem(uptr a) {
67  PROFILE_ASAN_MAPPING();
68  return false;
69}
70
71static inline bool AddrIsInHighShadow(uptr a) {
72  PROFILE_ASAN_MAPPING();
73  return false;
74}
75
76static inline bool AddrIsInShadowGap(uptr a) {
77  PROFILE_ASAN_MAPPING();
78  a = RAW_ADDR(a);
79  return a >= kShadowGapBeg && a <= kShadowGapEnd;
80}
81
82}  // namespace __asan
83
84#endif  // ASAN_MAPPING_MYRIAD_H
85