[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:
Akshat Oke 2025-04-14 20:52:26 +05:30 committed by GitHub
parent b2c9a58b8f
commit f133eae70c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 64 additions and 14 deletions

View 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

View File

@ -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 &);

View File

@ -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 &&

View File

@ -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)

View File

@ -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);

View File

@ -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;

View File

@ -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"

View File

@ -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