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