xref: /llvm-project/llvm/tools/llvm-exegesis/lib/SubprocessMemory.h (revision 50e6218132d6d9cfc2645fa19cf72d0437a62d95)
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