annotate gen/todebug.cpp @ 1650:40bd4a0d4870

Update to work with LLVM 2.7. Removed use of dyn_cast, llvm no compiles without exceptions and rtti by default. We do need exceptions for the libconfig stuff, but rtti isn't necessary (anymore). Debug info needs to be rewritten, as in LLVM 2.7 the format has completely changed. To have something to look at while rewriting, the old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means that you have to define this to compile at the moment. Updated tango 0.99.9 patch to include updated EH runtime code, which is needed for LLVM 2.7 as well.
author Tomas Lindquist Olsen
date Wed, 19 May 2010 12:42:32 +0200
parents 8d086d552909
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
82
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
1 #include "gen/llvm.h"
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
2 #include "llvm/Support/Dwarf.h"
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
3 #include "llvm/CodeGen/MachineModuleInfo.h"
285
297690b5d4a5 [svn r306] Fixed: it's now possible to compile and link llvmdc with MinGW32 and msys on Win32 :D I tried it myself ;) Building the runtime still needs some work, but it's a step in the right direction.
lindquist
parents: 268
diff changeset
4 #include "llvm/System/Path.h"
82
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
5
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
6 #include "declaration.h"
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
7 #include "module.h"
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
8 #include "mars.h"
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
9
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
10 #include "gen/todebug.h"
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
11 #include "gen/irstate.h"
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
12 #include "gen/tollvm.h"
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
13 #include "gen/logger.h"
955
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
14 #include "gen/llvmhelpers.h"
1064
f0b6549055ab Make LDC work with LLVM trunk (s/LinkOnceLinkage/LinkOnceOdrLinkage/)
Frits van Bommel <fvbommel wxs.nl>
parents: 998
diff changeset
15 #include "gen/linkage.h"
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1069
diff changeset
16 #include "gen/utils.h"
82
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
17
139
0ab29b838084 [svn r143] Fixed: a few bugs in debug information, still only line info, but should be correct files now :)
lindquist
parents: 136
diff changeset
18 #include "ir/irmodule.h"
0ab29b838084 [svn r143] Fixed: a few bugs in debug information, still only line info, but should be correct files now :)
lindquist
parents: 136
diff changeset
19
82
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
20 using namespace llvm::dwarf;
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
21
1650
40bd4a0d4870 Update to work with LLVM 2.7.
Tomas Lindquist Olsen
parents: 1571
diff changeset
22 #ifndef DISABLE_DEBUG_INFO
40bd4a0d4870 Update to work with LLVM 2.7.
Tomas Lindquist Olsen
parents: 1571
diff changeset
23
1560
1d5c3354b3c2 getNullValue is in Constant again
Benjamin Kramer <benny.kra@gmail.com>
parents: 1554
diff changeset
24 #define DBG_NULL ( LLConstant::getNullValue(DBG_TYPE) )
1569
755abafbf25d Push the context through StructType::get.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1560
diff changeset
25 #define DBG_TYPE ( getPtrToType(llvm::StructType::get(gIR->context(),NULL,NULL)) )
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
26 #define DBG_CAST(X) ( llvm::ConstantExpr::getBitCast(X, DBG_TYPE) )
82
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
27
1554
d6e8d5db259f LLVMContext changes up to r77366
Benjamin Kramer <benny.kra@gmail.com>
parents: 1545
diff changeset
28 #define DBG_TAG(X) ( llvm::ConstantExpr::getAdd( DtoConstUint( X ), DtoConstUint( llvm::LLVMDebugVersion ) ) )
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
29
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
30 //////////////////////////////////////////////////////////////////////////////////////////////////
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
31
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
32 /**
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
33 * Emits a global variable, LLVM Dwarf style, only declares.
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
34 * @param type Type of variable.
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
35 * @param name Name.
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
36 * @return The global variable.
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
37 */
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
38 static LLGlobalVariable* emitDwarfGlobalDecl(const LLStructType* type, const char* name, bool linkonce=false)
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
39 {
1064
f0b6549055ab Make LDC work with LLVM trunk (s/LinkOnceLinkage/LinkOnceOdrLinkage/)
Frits van Bommel <fvbommel wxs.nl>
parents: 998
diff changeset
40 LLGlobalValue::LinkageTypes linkage = linkonce
f0b6549055ab Make LDC work with LLVM trunk (s/LinkOnceLinkage/LinkOnceOdrLinkage/)
Frits van Bommel <fvbommel wxs.nl>
parents: 998
diff changeset
41 ? DEBUGINFO_LINKONCE_LINKAGE_TYPE
f0b6549055ab Make LDC work with LLVM trunk (s/LinkOnceLinkage/LinkOnceOdrLinkage/)
Frits van Bommel <fvbommel wxs.nl>
parents: 998
diff changeset
42 : LLGlobalValue::InternalLinkage;
1529
ad7f2f1862d6 Adjust LDC to work with the LLVMContext LLVM changes.
Christian Kamm <kamm incasoftware de>
parents: 1517
diff changeset
43 LLGlobalVariable* gv = new LLGlobalVariable(*gIR->module, type, true, linkage, NULL, name);
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
44 gv->setSection("llvm.metadata");
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
45 return gv;
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
46 }
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
47
82
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
48 //////////////////////////////////////////////////////////////////////////////////////////////////
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
49
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
50 static const llvm::StructType* getDwarfCompileUnitType() {
96
ce7ed8f59b99 [svn r100] Moved test/ray.d to demos/ray.d.
lindquist
parents: 94
diff changeset
51 return isaStruct(gIR->module->getTypeByName("llvm.dbg.compile_unit.type"));
82
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
52 }
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
53
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
54 static const llvm::StructType* getDwarfSubProgramType() {
96
ce7ed8f59b99 [svn r100] Moved test/ray.d to demos/ray.d.
lindquist
parents: 94
diff changeset
55 return isaStruct(gIR->module->getTypeByName("llvm.dbg.subprogram.type"));
82
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
56 }
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
57
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
58 static const llvm::StructType* getDwarfVariableType() {
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
59 return isaStruct(gIR->module->getTypeByName("llvm.dbg.variable.type"));
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
60 }
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
61
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
62 static const llvm::StructType* getDwarfDerivedTypeType() {
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
63 return isaStruct(gIR->module->getTypeByName("llvm.dbg.derivedtype.type"));
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
64 }
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
65
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
66 static const llvm::StructType* getDwarfBasicTypeType() {
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
67 return isaStruct(gIR->module->getTypeByName("llvm.dbg.basictype.type"));
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
68 }
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
69
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
70 static const llvm::StructType* getDwarfCompositeTypeType() {
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
71 return isaStruct(gIR->module->getTypeByName("llvm.dbg.compositetype.type"));
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
72 }
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
73
247
56199753e637 [svn r264] Fixed debug info for global variables.
lindquist
parents: 246
diff changeset
74 static const llvm::StructType* getDwarfGlobalVariableType() {
56199753e637 [svn r264] Fixed debug info for global variables.
lindquist
parents: 246
diff changeset
75 return isaStruct(gIR->module->getTypeByName("llvm.dbg.global_variable.type"));
56199753e637 [svn r264] Fixed debug info for global variables.
lindquist
parents: 246
diff changeset
76 }
56199753e637 [svn r264] Fixed debug info for global variables.
lindquist
parents: 246
diff changeset
77
955
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
78 //////////////////////////////////////////////////////////////////////////////////////////////////
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
79
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
80 // get the module the symbol is in, or - for template instances - the current module
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
81 static Module* getDefinedModule(Dsymbol* s)
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
82 {
1322
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
83 // templates are defined in current module
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
84 if (DtoIsTemplateInstance(s))
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
85 {
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
86 return gIR->dmodule;
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
87 }
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
88 // array operations as well
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
89 else if (FuncDeclaration* fd = s->isFuncDeclaration())
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
90 {
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
91 if (fd->isArrayOp)
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
92 return gIR->dmodule;
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
93 }
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
94 // otherwise use the symbol's module
b8c2f3e05b52 Fixed compile unit for debug info for array operations, fixed ticket #280 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1271
diff changeset
95 return s->getModule();
955
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
96 }
82
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
97
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
98 //////////////////////////////////////////////////////////////////////////////////////////////////
d8dd47ef3973 [svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes.
lindquist
parents:
diff changeset
99
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
100 static llvm::DIType dwarfTypeDescription_impl(Type* type, llvm::DICompileUnit cu, const char* c_name);
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
101 static llvm::DIType dwarfTypeDescription(Type* type, llvm::DICompileUnit cu, const char* c_name);
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
102
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
103 //////////////////////////////////////////////////////////////////////////////////////////////////
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
104
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
105 static llvm::DIBasicType dwarfBasicType(Type* type, llvm::DICompileUnit compileUnit)
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
106 {
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
107 Type* t = type->toBasetype();
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
108 const LLType* T = DtoType(type);
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
109
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
110 // find encoding
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
111 unsigned id;
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
112 if (t->isintegral())
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
113 {
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
114 if (type->isunsigned())
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
115 id = DW_ATE_unsigned;
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
116 else
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
117 id = DW_ATE_signed;
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
118 }
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
119 else if (t->isfloating())
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
120 {
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
121 id = DW_ATE_float;
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
122 }
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
123 else
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
124 {
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
125 assert(0 && "unsupported basictype for debug info");
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
126 }
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
127
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
128 return gIR->difactory.CreateBasicType(
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
129 compileUnit, // context
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
130 type->toChars(), // name
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
131 llvm::DICompileUnit(NULL), // compile unit
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
132 0, // line number
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
133 getTypeBitSize(T), // size (bits)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
134 getABITypeAlign(T)*8, // align (bits)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
135 0, // offset (bits)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
136 //FIXME: need flags?
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
137 0, // flags
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
138 id // encoding
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
139 );
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
140 }
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
141
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
142 //////////////////////////////////////////////////////////////////////////////////////////////////
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
143
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
144 static llvm::DIDerivedType dwarfDerivedType(Type* type, llvm::DICompileUnit compileUnit)
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
145 {
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
146 const LLType* T = DtoType(type);
486
a34078905d01 Added pragma(llvmdc, "string") for misc per-module compiler configuration, currently "string" can only be "verbose" which forces -vv for module it appears in.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 285
diff changeset
147 Type* t = type->toBasetype();
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
148
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
149 assert(t->ty == Tpointer && "unsupported derivedtype for debug info, only pointers allowed");
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
150
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
151 // find base type
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
152 llvm::DIType basetype;
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
153 Type* nt = t->nextOf();
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
154 basetype = dwarfTypeDescription_impl(nt, compileUnit, NULL);
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
155 if (nt->ty == Tvoid)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
156 basetype = llvm::DIType(NULL);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
157
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
158 return gIR->difactory.CreateDerivedType(
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
159 DW_TAG_pointer_type, // tag
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
160 compileUnit, // context
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
161 "", // name
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
162 llvm::DICompileUnit(NULL), // compile unit
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
163 0, // line number
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
164 getTypeBitSize(T), // size (bits)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
165 getABITypeAlign(T)*8, // align (bits)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
166 0, // offset (bits)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
167 //FIXME: need flags?
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
168 0, // flags
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
169 basetype // derived from
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
170 );
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
171 }
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
172
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
173 //////////////////////////////////////////////////////////////////////////////////////////////////
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
174
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
175 static llvm::DIDerivedType dwarfMemberType(unsigned linnum, Type* type, llvm::DICompileUnit compileUnit, llvm::DICompileUnit definedCU, const char* c_name, unsigned offset)
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
176 {
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
177 const LLType* T = DtoType(type);
486
a34078905d01 Added pragma(llvmdc, "string") for misc per-module compiler configuration, currently "string" can only be "verbose" which forces -vv for module it appears in.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 285
diff changeset
178 Type* t = type->toBasetype();
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
179
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
180 // find base type
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
181 llvm::DIType basetype;
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
182 basetype = dwarfTypeDescription(t, compileUnit, NULL);
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
183 if (t->ty == Tvoid)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
184 basetype = llvm::DIType(NULL);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
185
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
186 return gIR->difactory.CreateDerivedType(
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
187 DW_TAG_member, // tag
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
188 compileUnit, // context
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
189 c_name, // name
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
190 definedCU, // compile unit
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
191 linnum, // line number
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
192 getTypeBitSize(T), // size (bits)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
193 getABITypeAlign(T)*8, // align (bits)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
194 offset*8, // offset (bits)
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
195 //FIXME: need flags?
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
196 0, // flags
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
197 basetype // derived from
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
198 );
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
199 }
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
200
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
201 //////////////////////////////////////////////////////////////////////////////////////////////////
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
202
1388
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
203 static void add_base_fields(
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
204 ClassDeclaration* sd,
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
205 llvm::DICompileUnit compileUnit,
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
206 llvm::DICompileUnit definedCU,
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
207 std::vector<LLConstant*>& elems)
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
208 {
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
209 if (sd->baseClass)
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
210 {
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
211 add_base_fields(sd->baseClass, compileUnit, definedCU, elems);
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
212 }
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
213
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
214 ArrayIter<VarDeclaration> it(sd->fields);
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
215 size_t narr = sd->fields.dim;
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
216 elems.reserve(narr);
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
217 for (; !it.done(); it.next())
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
218 {
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
219 VarDeclaration* vd = it.get();
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
220 LLGlobalVariable* ptr = dwarfMemberType(vd->loc.linnum, vd->type, compileUnit, definedCU, vd->toChars(), vd->offset).getGV();
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
221 elems.push_back(DBG_CAST(ptr));
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
222 }
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
223 }
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
224
1650
40bd4a0d4870 Update to work with LLVM 2.7.
Tomas Lindquist Olsen
parents: 1571
diff changeset
225 //FIXME: This does not use llvm's DIFactory as it can't
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
226 // handle recursive types properly.
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
227 static llvm::DICompositeType dwarfCompositeType(Type* type, llvm::DICompileUnit compileUnit)
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
228 {
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
229 const LLType* T = DtoType(type);
486
a34078905d01 Added pragma(llvmdc, "string") for misc per-module compiler configuration, currently "string" can only be "verbose" which forces -vv for module it appears in.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 285
diff changeset
230 Type* t = type->toBasetype();
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
231
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
232 // defaults
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
233 LLConstant* name = getNullPtr(getVoidPtrType());
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
234 LLGlobalVariable* members = NULL;
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
235 unsigned linnum = 0;
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
236 llvm::DICompileUnit definedCU;
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
237
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
238 // prepare tag and members
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
239 unsigned tag;
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
240
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
241 // declare final global variable
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
242 LLGlobalVariable* gv = NULL;
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
243
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
244 // dynamic array
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
245 if (t->ty == Tarray)
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
246 {
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
247 tag = DW_TAG_structure_type;
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
248
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
249 LLGlobalVariable* len = dwarfMemberType(0, Type::tsize_t, compileUnit, llvm::DICompileUnit(NULL), "length", 0).getGV();
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
250 assert(len);
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
251 LLGlobalVariable* ptr = dwarfMemberType(0, t->nextOf()->pointerTo(), compileUnit, llvm::DICompileUnit(NULL), "ptr", global.params.is64bit?8:4).getGV();
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
252 assert(ptr);
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
253
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
254 const LLArrayType* at = LLArrayType::get(DBG_TYPE, 2);
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
255
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
256 std::vector<LLConstant*> elems(2);
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
257 elems[0] = DBG_CAST(len);
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
258 elems[1] = DBG_CAST(ptr);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
259
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
260 LLConstant* ca = LLConstantArray::get(at, elems);
1529
ad7f2f1862d6 Adjust LDC to work with the LLVMContext LLVM changes.
Christian Kamm <kamm incasoftware de>
parents: 1517
diff changeset
261 members = new LLGlobalVariable(*gIR->module, ca->getType(), true, LLGlobalValue::InternalLinkage, ca, ".array");
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
262 members->setSection("llvm.metadata");
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
263
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
264 name = DtoConstStringPtr(t->toChars(), "llvm.metadata");
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
265 }
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
266
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
267 // struct/class
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
268 else if (t->ty == Tstruct || t->ty == Tclass)
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
269 {
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
270 AggregateDeclaration* sd;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
271 if (t->ty == Tstruct)
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
272 {
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
273 TypeStruct* ts = (TypeStruct*)t;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
274 sd = ts->sym;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
275 }
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
276 else
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
277 {
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
278 TypeClass* tc = (TypeClass*)t;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
279 sd = tc->sym;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
280 }
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
281 assert(sd);
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
282
1237
73b56541152c Make sure aggregates are resolved before outputting their debug info.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
283 // make sure it's resolved
73b56541152c Make sure aggregates are resolved before outputting their debug info.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
284 sd->codegen(Type::sir);
73b56541152c Make sure aggregates are resolved before outputting their debug info.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
285
904
01d9ece9982a Fix bug #177 by not attempting to define composite debug info for
Christian Kamm <kamm incasoftware de>
parents: 811
diff changeset
286 // if we don't know the aggregate's size, we don't know enough about it
01d9ece9982a Fix bug #177 by not attempting to define composite debug info for
Christian Kamm <kamm incasoftware de>
parents: 811
diff changeset
287 // to provide debug info. probably a forward-declared struct?
01d9ece9982a Fix bug #177 by not attempting to define composite debug info for
Christian Kamm <kamm incasoftware de>
parents: 811
diff changeset
288 if (sd->sizeok == 0)
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
289 return llvm::DICompositeType(NULL);
904
01d9ece9982a Fix bug #177 by not attempting to define composite debug info for
Christian Kamm <kamm incasoftware de>
parents: 811
diff changeset
290
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
291 IrStruct* ir = sd->ir.irStruct;
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
292 assert(ir);
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
293 if (!ir->diCompositeType.isNull())
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
294 return ir->diCompositeType;
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
295
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
296 // set to handle recursive types properly
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
297 gv = emitDwarfGlobalDecl(getDwarfCompositeTypeType(), "llvm.dbg.compositetype");
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
298 // set bogus initializer to satisfy asserts in DICompositeType constructor
1517
a7a9e461512a Make debug info work with newer LLVM.
Christian Kamm <kamm incasoftware de>
parents: 1504
diff changeset
299 std::vector<LLConstant*> initvals(11);
a7a9e461512a Make debug info work with newer LLVM.
Christian Kamm <kamm incasoftware de>
parents: 1504
diff changeset
300 initvals[0] = DBG_TAG(DW_TAG_structure_type);
a7a9e461512a Make debug info work with newer LLVM.
Christian Kamm <kamm incasoftware de>
parents: 1504
diff changeset
301 for (int i = 1; i < initvals.size(); ++i)
1560
1d5c3354b3c2 getNullValue is in Constant again
Benjamin Kramer <benny.kra@gmail.com>
parents: 1554
diff changeset
302 initvals[i] = LLConstant::getNullValue(getDwarfCompositeTypeType()->getContainedType(i));
1517
a7a9e461512a Make debug info work with newer LLVM.
Christian Kamm <kamm incasoftware de>
parents: 1504
diff changeset
303 gv->setInitializer(LLConstantStruct::get(getDwarfCompositeTypeType(), initvals));
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
304 ir->diCompositeType = llvm::DICompositeType(gv);
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
305
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
306 tag = DW_TAG_structure_type;
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
307
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
308 name = DtoConstStringPtr(sd->toChars(), "llvm.metadata");
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
309 linnum = sd->loc.linnum;
955
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
310 definedCU = DtoDwarfCompileUnit(getDefinedModule(sd));
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
311
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
312 std::vector<LLConstant*> elems;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 736
diff changeset
313 if (!ir->aggrdecl->isInterfaceDeclaration()) // plain interfaces don't have one
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
314 {
1388
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
315 if (t->ty == Tstruct)
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 736
diff changeset
316 {
1388
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
317 ArrayIter<VarDeclaration> it(sd->fields);
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
318 size_t narr = sd->fields.dim;
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
319 elems.reserve(narr);
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
320 for (; !it.done(); it.next())
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
321 {
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
322 VarDeclaration* vd = it.get();
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
323 LLGlobalVariable* ptr = dwarfMemberType(vd->loc.linnum, vd->type, compileUnit, definedCU, vd->toChars(), vd->offset).getGV();
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
324 elems.push_back(DBG_CAST(ptr));
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
325 }
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
326 }
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
327 else
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
328 {
5a54b39af6d6 Add debug info for all class fields, including those from super classes...
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1322
diff changeset
329 add_base_fields(ir->aggrdecl->isClassDeclaration(), compileUnit, definedCU, elems);
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 736
diff changeset
330 }
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
331 }
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
332
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
333 const LLArrayType* at = LLArrayType::get(DBG_TYPE, elems.size());
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
334 LLConstant* ca = LLConstantArray::get(at, elems);
1529
ad7f2f1862d6 Adjust LDC to work with the LLVMContext LLVM changes.
Christian Kamm <kamm incasoftware de>
parents: 1517
diff changeset
335 members = new LLGlobalVariable(*gIR->module, ca->getType(), true, LLGlobalValue::InternalLinkage, ca, ".array");
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
336 members->setSection("llvm.metadata");
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
337 }
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
338
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
339 // unsupported composite type
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
340 else
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
341 {
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
342 assert(0 && "unsupported compositetype for debug info");
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
343 }
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
344
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
345 std::vector<LLConstant*> vals(11);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
346
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
347 // tag
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
348 vals[0] = DBG_TAG(tag);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
349
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
350 // context
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
351 vals[1] = DBG_CAST(compileUnit.getGV());
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
352
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
353 // name
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
354 vals[2] = name;
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
355
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
356 // compile unit where defined
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
357 if (definedCU.getGV())
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
358 vals[3] = DBG_CAST(definedCU.getGV());
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
359 else
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
360 vals[3] = DBG_NULL;
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
361
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
362 // line number where defined
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
363 vals[4] = DtoConstInt(linnum);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
364
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
365 // size in bits
1571
8d086d552909 IntegerType is now contextifed.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1569
diff changeset
366 vals[5] = LLConstantInt::get(LLType::getInt64Ty(gIR->context()), getTypeBitSize(T), false);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
367
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
368 // alignment in bits
1571
8d086d552909 IntegerType is now contextifed.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1569
diff changeset
369 vals[6] = LLConstantInt::get(LLType::getInt64Ty(gIR->context()), getABITypeAlign(T)*8, false);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
370
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
371 // offset in bits
1571
8d086d552909 IntegerType is now contextifed.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1569
diff changeset
372 vals[7] = LLConstantInt::get(LLType::getInt64Ty(gIR->context()), 0, false);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
373
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
374 // FIXME: dont know what this is
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
375 vals[8] = DtoConstUint(0);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
376
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
377 // FIXME: ditto
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
378 vals[9] = DBG_NULL;
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
379
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
380 // members array
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
381 if (members)
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
382 vals[10] = DBG_CAST(members);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
383 else
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
384 vals[10] = DBG_NULL;
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
385
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
386 // set initializer
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
387 if (!gv)
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
388 gv = emitDwarfGlobalDecl(getDwarfCompositeTypeType(), "llvm.dbg.compositetype");
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
389 LLConstant* initia = LLConstantStruct::get(getDwarfCompositeTypeType(), vals);
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
390 gv->setInitializer(initia);
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
391
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
392 return llvm::DICompositeType(gv);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
393 }
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
394
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
395 //////////////////////////////////////////////////////////////////////////////////////////////////
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
396
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
397 static llvm::DIGlobalVariable dwarfGlobalVariable(LLGlobalVariable* ll, VarDeclaration* vd)
247
56199753e637 [svn r264] Fixed debug info for global variables.
lindquist
parents: 246
diff changeset
398 {
998
ff22650d0ca3 Fixed debug info for globals in D2.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 955
diff changeset
399 #if DMDV2
1504
855f188aab7a Added a stripModifiers() function to remove shared|const|immutable storage classes in D2 (should eventually be moved to a dhelpers file rather than llvm helpers).
Robert Clipsham <robert@octarineparrot.com>
parents: 1388
diff changeset
400 assert(vd->isDataseg() || (vd->storage_class & (STCconst | STCimmutable) && vd->init));
998
ff22650d0ca3 Fixed debug info for globals in D2.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 955
diff changeset
401 #else
247
56199753e637 [svn r264] Fixed debug info for global variables.
lindquist
parents: 246
diff changeset
402 assert(vd->isDataseg());
998
ff22650d0ca3 Fixed debug info for globals in D2.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 955
diff changeset
403 #endif
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
404 llvm::DICompileUnit compileUnit = DtoDwarfCompileUnit(gIR->dmodule);
247
56199753e637 [svn r264] Fixed debug info for global variables.
lindquist
parents: 246
diff changeset
405
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
406 return gIR->difactory.CreateGlobalVariable(
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
407 compileUnit, // context
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
408 vd->mangle(), // name
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
409 vd->toPrettyChars(), // displayname
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
410 vd->toChars(), // linkage name
955
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
411 DtoDwarfCompileUnit(getDefinedModule(vd)), // compile unit
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
412 vd->loc.linnum, // line num
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
413 dwarfTypeDescription_impl(vd->type, compileUnit, NULL), // type
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
414 vd->protection == PROTprivate, // is local to unit
955
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
415 getDefinedModule(vd) == gIR->dmodule, // is definition
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
416 ll // value
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
417 );
247
56199753e637 [svn r264] Fixed debug info for global variables.
lindquist
parents: 246
diff changeset
418 }
56199753e637 [svn r264] Fixed debug info for global variables.
lindquist
parents: 246
diff changeset
419
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
420 //////////////////////////////////////////////////////////////////////////////////////////////////
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
421
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
422 static llvm::DIVariable dwarfVariable(VarDeclaration* vd, llvm::DIType type)
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
423 {
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
424 assert(!vd->isDataseg() && "static variable");
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
425
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
426 unsigned tag;
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
427 if (vd->isParameter())
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
428 tag = DW_TAG_arg_variable;
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
429 else
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
430 tag = DW_TAG_auto_variable;
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
431
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
432 return gIR->difactory.CreateVariable(
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
433 tag, // tag
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
434 gIR->func()->diSubprogram, // context
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
435 vd->toChars(), // name
955
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
436 DtoDwarfCompileUnit(getDefinedModule(vd)), // compile unit
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
437 vd->loc.linnum, // line num
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
438 type // type
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
439 );
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
440 }
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
441
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
442 //////////////////////////////////////////////////////////////////////////////////////////////////
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
443
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
444 static void dwarfDeclare(LLValue* var, llvm::DIVariable divar)
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
445 {
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
446 gIR->difactory.InsertDeclare(var, divar, gIR->scopebb());
244
a95056b3c996 [svn r261] Fixed debug info for integer and floating local variables, can now be inspected in GDB.
lindquist
parents: 217
diff changeset
447 }
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
448
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
449 //////////////////////////////////////////////////////////////////////////////////////////////////
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
450
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
451 static llvm::DIType dwarfTypeDescription_impl(Type* type, llvm::DICompileUnit cu, const char* c_name)
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
452 {
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
453 Type* t = type->toBasetype();
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
454 if (t->ty == Tvoid)
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
455 return llvm::DIType(NULL);
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
456 else if (t->isintegral() || t->isfloating())
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
457 return dwarfBasicType(type, cu);
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
458 else if (t->ty == Tpointer)
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
459 return dwarfDerivedType(type, cu);
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
460 else if (t->ty == Tarray || t->ty == Tstruct || t->ty == Tclass)
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 250
diff changeset
461 return dwarfCompositeType(type, cu);
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
462
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
463 return llvm::DIType(NULL);
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
464 }
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
465
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
466 static llvm::DIType dwarfTypeDescription(Type* type, llvm::DICompileUnit cu, const char* c_name)
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
467 {
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
468 Type* t = type->toBasetype();
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
469 if (t->ty == Tclass)
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
470 return dwarfTypeDescription_impl(type->pointerTo(), cu, c_name);
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
471 else
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
472 return dwarfTypeDescription_impl(type, cu, c_name);
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
473 }
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
474
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
475 //////////////////////////////////////////////////////////////////////////////////////////////////
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
476
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
477 void DtoDwarfLocalVariable(LLValue* ll, VarDeclaration* vd)
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
478 {
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
479 Logger::println("D to dwarf local variable");
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
480 LOG_SCOPE;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
481
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
482 // get compile units
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
483 llvm::DICompileUnit thisCU = DtoDwarfCompileUnit(gIR->dmodule);
955
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
484 llvm::DICompileUnit varCU = DtoDwarfCompileUnit(getDefinedModule(vd));
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
485
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
486 // get type description
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
487 llvm::DIType TD = dwarfTypeDescription(vd->type, thisCU, NULL);
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
488 if (TD.isNull())
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
489 return; // unsupported
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
490
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
491 // get variable description
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
492 llvm::DIVariable VD = dwarfVariable(vd, TD);
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
493
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
494 // declare
246
b604c56945b0 [svn r263] Changed *** ATTENTION *** to warnings.
lindquist
parents: 245
diff changeset
495 dwarfDeclare(ll, VD);
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
496 }
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
497
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
498 //////////////////////////////////////////////////////////////////////////////////////////////////
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
499
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
500 llvm::DICompileUnit DtoDwarfCompileUnit(Module* m)
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
501 {
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
502 Logger::println("D to dwarf compile_unit");
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
503 LOG_SCOPE;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
504
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
505 // we might be generating for an import
1271
0686701178d3 Moved special casing of 'assert(this, "null this");' generated statements from !ThisExp into !AssertExp.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1237
diff changeset
506 IrModule* irmod = getIrModule(m);
0686701178d3 Moved special casing of 'assert(this, "null this");' generated statements from !ThisExp into !AssertExp.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1237
diff changeset
507
0686701178d3 Moved special casing of 'assert(this, "null this");' generated statements from !ThisExp into !AssertExp.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1237
diff changeset
508 if (!irmod->diCompileUnit.isNull())
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
509 {
1271
0686701178d3 Moved special casing of 'assert(this, "null this");' generated statements from !ThisExp into !AssertExp.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1237
diff changeset
510 assert (irmod->diCompileUnit.getGV()->getParent() == gIR->module
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
511 && "debug info compile unit belongs to incorrect llvm module!");
1271
0686701178d3 Moved special casing of 'assert(this, "null this");' generated statements from !ThisExp into !AssertExp.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1237
diff changeset
512 return irmod->diCompileUnit;
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
513 }
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
514
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
515 // prepare srcpath
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
516 std::string srcpath(FileName::path(m->srcfile->name->toChars()));
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
517 if (!FileName::absolute(srcpath.c_str())) {
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
518 llvm::sys::Path tmp = llvm::sys::Path::GetCurrentDirectory();
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
519 tmp.appendComponent(srcpath);
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
520 srcpath = tmp.toString();
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
521 if (!srcpath.empty() && *srcpath.rbegin() != '/' && *srcpath.rbegin() != '\\')
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
522 srcpath = srcpath + '/';
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
523 }
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
524
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
525 // make compile unit
1271
0686701178d3 Moved special casing of 'assert(this, "null this");' generated statements from !ThisExp into !AssertExp.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1237
diff changeset
526 irmod->diCompileUnit = gIR->difactory.CreateCompileUnit(
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
527 global.params.symdebug == 2 ? DW_LANG_C : DW_LANG_D,
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
528 m->srcfile->name->toChars(),
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
529 srcpath,
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
530 "LDC (http://www.dsource.org/projects/ldc)",
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
531 //FIXME: What do these two mean?
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
532 false, // isMain,
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
533 false // isOptimized
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
534 );
1650
40bd4a0d4870 Update to work with LLVM 2.7.
Tomas Lindquist Olsen
parents: 1571
diff changeset
535
1066
186d44690036 Give compile units LinkOnceLinkage to circumvent duplicate symbols with LLVM linking.
Christian Kamm <kamm incasoftware de>
parents: 998
diff changeset
536 // if the linkage stays internal, we can't llvm-link the generated modules together:
186d44690036 Give compile units LinkOnceLinkage to circumvent duplicate symbols with LLVM linking.
Christian Kamm <kamm incasoftware de>
parents: 998
diff changeset
537 // llvm's DwarfWriter uses path and filename to determine the symbol name and we'd
186d44690036 Give compile units LinkOnceLinkage to circumvent duplicate symbols with LLVM linking.
Christian Kamm <kamm incasoftware de>
parents: 998
diff changeset
538 // end up with duplicate symbols
1271
0686701178d3 Moved special casing of 'assert(this, "null this");' generated statements from !ThisExp into !AssertExp.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1237
diff changeset
539 irmod->diCompileUnit.getGV()->setLinkage(DEBUGINFO_LINKONCE_LINKAGE_TYPE);
0686701178d3 Moved special casing of 'assert(this, "null this");' generated statements from !ThisExp into !AssertExp.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1237
diff changeset
540 irmod->diCompileUnit.getGV()->setName(std::string("llvm.dbg.compile_unit_") + srcpath + m->srcfile->name->toChars());
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
541
1271
0686701178d3 Moved special casing of 'assert(this, "null this");' generated statements from !ThisExp into !AssertExp.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1237
diff changeset
542 return irmod->diCompileUnit;
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
543 }
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
544
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
545 //////////////////////////////////////////////////////////////////////////////////////////////////
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
546
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
547 llvm::DISubprogram DtoDwarfSubProgram(FuncDeclaration* fd)
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
548 {
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
549 Logger::println("D to dwarf subprogram");
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
550 LOG_SCOPE;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
551
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
552 llvm::DICompileUnit context = DtoDwarfCompileUnit(gIR->dmodule);
955
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
553 llvm::DICompileUnit definition = DtoDwarfCompileUnit(getDefinedModule(fd));
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
554
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
555 // FIXME: duplicates ?
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
556 return gIR->difactory.CreateSubprogram(
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
557 context, // context
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
558 fd->toPrettyChars(), // name
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
559 fd->toPrettyChars(), // display name
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
560 fd->mangle(), // linkage name
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
561 definition, // compile unit
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
562 fd->loc.linnum, // line no
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
563 //FIXME: what's this type for?
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
564 llvm::DIType(NULL), // type
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
565 fd->protection == PROTprivate, // is local to unit
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
566 context.getGV() == definition.getGV() // isdefinition
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
567 );
686
363bb6c0cc80 Emit stub debug info for generated functions to work around LLVM bug 2172.
Christian Kamm <kamm incasoftware de>
parents: 683
diff changeset
568 }
363bb6c0cc80 Emit stub debug info for generated functions to work around LLVM bug 2172.
Christian Kamm <kamm incasoftware de>
parents: 683
diff changeset
569
363bb6c0cc80 Emit stub debug info for generated functions to work around LLVM bug 2172.
Christian Kamm <kamm incasoftware de>
parents: 683
diff changeset
570 //////////////////////////////////////////////////////////////////////////////////////////////////
363bb6c0cc80 Emit stub debug info for generated functions to work around LLVM bug 2172.
Christian Kamm <kamm incasoftware de>
parents: 683
diff changeset
571
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
572 llvm::DISubprogram DtoDwarfSubProgramInternal(const char* prettyname, const char* mangledname)
686
363bb6c0cc80 Emit stub debug info for generated functions to work around LLVM bug 2172.
Christian Kamm <kamm incasoftware de>
parents: 683
diff changeset
573 {
363bb6c0cc80 Emit stub debug info for generated functions to work around LLVM bug 2172.
Christian Kamm <kamm incasoftware de>
parents: 683
diff changeset
574 Logger::println("D to dwarf subprogram");
363bb6c0cc80 Emit stub debug info for generated functions to work around LLVM bug 2172.
Christian Kamm <kamm incasoftware de>
parents: 683
diff changeset
575 LOG_SCOPE;
363bb6c0cc80 Emit stub debug info for generated functions to work around LLVM bug 2172.
Christian Kamm <kamm incasoftware de>
parents: 683
diff changeset
576
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
577 llvm::DICompileUnit context = DtoDwarfCompileUnit(gIR->dmodule);
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
578
686
363bb6c0cc80 Emit stub debug info for generated functions to work around LLVM bug 2172.
Christian Kamm <kamm incasoftware de>
parents: 683
diff changeset
579 // FIXME: duplicates ?
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
580 return gIR->difactory.CreateSubprogram(
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
581 context, // context
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
582 prettyname, // name
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
583 prettyname, // display name
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
584 mangledname, // linkage name
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
585 context, // compile unit
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
586 0, // line no
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
587 //FIXME: what's this type for?
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
588 llvm::DIType(NULL), // type
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
589 true, // is local to unit
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
590 true // isdefinition
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
591 );
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
592 }
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
593
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
594 //////////////////////////////////////////////////////////////////////////////////////////////////
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
595
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
596 llvm::DIGlobalVariable DtoDwarfGlobalVariable(LLGlobalVariable* ll, VarDeclaration* vd)
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
597 {
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
598 Logger::println("D to dwarf global_variable");
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
599 LOG_SCOPE;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
600
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
601 // FIXME: duplicates ?
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
602 return dwarfGlobalVariable(ll, vd);
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
603 }
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
604
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
605 //////////////////////////////////////////////////////////////////////////////////////////////////
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
606
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
607 void DtoDwarfFuncStart(FuncDeclaration* fd)
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
608 {
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
609 Logger::println("D to dwarf funcstart");
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
610 LOG_SCOPE;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
611
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
612 assert(!fd->ir.irFunc->diSubprogram.isNull());
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
613 gIR->difactory.InsertSubprogramStart(fd->ir.irFunc->diSubprogram, gIR->scopebb());
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
614 }
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
615
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
616 //////////////////////////////////////////////////////////////////////////////////////////////////
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
617
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
618 void DtoDwarfFuncEnd(FuncDeclaration* fd)
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
619 {
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
620 Logger::println("D to dwarf funcend");
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
621 LOG_SCOPE;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
622
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
623 assert(!fd->ir.irFunc->diSubprogram.isNull());
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
624 gIR->difactory.InsertRegionEnd(fd->ir.irFunc->diSubprogram, gIR->scopebb());
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
625 }
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
626
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
627 //////////////////////////////////////////////////////////////////////////////////////////////////
245
d61ce72c39ab [svn r262] Fixed debug info for normal function parameters.
lindquist
parents: 244
diff changeset
628
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
629 void DtoDwarfStopPoint(unsigned ln)
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
630 {
268
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
631 Logger::println("D to dwarf stoppoint at line %u", ln);
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
632 LOG_SCOPE;
23d0d9855cad [svn r289] Fixed: right shift >> was broken for unsigned types.
lindquist
parents: 252
diff changeset
633
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
634 gIR->difactory.InsertStopPoint(
955
8a70b4381369 Make sure debug info uses the right compilation units - in particular the
Christian Kamm <kamm incasoftware de>
parents: 946
diff changeset
635 DtoDwarfCompileUnit(getDefinedModule(gIR->func()->decl)), // compile unit
946
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
636 ln, // line no
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
637 0, // col no
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
638 gIR->scopebb()
1714836f2c0b Mostly rewrite debug info generation in terms of llvm/Analysis/DebugInfo.h.
Christian Kamm <kamm incasoftware de>
parents: 904
diff changeset
639 );
250
fc9c1a0eabbd [svn r267] Fixed debug info for global variables.
lindquist
parents: 247
diff changeset
640 }
1650
40bd4a0d4870 Update to work with LLVM 2.7.
Tomas Lindquist Olsen
parents: 1571
diff changeset
641
40bd4a0d4870 Update to work with LLVM 2.7.
Tomas Lindquist Olsen
parents: 1571
diff changeset
642 #endif