[llvm] [NFC][BOLT] Refactor PatchEntries (PR #127812)
Paschalis Mpeis via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 19 07:46:26 PST 2025
https://github.com/paschalis-mpeis created https://github.com/llvm/llvm-project/pull/127812
Move force-patch flag to CommandLineOpts and add details on PatchEntries.
>From 721b75b96841536bf3068a909784f14fe5aa7f73 Mon Sep 17 00:00:00 2001
From: Paschalis Mpeis <Paschalis.Mpeis at arm.com>
Date: Wed, 19 Feb 2025 13:05:20 +0000
Subject: [PATCH] [NFC][BOLT] Refactor PatchEntries
Move force-patch flag to CommandLineOpts and add details on PatchEntries.
---
bolt/include/bolt/Utils/CommandLineOpts.h | 1 +
bolt/lib/Passes/PatchEntries.cpp | 21 +++++++++++----------
bolt/lib/Rewrite/MachORewriteInstance.cpp | 6 +++---
bolt/lib/Utils/CommandLineOpts.cpp | 6 ++++++
4 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/bolt/include/bolt/Utils/CommandLineOpts.h b/bolt/include/bolt/Utils/CommandLineOpts.h
index 111eb650c3746..ee110eb8707f7 100644
--- a/bolt/include/bolt/Utils/CommandLineOpts.h
+++ b/bolt/include/bolt/Utils/CommandLineOpts.h
@@ -37,6 +37,7 @@ extern llvm::cl::opt<unsigned> BucketsPerLine;
extern llvm::cl::opt<bool> DiffOnly;
extern llvm::cl::opt<bool> EnableBAT;
extern llvm::cl::opt<bool> EqualizeBBCounts;
+extern llvm::cl::opt<bool> ForcePatch;
extern llvm::cl::opt<bool> RemoveSymtab;
extern llvm::cl::opt<unsigned> ExecutionCountThreshold;
extern llvm::cl::opt<unsigned> HeatmapBlock;
diff --git a/bolt/lib/Passes/PatchEntries.cpp b/bolt/lib/Passes/PatchEntries.cpp
index 981d1b70af907..afe489b4667c3 100644
--- a/bolt/lib/Passes/PatchEntries.cpp
+++ b/bolt/lib/Passes/PatchEntries.cpp
@@ -6,27 +6,28 @@
//
//===----------------------------------------------------------------------===//
//
-// This file implements the PatchEntries class that is used for patching
-// the original function entry points.
+// This file implements the PatchEntries class that is used for patching the
+// original function entry points. This ensures that only the new/optimized code
+// executes and that the old code is never used. This is necessary due to
+// current BOLT limitations of not being able to duplicate all function's
+// associated metadata (e.g., .eh_frame, exception ranges, debug info,
+// jump-tables).
+//
+// NOTE: A successful run of 'scanExternalRefs' can relax this requirement as
+// it also ensures that old code is never executed.
//
//===----------------------------------------------------------------------===//
#include "bolt/Passes/PatchEntries.h"
+#include "bolt/Utils/CommandLineOpts.h"
#include "bolt/Utils/NameResolver.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/CommandLine.h"
namespace opts {
-
extern llvm::cl::OptionCategory BoltCategory;
-
extern llvm::cl::opt<unsigned> Verbosity;
-
-llvm::cl::opt<bool>
- ForcePatch("force-patch",
- llvm::cl::desc("force patching of original entry points"),
- llvm::cl::Hidden, llvm::cl::cat(BoltCategory));
-}
+} // namespace opts
namespace llvm {
namespace bolt {
diff --git a/bolt/lib/Rewrite/MachORewriteInstance.cpp b/bolt/lib/Rewrite/MachORewriteInstance.cpp
index 2f05b03290ba3..335b7b42ddde5 100644
--- a/bolt/lib/Rewrite/MachORewriteInstance.cpp
+++ b/bolt/lib/Rewrite/MachORewriteInstance.cpp
@@ -20,6 +20,7 @@
#include "bolt/Rewrite/JITLinkLinker.h"
#include "bolt/Rewrite/RewriteInstance.h"
#include "bolt/RuntimeLibs/InstrumentationRuntimeLibrary.h"
+#include "bolt/Utils/CommandLineOpts.h"
#include "bolt/Utils/Utils.h"
#include "llvm/MC/MCObjectStreamer.h"
#include "llvm/Support/Errc.h"
@@ -32,9 +33,8 @@ namespace opts {
using namespace llvm;
extern cl::opt<unsigned> AlignText;
-//FIXME! Upstream change
-//extern cl::opt<bool> CheckOverlappingElements;
-extern cl::opt<bool> ForcePatch;
+// FIXME! Upstream change
+// extern cl::opt<bool> CheckOverlappingElements;
extern cl::opt<bool> Instrument;
extern cl::opt<bool> InstrumentCalls;
extern cl::opt<bolt::JumpTableSupportLevel> JumpTables;
diff --git a/bolt/lib/Utils/CommandLineOpts.cpp b/bolt/lib/Utils/CommandLineOpts.cpp
index 17f090aa61ee9..ad714371436e0 100644
--- a/bolt/lib/Utils/CommandLineOpts.cpp
+++ b/bolt/lib/Utils/CommandLineOpts.cpp
@@ -80,6 +80,12 @@ cl::opt<bool> EqualizeBBCounts(
"in non-LBR and shrink wrapping)"),
cl::ZeroOrMore, cl::init(false), cl::Hidden, cl::cat(BoltOptCategory));
+llvm::cl::opt<bool> ForcePatch(
+ "force-patch",
+ llvm::cl::desc("force patching of original entry points to ensure "
+ "execution follows only the new/optimized code."),
+ llvm::cl::Hidden, llvm::cl::cat(BoltCategory));
+
cl::opt<bool> RemoveSymtab("remove-symtab", cl::desc("Remove .symtab section"),
cl::cat(BoltCategory));
More information about the llvm-commits
mailing list