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