#
9fc944ae |
| 06-Jul-2018 |
Benjamin Kramer <benny.kra@googlemail.com> |
[PDB] memicmp only exists on Windows, use StringRef::compare_lower instead
llvm-svn: 336469
|
#
648bebdc |
| 06-Jul-2018 |
Zachary Turner <zturner@google.com> |
[PDB] One more fix for hasing GSI records.
The reference implementation uses a case-insensitive string comparison for strings of equal length. This will cause the string "tEo" to compare less than
[PDB] One more fix for hasing GSI records.
The reference implementation uses a case-insensitive string comparison for strings of equal length. This will cause the string "tEo" to compare less than "VUo". However we were using a case sensitive comparison, which would generate the opposite outcome. Switch to a case insensitive comparison. Also, when one of the strings contains non-ascii characters, fallback to a straight memcmp.
The only way to really test this is with a DIA test. Before this patch, the test will fail (but succeed if link.exe is used instead of lld-link). After the patch, it succeeds even with lld-link.
llvm-svn: 336464
show more ...
|
#
1f200adf |
| 06-Jul-2018 |
Zachary Turner <zturner@google.com> |
[PDB] Sort globals symbols by name in GSI hash buckets.
It seems like the debugger first computes a symbol's bucket, and then does a binary search of entries in the bucket using the symbol's name in
[PDB] Sort globals symbols by name in GSI hash buckets.
It seems like the debugger first computes a symbol's bucket, and then does a binary search of entries in the bucket using the symbol's name in order to find it. If the bucket entries are not in sorted order, this obviously won't work. After this patch a couple of simple test cases show that we generate an exactly identical GSI hash stream, which is very nice.
llvm-svn: 336405
show more ...
|
Revision tags: llvmorg-6.0.1, llvmorg-6.0.1-rc3, llvmorg-6.0.1-rc2, llvmorg-6.0.1-rc1, llvmorg-5.0.2, llvmorg-5.0.2-rc2 |
|
#
a6fb536e |
| 23-Mar-2018 |
Zachary Turner <zturner@google.com> |
[PDB] Make our PDBs look more like MS PDBs.
When investigating bugs in PDB generation, the first step is often to do the same link with link.exe and then compare PDBs.
But comparing PDBs is hard be
[PDB] Make our PDBs look more like MS PDBs.
When investigating bugs in PDB generation, the first step is often to do the same link with link.exe and then compare PDBs.
But comparing PDBs is hard because two completely different byte sequences can both be correct, so it hampers the investigation when you also have to spend time figuring out not just which bytes are different, but also if the difference is meaningful.
This patch fixes a couple of cases related to string table emission, hash table emission, and the order in which we emit strings that makes more of our bytes the same as the bytes generated by MS PDBs.
Differential Revision: https://reviews.llvm.org/D44810
llvm-svn: 328348
show more ...
|
Revision tags: llvmorg-5.0.2-rc1, llvmorg-6.0.0, llvmorg-6.0.0-rc3, llvmorg-6.0.0-rc2, llvmorg-6.0.0-rc1, llvmorg-5.0.1, llvmorg-5.0.1-rc3, llvmorg-5.0.1-rc2, llvmorg-5.0.1-rc1, llvmorg-5.0.0, llvmorg-5.0.0-rc5, llvmorg-5.0.0-rc4, llvmorg-5.0.0-rc3 |
|
#
d76dc2d3 |
| 21-Aug-2017 |
Zachary Turner <zturner@google.com> |
[lld/pdb] Speed up construction of publics & globals addr map.
computeAddrMap function calls std::stable_sort with a comparison function that computes deserialized symbols every time its called. In
[lld/pdb] Speed up construction of publics & globals addr map.
computeAddrMap function calls std::stable_sort with a comparison function that computes deserialized symbols every time its called. In the result deserializeAs<PublicSym32> is called 20-30 times per symbol. It's much faster to calculate it beforehand and pass a pointer to it to the comparison function.
Patch by Alex Telishev Differential Revision: https://reviews.llvm.org/D36941
llvm-svn: 311373
show more ...
|
#
49a49fe8 |
| 20-Aug-2017 |
Benjamin Kramer <benny.kra@googlemail.com> |
Move helper classes into anonymous namespaces.
No functionality change intended.
llvm-svn: 311288
|
#
ee9906d8 |
| 11-Aug-2017 |
Zachary Turner <zturner@google.com> |
[LLD/PDB] Write actual records to the globals stream.
Previously we were writing an empty globals stream. Windows tools interpret this as "private symbols are not present in this PDB", even when th
[LLD/PDB] Write actual records to the globals stream.
Previously we were writing an empty globals stream. Windows tools interpret this as "private symbols are not present in this PDB", even when they are, so we need to fix this. Regardless, without it we don't have information about global variables, so we need to fix it anyway. This patch does that.
With this patch, the "lm" command in WinDbg correctly reports that we have private symbols available, but the "dv" command still refuses to display local variables.
Differential Revision: https://reviews.llvm.org/D36535
llvm-svn: 310743
show more ...
|
Revision tags: llvmorg-5.0.0-rc2 |
|
#
5448dabb |
| 09-Aug-2017 |
Zachary Turner <zturner@google.com> |
[PDB] Fix an issue writing the publics stream.
In the refactor to merge the publics and globals stream, a bug was introduced that wrote the wrong value for one of the fields of the PublicsStreamHead
[PDB] Fix an issue writing the publics stream.
In the refactor to merge the publics and globals stream, a bug was introduced that wrote the wrong value for one of the fields of the PublicsStreamHeader. This caused debugging in WinDbg to break.
We had no way of dumping any of these fields, so in addition to fixing the bug I've added dumping support for them along with a test that verifies the correct value is written.
llvm-svn: 310439
show more ...
|
#
946204c8 |
| 09-Aug-2017 |
Zachary Turner <zturner@google.com> |
[PDB] Merge Global and Publics Builders.
The publics stream and globals stream are very similar. They both contain a list of hash buckets that refer into a single shared stream, the symbol record st
[PDB] Merge Global and Publics Builders.
The publics stream and globals stream are very similar. They both contain a list of hash buckets that refer into a single shared stream, the symbol record stream. Because of the need for each builder to manage both an independent hash stream as well as a single shared record stream, making the two builders be independent entities is not the right design. This patch merges them into a single class, of which only a single instance is needed to create all 3 streams. PublicsStreamBuilder and GlobalsStreamBuilder are now merged into the single GSIStreamBuilder class, which writes all 3 streams at once.
Note that this patch does not contain any functionality change. So we're still not yet writing any records to the globals stream. All we're doing is making it so that when we do start writing records to the globals, this refactor won't have to be part of that patch.
Differential Revision: https://reviews.llvm.org/D36489
llvm-svn: 310438
show more ...
|