mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 11:06:33 +00:00
[CodeGen][NPM] Port MachineSanitizerBinaryMetadata to NPM (#130069)
Didn't find a test for this (but there are tests for the `Function` version of this pass)
This commit is contained in:
parent
b2c9a58b8f
commit
f133eae70c
26
llvm/include/llvm/CodeGen/SanitizerBinaryMetadata.h
Normal file
26
llvm/include/llvm/CodeGen/SanitizerBinaryMetadata.h
Normal file
@ -0,0 +1,26 @@
|
||||
//===- llvm/CodeGen/SanitizerBinaryMetadata.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
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_CODEGEN_SANITIZERBINARYMETADATA_H
|
||||
#define LLVM_CODEGEN_SANITIZERBINARYMETADATA_H
|
||||
|
||||
#include "llvm/CodeGen/MachinePassManager.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class MachineSanitizerBinaryMetadataPass
|
||||
: public PassInfoMixin<MachineSanitizerBinaryMetadataPass> {
|
||||
public:
|
||||
PreservedAnalyses run(MachineFunction &MF,
|
||||
MachineFunctionAnalysisManager &MFAM);
|
||||
static bool isRequired() { return true; }
|
||||
};
|
||||
|
||||
} // namespace llvm
|
||||
|
||||
#endif // LLVM_CODEGEN_SANITIZERBINARYMETADATA_H
|
@ -208,7 +208,7 @@ void initializeStaticDataAnnotatorPass(PassRegistry &);
|
||||
void initializeMachinePipelinerPass(PassRegistry &);
|
||||
void initializeMachinePostDominatorTreeWrapperPassPass(PassRegistry &);
|
||||
void initializeMachineRegionInfoPassPass(PassRegistry &);
|
||||
void initializeMachineSanitizerBinaryMetadataPass(PassRegistry &);
|
||||
void initializeMachineSanitizerBinaryMetadataLegacyPass(PassRegistry &);
|
||||
void initializeMachineSchedulerLegacyPass(PassRegistry &);
|
||||
void initializeMachineSinkingLegacyPass(PassRegistry &);
|
||||
void initializeMachineTraceMetricsWrapperPassPass(PassRegistry &);
|
||||
|
@ -79,6 +79,7 @@
|
||||
#include "llvm/CodeGen/RenameIndependentSubregs.h"
|
||||
#include "llvm/CodeGen/ReplaceWithVeclib.h"
|
||||
#include "llvm/CodeGen/SafeStack.h"
|
||||
#include "llvm/CodeGen/SanitizerBinaryMetadata.h"
|
||||
#include "llvm/CodeGen/SelectOptimize.h"
|
||||
#include "llvm/CodeGen/ShadowStackGCLowering.h"
|
||||
#include "llvm/CodeGen/SjLjEHPrepare.h"
|
||||
@ -1008,7 +1009,7 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::addMachinePasses(
|
||||
addPass(StackMapLivenessPass());
|
||||
addPass(LiveDebugValuesPass(
|
||||
getTM<TargetMachine>().Options.ShouldEmitDebugEntryValues()));
|
||||
addPass(MachineSanitizerBinaryMetadata());
|
||||
addPass(MachineSanitizerBinaryMetadataPass());
|
||||
|
||||
if (TM.Options.EnableMachineOutliner &&
|
||||
getOptLevel() != CodeGenOptLevel::None &&
|
||||
|
@ -150,6 +150,7 @@ MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotAllocationPass())
|
||||
MACHINE_FUNCTION_PASS("machine-cp", MachineCopyPropagationPass())
|
||||
MACHINE_FUNCTION_PASS("machine-cse", MachineCSEPass())
|
||||
MACHINE_FUNCTION_PASS("machine-latecleanup", MachineLateInstrsCleanupPass())
|
||||
MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadataPass())
|
||||
MACHINE_FUNCTION_PASS("machine-scheduler", MachineSchedulerPass(TM))
|
||||
MACHINE_FUNCTION_PASS("machinelicm", MachineLICMPass())
|
||||
MACHINE_FUNCTION_PASS("no-op-machine-function", NoOpMachineFunctionPass())
|
||||
@ -298,7 +299,6 @@ DUMMY_MACHINE_FUNCTION_PASS("lrshrink", LiveRangeShrinkPass)
|
||||
DUMMY_MACHINE_FUNCTION_PASS("machine-combiner", MachineCombinerPass)
|
||||
DUMMY_MACHINE_FUNCTION_PASS("static-data-splitter", StaticDataSplitter)
|
||||
DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", MachineFunctionSplitterPass)
|
||||
DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata)
|
||||
DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass)
|
||||
DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass)
|
||||
DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass)
|
||||
|
@ -90,7 +90,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
|
||||
initializeMachineOptimizationRemarkEmitterPassPass(Registry);
|
||||
initializeMachineOutlinerPass(Registry);
|
||||
initializeMachinePipelinerPass(Registry);
|
||||
initializeMachineSanitizerBinaryMetadataPass(Registry);
|
||||
initializeMachineSanitizerBinaryMetadataLegacyPass(Registry);
|
||||
initializeModuloScheduleTestPass(Registry);
|
||||
initializeMachinePostDominatorTreeWrapperPassPass(Registry);
|
||||
initializeMachineRegionInfoPassPass(Registry);
|
||||
|
@ -11,7 +11,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h"
|
||||
#include "llvm/CodeGen/SanitizerBinaryMetadata.h"
|
||||
#include "llvm/CodeGen/MachineFrameInfo.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||
@ -20,34 +20,56 @@
|
||||
#include "llvm/IR/MDBuilder.h"
|
||||
#include "llvm/InitializePasses.h"
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h"
|
||||
#include <algorithm>
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
class MachineSanitizerBinaryMetadata : public MachineFunctionPass {
|
||||
// FIXME: This pass modifies Function metadata, which is not to be done in
|
||||
// MachineFunctionPass. It should probably be moved to a FunctionPass.
|
||||
class MachineSanitizerBinaryMetadataLegacy : public MachineFunctionPass {
|
||||
public:
|
||||
static char ID;
|
||||
|
||||
MachineSanitizerBinaryMetadata();
|
||||
MachineSanitizerBinaryMetadataLegacy();
|
||||
bool runOnMachineFunction(MachineFunction &F) override;
|
||||
};
|
||||
|
||||
struct MachineSanitizerBinaryMetadata {
|
||||
bool run(MachineFunction &MF);
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
INITIALIZE_PASS(MachineSanitizerBinaryMetadata, "machine-sanmd",
|
||||
INITIALIZE_PASS(MachineSanitizerBinaryMetadataLegacy, "machine-sanmd",
|
||||
"Machine Sanitizer Binary Metadata", false, false)
|
||||
|
||||
char MachineSanitizerBinaryMetadata::ID = 0;
|
||||
char MachineSanitizerBinaryMetadataLegacy::ID = 0;
|
||||
char &llvm::MachineSanitizerBinaryMetadataID =
|
||||
MachineSanitizerBinaryMetadata::ID;
|
||||
MachineSanitizerBinaryMetadataLegacy::ID;
|
||||
|
||||
MachineSanitizerBinaryMetadata::MachineSanitizerBinaryMetadata()
|
||||
MachineSanitizerBinaryMetadataLegacy::MachineSanitizerBinaryMetadataLegacy()
|
||||
: MachineFunctionPass(ID) {
|
||||
initializeMachineSanitizerBinaryMetadataPass(
|
||||
initializeMachineSanitizerBinaryMetadataLegacyPass(
|
||||
*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
bool MachineSanitizerBinaryMetadata::runOnMachineFunction(MachineFunction &MF) {
|
||||
bool MachineSanitizerBinaryMetadataLegacy::runOnMachineFunction(
|
||||
MachineFunction &MF) {
|
||||
return MachineSanitizerBinaryMetadata().run(MF);
|
||||
}
|
||||
|
||||
PreservedAnalyses
|
||||
MachineSanitizerBinaryMetadataPass::run(MachineFunction &MF,
|
||||
MachineFunctionAnalysisManager &MFAM) {
|
||||
if (!MachineSanitizerBinaryMetadata().run(MF))
|
||||
return PreservedAnalyses::all();
|
||||
|
||||
return getMachineFunctionPassPreservedAnalyses();
|
||||
}
|
||||
|
||||
bool MachineSanitizerBinaryMetadata::run(MachineFunction &MF) {
|
||||
MDNode *MD = MF.getFunction().getMetadata(LLVMContext::MD_pcsections);
|
||||
if (!MD)
|
||||
return false;
|
||||
|
@ -153,6 +153,7 @@
|
||||
#include "llvm/CodeGen/RemoveRedundantDebugValues.h"
|
||||
#include "llvm/CodeGen/RenameIndependentSubregs.h"
|
||||
#include "llvm/CodeGen/SafeStack.h"
|
||||
#include "llvm/CodeGen/SanitizerBinaryMetadata.h"
|
||||
#include "llvm/CodeGen/SelectOptimize.h"
|
||||
#include "llvm/CodeGen/ShadowStackGCLowering.h"
|
||||
#include "llvm/CodeGen/SjLjEHPrepare.h"
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: llc -mtriple=x86_64-pc-linux-gnu -enable-new-pm -print-pipeline-passes -filetype=null %s | FileCheck %s
|
||||
|
||||
; CHECK: require<profile-summary>,require<collector-metadata>
|
||||
; CHECK: MachineSanitizerBinaryMetadata
|
||||
; CHECK: machine-sanmd
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user