1
- # llvm-debuginfo-analyzer
1
+ # ` llvm-debuginfo-analyzer `
2
2
3
3
These are the notes collected during the development, review and test.
4
- They describe limitations, know issues and future work.
4
+ They describe limitations, known issues and future work.
5
5
6
- ### Remove the use of macros in * LVReader.h* that describe the * bumpallocators* .
6
+ ### Remove the use of macros in `` LVReader.h `` that describe the `` bumpallocators `` .
7
7
** [ D137933] ( https://reviews.llvm.org/D137933#inline-1389904 ) **
8
8
9
- Use a standard (or LLVM) ** map** with ** typeinfo** (would need a specialization
9
+ Use a standard (or LLVM) `` map `` with `` typeinfo `` (would need a specialization
10
10
to expose equality and hasher) for the allocators and the creation
11
11
functions could be a function template.
12
12
13
- .. _ lit-test-label:
14
- ### Use a * lit test* instead of a * unit test* for the * logical readers* .
13
+ ### Use a `` lit test `` instead of a `` unit test `` for the `` logical readers `` .
15
14
** [ D125783] ( https://reviews.llvm.org/D125783#inline-1324376 ) **
16
15
17
- As the ** DebugInfoLogicalView** library is sufficiently exposed via the
18
- ** llvm-debuginfo-analyzer** tool, follow the LLVM general approach and
19
- use ** LIT** tests to validate the ** logical readers** .
16
+ As the `` DebugInfoLogicalView `` library is sufficiently exposed via the
17
+ `` llvm-debuginfo-analyzer `` tool, follow the LLVM general approach and
18
+ use `` LIT `` tests to validate the `` logical readers `` .
20
19
21
- Convert the ** unitests** :
20
+ Convert the `` unitests `` :
22
21
```
23
22
llvm-project/llvm/unittests/DebugInfo/LogicalView/CodeViewReaderTest.cpp
24
23
llvm-project/llvm/unittests/DebugInfo/LogicalView/DWARFReaderTest.cpp
25
24
```
26
- into ** LIT tests** :
25
+ into `` LIT tests `` :
27
26
```
28
27
llvm-project/llvm/test/DebugInfo/LogicalView/CodeViewReader.test
29
28
llvm-project/llvm/test/DebugInfo/LogicalView/DWARFReader.test
30
29
```
31
30
32
- ### Eliminate calls to * getInputFileDirectory()* in the unit tests.
31
+ ### Eliminate calls to `` getInputFileDirectory() `` in the unit tests.
33
32
** [ D125783] ( https://reviews.llvm.org/D125783#inline-1324359 ) **
34
33
35
- Rewrite the unittests ** ReaderTest** and ** CodeViewReaderTest** to eliminate
34
+ Rewrite the unittests `` ReaderTest `` and `` CodeViewReaderTest `` to eliminate
36
35
the call:
37
36
```
38
37
getInputFileDirectory()
39
38
```
40
39
as use of that call is discouraged.
41
40
42
- ### Fix mismatch between * %d/%x* format strings and * uint64_t* type.
41
+ ### Fix mismatch between `` %d/%x `` format strings and `` uint64_t `` type.
43
42
** [ D137400] ( https://reviews.llvm.org/D137400 ) / [ 58758] ( https://github.com/llvm/llvm-project/issues/58758 ) **
44
43
45
- Incorrect printing of ** uint64_t** on ** 32-bit** platforms.
46
- Add the ** PRIx64** specifier to the printing code (** format()** ).
44
+ Incorrect printing of `` uint64_t `` on `` 32-bit `` platforms.
45
+ Add the `` PRIx64 `` specifier to the printing code (`` format() `` ).
47
46
48
- ### Remove * LVScope::Children* container.
47
+ ### Remove `` LVScope::Children `` container.
49
48
** [ D137933] ( https://reviews.llvm.org/D137933#inline-1373902 ) **
50
49
51
- Use a ** chaining iterator** over the other containers rather than keep a
52
- separate container ** Children** that mirrors their contents.
50
+ Use a `` chaining iterator `` over the other containers rather than keep a
51
+ separate container `` Children `` that mirrors their contents.
53
52
54
- ### Use * TableGen* for command line options.
53
+ ### Use `` TableGen `` for command line options.
55
54
** [ D125777] ( https://reviews.llvm.org/D125777#inline-1291801 ) **
56
55
57
- The current trend is to use ** TableGen** for command-line options in tools.
58
- Change command line options to use ** tablegen** as many other LLVM tools.
56
+ The current trend is to use `` TableGen `` for command-line options in tools.
57
+ Change command line options to use `` tablegen `` as many other LLVM tools.
59
58
60
- ### * LVDoubleMap* to return * optional\ < ValueType\> * instead of null pointer.
59
+ ### `` LVDoubleMap `` to return `` optional<ValueType> `` instead of `` null pointer `` .
61
60
** [ D125783] ( https://reviews.llvm.org/D125783#inline-1294164 ) **
62
61
63
- The more idiomatic LLVM way to handle this would be to have ** find**
64
- return ** Optional\ < ValueType\> ** .
62
+ The more idiomatic LLVM way to handle this would be to have `` find ``
63
+ return `` Optional<ValueType> `` .
65
64
66
- ### Pass references instead of pointers (* Comparison functions* ).
65
+ ### Pass references instead of pointers (`` Comparison functions `` ).
67
66
** [ D125782] ( https://reviews.llvm.org/D125782#inline-1293920 ) **
68
67
69
- In the ** comparison functions** , pass references instead of pointers (when
68
+ In the `` comparison functions `` , pass references instead of pointers (when
70
69
pointers cannot be null).
71
70
72
- ### Use * StringMap* where possible.
71
+ ### Use `` StringMap `` where possible.
73
72
** [ D125783] ( https://reviews.llvm.org/D125783#inline-1294211 ) **
74
73
75
- LLVM has a ** StringMap** class that is advertised as more efficient than
76
- ** std::map\ < std::string, ValueType\> ** . Mainly it does fewer allocations
77
- because the key is not a ** std::string** .
74
+ LLVM has a `` StringMap `` class that is advertised as more efficient than
75
+ `` std::map<std::string, ValueType> `` . Mainly it does fewer allocations
76
+ because the key is not a `` std::string `` .
78
77
79
- Replace the use of ** std::map\ < std::string, ValueType\> ** with ** StringMap** .
80
- One specific case is the ** LVSymbolNames** definitions.
78
+ Replace the use of `` std::map<std::string, ValueType> `` with `` StringMap `` .
79
+ One specific case is the `` LVSymbolNames `` definitions.
81
80
82
- ### Calculate unique offset for * CodeView* elements.
83
- In order to have the same logical functionality as the ** DWARF Reader ** , such
81
+ ### Calculate unique offset for `` CodeView `` elements.
82
+ In order to have the same logical functionality as the `` DWARF `` reader , such
84
83
as:
85
84
86
85
* find scopes contribution to debug info
87
86
* sort by its physical location
88
87
89
- The logical elements must have an unique offset (similar like the ** DWARF
90
- DIE offset** ).
88
+ The logical elements must have an unique offset (similar like the `` DWARF
89
+ DIE offset`` ).
91
90
92
- ### Move * initializeFileAndStringTables* to the COFF Library.
93
- There is some code in the CodeView reader that was extracted/adapted
94
- from ** tools/llvm-readobj/COFFDumper.cpp** that can be moved to the ** COFF **
91
+ ### Move `` initializeFileAndStringTables `` to the `` CodeView `` Library.
92
+ There is some code in the `` CodeView `` reader that was extracted/adapted
93
+ from `` tools/llvm-readobj/COFFDumper.cpp `` that can be moved to the `` CodeView ``
95
94
library.
96
95
97
- We had a similar case with code shared with llvm-pdbutil that was moved
98
- to the PDB library: ** [ D122226] ( https://reviews.llvm.org/D122226 ) **
96
+ We had a similar case with code shared with `` llvm-pdbutil `` that was moved
97
+ to the `` PDB `` library: ** [ D122226] ( https://reviews.llvm.org/D122226 ) **
99
98
100
- ### Move * getSymbolKindName* and * formatRegisterId* to the CodeView Library.
101
- There is some code in the CodeView reader that was extracted/adapted
102
- from ** lib/DebugInfo/CodeView/SymbolDumper.cpp** that can be used.
99
+ ### Move `` getSymbolKindName `` and `` formatRegisterId `` to the `` CodeView `` Library.
100
+ There is some code in the `` CodeView `` reader that was extracted/adapted
101
+ from `` lib/DebugInfo/CodeView/SymbolDumper.cpp `` that can be used.
103
102
104
- ### Use of * std::unordered_set* instead of * std::set* .
103
+ ### Use of `` std::unordered_set `` instead of `` std::set `` .
105
104
** [ D125784] ( https://reviews.llvm.org/D125784#inline-1221421 ) **
106
105
107
- Replace the ** std::set** usage for ** DeducedScopes** , ** UnresolvedScopes** and
108
- ** IdentifiedNamespaces** with ** std::unordered_set** and get the benefit
106
+ Replace the `` std::set `` usage for `` DeducedScopes `` , `` UnresolvedScopes `` and
107
+ `` IdentifiedNamespaces `` with `` std::unordered_set `` and get the benefit
109
108
of the O(1) while inserting/searching, as the order is not important.
110
109
111
- ### Optimize * LVNamespaceDeduction::find* funtion.
110
+ ### Optimize `` LVNamespaceDeduction::find `` funtion.
112
111
** [ D125784] ( https://reviews.llvm.org/D125784#inline-1296195 ) **
113
112
114
- Optimize the ** find** method to use the proposed code:
113
+ Optimize the `` find `` method to use the proposed code:
115
114
116
115
```
117
116
LVStringRefs::iterator Iter = std::find_if(Components.begin(), Components.end(),
@@ -125,47 +124,47 @@ Optimize the **find** method to use the proposed code:
125
124
Factor out printing functionality from the logical elements into a
126
125
common module.
127
126
128
- ### Refactor * LVBinaryReader::processLines* .
127
+ ### Refactor `` LVBinaryReader::processLines `` .
129
128
** [ D125783] ( https://reviews.llvm.org/D125783#inline-1246155 ) /
130
129
[ D137156] ( https://reviews.llvm.org/D137156 ) **
131
130
132
131
During the traversal of the debug information sections, we created the
133
- logical lines representing the ** disassembled instructions** from the ** text
134
- section** and the logical lines representing the ** line records** from the
135
- ** debug line** section. Using the ranges associated with the logical scopes,
132
+ logical lines representing the `` disassembled instructions `` from the `` text
133
+ section`` and the logical lines representing the `` line records`` from the
134
+ `` debug line `` section. Using the ranges associated with the logical scopes,
136
135
we will allocate those logical lines to their logical scopes.
137
136
138
137
Consider the case when any of those lines become orphans, causing
139
138
incorrect scope parent for disassembly or line records.
140
139
141
- ### Add support for * -ffunction-sections* .
140
+ ### Add support for `` -ffunction-sections `` .
142
141
** [ D125783] ( https://reviews.llvm.org/D125783#inline-1295012 ) **
143
142
144
143
Only linked executables are handled. It does not support relocatable
145
- files compiled with ** -ffunction-sections** .
144
+ files compiled with `` -ffunction-sections `` .
146
145
147
146
### Add support for DWARF v5 .debug_names section / CodeView public symbols stream.
148
147
** [ D125783] ( https://reviews.llvm.org/D125783#inline-1294142 ) **
149
148
150
- The ** DWARF** and ** CodeView** readers use the public names information to create
151
- the instructions (** LVLineAssembler** ). Instead of relying on ** DWARF** section
152
- names (** .debug_pubnames** , ** .debug_names** ) and ** CodeView** ** public symbol** stream
153
- (** S_PUB32** ), the readers should collect the needed information while processing
149
+ The `` DWARF `` and `` CodeView `` readers use the public names information to create
150
+ the instructions (`` LVLineAssembler `` ). Instead of relying on `` DWARF `` section
151
+ names (`` .debug_pubnames `` , `` .debug_names `` ) and `` CodeView `` `` public symbol `` stream
152
+ (`` S_PUB32 `` ), the readers should collect the needed information while processing
154
153
the debug information.
155
154
156
155
If the object file supports the above section names and stream, use them
157
156
to create the public names.
158
157
159
- ### Add support for some extra DWARF locations.
160
- The following DWARF debug location operands are not supported:
158
+ ### Add support for some extra ` DWARF ` locations.
159
+ The following `` DWARF `` debug location operands are not supported:
161
160
162
161
* DW_OP_const_type
163
162
* DW_OP_entry_value
164
163
* DW_OP_implicit_value
165
164
166
165
### Add support for additional binary formats.
167
- * Extended COFF (XCOFF)
166
+ * Extended COFF `` (XCOFF) ``
168
167
169
- ### Add support for * JSON* or * YAML* .
168
+ ### Add support for `` JSON `` or `` YAML ``
170
169
The logical view uses its own and non-standard free form text when
171
170
displaying information on logical elements.
0 commit comments