69 lines
2.3 KiB
C
69 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
|