Skip to content

Commit 78f464e

Browse files
committed
[lldb][DWARF] Generalize logic to get encoding from a DWARF Type tag
This patch generalizes the logic to represent an EncodingDataType from a DWARF tag, decoupling from the current clang-specific DAWRF parser, allowing other languages to be integrated without code duplication. Signed-off-by: Luís Ferreira <contact@lsferreira.net>
1 parent 47403dd commit 78f464e

3 files changed

Lines changed: 28 additions & 26 deletions

File tree

lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParser.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,3 +287,27 @@ TypeSP DWARFASTParser::UpdateSymbolContextScopeForType(
287287
dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get();
288288
return type_sp;
289289
}
290+
291+
lldb_private::Type::EncodingDataType DWARFASTParser::GetEncodingFromDWARFTypeTag(dw_tag_t tag)
292+
{
293+
switch(tag) {
294+
case DW_TAG_pointer_type:
295+
return Type::eEncodingIsPointerUID;
296+
case DW_TAG_reference_type:
297+
return Type::eEncodingIsLValueReferenceUID;
298+
case DW_TAG_rvalue_reference_type:
299+
return Type::eEncodingIsRValueReferenceUID;
300+
case DW_TAG_typedef:
301+
return Type::eEncodingIsTypedefUID;
302+
case DW_TAG_const_type:
303+
return Type::eEncodingIsConstUID;
304+
case DW_TAG_restrict_type:
305+
return Type::eEncodingIsRestrictUID;
306+
case DW_TAG_volatile_type:
307+
return Type::eEncodingIsVolatileUID;
308+
case DW_TAG_atomic_type:
309+
return Type::eEncodingIsAtomicUID;
310+
default:
311+
return Type::eEncodingIsUID;
312+
}
313+
}

lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParser.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "lldb/Utility/ConstString.h"
1717
#include "lldb/Core/PluginInterface.h"
1818
#include "lldb/Symbol/SymbolFile.h"
19+
#include "lldb/Symbol/Type.h"
1920
#include "lldb/Symbol/CompilerDecl.h"
2021
#include "lldb/Symbol/CompilerDeclContext.h"
2122
#include "lldb/lldb-enumerations.h"
@@ -62,6 +63,8 @@ class DWARFASTParser {
6263

6364
static lldb::AccessType GetAccessTypeFromDWARF(uint32_t dwarf_accessibility);
6465

66+
static lldb_private::Type::EncodingDataType GetEncodingFromDWARFTypeTag(dw_tag_t tag);
67+
6568
/// If \p type_sp is valid, calculate and set its symbol context scope, and
6669
/// update the type list for its backing symbol file.
6770
///

lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ DWARFASTParserClang::ParseTypeModifier(const SymbolContext &sc,
412412
const dw_tag_t tag = die.Tag();
413413
LanguageType cu_language = SymbolFileDWARF::GetLanguage(*die.GetCU());
414414
Type::ResolveState resolve_state = Type::ResolveState::Unresolved;
415-
Type::EncodingDataType encoding_data_type = Type::eEncodingIsUID;
415+
Type::EncodingDataType encoding_data_type = GetEncodingFromDWARFTypeTag(tag);
416416
TypeSP type_sp;
417417
CompilerType clang_type;
418418

@@ -488,31 +488,6 @@ DWARFASTParserClang::ParseTypeModifier(const SymbolContext &sc,
488488
attrs.name.GetStringRef(), attrs.encoding,
489489
attrs.byte_size.getValueOr(0) * 8);
490490
break;
491-
492-
case DW_TAG_pointer_type:
493-
encoding_data_type = Type::eEncodingIsPointerUID;
494-
break;
495-
case DW_TAG_reference_type:
496-
encoding_data_type = Type::eEncodingIsLValueReferenceUID;
497-
break;
498-
case DW_TAG_rvalue_reference_type:
499-
encoding_data_type = Type::eEncodingIsRValueReferenceUID;
500-
break;
501-
case DW_TAG_typedef:
502-
encoding_data_type = Type::eEncodingIsTypedefUID;
503-
break;
504-
case DW_TAG_const_type:
505-
encoding_data_type = Type::eEncodingIsConstUID;
506-
break;
507-
case DW_TAG_restrict_type:
508-
encoding_data_type = Type::eEncodingIsRestrictUID;
509-
break;
510-
case DW_TAG_volatile_type:
511-
encoding_data_type = Type::eEncodingIsVolatileUID;
512-
break;
513-
case DW_TAG_atomic_type:
514-
encoding_data_type = Type::eEncodingIsAtomicUID;
515-
break;
516491
}
517492

518493
if (!clang_type && (encoding_data_type == Type::eEncodingIsPointerUID ||

0 commit comments

Comments
 (0)