https://github.com/kastiglione created 
https://github.com/llvm/llvm-project/pull/187792

None

>From 03fe88c5497655a0c8273f3c1bdd8382f2728a19 Mon Sep 17 00:00:00 2001
From: Dave Lee <[email protected]>
Date: Fri, 20 Mar 2026 13:50:43 -0700
Subject: [PATCH] [lldb][bytecode] Add setting to disable loading formatters
 from user (non-system) binaries

---
 lldb/include/lldb/Target/Target.h      |  2 ++
 lldb/source/Target/Target.cpp          | 17 ++++++++++++++++-
 lldb/source/Target/TargetProperties.td |  3 +++
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/lldb/include/lldb/Target/Target.h 
b/lldb/include/lldb/Target/Target.h
index 7907ed2f1a5f6..bbfe27adb1d81 100644
--- a/lldb/include/lldb/Target/Target.h
+++ b/lldb/include/lldb/Target/Target.h
@@ -278,6 +278,8 @@ class TargetProperties : public Properties {
 
   bool GetDebugUtilityExpression() const;
 
+  bool GetLoadFormattersFromUserBinaries() const;
+
 private:
   std::optional<bool>
   GetExperimentalPropertyValue(size_t prop_idx,
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 296a18f89dba2..3e691bd787833 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -44,6 +44,7 @@
 #include "lldb/Interpreter/Property.h"
 #include "lldb/Symbol/Function.h"
 #include "lldb/Symbol/ObjectFile.h"
+#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
 #include "lldb/Symbol/Symbol.h"
 #include "lldb/Target/ABI.h"
 #include "lldb/Target/ExecutionContext.h"
@@ -1542,6 +1543,13 @@ Module *Target::GetExecutableModulePointer() {
   return GetExecutableModule().get();
 }
 
+static bool IsSystemBinary(const ModuleSP &module_sp) {
+  if (auto *objfile = module_sp->GetObjectFile())
+    if (auto *macho = llvm::dyn_cast<ObjectFileMachO>(objfile))
+      return macho->IsSharedCacheBinary();
+  return false;
+}
+
 static void LoadScriptingResourceForModule(const ModuleSP &module_sp,
                                            Target *target) {
   Status error;
@@ -1861,7 +1869,8 @@ void Target::ModulesDidLoad(ModuleList &module_list) {
       ModuleSP module_sp(module_list.GetModuleAtIndex(idx));
       LoadScriptingResourceForModule(module_sp, this);
       LoadTypeSummariesForModule(module_sp);
-      LoadFormattersForModule(module_sp);
+      if (GetLoadFormattersFromUserBinaries() || IsSystemBinary(module_sp))
+        LoadFormattersForModule(module_sp);
     }
     m_breakpoint_list.UpdateBreakpoints(module_list, true, false);
     m_internal_breakpoint_list.UpdateBreakpoints(module_list, true, false);
@@ -5256,6 +5265,12 @@ void TargetProperties::SetDebugUtilityExpression(bool 
debug) {
   SetPropertyAtIndex(idx, debug);
 }
 
+bool TargetProperties::GetLoadFormattersFromUserBinaries() const {
+  const uint32_t idx = ePropertyLoadFormattersFromUserBinaries;
+  return GetPropertyAtIndexAs<bool>(
+      idx, g_target_properties[idx].default_uint_value != 0);
+}
+
 // Target::TargetEventData
 
 Target::TargetEventData::TargetEventData(const lldb::TargetSP &target_sp)
diff --git a/lldb/source/Target/TargetProperties.td 
b/lldb/source/Target/TargetProperties.td
index 2361314d506ac..15619f036afdb 100644
--- a/lldb/source/Target/TargetProperties.td
+++ b/lldb/source/Target/TargetProperties.td
@@ -176,6 +176,9 @@ let Definition = "target", Path = "target" in {
   def UseFastStepping: Property<"use-fast-stepping", "Boolean">,
     DefaultTrue,
     Desc<"Use a fast stepping algorithm based on running from branch to branch 
rather than instruction single-stepping.">;
+  def LoadFormattersFromUserBinaries: 
Property<"load-formatters-from-user-binaries", "Boolean">,
+    DefaultTrue,
+    Desc<"Load formatter bytecode embedded in user (non-system) binaries.">;
   def LoadScriptFromSymbolFile: Property<"load-script-from-symbol-file", 
"Enum">,
     DefaultEnumValue<"eLoadScriptFromSymFileWarn">,
     EnumValues<"OptionEnumValues(g_load_script_from_sym_file_values)">,

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to