Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/compiler-rt/lib/scudo/standalone/mem_map.h
35291 views
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
//===----------------------------------------------------------------------===//
8
9
#ifndef SCUDO_MEM_MAP_H_
10
#define SCUDO_MEM_MAP_H_
11
12
#include "mem_map_base.h"
13
14
#include "common.h"
15
#include "internal_defs.h"
16
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"
23
24
#include "mem_map_fuchsia.h"
25
#include "mem_map_linux.h"
26
27
namespace scudo {
28
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) {}
35
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);
43
}
44
void releaseAndZeroPagesToOSImpl(uptr From, uptr Size);
45
uptr getBaseImpl() { return Base; }
46
uptr getCapacityImpl() { return Capacity; }
47
48
void setMapPlatformData(MapPlatformData &NewData) { Data = NewData; }
49
50
private:
51
uptr Base = 0;
52
uptr Capacity = 0;
53
uptr MappedBase = 0;
54
MapPlatformData Data = {};
55
};
56
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;
63
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; }
69
70
private:
71
uptr Base = 0;
72
uptr Capacity = 0;
73
MapPlatformData Data = {};
74
};
75
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
89
90
} // namespace scudo
91
92
#endif // SCUDO_MEM_MAP_H_
93
94