[Lldb-commits] [lldb] [lldb] Add target.jit-engine setting (PR #212998)
via lldb-commits
lldb-commits at lists.llvm.org
Thu Jul 30 04:15:37 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Lang Hames (lhames)
<details>
<summary>Changes</summary>
Add a target.jit-engine setting that lets users choose which LLVM execution engine (MCJIT or ORC) is used to JIT expressions. Defaults to MCJIT to preserve current behavior. This is groundwork for migrating expression evaluation from MCJIT to ORC; IRExecutionUnit does not yet consult this setting.
---
Full diff: https://github.com/llvm/llvm-project/pull/212998.diff
4 Files Affected:
- (modified) lldb/include/lldb/Target/Target.h (+4)
- (modified) lldb/source/Target/Target.cpp (+19)
- (modified) lldb/source/Target/TargetProperties.td (+4)
- (modified) lldb/test/API/commands/settings/TestSettings.py (+22)
``````````diff
diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h
index fb43f432a08da..b64bda33056f1 100644
--- a/lldb/include/lldb/Target/Target.h
+++ b/lldb/include/lldb/Target/Target.h
@@ -82,6 +82,8 @@ enum DynamicClassInfoHelper {
eDynamicClassInfoHelperGetRealizedClassList,
};
+enum JITEngine { eJITEngineMCJIT, eJITEngineORC };
+
class TargetExperimentalProperties : public Properties {
public:
TargetExperimentalProperties();
@@ -187,6 +189,8 @@ class TargetProperties : public Properties {
FileSpec GetSaveJITObjectsDir() const;
+ JITEngine GetJITEngine() const;
+
bool GetEnableSyntheticValue() const;
bool ShowHexVariableValuesWithLeadingZeroes() const;
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 148d7e0b30dbb..0bf553bd56e45 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -4911,6 +4911,19 @@ static constexpr OptionEnumValueElement g_x86_dis_flavor_value_types[] = {
},
};
+static constexpr OptionEnumValueElement g_jit_engine_value_types[] = {
+ {
+ eJITEngineMCJIT,
+ "mcjit",
+ "Use LLVM's MCJIT execution engine.",
+ },
+ {
+ eJITEngineORC,
+ "orc",
+ "Use LLVM's ORC execution engine.",
+ },
+};
+
static constexpr OptionEnumValueElement g_import_std_module_value_types[] = {
{
eImportStdModuleFalse,
@@ -5530,6 +5543,12 @@ FileSpec TargetProperties::GetSaveJITObjectsDir() const {
return GetPropertyAtIndexAs<FileSpec>(idx, {});
}
+JITEngine TargetProperties::GetJITEngine() const {
+ const uint32_t idx = ePropertyJITEngine;
+ return GetPropertyAtIndexAs<JITEngine>(
+ idx, static_cast<JITEngine>(g_target_properties[idx].default_uint_value));
+}
+
void TargetProperties::CheckJITObjectsDir() {
FileSpec new_dir = GetSaveJITObjectsDir();
if (!new_dir)
diff --git a/lldb/source/Target/TargetProperties.td b/lldb/source/Target/TargetProperties.td
index d63bc741e66ed..0e5a41e8eca1b 100644
--- a/lldb/source/Target/TargetProperties.td
+++ b/lldb/source/Target/TargetProperties.td
@@ -88,6 +88,10 @@ let Definition = "target", Path = "target" in {
def SaveObjectsDir: Property<"save-jit-objects-dir", "FileSpec">,
DefaultStringValue<"">,
Desc<"If specified, the directory to save intermediate object files generated by the LLVM JIT">;
+ def JITEngine: Property<"jit-engine", "Enum">,
+ DefaultEnumValue<"eJITEngineMCJIT">,
+ EnumValues<"OptionEnumValues(g_jit_engine_value_types)">,
+ Desc<"The LLVM execution engine to use for JITting expressions.">;
def ShowHexVariableValuesWithLeadingZeroes: Property<"show-hex-variable-values-with-leading-zeroes", "Boolean">,
Global,
DefaultTrue,
diff --git a/lldb/test/API/commands/settings/TestSettings.py b/lldb/test/API/commands/settings/TestSettings.py
index a66b6baac00a9..d71c077839666 100644
--- a/lldb/test/API/commands/settings/TestSettings.py
+++ b/lldb/test/API/commands/settings/TestSettings.py
@@ -383,6 +383,28 @@ def test_disassembler_settings(self):
self.runCmd("settings set target.hex-immediate-style asm")
self.expect("disassemble -n numberfn", substrs=["5ah"])
+ def test_jit_engine_setting(self):
+ """Test that the target.jit-engine setting round-trips and validates."""
+ # Defaults to mcjit.
+ self.expect(
+ "settings show target.jit-engine",
+ substrs=["target.jit-engine (enum) = mcjit"],
+ )
+
+ self.runCmd("settings set target.jit-engine orc")
+ self.expect(
+ "settings show target.jit-engine",
+ substrs=["target.jit-engine (enum) = orc"],
+ )
+
+ self.runCmd("settings set target.jit-engine mcjit")
+ self.expect(
+ "settings show target.jit-engine",
+ substrs=["target.jit-engine (enum) = mcjit"],
+ )
+
+ self.expect("settings set target.jit-engine bogus", error=True)
+
@skipIfDarwinEmbedded # <rdar://problem/34446098> debugserver on ios etc can't write files
def test_run_args_and_env_vars(self):
self.do_test_run_args_and_env_vars(use_launchsimple=False)
``````````
</details>
https://github.com/llvm/llvm-project/pull/212998
More information about the lldb-commits
mailing list