summaryrefslogtreecommitdiffstats
path: root/lld/ELF/OutputSections.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2016-05-02 23:35:59 +0000
committerRui Ueyama <ruiu@google.com>2016-05-02 23:35:59 +0000
commitdd368fcb05ef5c7187c8d94f84aa8703a234a6d0 (patch)
treee7b3ad82d3e374c97e64edac5c2400ebe78a5050 /lld/ELF/OutputSections.cpp
parent8742943cb04d1bd69a692e5d57bb08c08def2f26 (diff)
downloadbcm5719-llvm-dd368fcb05ef5c7187c8d94f84aa8703a234a6d0.tar.gz
bcm5719-llvm-dd368fcb05ef5c7187c8d94f84aa8703a234a6d0.zip
Pass all buffers to BuildId hash function at once. NFC.
This change simplifies the BuildId classes by removing a few member functions and variables from them. It should also make it easy to parallelize hash computation in future because now each BuildId object see all inputs rather than one at a time. llvm-svn: 268333
Diffstat (limited to 'lld/ELF/OutputSections.cpp')
-rw-r--r--lld/ELF/OutputSections.cpp39
1 files changed, 20 insertions, 19 deletions
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp
index 13d5805d8a2..922de777520 100644
--- a/lld/ELF/OutputSections.cpp
+++ b/lld/ELF/OutputSections.cpp
@@ -1636,35 +1636,36 @@ template <class ELFT> void BuildIdSection<ELFT>::writeTo(uint8_t *Buf) {
HashBuf = Buf + 16;
}
-template <class ELFT> void BuildIdFnv1<ELFT>::update(ArrayRef<uint8_t> Buf) {
+template <class ELFT>
+void BuildIdFnv1<ELFT>::writeBuildId(ArrayRef<ArrayRef<uint8_t>> Bufs) {
+ const endianness E = ELFT::TargetEndianness;
+
// 64-bit FNV-1 hash
- const uint64_t Prime = 0x100000001b3;
- for (uint8_t B : Buf) {
- Hash *= Prime;
- Hash ^= B;
+ uint64_t Hash = 0xcbf29ce484222325;
+ for (ArrayRef<uint8_t> Buf : Bufs) {
+ for (uint8_t B : Buf) {
+ Hash *= 0x100000001b3;
+ Hash ^= B;
+ }
}
-}
-
-template <class ELFT> void BuildIdFnv1<ELFT>::writeBuildId() {
- const endianness E = ELFT::TargetEndianness;
write64<E>(this->HashBuf, Hash);
}
-template <class ELFT> void BuildIdMd5<ELFT>::update(ArrayRef<uint8_t> Buf) {
- Hash.update(Buf);
-}
-
-template <class ELFT> void BuildIdMd5<ELFT>::writeBuildId() {
+template <class ELFT>
+void BuildIdMd5<ELFT>::writeBuildId(ArrayRef<ArrayRef<uint8_t>> Bufs) {
+ llvm::MD5 Hash;
+ for (ArrayRef<uint8_t> Buf : Bufs)
+ Hash.update(Buf);
MD5::MD5Result Res;
Hash.final(Res);
memcpy(this->HashBuf, Res, 16);
}
-template <class ELFT> void BuildIdSha1<ELFT>::update(ArrayRef<uint8_t> Buf) {
- Hash.update(Buf);
-}
-
-template <class ELFT> void BuildIdSha1<ELFT>::writeBuildId() {
+template <class ELFT>
+void BuildIdSha1<ELFT>::writeBuildId(ArrayRef<ArrayRef<uint8_t>> Bufs) {
+ llvm::SHA1 Hash;
+ for (ArrayRef<uint8_t> Buf : Bufs)
+ Hash.update(Buf);
memcpy(this->HashBuf, Hash.final().data(), 20);
}
OpenPOWER on IntegriCloud