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