[Lldb-commits] [PATCH] D55356: Add a method to get the "base" file address of an object file

Jim Ingham via lldb-commits lldb-commits at lists.llvm.org
Tue Dec 11 10:17:42 PST 2018


It the section isn't in the target's SectionLoadList, then GetLoadAddress should return LLDB_INVALID_ADDRESS.  I.e. this bit from Section::GetLoadBaseAddress:

    load_base_addr = target->GetSectionLoadList().GetSectionLoadAddress(
        const_cast<Section *>(this)->shared_from_this());

should return LLDB_INVALID_ADDRESS because the section isn't in the load list.

Are we putting sections in the target's section load list before we've actually seen them loaded.  I'm pretty sure we shouldn't do that.

Jim


> On Dec 11, 2018, at 9:58 AM, Pavel Labath via Phabricator via lldb-commits <lldb-commits at lists.llvm.org> wrote:
> 
> labath added a comment.
> 
> In D55356#1327224 <https://reviews.llvm.org/D55356#1327224>, @clayborg wrote:
> 
>> In D55356#1327099 <https://reviews.llvm.org/D55356#1327099>, @labath wrote:
>> 
>>> Actually, this now causes an lldb-mi test to fail, but it's not clear to me if the problem is in the test, or this patch. This issue happens when lldb-mi is printing the "library loaded" message after a module gets added to a not-yet-running target. It tries to print the load address by first getting the base address and then converting that to a load address.
>>> 
>>> Before this patch, that would always fail, because well.. ELF and PECOFF had this function unimplemented, and for MachO the base address was section-relative, and so it wasn't resolved to a load address without the section being loaded. However, with this patch, in the ELF (and presumably PECOFF) case, the load address is not section-relative and so the `GetLoadAddress` function happily returns the address.
>>> 
>>> Is this the expected behavior here? (i.e., object_file->GetLoadAddress().GetLoadAddress(target) returning a valid value even though the target is not running)
>> 
>> 
>> Not unless someone has manually set the section load address in the test?
> 
> 
> The test is not setting the load address manually. This simply falls out of how `Address::GetLoadAddress`  is implemented:
> 
>  addr_t Address::GetLoadAddress(Target *target) const {
>    SectionSP section_sp(GetSection());
>    if (section_sp) {
>      ...
>    } else {
>      // We don't have a section so the offset is the load address
>      return m_offset;
>    }
>  }
> 
> So, where's the bug here? It's not clear to me how to change `Address::GetLoadAddress` to do something different than what it is doing now.
> 
> 
> CHANGES SINCE LAST ACTION
>  https://reviews.llvm.org/D55356/new/
> 
> https://reviews.llvm.org/D55356
> 
> 
> 
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits



More information about the lldb-commits mailing list