//===-- SubprocessMemory.h --------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// Defines a class that automatically handles auxiliary memory and the /// underlying shared memory backings for memory definitions /// //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVM_EXEGESIS_SUBPROCESSMEMORY_H #define LLVM_TOOLS_LLVM_EXEGESIS_SUBPROCESSMEMORY_H #include "BenchmarkResult.h" #include #include #include #ifdef _MSC_VER typedef int pid_t; #else #include #endif // _MSC_VER namespace llvm { namespace exegesis { class SubprocessMemory { public: static constexpr const size_t AuxiliaryMemoryOffset = 1; static constexpr const size_t AuxiliaryMemorySize = 4096; // Gets the thread ID for the calling thread. static long getCurrentTID(); Error initializeSubprocessMemory(pid_t ProcessID); // The following function sets up memory definitions. It creates shared // memory objects for the definitions and fills them with the specified // values. Arguments: MemoryDefinitions - A map from memory value names to // MemoryValues, ProcessID - The ID of the current process. Error addMemoryDefinition( std::unordered_map MemoryDefinitions, pid_t ProcessID); // The following function sets up the auxiliary memory by opening shared // memory objects backing memory definitions and putting file descriptors // into appropriate places. Arguments: MemoryDefinitions - A map from memory // values names to Memoryvalues, ParentPID - The ID of the process that // setup the memory definitions, CounterFileDescriptor - The file descriptor // for the performance counter that will be placed in the auxiliary memory // section. static Expected setupAuxiliaryMemoryInSubprocess( std::unordered_map MemoryDefinitions, pid_t ParentPID, long ParentTID, int CounterFileDescriptor); ~SubprocessMemory(); private: std::vector SharedMemoryNames; }; } // namespace exegesis } // namespace llvm #endif