Aiden Grossman 50e6218132 Reland "[llvm-exegesis] Add thread IDs to subprocess memory names (#84451)"
This reverts commit 1fe9c417a0bf143f9bb9f9e1fbf7b20f44196883.

This relands commit 6bbe8a296ee91754d423c59c35727eaa624f7140.

This was causing build failures on one of the ARMv8 builders. Still not
completely sure why, but relanding it to see if the failure pops up
again. If it does, the plan is to fix forward by disabling tests on ARM
temporarily as llvm-exegesis does not currently use SubprocessMemory
on ARM.
2024-03-22 11:51:09 -07:00

72 lines
2.4 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;
// 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<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, long ParentTID, int CounterFileDescriptor);
~SubprocessMemory();
private:
std::vector<std::string> SharedMemoryNames;
};
} // namespace exegesis
} // namespace llvm
#endif