[PATCH] D33551: [ELF] - Simplify implementation of constant pool when building .gdb_index
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu May 25 09:09:46 PDT 2017
grimar created this revision.
Herald added a subscriber: emaste.
https://sourceware.org/gdb/onlinedocs/gdb/Index-Section-Format.html says:
"A CU vector in the constant pool is a sequence of offset_type values. The first value is the number of CU indices in the vector. Each subsequent value is the index and symbol attributes of a CU in the CU list."
Previously we keeped 2 values until the end, what was useless. Initially was a part of https://reviews.llvm.org/D32647,
though it is possible to split out. Patch do that.
https://reviews.llvm.org/D33551
Files:
ELF/SyntheticSections.cpp
ELF/SyntheticSections.h
Index: ELF/SyntheticSections.h
===================================================================
--- ELF/SyntheticSections.h
+++ ELF/SyntheticSections.h
@@ -515,7 +515,7 @@
GdbHashTab SymbolTable;
// The CU vector portion of the constant pool.
- std::vector<std::vector<std::pair<uint32_t, uint8_t>>> CuVectors;
+ std::vector<std::vector<uint32_t>> CuVectors;
std::vector<AddressEntry> AddressArea;
Index: ELF/SyntheticSections.cpp
===================================================================
--- ELF/SyntheticSections.cpp
+++ ELF/SyntheticSections.cpp
@@ -1778,11 +1778,11 @@
std::tie(IsNew, Sym) = SymbolTable.add(Hash, Offset);
if (IsNew) {
Sym->CuVectorIndex = CuVectors.size();
- CuVectors.push_back({{CuId, Pair.second}});
- continue;
+ CuVectors.push_back({});
}
- CuVectors[Sym->CuVectorIndex].push_back({CuId, Pair.second});
+ CuVectors[Sym->CuVectorIndex].push_back((uint32_t)CuId |
+ (Pair.second << 24));
}
}
@@ -1806,7 +1806,7 @@
ConstantPoolOffset =
SymTabOffset + SymbolTable.getCapacity() * SymTabEntrySize;
- for (std::vector<std::pair<uint32_t, uint8_t>> &CuVec : CuVectors) {
+ for (std::vector<uint32_t> &CuVec : CuVectors) {
CuVectorsOffset.push_back(CuVectorsSize);
CuVectorsSize += OffsetTypeSize * (CuVec.size() + 1);
}
@@ -1859,14 +1859,11 @@
}
// Write the CU vectors into the constant pool.
- for (std::vector<std::pair<uint32_t, uint8_t>> &CuVec : CuVectors) {
+ for (std::vector<uint32_t> &CuVec : CuVectors) {
write32le(Buf, CuVec.size());
Buf += 4;
- for (std::pair<uint32_t, uint8_t> &P : CuVec) {
- uint32_t Index = P.first;
- uint8_t Flags = P.second;
- Index |= Flags << 24;
- write32le(Buf, Index);
+ for (uint32_t Val : CuVec) {
+ write32le(Buf, Val);
Buf += 4;
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33551.100257.patch
Type: text/x-patch
Size: 1963 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170525/70946c91/attachment.bin>
More information about the llvm-commits
mailing list