[llvm] r268347 - [codeview] Maintain the type enum-to-classname mapping in the .def file

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Mon May 2 17:45:14 PDT 2016


Author: rnk
Date: Mon May  2 19:45:14 2016
New Revision: 268347

URL: http://llvm.org/viewvc/llvm-project?rev=268347&view=rev
Log:
[codeview] Maintain the type enum-to-classname mapping in the .def file

This way it will be easy to stamp out something like a type visitor.

Modified:
    llvm/trunk/include/llvm/DebugInfo/CodeView/CVLeafTypes.def
    llvm/trunk/tools/llvm-readobj/COFFDumper.cpp

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/CVLeafTypes.def
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/CVLeafTypes.def?rev=268347&r1=268346&r2=268347&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/CVLeafTypes.def (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/CVLeafTypes.def Mon May  2 19:45:14 2016
@@ -15,6 +15,11 @@
 #define LEAF_TYPE(ename, value)
 #endif
 
+// If the type is known, then we have a record describing it in TypeRecord.h.
+#ifndef KNOWN_TYPE
+#define KNOWN_TYPE(ename, value, class_name) LEAF_TYPE(ename, value)
+#endif
+
 // 16 bit type records.
 LEAF_TYPE(LF_MODIFIER_16t, 0x0001)
 LEAF_TYPE(LF_POINTER_16t, 0x0002)
@@ -78,8 +83,8 @@ LEAF_TYPE(LF_CLASS_ST, 0x1004)
 LEAF_TYPE(LF_STRUCTURE_ST, 0x1005)
 LEAF_TYPE(LF_UNION_ST, 0x1006)
 LEAF_TYPE(LF_ENUM_ST, 0x1007)
-LEAF_TYPE(LF_PROCEDURE, 0x1008)
-LEAF_TYPE(LF_MFUNCTION, 0x1009)
+KNOWN_TYPE(LF_PROCEDURE, 0x1008, ProcedureType)
+KNOWN_TYPE(LF_MFUNCTION, 0x1009, MemberFunctionType)
 LEAF_TYPE(LF_COBOL0, 0x100a)
 LEAF_TYPE(LF_BARRAY, 0x100b)
 LEAF_TYPE(LF_DIMARRAY_ST, 0x100c)
@@ -90,12 +95,12 @@ LEAF_TYPE(LF_ALIAS_ST, 0x1010)
 LEAF_TYPE(LF_OEM2, 0x1011)
 
 LEAF_TYPE(LF_SKIP, 0x1200)
-LEAF_TYPE(LF_ARGLIST, 0x1201)
+KNOWN_TYPE(LF_ARGLIST, 0x1201, ArgList)
 LEAF_TYPE(LF_DEFARG_ST, 0x1202)
 LEAF_TYPE(LF_FIELDLIST, 0x1203)
 LEAF_TYPE(LF_DERIVED, 0x1204)
 LEAF_TYPE(LF_BITFIELD, 0x1205)
-LEAF_TYPE(LF_METHODLIST, 0x1206)
+KNOWN_TYPE(LF_METHODLIST, 0x1206, MethodListEntry)
 LEAF_TYPE(LF_DIMCONU, 0x1207)
 LEAF_TYPE(LF_DIMCONLU, 0x1208)
 LEAF_TYPE(LF_DIMVARU, 0x1209)
@@ -103,16 +108,16 @@ LEAF_TYPE(LF_DIMVARLU, 0x120a)
 
 // Member type records. These are generally not length prefixed, and appear
 // inside of a field list record.
-LEAF_TYPE(LF_BCLASS, 0x1400)
-LEAF_TYPE(LF_VBCLASS, 0x1401)
-LEAF_TYPE(LF_IVBCLASS, 0x1402)
+KNOWN_TYPE(LF_BCLASS, 0x1400, BaseClass)
+KNOWN_TYPE(LF_VBCLASS, 0x1401, VirtualBaseClass)
+KNOWN_TYPE(LF_IVBCLASS, 0x1402, VirtualBaseClass)
 LEAF_TYPE(LF_FRIENDFCN_ST, 0x1403)
 LEAF_TYPE(LF_INDEX, 0x1404)
 LEAF_TYPE(LF_MEMBER_ST, 0x1405)
 LEAF_TYPE(LF_STMEMBER_ST, 0x1406)
 LEAF_TYPE(LF_METHOD_ST, 0x1407)
 LEAF_TYPE(LF_NESTTYPE_ST, 0x1408)
-LEAF_TYPE(LF_VFUNCTAB, 0x1409)
+KNOWN_TYPE(LF_VFUNCTAB, 0x1409, VirtualFunctionPointer)
 LEAF_TYPE(LF_FRIENDCLS, 0x140a)
 LEAF_TYPE(LF_ONEMETHOD_ST, 0x140b)
 LEAF_TYPE(LF_VFUNCOFF, 0x140c)
@@ -122,43 +127,43 @@ LEAF_TYPE(LF_MANAGED_ST, 0x140f)
 
 LEAF_TYPE(LF_ST_MAX, 0x1500)
 LEAF_TYPE(LF_TYPESERVER, 0x1501)
-LEAF_TYPE(LF_ENUMERATE, 0x1502)
-LEAF_TYPE(LF_ARRAY, 0x1503)
-LEAF_TYPE(LF_CLASS, 0x1504)
-LEAF_TYPE(LF_STRUCTURE, 0x1505)
-LEAF_TYPE(LF_UNION, 0x1506)
-LEAF_TYPE(LF_ENUM, 0x1507)
+KNOWN_TYPE(LF_ENUMERATE, 0x1502, Enumerator)
+KNOWN_TYPE(LF_ARRAY, 0x1503, ArrayType)
+KNOWN_TYPE(LF_CLASS, 0x1504, ClassType)
+KNOWN_TYPE(LF_STRUCTURE, 0x1505, ClassType)
+KNOWN_TYPE(LF_UNION, 0x1506, UnionType)
+KNOWN_TYPE(LF_ENUM, 0x1507, EnumType)
 LEAF_TYPE(LF_DIMARRAY, 0x1508)
 LEAF_TYPE(LF_PRECOMP, 0x1509)
 LEAF_TYPE(LF_ALIAS, 0x150a)
 LEAF_TYPE(LF_DEFARG, 0x150b)
 LEAF_TYPE(LF_FRIENDFCN, 0x150c)
-LEAF_TYPE(LF_MEMBER, 0x150d)
-LEAF_TYPE(LF_STMEMBER, 0x150e)
-LEAF_TYPE(LF_METHOD, 0x150f)
-LEAF_TYPE(LF_NESTTYPE, 0x1510)
-LEAF_TYPE(LF_ONEMETHOD, 0x1511)
+KNOWN_TYPE(LF_MEMBER, 0x150d, DataMember)
+KNOWN_TYPE(LF_STMEMBER, 0x150e, StaticDataMember)
+KNOWN_TYPE(LF_METHOD, 0x150f, OverloadedMethod)
+KNOWN_TYPE(LF_NESTTYPE, 0x1510, NestedType)
+KNOWN_TYPE(LF_ONEMETHOD, 0x1511, OneMethod)
 LEAF_TYPE(LF_NESTTYPEEX, 0x1512)
 LEAF_TYPE(LF_MEMBERMODIFY, 0x1513)
 LEAF_TYPE(LF_MANAGED, 0x1514)
-LEAF_TYPE(LF_TYPESERVER2, 0x1515)
+KNOWN_TYPE(LF_TYPESERVER2, 0x1515, TypeServer2)
 LEAF_TYPE(LF_STRIDED_ARRAY, 0x1516)
 LEAF_TYPE(LF_HLSL, 0x1517)
 LEAF_TYPE(LF_MODIFIER_EX, 0x1518)
-LEAF_TYPE(LF_INTERFACE, 0x1519)
-LEAF_TYPE(LF_BINTERFACE, 0x151a)
+KNOWN_TYPE(LF_INTERFACE, 0x1519, ClassType)
+KNOWN_TYPE(LF_BINTERFACE, 0x151a, BaseClass)
 LEAF_TYPE(LF_VECTOR, 0x151b)
 LEAF_TYPE(LF_MATRIX, 0x151c)
-LEAF_TYPE(LF_VFTABLE, 0x151d)
+KNOWN_TYPE(LF_VFTABLE, 0x151d, VFTableType)
 
 // ID leaf records. Subsequent leaf types may be referenced from .debug$S.
 
-LEAF_TYPE(LF_FUNC_ID, 0x1601)
-LEAF_TYPE(LF_MFUNC_ID, 0x1602)
-LEAF_TYPE(LF_BUILDINFO, 0x1603)
-LEAF_TYPE(LF_SUBSTR_LIST, 0x1604)
-LEAF_TYPE(LF_STRING_ID, 0x1605)
-LEAF_TYPE(LF_UDT_SRC_LINE, 0x1606)
+KNOWN_TYPE(LF_FUNC_ID, 0x1601, FuncId)
+KNOWN_TYPE(LF_MFUNC_ID, 0x1602, MemberFuncId)
+KNOWN_TYPE(LF_BUILDINFO, 0x1603, BuildInfo)
+KNOWN_TYPE(LF_SUBSTR_LIST, 0x1604, ArgList)
+KNOWN_TYPE(LF_STRING_ID, 0x1605, StringId)
+KNOWN_TYPE(LF_UDT_SRC_LINE, 0x1606, UDTSrcLine)
 LEAF_TYPE(LF_UDT_MOD_SRC_LINE, 0x1607)
 
 // Numeric leaf types. These are generally contained in other records, and not
@@ -208,4 +213,5 @@ LEAF_TYPE(LF_PAD13, 0xfd)
 LEAF_TYPE(LF_PAD14, 0xfe)
 LEAF_TYPE(LF_PAD15, 0xff)
 
+#undef KNOWN_TYPE
 #undef LEAF_TYPE

Modified: llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/COFFDumper.cpp?rev=268347&r1=268346&r2=268347&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/COFFDumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/COFFDumper.cpp Mon May  2 19:45:14 2016
@@ -1955,29 +1955,11 @@ void COFFDumper::printFileNameForOffset(
 
 static StringRef getLeafTypeName(TypeLeafKind LT) {
   switch (LT) {
-  case LF_STRING_ID: return "StringId";
-  case LF_FIELDLIST: return "FieldList";
-  case LF_ARGLIST:
-  case LF_SUBSTR_LIST: return "ArgList";
-  case LF_CLASS:
-  case LF_STRUCTURE:
-  case LF_INTERFACE: return "ClassType";
-  case LF_UNION: return "UnionType";
-  case LF_ENUM: return "EnumType";
-  case LF_ARRAY: return "ArrayType";
-  case LF_VFTABLE: return "VFTableType";
-  case LF_MFUNC_ID: return "MemberFuncId";
-  case LF_PROCEDURE: return "ProcedureType";
-  case LF_MFUNCTION: return "MemberFunctionType";
-  case LF_METHODLIST: return "MethodListEntry";
-  case LF_FUNC_ID: return "FuncId";
-  case LF_TYPESERVER2: return "TypeServer2";
-  case LF_POINTER: return "PointerType";
-  case LF_MODIFIER: return "TypeModifier";
-  case LF_VTSHAPE: return "VTableShape";
-  case LF_UDT_SRC_LINE: return "UDTSrcLine";
-  case LF_BUILDINFO: return "BuildInfo";
-  default: break;
+#define KNOWN_TYPE(LeafName, Value, ClassName) \
+  case LeafName: return #ClassName;
+#include "llvm/DebugInfo/CodeView/CVLeafTypes.def"
+  default:
+    break;
   }
   return "UnknownLeaf";
 }




More information about the llvm-commits mailing list