From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- mozglue/linker/Mappable.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 mozglue/linker/Mappable.h (limited to 'mozglue/linker/Mappable.h') diff --git a/mozglue/linker/Mappable.h b/mozglue/linker/Mappable.h new file mode 100644 index 0000000000..3e25fc88c9 --- /dev/null +++ b/mozglue/linker/Mappable.h @@ -0,0 +1,55 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef Mappable_h +#define Mappable_h + +#include +#include "mozilla/RefCounted.h" +#include "Utils.h" + +/** + * Helper class to mmap plain files. + */ +class Mappable : public mozilla::RefCounted { + public: + MOZ_DECLARE_REFCOUNTED_TYPENAME(Mappable) + ~Mappable() {} + + MemoryRange mmap(const void* addr, size_t length, int prot, int flags, + off_t offset); + + private: + void munmap(void* addr, size_t length) { ::munmap(addr, length); } + /* Limit use of Mappable::munmap to classes that keep track of the address + * and size of the mapping. This allows to ignore ::munmap return value. */ + friend class Mappable1stPagePtr; + friend class LibHandle; + + public: + /** + * Indicate to a Mappable instance that no further mmap is going to happen. + */ + void finalize(); + + /** + * Returns the maximum length that can be mapped from this Mappable for + * offset = 0. + */ + size_t GetLength() const; + + /** + * Create a Mappable instance for the given file path. + */ + static Mappable* Create(const char* path); + + protected: + explicit Mappable(int fd) : fd(fd) {} + + private: + /* File descriptor */ + std::optional fd; +}; + +#endif /* Mappable_h */ -- cgit v1.2.3