Skip to content

Commit f133eae

Browse files
authored
[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)
1 parent b2c9a58 commit f133eae

File tree

8 files changed

+64
-14
lines changed

8 files changed

+64
-14
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//===- llvm/CodeGen/SanitizerBinaryMetadata.h -------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_CODEGEN_SANITIZERBINARYMETADATA_H
10+
#define LLVM_CODEGEN_SANITIZERBINARYMETADATA_H
11+
12+
#include "llvm/CodeGen/MachinePassManager.h"
13+
14+
namespace llvm {
15+
16+
class MachineSanitizerBinaryMetadataPass
17+
: public PassInfoMixin<MachineSanitizerBinaryMetadataPass> {
18+
public:
19+
PreservedAnalyses run(MachineFunction &MF,
20+
MachineFunctionAnalysisManager &MFAM);
21+
static bool isRequired() { return true; }
22+
};
23+
24+
} // namespace llvm
25+
26+
#endif // LLVM_CODEGEN_SANITIZERBINARYMETADATA_H

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ void initializeStaticDataAnnotatorPass(PassRegistry &);
208208
void initializeMachinePipelinerPass(PassRegistry &);
209209
void initializeMachinePostDominatorTreeWrapperPassPass(PassRegistry &);
210210
void initializeMachineRegionInfoPassPass(PassRegistry &);
211-
void initializeMachineSanitizerBinaryMetadataPass(PassRegistry &);
211+
void initializeMachineSanitizerBinaryMetadataLegacyPass(PassRegistry &);
212212
void initializeMachineSchedulerLegacyPass(PassRegistry &);
213213
void initializeMachineSinkingLegacyPass(PassRegistry &);
214214
void initializeMachineTraceMetricsWrapperPassPass(PassRegistry &);

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
#include "llvm/CodeGen/RenameIndependentSubregs.h"
8080
#include "llvm/CodeGen/ReplaceWithVeclib.h"
8181
#include "llvm/CodeGen/SafeStack.h"
82+
#include "llvm/CodeGen/SanitizerBinaryMetadata.h"
8283
#include "llvm/CodeGen/SelectOptimize.h"
8384
#include "llvm/CodeGen/ShadowStackGCLowering.h"
8485
#include "llvm/CodeGen/SjLjEHPrepare.h"
@@ -1008,7 +1009,7 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::addMachinePasses(
10081009
addPass(StackMapLivenessPass());
10091010
addPass(LiveDebugValuesPass(
10101011
getTM<TargetMachine>().Options.ShouldEmitDebugEntryValues()));
1011-
addPass(MachineSanitizerBinaryMetadata());
1012+
addPass(MachineSanitizerBinaryMetadataPass());
10121013

10131014
if (TM.Options.EnableMachineOutliner &&
10141015
getOptLevel() != CodeGenOptLevel::None &&

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotAllocationPass())
150150
MACHINE_FUNCTION_PASS("machine-cp", MachineCopyPropagationPass())
151151
MACHINE_FUNCTION_PASS("machine-cse", MachineCSEPass())
152152
MACHINE_FUNCTION_PASS("machine-latecleanup", MachineLateInstrsCleanupPass())
153+
MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadataPass())
153154
MACHINE_FUNCTION_PASS("machine-scheduler", MachineSchedulerPass(TM))
154155
MACHINE_FUNCTION_PASS("machinelicm", MachineLICMPass())
155156
MACHINE_FUNCTION_PASS("no-op-machine-function", NoOpMachineFunctionPass())
@@ -298,7 +299,6 @@ DUMMY_MACHINE_FUNCTION_PASS("lrshrink", LiveRangeShrinkPass)
298299
DUMMY_MACHINE_FUNCTION_PASS("machine-combiner", MachineCombinerPass)
299300
DUMMY_MACHINE_FUNCTION_PASS("static-data-splitter", StaticDataSplitter)
300301
DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", MachineFunctionSplitterPass)
301-
DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata)
302302
DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass)
303303
DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass)
304304
DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass)

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
9090
initializeMachineOptimizationRemarkEmitterPassPass(Registry);
9191
initializeMachineOutlinerPass(Registry);
9292
initializeMachinePipelinerPass(Registry);
93-
initializeMachineSanitizerBinaryMetadataPass(Registry);
93+
initializeMachineSanitizerBinaryMetadataLegacyPass(Registry);
9494
initializeModuloScheduleTestPass(Registry);
9595
initializeMachinePostDominatorTreeWrapperPassPass(Registry);
9696
initializeMachineRegionInfoPassPass(Registry);

llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
//
1212
//===----------------------------------------------------------------------===//
1313

14-
#include "llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h"
14+
#include "llvm/CodeGen/SanitizerBinaryMetadata.h"
1515
#include "llvm/CodeGen/MachineFrameInfo.h"
1616
#include "llvm/CodeGen/MachineFunction.h"
1717
#include "llvm/CodeGen/MachineFunctionPass.h"
@@ -20,34 +20,56 @@
2020
#include "llvm/IR/MDBuilder.h"
2121
#include "llvm/InitializePasses.h"
2222
#include "llvm/Pass.h"
23+
#include "llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h"
2324
#include <algorithm>
2425

2526
using namespace llvm;
2627

2728
namespace {
28-
class MachineSanitizerBinaryMetadata : public MachineFunctionPass {
29+
// FIXME: This pass modifies Function metadata, which is not to be done in
30+
// MachineFunctionPass. It should probably be moved to a FunctionPass.
31+
class MachineSanitizerBinaryMetadataLegacy : public MachineFunctionPass {
2932
public:
3033
static char ID;
3134

32-
MachineSanitizerBinaryMetadata();
35+
MachineSanitizerBinaryMetadataLegacy();
3336
bool runOnMachineFunction(MachineFunction &F) override;
3437
};
38+
39+
struct MachineSanitizerBinaryMetadata {
40+
bool run(MachineFunction &MF);
41+
};
42+
3543
} // namespace
3644

37-
INITIALIZE_PASS(MachineSanitizerBinaryMetadata, "machine-sanmd",
45+
INITIALIZE_PASS(MachineSanitizerBinaryMetadataLegacy, "machine-sanmd",
3846
"Machine Sanitizer Binary Metadata", false, false)
3947

40-
char MachineSanitizerBinaryMetadata::ID = 0;
48+
char MachineSanitizerBinaryMetadataLegacy::ID = 0;
4149
char &llvm::MachineSanitizerBinaryMetadataID =
42-
MachineSanitizerBinaryMetadata::ID;
50+
MachineSanitizerBinaryMetadataLegacy::ID;
4351

44-
MachineSanitizerBinaryMetadata::MachineSanitizerBinaryMetadata()
52+
MachineSanitizerBinaryMetadataLegacy::MachineSanitizerBinaryMetadataLegacy()
4553
: MachineFunctionPass(ID) {
46-
initializeMachineSanitizerBinaryMetadataPass(
54+
initializeMachineSanitizerBinaryMetadataLegacyPass(
4755
*PassRegistry::getPassRegistry());
4856
}
4957

50-
bool MachineSanitizerBinaryMetadata::runOnMachineFunction(MachineFunction &MF) {
58+
bool MachineSanitizerBinaryMetadataLegacy::runOnMachineFunction(
59+
MachineFunction &MF) {
60+
return MachineSanitizerBinaryMetadata().run(MF);
61+
}
62+
63+
PreservedAnalyses
64+
MachineSanitizerBinaryMetadataPass::run(MachineFunction &MF,
65+
MachineFunctionAnalysisManager &MFAM) {
66+
if (!MachineSanitizerBinaryMetadata().run(MF))
67+
return PreservedAnalyses::all();
68+
69+
return getMachineFunctionPassPreservedAnalyses();
70+
}
71+
72+
bool MachineSanitizerBinaryMetadata::run(MachineFunction &MF) {
5173
MDNode *MD = MF.getFunction().getMetadata(LLVMContext::MD_pcsections);
5274
if (!MD)
5375
return false;

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
#include "llvm/CodeGen/RemoveRedundantDebugValues.h"
154154
#include "llvm/CodeGen/RenameIndependentSubregs.h"
155155
#include "llvm/CodeGen/SafeStack.h"
156+
#include "llvm/CodeGen/SanitizerBinaryMetadata.h"
156157
#include "llvm/CodeGen/SelectOptimize.h"
157158
#include "llvm/CodeGen/ShadowStackGCLowering.h"
158159
#include "llvm/CodeGen/SjLjEHPrepare.h"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; RUN: llc -mtriple=x86_64-pc-linux-gnu -enable-new-pm -print-pipeline-passes -filetype=null %s | FileCheck %s
22

33
; CHECK: require<profile-summary>,require<collector-metadata>
4-
; CHECK: MachineSanitizerBinaryMetadata
4+
; CHECK: machine-sanmd
55

0 commit comments

Comments
 (0)