[Lldb-commits] [lldb] [LLDB][ELF] Fix section unification to not just use names. (PR #90099)
Alastair Houghton via lldb-commits
lldb-commits at lists.llvm.org
Fri Apr 26 03:19:32 PDT 2024
================
@@ -1854,6 +1854,49 @@ class VMAddressProvider {
};
}
+namespace {
+ // We have to do this because ELF doesn't have section IDs, and also
+ // doesn't require section names to be unique. (We use the section index
+ // for section IDs, but that isn't guaranteed to be the same in separate
+ // debug images.)
+ SectionSP FindMatchingSection(const SectionList §ion_list,
+ SectionSP section) {
+ SectionSP sect_sp;
+
+ addr_t vm_addr = section->GetFileAddress();
+ ConstString name = section->GetName();
+ offset_t file_size = section->GetFileSize();
+ offset_t byte_size = section->GetByteSize();
+ SectionType type = section->GetType();
+ bool thread_specific = section->IsThreadSpecific();
+ uint32_t permissions = section->GetPermissions();
+ uint32_t alignment = section->GetLog2Align();
+
+ for (auto sect_iter = section_list.begin();
+ sect_iter != section_list.end();
+ ++sect_iter) {
+ if ((*sect_iter)->GetName() == name
+ && (*sect_iter)->GetType() == type
+ && (*sect_iter)->IsThreadSpecific() == thread_specific
+ && (*sect_iter)->GetPermissions() == permissions
+ && (*sect_iter)->GetFileSize() == file_size
+ && (*sect_iter)->GetByteSize() == byte_size
+ && (*sect_iter)->GetFileAddress() == vm_addr
+ && (*sect_iter)->GetLog2Align() == alignment) {
----------------
al45tair wrote:
I didn't want to do that, because I didn't want to give the impression that this was a general purpose way to compare two `Section`s. While it checks _many_ of the section attributes, it doesn't check all of them (intentionally in the case of which object they come from), and I think that would be surprising behaviour from an `==` operator.
https://github.com/llvm/llvm-project/pull/90099
More information about the lldb-commits
mailing list