clayborg requested changes to this revision. clayborg added a comment. This revision now requires changes to proceed.
Only add sections that don't have children in AddSectionsToRangeMap() and this will be good to go. ================ Comment at: source/Symbol/Symtab.cpp:952-975 @@ +951,26 @@ +// recusively adding any children sections. +static void +AddSectionsToRangeMap (SectionList *sectlist, RangeVector<addr_t, addr_t> §ion_ranges) +{ + const int num_sections = sectlist->GetNumSections (0); + for (int i = 0; i < num_sections; i++) + { + SectionSP sect_sp = sectlist->GetSectionAtIndex (i); + if (sect_sp) + { + addr_t base_addr = sect_sp->GetFileAddress(); + size_t size = sect_sp->GetByteSize(); + RangeVector<addr_t, addr_t>::Entry entry; + entry.SetRangeBase (base_addr); + entry.SetByteSize (size); + section_ranges.Append (entry); + + SectionList &child_sectlist = sect_sp->GetChildren(); + if (child_sectlist.GetNumSections (0) > 0) + { + AddSectionsToRangeMap (&child_sectlist, section_ranges); + } + } + } +} + ---------------- You want to only add sections that don't have children. On MacOSX we have: __TEXT [0x1000-0x2000) __text [0x1000-0x1100) __textcoal_nt [0x1100-0x1200) If you have all of these in the mix you will have a non deterministic sort since __TEXT and __text will compare to the same thing. Object files are also tricky because they have only one LC_SEGMENT with a bunch of sections and the ObjectFileMachO will actually make segments from the segname and sectname and they will have overlapping address ranges. Checking out a .o file from a recent build: ``` % dwarfdump -R main.o Sections Section Name Segment Name addr size offset align reloff nreloc flags reserv1 reserv2 reserv3 size size % ---------------- ---------------- ---------------- ---------------- -------- -------- -------- -------- -------- -------- -------- -------- ======== ====== __text __TEXT 0000000000000000 0000000000000165 00000590 00000004 00000b60 00000015 80000400 00000000 00000000 00000000 357 nan% __debug_info __DWARF 0000000000000165 00000000000000da 000006f5 00000000 00000c08 00000004 02000000 00000000 00000000 00000000 218 nan% __debug_abbrev __DWARF 000000000000023f 000000000000007d 000007cf 00000000 00000000 00000000 02000000 00000000 00000000 00000000 125 nan% __debug_line __DWARF 00000000000002bc 0000000000000075 0000084c 00000000 00000c28 00000001 02000000 00000000 00000000 00000000 117 nan% __debug_str __DWARF 0000000000000331 000000000000008f 000008c1 00000000 00000000 00000000 02000000 00000000 00000000 00000000 143 nan% __debug_loc __DWARF 00000000000003c0 0000000000000000 00000950 00000000 00000000 00000000 02000000 00000000 00000000 00000000 0 nan% __debug_ranges __DWARF 00000000000003c0 0000000000000000 00000950 00000000 00000000 00000000 02000000 00000000 00000000 00000000 0 nan% __cstring __TEXT 00000000000003c0 000000000000009c 00000950 00000000 00000000 00000000 00000002 00000000 00000000 00000000 156 nan% __apple_names __DWARF 000000000000045c 000000000000003c 000009ec 00000000 00000000 00000000 02000000 00000000 00000000 00000000 60 nan% __apple_objc __DWARF 0000000000000498 0000000000000024 00000a28 00000000 00000000 00000000 02000000 00000000 00000000 00000000 36 nan% __apple_namespac __DWARF 00000000000004bc 0000000000000024 00000a4c 00000000 00000000 00000000 02000000 00000000 00000000 00000000 36 nan% __apple_types __DWARF 00000000000004e0 0000000000000066 00000a70 00000000 00000000 00000000 02000000 00000000 00000000 00000000 102 nan% __apple_exttypes __DWARF 0000000000000546 0000000000000024 00000ad6 00000000 00000000 00000000 02000000 00000000 00000000 00000000 36 nan% __compact_unwind __LD 0000000000000570 0000000000000020 00000b00 00000003 00000c30 00000001 02000000 00000000 00000000 00000000 32 nan% __eh_frame __TEXT 0000000000000590 0000000000000040 00000b20 00000003 00000000 00000000 6800000b 00000000 00000000 00000000 64 nan% ``` Now if we look at what ObjectFileMachO does: ``` % xcrun lldb main.o (lldb) target create "main.o" Current executable set to 'main.o' (x86_64). (lldb) image dump sections Dumping sections for 1 modules. Sections for '/Volumes/work/gclayton/Documents/src/args/main.o' (x86_64): SectID Type File Address File Off. File Size Flags Section Name ---------- ---------------- --------------------------------------- ---------- ---------- ---------- ---------------------------- 0x00000100 container [0x0000000000000000-0x00000000000005d0) 0x00000590 0x000005d0 0x00000000 main.o.__TEXT 0x00000001 code [0x0000000000000000-0x0000000000000165) 0x00000590 0x00000165 0x80000400 main.o.__TEXT.__text 0x00000008 data-cstr [0x00000000000003c0-0x000000000000045c) 0x00000950 0x0000009c 0x00000002 main.o.__TEXT.__cstring 0x0000000f eh-frame [0x0000000000000590-0x00000000000005d0) 0x00000b20 0x00000040 0x6800000b main.o.__TEXT.__eh_frame 0x00000200 container [0x0000000000000165-0x000000000000056a) 0x000006f5 0x00000405 0x00000000 main.o.__DWARF 0x00000002 dwarf-info [0x0000000000000165-0x000000000000023f) 0x000006f5 0x000000da 0x02000000 main.o.__DWARF.__debug_info 0x00000003 dwarf-abbrev [0x000000000000023f-0x00000000000002bc) 0x000007cf 0x0000007d 0x02000000 main.o.__DWARF.__debug_abbrev 0x00000004 dwarf-line [0x00000000000002bc-0x0000000000000331) 0x0000084c 0x00000075 0x02000000 main.o.__DWARF.__debug_line 0x00000005 dwarf-str [0x0000000000000331-0x00000000000003c0) 0x000008c1 0x0000008f 0x02000000 main.o.__DWARF.__debug_str 0x00000006 dwarf-loc 0x00000950 0x00000000 0x02000000 main.o.__DWARF.__debug_loc 0x00000007 dwarf-ranges 0x00000950 0x00000000 0x02000000 main.o.__DWARF.__debug_ranges 0x00000009 apple-names [0x000000000000045c-0x0000000000000498) 0x000009ec 0x0000003c 0x02000000 main.o.__DWARF.__apple_names 0x0000000a apple-objc [0x0000000000000498-0x00000000000004bc) 0x00000a28 0x00000024 0x02000000 main.o.__DWARF.__apple_objc 0x0000000b apple-namespaces [0x00000000000004bc-0x00000000000004e0) 0x00000a4c 0x00000024 0x02000000 main.o.__DWARF.__apple_namespac 0x0000000c apple-types [0x00000000000004e0-0x0000000000000546) 0x00000a70 0x00000066 0x02000000 main.o.__DWARF.__apple_types 0x0000000d apple-external-types [0x0000000000000546-0x000000000000056a) 0x00000ad6 0x00000024 0x02000000 main.o.__DWARF.__apple_exttypes 0x00000300 container [0x0000000000000570-0x0000000000000590) 0x00000b00 0x00000020 0x00000000 main.o.__LD 0x0000000e regular [0x0000000000000570-0x0000000000000590) 0x00000b00 0x00000020 0x02000000 main.o.__LD.__compact_unwind ``` Note that __TEXT and __DWARF overlap. That will probably cause problems. So the fix is to only add sections that don't have children. Repository: rL LLVM http://reviews.llvm.org/D19004 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits