68 lines
2.3 KiB
C++
68 lines
2.3 KiB
C++
//===-- 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 <string>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
#ifdef _MSC_VER
|
|
typedef int pid_t;
|
|
#else
|
|
#include <sys/types.h>
|
|
#endif // _MSC_VER
|
|
|
|
|
|
namespace llvm {
|
|
namespace exegesis {
|
|
|
|
class SubprocessMemory {
|
|
public:
|
|
static constexpr const size_t AuxiliaryMemoryOffset = 1;
|
|
static constexpr const size_t AuxiliaryMemorySize = 4096;
|
|
|
|
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<std::string, MemoryValue> 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<int> setupAuxiliaryMemoryInSubprocess(
|
|
std::unordered_map<std::string, MemoryValue> MemoryDefinitions,
|
|
pid_t ParentPID, int CounterFileDescriptor);
|
|
|
|
~SubprocessMemory();
|
|
|
|
private:
|
|
std::vector<std::string> SharedMemoryNames;
|
|
};
|
|
|
|
} // namespace exegesis
|
|
} // namespace llvm
|
|
|
|
#endif
|