MaskRay accepted this revision. MaskRay added a comment. This revision is now accepted and ready to land.
In D65282#1602293 <https://reviews.llvm.org/D65282#1602293>, @labath wrote: > In D65282#1602244 <https://reviews.llvm.org/D65282#1602244>, @MaskRay wrote: > > > > Are you referring to the "image lookup" command specifically, or is it a > > > more general question about the internals of lldb too? > > > > Both:) This patch doesn't change the `Address: a.o[0x00001010] > > (a.o.PT_LOAD[0]..tdata + 0)` output so I was puzzled what this patch > > intends to do. > > > What do you mean by "doesn't change"? After this patch the addresses always > resolve to the .data section.. > > > > > > >> However, I can see how it might be interesting to be able to see the > >> initial value of a thread local variable much like we can display the > >> initial value of a global variable without launching a process. For this > >> case, a flag to Section::ContainsFileAddress saying "yes, I want to look > >> up in thread-local sections now" would suffice, but I don't know if this > >> is the only use case... > > > > Yes, inspecting the initial value of a thread-local variable is a use case. > > To that end, can this be done by introducing another member variable > > instead of overloading `m_sections_up` with a new purpose (adding > > `PT_TLS`)? If PT_TLS is recorded in a different variable, the change below > > can be deleted. > > I think that would be pretty significant departure from the current design of > lldb. Lldb expects that the "section list" of a module will contain all of > the module's sections (and before I started messing with these functions, it > did). This includes non-loadable sections like .debug_info et al. While one > could concieve a world where tls sections are in a special "tls" section > list, I am not sure this is actually useful -- if we're going to think of the > tls addresses as address spaces, then its reasonable to have more than two > address spaces one day (there are people interested in that), and so we > couldn't have a fixed set of section lists. I see. If that would be a significant departure, the current approach should be the choice. I didn't non-SHF_ALLOC sections are also in the list. If .debug_info et all are in the list, I don't see any problem to have PT_TLS in the list since those PT_LOAD are already in the list. >> >> >> bool Section::ContainsFileAddress(addr_t vm_addr) const { >> const addr_t file_addr = GetFileAddress(); >> - if (file_addr != LLDB_INVALID_ADDRESS) { >> + if (file_addr != LLDB_INVALID_ADDRESS && !IsThreadSpecific()) { >> >> >> (An adjacent pair of PT_LOAD segments can load the same file contents, e.g. >> PT_LOAD `[0x150, 0x1234)` and `[0x1234, 0x1800)` will transform to mmap >> calls with ranges `[0, 0x2000)` and `[0x1000, 0x2000)` at runtime if the >> runtime page size = 0x1000. They share one page in the file. If you ask what >> a specific offset in the file is mapped to, there can be multiple PT_LOAD >> segments (physical -> VMA is not unique). Fortunately the reverse mapping >> VMA -> physical offset can be treated as unique in practice >> (`[p_vaddr,p_vaddr+p_memsz)` ranges do not overlap).) > > I am not 100% what you mean by this, but I think there's some confusion about > names of things here. In lldb terms, a "file address" is the "load address, > as it is written in the file. It is not the "physical offset within the > file", which lldb calls "file offset". Unfortunately, this terminology has > caused a lot of confusion in the past, but I don't know what would be the > best way to resolve this. How does lld call these things? I guess there's > less confusion there as lld does not have to care about real, memory, load > addresses... Maybe we can refer to these things with ELF terminology: p_offset (offsets in the file)/p_vaddr (VMA)/p_paddr (LMA)... ================ Comment at: lit/Modules/ELF/PT_LOAD-overlap-PT_TLS.yaml:62 + Flags: [ SHF_ALLOC, SHF_WRITE ] + Address: 0x1000 + AddressAlign: 0x4 ---------------- labath wrote: > MaskRay wrote: > > `.data = .tbss = 0x1010` is a more realistic scenario. > > > > Normally, a SHT_PROGBITS section may overlap with a SHT_NOBITS section, but > > two SHT_PROGBITS sections do not overlap (ld has an on-by-default check `ld > > --check-sections`). Linkers allocate file bytes for SHT_PROGBITS sections > > so their occupied bytes cannot be reused by other sections (without fixing > > addresses with a linker script). > Interesting. I can that easily, but I'm wondering, do you know the reason for > that? Is it just how it falls out of the default linker processing of things, > or would something actually break if I assigned identical addresses to two > SHT_PROGBITS sections? https://github.com/llvm-mirror/lld/blob/master/ELF/Writer.cpp#L2412 SHT_PROGBITS sections occupy space in the file but SHT_NOBITS sections don't. The linker doesn't allocate the same byte for different sections, unless you fix the VMA/LMA with a linker script. So usually SHT_PROGBITS sections cannot overlap. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D65282/new/ https://reviews.llvm.org/D65282 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits