[DAG] TransformFPLoadStorePair - early out if we're not loading a simple type
[llvm-project.git] / compiler-rt / lib / scudo / standalone / mem_map.h
blobb92216cf271de8beea3bca4d7b0b9ddfc727d846
1 //===-- mem_map.h -----------------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #ifndef SCUDO_MEM_MAP_H_
10 #define SCUDO_MEM_MAP_H_
12 #include "mem_map_base.h"
14 #include "common.h"
15 #include "internal_defs.h"
17 // TODO: This is only used for `MapPlatformData`. Remove these includes when we
18 // have all three platform specific `MemMap` and `ReservedMemory`
19 // implementations.
20 #include "fuchsia.h"
21 #include "linux.h"
22 #include "trusty.h"
24 #include "mem_map_fuchsia.h"
25 #include "mem_map_linux.h"
27 namespace scudo {
29 // This will be deprecated when every allocator has been supported by each
30 // platform's `MemMap` implementation.
31 class MemMapDefault final : public MemMapBase<MemMapDefault> {
32 public:
33 constexpr MemMapDefault() = default;
34 MemMapDefault(uptr Base, uptr Capacity) : Base(Base), Capacity(Capacity) {}
36 // Impls for base functions.
37 bool mapImpl(uptr Addr, uptr Size, const char *Name, uptr Flags);
38 void unmapImpl(uptr Addr, uptr Size);
39 bool remapImpl(uptr Addr, uptr Size, const char *Name, uptr Flags);
40 void setMemoryPermissionImpl(uptr Addr, uptr Size, uptr Flags);
41 void releasePagesToOSImpl(uptr From, uptr Size) {
42 return releaseAndZeroPagesToOSImpl(From, Size);
44 void releaseAndZeroPagesToOSImpl(uptr From, uptr Size);
45 uptr getBaseImpl() { return Base; }
46 uptr getCapacityImpl() { return Capacity; }
48 void setMapPlatformData(MapPlatformData &NewData) { Data = NewData; }
50 private:
51 uptr Base = 0;
52 uptr Capacity = 0;
53 uptr MappedBase = 0;
54 MapPlatformData Data = {};
57 // This will be deprecated when every allocator has been supported by each
58 // platform's `MemMap` implementation.
59 class ReservedMemoryDefault final
60 : public ReservedMemory<ReservedMemoryDefault, MemMapDefault> {
61 public:
62 constexpr ReservedMemoryDefault() = default;
64 bool createImpl(uptr Addr, uptr Size, const char *Name, uptr Flags);
65 void releaseImpl();
66 MemMapT dispatchImpl(uptr Addr, uptr Size);
67 uptr getBaseImpl() { return Base; }
68 uptr getCapacityImpl() { return Capacity; }
70 private:
71 uptr Base = 0;
72 uptr Capacity = 0;
73 MapPlatformData Data = {};
76 #if SCUDO_LINUX
77 using ReservedMemoryT = ReservedMemoryLinux;
78 using MemMapT = ReservedMemoryT::MemMapT;
79 #elif SCUDO_FUCHSIA
80 using ReservedMemoryT = ReservedMemoryFuchsia;
81 using MemMapT = ReservedMemoryT::MemMapT;
82 #elif SCUDO_TRUSTY
83 using ReservedMemoryT = ReservedMemoryDefault;
84 using MemMapT = ReservedMemoryT::MemMapT;
85 #else
86 #error \
87 "Unsupported platform, please implement the ReservedMemory for your platform!"
88 #endif
90 } // namespace scudo
92 #endif // SCUDO_MEM_MAP_H_