1336817Sdim//===-- asan_mapping_myriad.h -----------------------------------*- C++ -*-===//
2336817Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6336817Sdim//
7336817Sdim//===----------------------------------------------------------------------===//
8336817Sdim//
9336817Sdim// This file is a part of AddressSanitizer, an address sanity checker.
10336817Sdim//
11336817Sdim// Myriad-specific definitions for ASan memory mapping.
12336817Sdim//===----------------------------------------------------------------------===//
13336817Sdim#ifndef ASAN_MAPPING_MYRIAD_H
14336817Sdim#define ASAN_MAPPING_MYRIAD_H
15336817Sdim
16336817Sdim#define RAW_ADDR(mem) ((mem) & ~kMyriadCacheBitMask32)
17336817Sdim#define MEM_TO_SHADOW(mem) \
18336817Sdim  (((RAW_ADDR(mem) - kLowMemBeg) >> SHADOW_SCALE) + (SHADOW_OFFSET))
19336817Sdim
20336817Sdim#define kLowMemBeg     kMyriadMemoryOffset32
21336817Sdim#define kLowMemEnd     (SHADOW_OFFSET - 1)
22336817Sdim
23336817Sdim#define kLowShadowBeg  SHADOW_OFFSET
24336817Sdim#define kLowShadowEnd  MEM_TO_SHADOW(kLowMemEnd)
25336817Sdim
26336817Sdim#define kHighMemBeg    0
27336817Sdim
28336817Sdim#define kHighShadowBeg 0
29336817Sdim#define kHighShadowEnd 0
30336817Sdim
31336817Sdim#define kMidShadowBeg  0
32336817Sdim#define kMidShadowEnd  0
33336817Sdim
34336817Sdim#define kShadowGapBeg  (kLowShadowEnd + 1)
35336817Sdim#define kShadowGapEnd  kMyriadMemoryEnd32
36336817Sdim
37336817Sdim#define kShadowGap2Beg 0
38336817Sdim#define kShadowGap2End 0
39336817Sdim
40336817Sdim#define kShadowGap3Beg 0
41336817Sdim#define kShadowGap3End 0
42336817Sdim
43336817Sdimnamespace __asan {
44336817Sdim
45336817Sdimstatic inline bool AddrIsInLowMem(uptr a) {
46336817Sdim  PROFILE_ASAN_MAPPING();
47336817Sdim  a = RAW_ADDR(a);
48336817Sdim  return a >= kLowMemBeg && a <= kLowMemEnd;
49336817Sdim}
50336817Sdim
51336817Sdimstatic inline bool AddrIsInLowShadow(uptr a) {
52336817Sdim  PROFILE_ASAN_MAPPING();
53336817Sdim  a = RAW_ADDR(a);
54336817Sdim  return a >= kLowShadowBeg && a <= kLowShadowEnd;
55336817Sdim}
56336817Sdim
57336817Sdimstatic inline bool AddrIsInMidMem(uptr a) {
58336817Sdim  PROFILE_ASAN_MAPPING();
59336817Sdim  return false;
60336817Sdim}
61336817Sdim
62336817Sdimstatic inline bool AddrIsInMidShadow(uptr a) {
63336817Sdim  PROFILE_ASAN_MAPPING();
64336817Sdim  return false;
65336817Sdim}
66336817Sdim
67336817Sdimstatic inline bool AddrIsInHighMem(uptr a) {
68336817Sdim  PROFILE_ASAN_MAPPING();
69336817Sdim  return false;
70336817Sdim}
71336817Sdim
72336817Sdimstatic inline bool AddrIsInHighShadow(uptr a) {
73336817Sdim  PROFILE_ASAN_MAPPING();
74336817Sdim  return false;
75336817Sdim}
76336817Sdim
77336817Sdimstatic inline bool AddrIsInShadowGap(uptr a) {
78336817Sdim  PROFILE_ASAN_MAPPING();
79336817Sdim  a = RAW_ADDR(a);
80336817Sdim  return a >= kShadowGapBeg && a <= kShadowGapEnd;
81336817Sdim}
82336817Sdim
83336817Sdim}  // namespace __asan
84336817Sdim
85336817Sdim#endif  // ASAN_MAPPING_MYRIAD_H
86