diff options
author | Rui Ueyama <ruiu@google.com> | 2016-05-02 23:35:59 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2016-05-02 23:35:59 +0000 |
commit | dd368fcb05ef5c7187c8d94f84aa8703a234a6d0 (patch) | |
tree | e7b3ad82d3e374c97e64edac5c2400ebe78a5050 /lld/ELF/OutputSections.cpp | |
parent | 8742943cb04d1bd69a692e5d57bb08c08def2f26 (diff) | |
download | bcm5719-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.cpp | 39 |
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); } |