15a63b2b3SAiden Grossman //===-- SubprocessMemory.h --------------------------------------*- C++ -*-===// 25a63b2b3SAiden Grossman // 35a63b2b3SAiden Grossman // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45a63b2b3SAiden Grossman // See https://llvm.org/LICENSE.txt for license information. 55a63b2b3SAiden Grossman // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65a63b2b3SAiden Grossman // 75a63b2b3SAiden Grossman //===----------------------------------------------------------------------===// 85a63b2b3SAiden Grossman /// 95a63b2b3SAiden Grossman /// \file 105a63b2b3SAiden Grossman /// Defines a class that automatically handles auxiliary memory and the 115a63b2b3SAiden Grossman /// underlying shared memory backings for memory definitions 125a63b2b3SAiden Grossman /// 135a63b2b3SAiden Grossman //===----------------------------------------------------------------------===// 145a63b2b3SAiden Grossman 155a63b2b3SAiden Grossman #ifndef LLVM_TOOLS_LLVM_EXEGESIS_SUBPROCESSMEMORY_H 165a63b2b3SAiden Grossman #define LLVM_TOOLS_LLVM_EXEGESIS_SUBPROCESSMEMORY_H 175a63b2b3SAiden Grossman 185a63b2b3SAiden Grossman #include "BenchmarkResult.h" 195a63b2b3SAiden Grossman #include <string> 205a63b2b3SAiden Grossman #include <unordered_map> 215a63b2b3SAiden Grossman #include <vector> 225a63b2b3SAiden Grossman 23ae4846d8SAiden Grossman #ifdef _MSC_VER 245a63b2b3SAiden Grossman typedef int pid_t; 25ae4846d8SAiden Grossman #else 26ae4846d8SAiden Grossman #include <sys/types.h> 27ae4846d8SAiden Grossman #endif // _MSC_VER 28ae4846d8SAiden Grossman 295a63b2b3SAiden Grossman 305a63b2b3SAiden Grossman namespace llvm { 315a63b2b3SAiden Grossman namespace exegesis { 325a63b2b3SAiden Grossman 335a63b2b3SAiden Grossman class SubprocessMemory { 345a63b2b3SAiden Grossman public: 355a63b2b3SAiden Grossman static constexpr const size_t AuxiliaryMemoryOffset = 1; 365a63b2b3SAiden Grossman static constexpr const size_t AuxiliaryMemorySize = 4096; 375a63b2b3SAiden Grossman 38*50e62181SAiden Grossman // Gets the thread ID for the calling thread. 39*50e62181SAiden Grossman static long getCurrentTID(); 40*50e62181SAiden Grossman 415a63b2b3SAiden Grossman Error initializeSubprocessMemory(pid_t ProcessID); 425a63b2b3SAiden Grossman 435a63b2b3SAiden Grossman // The following function sets up memory definitions. It creates shared 445a63b2b3SAiden Grossman // memory objects for the definitions and fills them with the specified 455a63b2b3SAiden Grossman // values. Arguments: MemoryDefinitions - A map from memory value names to 465a63b2b3SAiden Grossman // MemoryValues, ProcessID - The ID of the current process. 475a63b2b3SAiden Grossman Error addMemoryDefinition( 485a63b2b3SAiden Grossman std::unordered_map<std::string, MemoryValue> MemoryDefinitions, 495a63b2b3SAiden Grossman pid_t ProcessID); 505a63b2b3SAiden Grossman 515a63b2b3SAiden Grossman // The following function sets up the auxiliary memory by opening shared 525a63b2b3SAiden Grossman // memory objects backing memory definitions and putting file descriptors 535a63b2b3SAiden Grossman // into appropriate places. Arguments: MemoryDefinitions - A map from memory 545a63b2b3SAiden Grossman // values names to Memoryvalues, ParentPID - The ID of the process that 555a63b2b3SAiden Grossman // setup the memory definitions, CounterFileDescriptor - The file descriptor 565a63b2b3SAiden Grossman // for the performance counter that will be placed in the auxiliary memory 575a63b2b3SAiden Grossman // section. 585a63b2b3SAiden Grossman static Expected<int> setupAuxiliaryMemoryInSubprocess( 595a63b2b3SAiden Grossman std::unordered_map<std::string, MemoryValue> MemoryDefinitions, 60*50e62181SAiden Grossman pid_t ParentPID, long ParentTID, int CounterFileDescriptor); 615a63b2b3SAiden Grossman 625a63b2b3SAiden Grossman ~SubprocessMemory(); 635a63b2b3SAiden Grossman 645a63b2b3SAiden Grossman private: 655a63b2b3SAiden Grossman std::vector<std::string> SharedMemoryNames; 665a63b2b3SAiden Grossman }; 675a63b2b3SAiden Grossman 685a63b2b3SAiden Grossman } // namespace exegesis 695a63b2b3SAiden Grossman } // namespace llvm 705a63b2b3SAiden Grossman 715a63b2b3SAiden Grossman #endif 72