1 // Copyright 2016 The Fuchsia Authors 2 // 3 // Use of this source code is governed by a MIT-style 4 // license that can be found in the LICENSE file or at 5 // https://opensource.org/licenses/MIT 6 7 #pragma once 8 9 #include <object/handle.h> 10 #include <object/vm_object_dispatcher.h> 11 12 // An RoDso object describes one DSO image built with the rodso.ld layout. 13 class RoDso { 14 public: vmo()15 const fbl::RefPtr<VmObjectDispatcher>& vmo() const { 16 return vmo_; 17 } 18 HandleOwner vmo_handle() const; 19 size()20 size_t size() const { return size_; } 21 valid_code_mapping(uint64_t vmo_offset,size_t size)22 bool valid_code_mapping(uint64_t vmo_offset, size_t size) const { 23 return vmo_offset == code_start_ && size == size_ - code_start_; 24 } 25 26 zx_status_t Map(fbl::RefPtr<VmAddressRegionDispatcher> vmar, 27 size_t offset) const; 28 29 protected: 30 31 RoDso(const char* name, const void* image, size_t size, 32 uintptr_t code_start); 33 vmo_rights()34 zx_rights_t vmo_rights() const { return vmo_rights_; } 35 36 private: 37 38 zx_status_t MapSegment(fbl::RefPtr<VmAddressRegionDispatcher> vmar, 39 bool code, 40 size_t vmar_offset, 41 size_t start_offset, 42 size_t end_offset) const; 43 44 const char* name_; 45 fbl::RefPtr<VmObjectDispatcher> vmo_; 46 zx_rights_t vmo_rights_; 47 uintptr_t code_start_; 48 size_t size_; 49 }; 50