Skip to content

Commit fbef6c5

Browse files
committed
[lldb] Declare extern template instantiation to fix linking issues.
NativeProcessELF::GetELFImageInfoAddress<...>() is declared in NativeProcessELF.h, but only defined in NativeProcessELF.cpp. Via some optimized builds (e.g. thinlto), this instantiation may be removed when it is used in a different TU (NativeProcessELFTest.cpp).
1 parent 57f2a78 commit fbef6c5

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ lldb::addr_t NativeProcessELF::GetELFImageInfoAddress() {
107107
return LLDB_INVALID_ADDRESS;
108108
}
109109

110+
template lldb::addr_t NativeProcessELF::GetELFImageInfoAddress<
111+
llvm::ELF::Elf32_Ehdr, llvm::ELF::Elf32_Phdr, llvm::ELF::Elf32_Dyn>();
112+
template lldb::addr_t NativeProcessELF::GetELFImageInfoAddress<
113+
llvm::ELF::Elf64_Ehdr, llvm::ELF::Elf64_Phdr, llvm::ELF::Elf64_Dyn>();
114+
110115
template <typename T>
111116
llvm::Expected<SVR4LibraryInfo>
112117
NativeProcessELF::ReadSVR4LibraryInfo(lldb::addr_t link_map_addr) {

lldb/source/Plugins/Process/POSIX/NativeProcessELF.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ class NativeProcessELF : public NativeProcessProtocol {
4848
llvm::Optional<lldb::addr_t> m_shared_library_info_addr;
4949
};
5050

51+
// Explicitly declare the two 32/64 bit templates that NativeProcessELF.cpp will
52+
// define. This allows us to keep the template definition here and usable
53+
// elsewhere.
54+
extern template lldb::addr_t NativeProcessELF::GetELFImageInfoAddress<
55+
llvm::ELF::Elf32_Ehdr, llvm::ELF::Elf32_Phdr, llvm::ELF::Elf32_Dyn>();
56+
extern template lldb::addr_t NativeProcessELF::GetELFImageInfoAddress<
57+
llvm::ELF::Elf64_Ehdr, llvm::ELF::Elf64_Phdr, llvm::ELF::Elf64_Dyn>();
58+
5159
} // namespace lldb_private
5260

53-
#endif
61+
#endif

0 commit comments

Comments
 (0)