[lldb-dev] Question on assert
Todd Fiala via lldb-dev
lldb-dev at lists.llvm.org
Thu Oct 15 08:10:31 PDT 2015
Okay! I'll give that a shot now and report back what I find.
Thanks, Tamas :-)
-Todd
On Thu, Oct 15, 2015 at 3:37 AM, Tamas Berghammer <tberghammer at google.com>
wrote:
> Hi Todd,
>
> The 64 bit ID of a DIE is built up in the following way:
> * The offset of the DIE is in the lower 32 bit
> * If we are using SymbolFileDWARF then the higher 32 bit is the offset of
> the compile unit this DIE belongs to
> * If we are using SymbolFileDWARFDwo then the higher 32 bit is the offset
> of the base compile unit in the parent SymbolFileDWARF
> * If we are using SymbolFileDWARFDebugMap then the higher 32 bit is the ID
> of the SymbolFileDWARF this DIE belongs to
> * If the higher 32 bit is 0 then that means that the source of the DIE
> isn't specified
>
> The assert then tries to verify that one of the following conditions holds:
> * The higher 32 bit of "id" is 0 what means that we don't have a symbol
> file pointer (AFAIK shouldn't happen) or we are coming from a
> SymbolFileDWARF
> * The higher 32 bit of "cu_id" is 0 what means that the compile unit is at
> 0 offset what is the case for the single compile units in
> SymbolFileDWARFDwo (and I think for SymbolFileDWARFDebugMap)
> * The higher 32 bit of "id" (what is the ID of the SymbolFileDWARF we are
> belonging to) matches with the higher 32 bit of "cu_id" (what is the offset
> of the compile unit in the base object file)
>
> After thinking a bit more about the assert I think the problem is that the
> way I calculate cu_id is incompatible for the case when we are using
> SymbolFileDWARFDebugMap.
>
> I think changing line 188 to the following should fix the issue:
> lldb::user_id_t cu_id = m_cu->GetID()&0xffffffff00000000ull;
>
> Please give it a try on OSX and let me know if it helps. I tested it on
> Linux and it isn't cause any regression there.
>
> Thanks,
> Tamas
>
> On Wed, Oct 14, 2015 at 9:13 PM Todd Fiala <todd.fiala at gmail.com> wrote:
>
>> Hi Tamas,
>>
>> There is an assert in DWARFDIE.cpp (lines 189 - 191) that we're hitting
>> on the OS X side somewhat frequently nowadays:
>>
>> assert ((id&0xffffffff00000000ull) == 0 ||
>>
>> (cu_id&0xffffffff00000000ll) == 0 ||
>>
>> (id&0xffffffff00000000ull) == (cu_id&
>> 0xffffffff00000000ll));
>>
>>
>> It does not seem to get hit consistently. We're trying to tease apart
>> what it is trying to do. It's a bit strange since it is saying that the
>> assert should not fire if any one of three clauses is true. But it's hard
>> to figure out what exactly is going on there.
>>
>>
>> Can you elucidate what this is trying to do? Thanks!
>>
>> --
>> -Todd
>>
>
--
-Todd
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20151015/0e955e4a/attachment-0001.html>
More information about the lldb-dev
mailing list