mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-20 11:32:33 +00:00
Support: Re-implement dwarf::TagString() using a .def file, NFC
Also re-implements the `dwarf::Tag` enumerator. I've moved the mock tags into the enumerator since there's no other way to do this. Really they shouldn't be used at all (they're just a hack to identify `MDNode`s, but we have a class hierarchy for that now). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228030 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
17e8d42c63
commit
b3d53c6065
100
include/llvm/Support/Dwarf.def
Normal file
100
include/llvm/Support/Dwarf.def
Normal file
@ -0,0 +1,100 @@
|
||||
//===- llvm/Support/Dwarf.def - Dwarf definitions ---------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Macros for running through Dwarf enumerators.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// TODO: Add other DW-based macros.
|
||||
#if !defined HANDLE_DW_TAG
|
||||
#error "Missing macro definition of HANDLE_DW*"
|
||||
#endif
|
||||
|
||||
HANDLE_DW_TAG(0x0001, array_type)
|
||||
HANDLE_DW_TAG(0x0002, class_type)
|
||||
HANDLE_DW_TAG(0x0003, entry_point)
|
||||
HANDLE_DW_TAG(0x0004, enumeration_type)
|
||||
HANDLE_DW_TAG(0x0005, formal_parameter)
|
||||
HANDLE_DW_TAG(0x0008, imported_declaration)
|
||||
HANDLE_DW_TAG(0x000a, label)
|
||||
HANDLE_DW_TAG(0x000b, lexical_block)
|
||||
HANDLE_DW_TAG(0x000d, member)
|
||||
HANDLE_DW_TAG(0x000f, pointer_type)
|
||||
HANDLE_DW_TAG(0x0010, reference_type)
|
||||
HANDLE_DW_TAG(0x0011, compile_unit)
|
||||
HANDLE_DW_TAG(0x0012, string_type)
|
||||
HANDLE_DW_TAG(0x0013, structure_type)
|
||||
HANDLE_DW_TAG(0x0015, subroutine_type)
|
||||
HANDLE_DW_TAG(0x0016, typedef)
|
||||
HANDLE_DW_TAG(0x0017, union_type)
|
||||
HANDLE_DW_TAG(0x0018, unspecified_parameters)
|
||||
HANDLE_DW_TAG(0x0019, variant)
|
||||
HANDLE_DW_TAG(0x001a, common_block)
|
||||
HANDLE_DW_TAG(0x001b, common_inclusion)
|
||||
HANDLE_DW_TAG(0x001c, inheritance)
|
||||
HANDLE_DW_TAG(0x001d, inlined_subroutine)
|
||||
HANDLE_DW_TAG(0x001e, module)
|
||||
HANDLE_DW_TAG(0x001f, ptr_to_member_type)
|
||||
HANDLE_DW_TAG(0x0020, set_type)
|
||||
HANDLE_DW_TAG(0x0021, subrange_type)
|
||||
HANDLE_DW_TAG(0x0022, with_stmt)
|
||||
HANDLE_DW_TAG(0x0023, access_declaration)
|
||||
HANDLE_DW_TAG(0x0024, base_type)
|
||||
HANDLE_DW_TAG(0x0025, catch_block)
|
||||
HANDLE_DW_TAG(0x0026, const_type)
|
||||
HANDLE_DW_TAG(0x0027, constant)
|
||||
HANDLE_DW_TAG(0x0028, enumerator)
|
||||
HANDLE_DW_TAG(0x0029, file_type)
|
||||
HANDLE_DW_TAG(0x002a, friend)
|
||||
HANDLE_DW_TAG(0x002b, namelist)
|
||||
HANDLE_DW_TAG(0x002c, namelist_item)
|
||||
HANDLE_DW_TAG(0x002d, packed_type)
|
||||
HANDLE_DW_TAG(0x002e, subprogram)
|
||||
HANDLE_DW_TAG(0x002f, template_type_parameter)
|
||||
HANDLE_DW_TAG(0x0030, template_value_parameter)
|
||||
HANDLE_DW_TAG(0x0031, thrown_type)
|
||||
HANDLE_DW_TAG(0x0032, try_block)
|
||||
HANDLE_DW_TAG(0x0033, variant_part)
|
||||
HANDLE_DW_TAG(0x0034, variable)
|
||||
HANDLE_DW_TAG(0x0035, volatile_type)
|
||||
HANDLE_DW_TAG(0x0036, dwarf_procedure)
|
||||
HANDLE_DW_TAG(0x0037, restrict_type)
|
||||
HANDLE_DW_TAG(0x0038, interface_type)
|
||||
HANDLE_DW_TAG(0x0039, namespace)
|
||||
HANDLE_DW_TAG(0x003a, imported_module)
|
||||
HANDLE_DW_TAG(0x003b, unspecified_type)
|
||||
HANDLE_DW_TAG(0x003c, partial_unit)
|
||||
HANDLE_DW_TAG(0x003d, imported_unit)
|
||||
HANDLE_DW_TAG(0x003f, condition)
|
||||
HANDLE_DW_TAG(0x0040, shared_type)
|
||||
HANDLE_DW_TAG(0x0041, type_unit)
|
||||
HANDLE_DW_TAG(0x0042, rvalue_reference_type)
|
||||
HANDLE_DW_TAG(0x0043, template_alias)
|
||||
|
||||
// Mock tags we use as discriminators.
|
||||
HANDLE_DW_TAG(0x0100, auto_variable) // Tag for local (auto) variables.
|
||||
HANDLE_DW_TAG(0x0101, arg_variable) // Tag for argument variables.
|
||||
HANDLE_DW_TAG(0x0102, expression) // Tag for complex address expressions.
|
||||
|
||||
// New in DWARF v5.
|
||||
HANDLE_DW_TAG(0x0044, coarray_type)
|
||||
HANDLE_DW_TAG(0x0045, generic_subrange)
|
||||
HANDLE_DW_TAG(0x0046, dynamic_type)
|
||||
|
||||
// User-defined tags.
|
||||
HANDLE_DW_TAG(0x4081, MIPS_loop)
|
||||
HANDLE_DW_TAG(0x4101, format_label)
|
||||
HANDLE_DW_TAG(0x4102, function_template)
|
||||
HANDLE_DW_TAG(0x4103, class_template)
|
||||
HANDLE_DW_TAG(0x4106, GNU_template_template_param)
|
||||
HANDLE_DW_TAG(0x4107, GNU_template_parameter_pack)
|
||||
HANDLE_DW_TAG(0x4108, GNU_formal_parameter_pack)
|
||||
HANDLE_DW_TAG(0x4200, APPLE_property)
|
||||
|
||||
#undef HANDLE_DW_TAG
|
@ -36,15 +36,10 @@ namespace dwarf {
|
||||
// enumeration base type.
|
||||
|
||||
enum LLVMConstants : uint32_t {
|
||||
// llvm mock tags
|
||||
DW_TAG_invalid = ~0U, // Tag for invalid results.
|
||||
|
||||
DW_TAG_auto_variable = 0x100, // Tag for local (auto) variables.
|
||||
DW_TAG_arg_variable = 0x101, // Tag for argument variables.
|
||||
DW_TAG_expression = 0x102, // Tag for complex address expressions.
|
||||
|
||||
DW_TAG_user_base = 0x1000, // Recommended base for user tags.
|
||||
// LLVM mock tags (see also llvm/Support/Dwarf.def).
|
||||
DW_TAG_invalid = ~0U, // Tag for invalid results.
|
||||
|
||||
// Other constants.
|
||||
DWARF_VERSION = 4, // Default dwarf version we output.
|
||||
DW_PUBTYPES_VERSION = 2, // Section version number for .debug_pubtypes.
|
||||
DW_PUBNAMES_VERSION = 2, // Section version number for .debug_pubnames.
|
||||
@ -57,82 +52,11 @@ const uint32_t DW_CIE_ID = UINT32_MAX;
|
||||
const uint64_t DW64_CIE_ID = UINT64_MAX;
|
||||
|
||||
enum Tag : uint16_t {
|
||||
DW_TAG_array_type = 0x01,
|
||||
DW_TAG_class_type = 0x02,
|
||||
DW_TAG_entry_point = 0x03,
|
||||
DW_TAG_enumeration_type = 0x04,
|
||||
DW_TAG_formal_parameter = 0x05,
|
||||
DW_TAG_imported_declaration = 0x08,
|
||||
DW_TAG_label = 0x0a,
|
||||
DW_TAG_lexical_block = 0x0b,
|
||||
DW_TAG_member = 0x0d,
|
||||
DW_TAG_pointer_type = 0x0f,
|
||||
DW_TAG_reference_type = 0x10,
|
||||
DW_TAG_compile_unit = 0x11,
|
||||
DW_TAG_string_type = 0x12,
|
||||
DW_TAG_structure_type = 0x13,
|
||||
DW_TAG_subroutine_type = 0x15,
|
||||
DW_TAG_typedef = 0x16,
|
||||
DW_TAG_union_type = 0x17,
|
||||
DW_TAG_unspecified_parameters = 0x18,
|
||||
DW_TAG_variant = 0x19,
|
||||
DW_TAG_common_block = 0x1a,
|
||||
DW_TAG_common_inclusion = 0x1b,
|
||||
DW_TAG_inheritance = 0x1c,
|
||||
DW_TAG_inlined_subroutine = 0x1d,
|
||||
DW_TAG_module = 0x1e,
|
||||
DW_TAG_ptr_to_member_type = 0x1f,
|
||||
DW_TAG_set_type = 0x20,
|
||||
DW_TAG_subrange_type = 0x21,
|
||||
DW_TAG_with_stmt = 0x22,
|
||||
DW_TAG_access_declaration = 0x23,
|
||||
DW_TAG_base_type = 0x24,
|
||||
DW_TAG_catch_block = 0x25,
|
||||
DW_TAG_const_type = 0x26,
|
||||
DW_TAG_constant = 0x27,
|
||||
DW_TAG_enumerator = 0x28,
|
||||
DW_TAG_file_type = 0x29,
|
||||
DW_TAG_friend = 0x2a,
|
||||
DW_TAG_namelist = 0x2b,
|
||||
DW_TAG_namelist_item = 0x2c,
|
||||
DW_TAG_packed_type = 0x2d,
|
||||
DW_TAG_subprogram = 0x2e,
|
||||
DW_TAG_template_type_parameter = 0x2f,
|
||||
DW_TAG_template_value_parameter = 0x30,
|
||||
DW_TAG_thrown_type = 0x31,
|
||||
DW_TAG_try_block = 0x32,
|
||||
DW_TAG_variant_part = 0x33,
|
||||
DW_TAG_variable = 0x34,
|
||||
DW_TAG_volatile_type = 0x35,
|
||||
DW_TAG_dwarf_procedure = 0x36,
|
||||
DW_TAG_restrict_type = 0x37,
|
||||
DW_TAG_interface_type = 0x38,
|
||||
DW_TAG_namespace = 0x39,
|
||||
DW_TAG_imported_module = 0x3a,
|
||||
DW_TAG_unspecified_type = 0x3b,
|
||||
DW_TAG_partial_unit = 0x3c,
|
||||
DW_TAG_imported_unit = 0x3d,
|
||||
DW_TAG_condition = 0x3f,
|
||||
DW_TAG_shared_type = 0x40,
|
||||
DW_TAG_type_unit = 0x41,
|
||||
DW_TAG_rvalue_reference_type = 0x42,
|
||||
DW_TAG_template_alias = 0x43,
|
||||
|
||||
// New in DWARF 5:
|
||||
DW_TAG_coarray_type = 0x44,
|
||||
DW_TAG_generic_subrange = 0x45,
|
||||
DW_TAG_dynamic_type = 0x46,
|
||||
|
||||
DW_TAG_MIPS_loop = 0x4081,
|
||||
DW_TAG_format_label = 0x4101,
|
||||
DW_TAG_function_template = 0x4102,
|
||||
DW_TAG_class_template = 0x4103,
|
||||
DW_TAG_GNU_template_template_param = 0x4106,
|
||||
DW_TAG_GNU_template_parameter_pack = 0x4107,
|
||||
DW_TAG_GNU_formal_parameter_pack = 0x4108,
|
||||
#define HANDLE_DW_TAG(ID, NAME) DW_TAG_##NAME = ID,
|
||||
#include "llvm/Support/Dwarf.def"
|
||||
DW_TAG_lo_user = 0x4080,
|
||||
DW_TAG_APPLE_property = 0x4200,
|
||||
DW_TAG_hi_user = 0xffff
|
||||
DW_TAG_hi_user = 0xffff,
|
||||
DW_TAG_user_base = 0x1000 // Recommended base for user tags.
|
||||
};
|
||||
|
||||
inline bool isType(Tag T) {
|
||||
|
@ -19,85 +19,12 @@ using namespace dwarf;
|
||||
|
||||
const char *llvm::dwarf::TagString(unsigned Tag) {
|
||||
switch (Tag) {
|
||||
case DW_TAG_array_type: return "DW_TAG_array_type";
|
||||
case DW_TAG_class_type: return "DW_TAG_class_type";
|
||||
case DW_TAG_entry_point: return "DW_TAG_entry_point";
|
||||
case DW_TAG_enumeration_type: return "DW_TAG_enumeration_type";
|
||||
case DW_TAG_formal_parameter: return "DW_TAG_formal_parameter";
|
||||
case DW_TAG_imported_declaration: return "DW_TAG_imported_declaration";
|
||||
case DW_TAG_label: return "DW_TAG_label";
|
||||
case DW_TAG_lexical_block: return "DW_TAG_lexical_block";
|
||||
case DW_TAG_member: return "DW_TAG_member";
|
||||
case DW_TAG_pointer_type: return "DW_TAG_pointer_type";
|
||||
case DW_TAG_reference_type: return "DW_TAG_reference_type";
|
||||
case DW_TAG_compile_unit: return "DW_TAG_compile_unit";
|
||||
case DW_TAG_string_type: return "DW_TAG_string_type";
|
||||
case DW_TAG_structure_type: return "DW_TAG_structure_type";
|
||||
case DW_TAG_subroutine_type: return "DW_TAG_subroutine_type";
|
||||
case DW_TAG_typedef: return "DW_TAG_typedef";
|
||||
case DW_TAG_union_type: return "DW_TAG_union_type";
|
||||
case DW_TAG_unspecified_parameters: return "DW_TAG_unspecified_parameters";
|
||||
case DW_TAG_variant: return "DW_TAG_variant";
|
||||
case DW_TAG_common_block: return "DW_TAG_common_block";
|
||||
case DW_TAG_common_inclusion: return "DW_TAG_common_inclusion";
|
||||
case DW_TAG_inheritance: return "DW_TAG_inheritance";
|
||||
case DW_TAG_inlined_subroutine: return "DW_TAG_inlined_subroutine";
|
||||
case DW_TAG_module: return "DW_TAG_module";
|
||||
case DW_TAG_ptr_to_member_type: return "DW_TAG_ptr_to_member_type";
|
||||
case DW_TAG_set_type: return "DW_TAG_set_type";
|
||||
case DW_TAG_subrange_type: return "DW_TAG_subrange_type";
|
||||
case DW_TAG_with_stmt: return "DW_TAG_with_stmt";
|
||||
case DW_TAG_access_declaration: return "DW_TAG_access_declaration";
|
||||
case DW_TAG_base_type: return "DW_TAG_base_type";
|
||||
case DW_TAG_catch_block: return "DW_TAG_catch_block";
|
||||
case DW_TAG_const_type: return "DW_TAG_const_type";
|
||||
case DW_TAG_constant: return "DW_TAG_constant";
|
||||
case DW_TAG_enumerator: return "DW_TAG_enumerator";
|
||||
case DW_TAG_file_type: return "DW_TAG_file_type";
|
||||
case DW_TAG_friend: return "DW_TAG_friend";
|
||||
case DW_TAG_namelist: return "DW_TAG_namelist";
|
||||
case DW_TAG_namelist_item: return "DW_TAG_namelist_item";
|
||||
case DW_TAG_packed_type: return "DW_TAG_packed_type";
|
||||
case DW_TAG_subprogram: return "DW_TAG_subprogram";
|
||||
case DW_TAG_template_type_parameter: return "DW_TAG_template_type_parameter";
|
||||
case DW_TAG_template_value_parameter: return "DW_TAG_template_value_parameter";
|
||||
case DW_TAG_thrown_type: return "DW_TAG_thrown_type";
|
||||
case DW_TAG_try_block: return "DW_TAG_try_block";
|
||||
case DW_TAG_variant_part: return "DW_TAG_variant_part";
|
||||
case DW_TAG_variable: return "DW_TAG_variable";
|
||||
case DW_TAG_volatile_type: return "DW_TAG_volatile_type";
|
||||
case DW_TAG_dwarf_procedure: return "DW_TAG_dwarf_procedure";
|
||||
case DW_TAG_restrict_type: return "DW_TAG_restrict_type";
|
||||
case DW_TAG_interface_type: return "DW_TAG_interface_type";
|
||||
case DW_TAG_namespace: return "DW_TAG_namespace";
|
||||
case DW_TAG_imported_module: return "DW_TAG_imported_module";
|
||||
case DW_TAG_unspecified_type: return "DW_TAG_unspecified_type";
|
||||
case DW_TAG_partial_unit: return "DW_TAG_partial_unit";
|
||||
case DW_TAG_imported_unit: return "DW_TAG_imported_unit";
|
||||
case DW_TAG_condition: return "DW_TAG_condition";
|
||||
case DW_TAG_shared_type: return "DW_TAG_shared_type";
|
||||
case DW_TAG_auto_variable: return "DW_TAG_auto_variable";
|
||||
case DW_TAG_arg_variable: return "DW_TAG_arg_variable";
|
||||
case DW_TAG_expression: return "DW_TAG_expression";
|
||||
case DW_TAG_rvalue_reference_type: return "DW_TAG_rvalue_reference_type";
|
||||
case DW_TAG_template_alias: return "DW_TAG_template_alias";
|
||||
case DW_TAG_coarray_type: return "DW_TAG_coarray_type";
|
||||
case DW_TAG_generic_subrange: return "DW_TAG_generic_subrange";
|
||||
case DW_TAG_dynamic_type: return "DW_TAG_dynamic_type";
|
||||
case DW_TAG_MIPS_loop: return "DW_TAG_MIPS_loop";
|
||||
case DW_TAG_type_unit: return "DW_TAG_type_unit";
|
||||
case DW_TAG_format_label: return "DW_TAG_format_label";
|
||||
case DW_TAG_function_template: return "DW_TAG_function_template";
|
||||
case DW_TAG_class_template: return "DW_TAG_class_template";
|
||||
case DW_TAG_GNU_template_template_param:
|
||||
return "DW_TAG_GNU_template_template_param";
|
||||
case DW_TAG_GNU_template_parameter_pack:
|
||||
return "DW_TAG_GNU_template_parameter_pack";
|
||||
case DW_TAG_GNU_formal_parameter_pack:
|
||||
return "DW_TAG_GNU_formal_parameter_pack";
|
||||
case DW_TAG_APPLE_property: return "DW_TAG_APPLE_property";
|
||||
default: return nullptr;
|
||||
#define HANDLE_DW_TAG(ID, NAME) \
|
||||
case DW_TAG_##NAME: \
|
||||
return "DW_TAG_" #NAME;
|
||||
#include "llvm/Support/Dwarf.def"
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const char *llvm::dwarf::ChildrenString(unsigned Children) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user