xref: /llvm-project/compiler-rt/lib/scudo/standalone/mem_map_fuchsia.h (revision 3003da71540bb8483615e18f8ab379da39fa4512)
1*3003da71SFabio D'Urso //===-- mem_map_fuchsia.h ---------------------------------------*- C++ -*-===//
2*3003da71SFabio D'Urso //
3*3003da71SFabio D'Urso // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*3003da71SFabio D'Urso // See https://llvm.org/LICENSE.txt for license information.
5*3003da71SFabio D'Urso // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*3003da71SFabio D'Urso //
7*3003da71SFabio D'Urso //===----------------------------------------------------------------------===//
8*3003da71SFabio D'Urso 
9*3003da71SFabio D'Urso #ifndef SCUDO_MEM_MAP_FUCHSIA_H_
10*3003da71SFabio D'Urso #define SCUDO_MEM_MAP_FUCHSIA_H_
11*3003da71SFabio D'Urso 
12*3003da71SFabio D'Urso #include "mem_map_base.h"
13*3003da71SFabio D'Urso 
14*3003da71SFabio D'Urso #if SCUDO_FUCHSIA
15*3003da71SFabio D'Urso 
16*3003da71SFabio D'Urso #include <stdint.h>
17*3003da71SFabio D'Urso #include <zircon/types.h>
18*3003da71SFabio D'Urso 
19*3003da71SFabio D'Urso namespace scudo {
20*3003da71SFabio D'Urso 
21*3003da71SFabio D'Urso class MemMapFuchsia final : public MemMapBase<MemMapFuchsia> {
22*3003da71SFabio D'Urso public:
23*3003da71SFabio D'Urso   constexpr MemMapFuchsia() = default;
24*3003da71SFabio D'Urso 
25*3003da71SFabio D'Urso   // Impls for base functions.
26*3003da71SFabio D'Urso   bool mapImpl(uptr Addr, uptr Size, const char *Name, uptr Flags);
27*3003da71SFabio D'Urso   void unmapImpl(uptr Addr, uptr Size);
28*3003da71SFabio D'Urso   bool remapImpl(uptr Addr, uptr Size, const char *Name, uptr Flags);
29*3003da71SFabio D'Urso   void setMemoryPermissionImpl(uptr Addr, uptr Size, uptr Flags);
releasePagesToOSImpl(uptr From,uptr Size)30*3003da71SFabio D'Urso   void releasePagesToOSImpl(uptr From, uptr Size) {
31*3003da71SFabio D'Urso     return releaseAndZeroPagesToOSImpl(From, Size);
32*3003da71SFabio D'Urso   }
33*3003da71SFabio D'Urso   void releaseAndZeroPagesToOSImpl(uptr From, uptr Size);
getBaseImpl()34*3003da71SFabio D'Urso   uptr getBaseImpl() { return WindowBase; }
getCapacityImpl()35*3003da71SFabio D'Urso   uptr getCapacityImpl() { return WindowSize; }
36*3003da71SFabio D'Urso 
37*3003da71SFabio D'Urso private:
38*3003da71SFabio D'Urso   friend class ReservedMemoryFuchsia;
39*3003da71SFabio D'Urso 
40*3003da71SFabio D'Urso   // Used by ReservedMemoryFuchsia::dispatch.
41*3003da71SFabio D'Urso   MemMapFuchsia(uptr Base, uptr Capacity);
42*3003da71SFabio D'Urso 
43*3003da71SFabio D'Urso   // Virtual memory address corresponding to VMO offset 0.
44*3003da71SFabio D'Urso   uptr MapAddr = 0;
45*3003da71SFabio D'Urso 
46*3003da71SFabio D'Urso   // Virtual memory base address and size of the VMO subrange that is still in
47*3003da71SFabio D'Urso   // use. unmapImpl() can shrink this range, either at the beginning or at the
48*3003da71SFabio D'Urso   // end.
49*3003da71SFabio D'Urso   uptr WindowBase = 0;
50*3003da71SFabio D'Urso   uptr WindowSize = 0;
51*3003da71SFabio D'Urso 
52*3003da71SFabio D'Urso   zx_handle_t Vmo = ZX_HANDLE_INVALID;
53*3003da71SFabio D'Urso };
54*3003da71SFabio D'Urso 
55*3003da71SFabio D'Urso class ReservedMemoryFuchsia final
56*3003da71SFabio D'Urso     : public ReservedMemory<ReservedMemoryFuchsia, MemMapFuchsia> {
57*3003da71SFabio D'Urso public:
58*3003da71SFabio D'Urso   constexpr ReservedMemoryFuchsia() = default;
59*3003da71SFabio D'Urso 
60*3003da71SFabio D'Urso   bool createImpl(uptr Addr, uptr Size, const char *Name, uptr Flags);
61*3003da71SFabio D'Urso   void releaseImpl();
62*3003da71SFabio D'Urso   MemMapT dispatchImpl(uptr Addr, uptr Size);
getBaseImpl()63*3003da71SFabio D'Urso   uptr getBaseImpl() { return Base; }
getCapacityImpl()64*3003da71SFabio D'Urso   uptr getCapacityImpl() { return Capacity; }
65*3003da71SFabio D'Urso 
66*3003da71SFabio D'Urso private:
67*3003da71SFabio D'Urso   uptr Base = 0;
68*3003da71SFabio D'Urso   uptr Capacity = 0;
69*3003da71SFabio D'Urso };
70*3003da71SFabio D'Urso 
71*3003da71SFabio D'Urso } // namespace scudo
72*3003da71SFabio D'Urso 
73*3003da71SFabio D'Urso #endif // SCUDO_FUCHSIA
74*3003da71SFabio D'Urso 
75*3003da71SFabio D'Urso #endif // SCUDO_MEM_MAP_FUCHSIA_H_
76