[Lldb-commits] [lldb] [lldb][NativePDB] Handle UEFI binaries without predetermined load addresses (PR #173499)
Gary Beihl via lldb-commits
lldb-commits at lists.llvm.org
Fri Jan 30 08:20:27 PST 2026
https://github.com/garybeihl updated https://github.com/llvm/llvm-project/pull/173499
>From 5993787f8b3b17ea7de204bdb7df981dad00fece Mon Sep 17 00:00:00 2001
From: Gary Beihl <garybeihl at microsoft.com>
Date: Sun, 28 Dec 2025 18:03:36 -0500
Subject: [PATCH 1/2] [lldb][NativePDB] Handle UEFI binaries without
predetermined load addresses
UEFI executables are relocatable PE/COFF images where GetFileAddress()
returns LLDB_INVALID_ADDRESS, causing symbol load failure from PDB files.
Use base address 0 when load address is invalid, allowing symbols to be
loaded with their RVAs. The module's actual runtime load address must be
provided using `target modules load --file <module> --slide <load_address>`.
Tested with Rust UEFI binaries, successfully loading 5,405 symbols with
full source and line information.
Fixes: #91060
---
.../SymbolFile/NativePDB/SymbolFileNativePDB.cpp | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
index 3bf113a07d28c..40d45153b730f 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
@@ -422,6 +422,16 @@ void SymbolFileNativePDB::InitializeObject() {
->GetObjectFile()
->GetBaseAddress()
.GetFileAddress();
+
+ // For UEFI/PE binaries and other relocatable images lacking a predetermined
+ // load address, GetFileAddress() returns LLDB_INVALID_ADDRESS. Use base
+ // address 0 in this case to allow symbols to be loaded with RVA
+ // (Relative Virtual Address). To debug at runtime, the module's actual load
+ // address must be provided using 'target modules load --file <module> --slide <load_address>'.
+ if (m_obj_load_address == LLDB_INVALID_ADDRESS) {
+ m_obj_load_address = 0x0;
+ }
+
m_index->SetLoadAddress(m_obj_load_address);
m_index->ParseSectionContribs();
>From 863610ea4abb9fa6af31c3ee38735c3b0fed2faf Mon Sep 17 00:00:00 2001
From: Gary Beihl <garybeihl at microsoft.com>
Date: Fri, 30 Jan 2026 11:14:13 -0500
Subject: [PATCH 2/2] Fix coding style: remove braces for single-statement if
body
---
.../Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
index 6d5645d589d0c..9f9ddff600876 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
@@ -428,9 +428,8 @@ void SymbolFileNativePDB::InitializeObject() {
// address 0 in this case to allow symbols to be loaded with RVA
// (Relative Virtual Address). To debug at runtime, the module's actual load
// address must be provided using 'target modules load --file <module> --slide <load_address>'.
- if (m_obj_load_address == LLDB_INVALID_ADDRESS) {
+ if (m_obj_load_address == LLDB_INVALID_ADDRESS)
m_obj_load_address = 0x0;
- }
m_index->SetLoadAddress(m_obj_load_address);
m_index->ParseSectionContribs();
More information about the lldb-commits
mailing list