<div class="doc_author">
<p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a>
- and <a href="mailto:jlaskey@apple.com">Jim Laskey</a></p>
+ and <a href="mailto:jlaskey@mac.com">Jim Laskey</a></p>
</div>
numbers. We recommend using with tags in the range 0x1000 thru 0x2000 (there is
a defined enum DW_TAG_user_base = 0x1000.)</p>
-<p>The fields of debug descriptors used internally by LLVM (MachineDebugInfo)
+<p>The fields of debug descriptors used internally by LLVM (MachineModuleInfo)
are restricted to only the simple data types <tt>int</tt>, <tt>uint</tt>,
<tt>bool</tt>, <tt>float</tt>, <tt>double</tt>, <tt>sbyte*</tt> and <tt> { }*
</tt>. References to arbitrary values are handled using a <tt> { }* </tt> and a
{ }*, ;; Global variable anchor = cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_global_variables">llvm.dbg.global_variables</a> to { }*),
{ }*, ;; Reference to context descriptor
sbyte*, ;; Name
+ sbyte*, ;; Display name (fully qualified C++ name)
+ sbyte*, ;; MIPS linkage name (for C++)
{ }*, ;; Reference to compile unit where defined
uint, ;; Line number where defined
{ }*, ;; Reference to type descriptor
{ }*, ;; Subprogram anchor = cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_subprograms">llvm.dbg.subprograms</a> to { }*),
{ }*, ;; Reference to context descriptor
sbyte*, ;; Name
+ sbyte*, ;; Display name (fully qualified C++ name)
+ sbyte*, ;; MIPS linkage name (for C++)
{ }*, ;; Reference to compile unit where defined
uint, ;; Line number where defined
{ }*, ;; Reference to type descriptor
DW_TAG_structure_type = 19
DW_TAG_union_type = 23
DW_TAG_vector_type = 259
+ DW_TAG_subroutine_type = 46
+ DW_TAG_inheritance = 26
</pre>
<p>The vector flag indicates that an array type is a native packed vector.</p>
or <a href="#format_composite_type">composite</a> type descriptors, each
representing a field member of the structure or union.</p>
+<p>For C++ classes (tag = <tt>DW_TAG_structure_type</tt>), member descriptors
+provide information about base classes, static members and member functions. If
+a member is a <a href="#format_derived_type">derived type descriptor</a> and has
+a tag of <tt>DW_TAG_inheritance</tt>, then the type represents a base class. If
+the member of is a <a href="#format_global_variables">global variable
+descriptor</a> then it represents a static member. And, if the member is a <a
+href="#format_subprograms">subprogram descriptor</a> then it represents a member
+function. For static members and member functions, <tt>getName()</tt> returns
+the members link or the C++ mangled name. <tt>getDisplayName()</tt> the
+simplied version of the name.</p>
+
+<p>The first member of subroutine (tag = <tt>DW_TAG_subroutine_type</tt>)
+type elements is the return type for the subroutine. The remaining
+elements are the formal arguments to the subroutine.</p>
+
<p><a href="#format_composite_type">Composite type</a> location can be
determined from the compile unit and line number. The size, alignment and
offset are expressed in bits and can be 64 bit values. The alignment is used to
<p>This intrinsic is used to provide correspondence between the source file and
the generated code. The first argument is the line number (base 1), second
-argument si the column number (0 if unknown) and the third argument the source
+argument is the column number (0 if unknown) and the third argument the source
<tt>%<a href="#format_compile_units">llvm.dbg.compile_unit</a>*</tt> cast to a
<tt>{ }*</tt>. Code following a call to this intrinsic will have been defined
in close proximity of the line, column and file. This information holds until
</pre>
<p>This intrinsic is used to link the debug information in <tt>%<a
-href="#format_subprograms">llvm.dbg.subprogram</a></tt> to the function. It also
-defines the beginning of the function's declarative region (scope.) The
-intrinsic should be called early in the function after the all the alloca
-instructions. It should be paired off with a closing <tt>%<a
+href="#format_subprograms">llvm.dbg.subprogram</a></tt> to the function. It
+defines the beginning of the function's declarative region (scope). It also
+implies a call to %<tt><a
+href="#format_common_stoppoint">llvm.dbg.stoppoint</a></tt> which defines a
+source line "stop point". The intrinsic should be called early in the function
+after the all the alloca instructions. It should be paired off with a closing
+<tt>%<a
href="#format_common_region_end">llvm.dbg.region.end</a></tt>. The function's
single argument is the <tt>%<a
href="#format_subprograms">llvm.dbg.subprogram.type</a></tt>.</p>
<p>It is worth noting that this scoping mechanism is used to control scoping of
all declarations, not just variable declarations. For example, the scope of a
-C++ using declaration is controlled with this couldchange how name lookup is
+C++ using declaration is controlled with this and could change how name lookup is
performed.</p>
</div>
{ }* cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_global_variables">llvm.dbg.global_variables</a> to { }*),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([9 x sbyte]* %str1, int 0, int 0),
+ sbyte* getelementptr ([1 x sbyte]* %str2, int 0, int 0),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
uint 1,
{ }* cast (%<a href="#format_basic_type">llvm.dbg.basictype.type</a>* %<a href="#format_basic_type">llvm.dbg.basictype</a> to { }*),
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
- sbyte* getelementptr ([4 x sbyte]* %str2, int 0, int 0),
+ sbyte* getelementptr ([4 x sbyte]* %str3, int 0, int 0),
{ }* null,
int 0,
uint 32,
;; Define the names of the global variable and basic type.
;;
%str1 = internal constant [9 x sbyte] c"MyGlobal\00", section "llvm.metadata"
-%str2 = internal constant [4 x sbyte] c"int\00", section "llvm.metadata"
+%str2 = internal constant [1 x sbyte] c"\00", section "llvm.metadata"
+%str3 = internal constant [4 x sbyte] c"int\00", section "llvm.metadata"
</pre>
</div>
{ }* cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_subprograms">llvm.dbg.subprograms</a> to { }*),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([5 x sbyte]* %str1, int 0, int 0),
+ sbyte* getelementptr ([1 x sbyte]* %str2, int 0, int 0),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
uint 1,
{ }* null,
;; Define the name of the subprogram.
;;
%str1 = internal constant [5 x sbyte] c"main\00", section "llvm.metadata"
+%str2 = internal constant [1 x sbyte] c"\00", section "llvm.metadata"
;;
;; Define the subprogram itself.