From 23865816d56043bf5ef8ce09ee4a48970062064a Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Fri, 28 Oct 2016 22:56:45 +0000 Subject: [PATCH] Refactor all DW_FORM_* constants into Dwarf.def llvm-svn: 285470 --- llvm/include/llvm/Support/Dwarf.def | 53 ++++++++++++++++++++++++++++++++++++- llvm/include/llvm/Support/Dwarf.h | 49 +++------------------------------- llvm/lib/Support/Dwarf.cpp | 40 +++++----------------------- 3 files changed, 61 insertions(+), 81 deletions(-) diff --git a/llvm/include/llvm/Support/Dwarf.def b/llvm/include/llvm/Support/Dwarf.def index e5c6506..610239d 100644 --- a/llvm/include/llvm/Support/Dwarf.def +++ b/llvm/include/llvm/Support/Dwarf.def @@ -12,7 +12,8 @@ //===----------------------------------------------------------------------===// // TODO: Add other DW-based macros. -#if !(defined HANDLE_DW_TAG || defined HANDLE_DW_AT || defined HANDLE_DW_OP || \ +#if !(defined HANDLE_DW_TAG || defined HANDLE_DW_AT || \ + defined HANDLE_DW_FORM || defined HANDLE_DW_OP || \ defined HANDLE_DW_LANG || defined HANDLE_DW_ATE || \ defined HANDLE_DW_VIRTUALITY || defined HANDLE_DW_DEFAULTED || \ defined HANDLE_DW_CC || defined HANDLE_DW_LNCT || \ @@ -28,6 +29,10 @@ #define HANDLE_DW_AT(ID, NAME) #endif +#ifndef HANDLE_DW_FORM +#define HANDLE_DW_FORM(ID, NAME) +#endif + #ifndef HANDLE_DW_OP #define HANDLE_DW_OP(ID, NAME) #endif @@ -358,6 +363,51 @@ HANDLE_DW_AT(0x3feb, APPLE_property_attribute) HANDLE_DW_AT(0x3fec, APPLE_objc_complete_type) HANDLE_DW_AT(0x3fed, APPLE_property) +// Attribute form encodings. +HANDLE_DW_FORM(0x01, addr) +HANDLE_DW_FORM(0x03, block2) +HANDLE_DW_FORM(0x04, block4) +HANDLE_DW_FORM(0x05, data2) +HANDLE_DW_FORM(0x06, data4) +HANDLE_DW_FORM(0x07, data8) +HANDLE_DW_FORM(0x08, string) +HANDLE_DW_FORM(0x09, block) +HANDLE_DW_FORM(0x0a, block1) +HANDLE_DW_FORM(0x0b, data1) +HANDLE_DW_FORM(0x0c, flag) +HANDLE_DW_FORM(0x0d, sdata) +HANDLE_DW_FORM(0x0e, strp) +HANDLE_DW_FORM(0x0f, udata) +HANDLE_DW_FORM(0x10, ref_addr) +HANDLE_DW_FORM(0x11, ref1) +HANDLE_DW_FORM(0x12, ref2) +HANDLE_DW_FORM(0x13, ref4) +HANDLE_DW_FORM(0x14, ref8) +HANDLE_DW_FORM(0x15, ref_udata) +HANDLE_DW_FORM(0x16, indirect) +HANDLE_DW_FORM(0x17, sec_offset) +HANDLE_DW_FORM(0x18, exprloc) +HANDLE_DW_FORM(0x19, flag_present) + +// New in DWARF v5. +HANDLE_DW_FORM(0x1a, strx) +HANDLE_DW_FORM(0x1b, addrx) +HANDLE_DW_FORM(0x1c, ref_sup) +HANDLE_DW_FORM(0x1d, strp_sup) +HANDLE_DW_FORM(0x1e, data16) +HANDLE_DW_FORM(0x1f, line_strp) +HANDLE_DW_FORM(0x20, ref_sig8) +HANDLE_DW_FORM(0x21, implicit_const) +HANDLE_DW_FORM(0x22, loclistx) +HANDLE_DW_FORM(0x23, rnglistx) + +// Extensions for Fission proposal +HANDLE_DW_FORM(0x1f01, GNU_addr_index) +HANDLE_DW_FORM(0x1f02, GNU_str_index) + +// Alternate debug sections proposal (output of "dwz" tool). +HANDLE_DW_FORM(0x1f20, GNU_ref_alt) +HANDLE_DW_FORM(0x1f21, GNU_strp_alt) // DWARF Expression operators. HANDLE_DW_OP(0x03, addr) @@ -656,6 +706,7 @@ HANDLE_DW_RLE(0x07, start_length) #undef HANDLE_DW_TAG #undef HANDLE_DW_AT +#undef HANDLE_DW_FORM #undef HANDLE_DW_OP #undef HANDLE_DW_LANG #undef HANDLE_DW_ATE diff --git a/llvm/include/llvm/Support/Dwarf.h b/llvm/include/llvm/Support/Dwarf.h index 128b0c3..ee1b0961 100644 --- a/llvm/include/llvm/Support/Dwarf.h +++ b/llvm/include/llvm/Support/Dwarf.h @@ -99,52 +99,9 @@ enum Attribute : uint16_t { }; enum Form : uint16_t { - // Attribute form encodings - DW_FORM_addr = 0x01, - DW_FORM_block2 = 0x03, - DW_FORM_block4 = 0x04, - DW_FORM_data2 = 0x05, - DW_FORM_data4 = 0x06, - DW_FORM_data8 = 0x07, - DW_FORM_string = 0x08, - DW_FORM_block = 0x09, - DW_FORM_block1 = 0x0a, - DW_FORM_data1 = 0x0b, - DW_FORM_flag = 0x0c, - DW_FORM_sdata = 0x0d, - DW_FORM_strp = 0x0e, - DW_FORM_udata = 0x0f, - DW_FORM_ref_addr = 0x10, - DW_FORM_ref1 = 0x11, - DW_FORM_ref2 = 0x12, - DW_FORM_ref4 = 0x13, - DW_FORM_ref8 = 0x14, - DW_FORM_ref_udata = 0x15, - DW_FORM_indirect = 0x16, - DW_FORM_sec_offset = 0x17, - DW_FORM_exprloc = 0x18, - DW_FORM_flag_present = 0x19, - - // New in DWARF v5. - DW_FORM_strx = 0x1a, - DW_FORM_addrx = 0x1b, - DW_FORM_ref_sup = 0x1c, - DW_FORM_strp_sup = 0x1d, - DW_FORM_data16 = 0x1e, - DW_FORM_line_strp = 0x1f, - DW_FORM_ref_sig8 = 0x20, - DW_FORM_implicit_const = 0x21, - DW_FORM_loclistx = 0x22, - DW_FORM_rnglistx = 0x23, - - DW_FORM_lo_user = 0x1f00, - // Extensions for Fission proposal - DW_FORM_GNU_addr_index = 0x1f01, - DW_FORM_GNU_str_index = 0x1f02, - - // Alternate debug sections proposal (output of "dwz" tool). - DW_FORM_GNU_ref_alt = 0x1f20, - DW_FORM_GNU_strp_alt = 0x1f21 +#define HANDLE_DW_FORM(ID, NAME) DW_FORM_##NAME = ID, +#include "llvm/Support/Dwarf.def" + DW_FORM_lo_user = 0x1f00, ///< Not specified by DWARF. }; enum LocationAtom { diff --git a/llvm/lib/Support/Dwarf.cpp b/llvm/lib/Support/Dwarf.cpp index cd83681..bc92107 100644 --- a/llvm/lib/Support/Dwarf.cpp +++ b/llvm/lib/Support/Dwarf.cpp @@ -57,41 +57,13 @@ StringRef llvm::dwarf::AttributeString(unsigned Attribute) { StringRef llvm::dwarf::FormEncodingString(unsigned Encoding) { switch (Encoding) { - case DW_FORM_addr: return "DW_FORM_addr"; - case DW_FORM_block2: return "DW_FORM_block2"; - case DW_FORM_block4: return "DW_FORM_block4"; - case DW_FORM_data2: return "DW_FORM_data2"; - case DW_FORM_data4: return "DW_FORM_data4"; - case DW_FORM_data8: return "DW_FORM_data8"; - case DW_FORM_string: return "DW_FORM_string"; - case DW_FORM_block: return "DW_FORM_block"; - case DW_FORM_block1: return "DW_FORM_block1"; - case DW_FORM_data1: return "DW_FORM_data1"; - case DW_FORM_flag: return "DW_FORM_flag"; - case DW_FORM_sdata: return "DW_FORM_sdata"; - case DW_FORM_strp: return "DW_FORM_strp"; - case DW_FORM_udata: return "DW_FORM_udata"; - case DW_FORM_ref_addr: return "DW_FORM_ref_addr"; - case DW_FORM_ref1: return "DW_FORM_ref1"; - case DW_FORM_ref2: return "DW_FORM_ref2"; - case DW_FORM_ref4: return "DW_FORM_ref4"; - case DW_FORM_ref8: return "DW_FORM_ref8"; - case DW_FORM_ref_udata: return "DW_FORM_ref_udata"; - case DW_FORM_indirect: return "DW_FORM_indirect"; - case DW_FORM_sec_offset: return "DW_FORM_sec_offset"; - case DW_FORM_exprloc: return "DW_FORM_exprloc"; - case DW_FORM_flag_present: return "DW_FORM_flag_present"; - case DW_FORM_ref_sig8: return "DW_FORM_ref_sig8"; - - // DWARF5 Fission Extension Forms - case DW_FORM_GNU_addr_index: return "DW_FORM_GNU_addr_index"; - case DW_FORM_GNU_str_index: return "DW_FORM_GNU_str_index"; - - // Alternate debug sections proposal (output of "dwz" tool). - case DW_FORM_GNU_ref_alt: return "DW_FORM_GNU_ref_alt"; - case DW_FORM_GNU_strp_alt: return "DW_FORM_GNU_strp_alt"; + default: + return StringRef(); +#define HANDLE_DW_FORM(ID, NAME) \ + case DW_FORM_##NAME: \ + return "DW_FORM_" #NAME; +#include "llvm/Support/Dwarf.def" } - return StringRef(); } StringRef llvm::dwarf::OperationEncodingString(unsigned Encoding) { -- 2.7.4