FTR, the size of the compile-unit header also changed in DWARF version 5, independent of the 32/64 format.
On a different topic, I had thought there was a goal of nuking lldb's copy of the DWARFxxx headers and converting to use LLVM's? Did I imagine this? If I do remember that correctly, fiddling with lldb's copy doesn't make much sense. --paulr From: lldb-commits [mailto:lldb-commits-boun...@lists.llvm.org] On Behalf Of Zachary Turner via lldb-commits Sent: Monday, November 20, 2017 8:17 AM To: Greg Clayton Cc: Jan Kratochvil via Phabricator; lldb-commits@lists.llvm.org; reviews+d40211+public+c1500ec8aeff1...@reviews.llvm.org; jdevliegh...@apple.com; jan.kratoch...@redhat.com Subject: Re: [Lldb-commits] [PATCH] D40211: Add comments to DWARFCompileUnit length fields/methods You can make structs that are host and byte-order independent, LLVM is filled with stuff like this. And while you might end up processing the information off in a way that it can be stored in a single compile unit without such a struct, it still can be useful when you're actually *doing* the parsing. For one, it serves as documentation of the format. It sounds like in order to know what a DWARF64 header looks like currently, I have to go read the code that actually parses one, which might require me to understand several functions and follow some pointer arithmetic and various other stuff. Second, it can converts code like this: ``` if (m_dwarf64) { // read the first field // adjust a pointer // read the second field // adjust a pointer // read the third field // adjust a pointer ... // store the fields in the CompileUnit } else { // read the first field // adjust a pointer // read the second field // adjust a pointer // read the third field // adjust a pointer ... // store the fields in the CompileUnit } ``` into this: ``` if (m_dwarf64) { DWARF64_HEADER h; readStructure(h); // store the fields in the CompileUnit } else { DWARF32_HEADER h; readStructure(h); // store the fields in the CompileUnit } ``` Anyway, you answered my question, which is that we don't have one On Mon, Nov 20, 2017 at 8:07 AM Greg Clayton <clayb...@gmail.com<mailto:clayb...@gmail.com>> wrote: sizeof(struct) tends to include system level padding for the current host. But to answer your question, no there isn't a structure defined like this and we wouldn't use them anyway as we want to fill out one compile unit struct that works for both. On Nov 20, 2017, at 8:01 AM, Zachary Turner <ztur...@google.com<mailto:ztur...@google.com>> wrote: Right but isn’t there a DWARF64_HEADER and DEARF32_HEADER struct somewhere? This way you could just say return m_isdwarf64 ? sizeof(DWARF64_HEADER) : sizeof(DWARF32_HEADER); On Mon, Nov 20, 2017 at 7:50 AM Greg Clayton <clayb...@gmail.com<mailto:clayb...@gmail.com>> wrote: On Nov 19, 2017, at 4:56 PM, Zachary Turner <ztur...@google.com<mailto:ztur...@google.com>> wrote: On Sun, Nov 19, 2017 at 6:35 AM Jan Kratochvil via Phabricator via lldb-commits <lldb-commits@lists.llvm.org<mailto:lldb-commits@lists.llvm.org>> wrote: This revision was automatically updated to reflect the committed changes. Closed by commit rL318626: Add comments to DWARFCompileUnit length fields/methods (authored by jankratochvil). Changed prior to commit: https://reviews.llvm.org/D40211?vs=123472&id=123498#toc Repository: rL LLVM https://reviews.llvm.org/D40211 Files: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h Index: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h =================================================================== --- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h @@ -41,26 +41,24 @@ void Clear(); bool Verify(lldb_private::Stream *s) const; void Dump(lldb_private::Stream *s) const; + // Offset of the initial length field. dw_offset_t GetOffset() const { return m_offset; } lldb::user_id_t GetID() const; - uint32_t Size() const { - return m_is_dwarf64 ? 23 - : 11; /* Size in bytes of the compile unit header */ - } + // Size in bytes of the initial length + compile unit header. + uint32_t Size() const { return m_is_dwarf64 ? 23 : 11; } This is pretty gross. Don't we have a structure somewhere that represents a compile unit header? That we can just call sizeof on? Same goes for the rest of the patch It varies depending on data on how the length unit is represented in the data stream. If the length starts with UINT32_MAX, it is followed by a 64 bit length. If the length isn't UINT32_MAX it is just a 32 bit length.
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits