[lld] r360316 - [LLD][NFC] Refactor: BuildID hash size now computed in one place.

Ben Dunbobbin via llvm-commits llvm-commits at lists.llvm.org
Thu May 9 01:08:09 PDT 2019


Author: bd1976llvm
Date: Thu May  9 01:08:09 2019
New Revision: 360316

URL: http://llvm.org/viewvc/llvm-project?rev=360316&view=rev
Log:
[LLD][NFC] Refactor: BuildID hash size now computed in one place.

Differential Revision: https://reviews.llvm.org/D61078

Modified:
    lld/trunk/ELF/SyntheticSections.h
    lld/trunk/ELF/Writer.cpp

Modified: lld/trunk/ELF/SyntheticSections.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.h?rev=360316&r1=360315&r2=360316&view=diff
==============================================================================
--- lld/trunk/ELF/SyntheticSections.h (original)
+++ lld/trunk/ELF/SyntheticSections.h Thu May  9 01:08:09 2019
@@ -148,13 +148,13 @@ class BuildIdSection : public SyntheticS
   static const unsigned HeaderSize = 16;
 
 public:
+  const size_t HashSize;
   BuildIdSection();
   void writeTo(uint8_t *Buf) override;
   size_t getSize() const override { return HeaderSize + HashSize; }
   void writeBuildId(llvm::ArrayRef<uint8_t> Buf);
 
 private:
-  size_t HashSize;
   uint8_t *HashBuf;
 };
 

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=360316&r1=360315&r2=360316&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Thu May  9 01:08:09 2019
@@ -2541,48 +2541,42 @@ computeHash(llvm::MutableArrayRef<uint8_
   HashFn(HashBuf.data(), Hashes);
 }
 
-static std::vector<uint8_t> computeBuildId(llvm::ArrayRef<uint8_t> Buf) {
-  std::vector<uint8_t> BuildId;
+template <class ELFT> void Writer<ELFT>::writeBuildId() {
+  if (!In.BuildId || !In.BuildId->getParent())
+    return;
+
+  if (Config->BuildId == BuildIdKind::Hexstring) {
+    In.BuildId->writeBuildId(Config->BuildIdVector);
+    return;
+  }
+
+  // Compute a hash of all sections of the output file.
+  std::vector<uint8_t> BuildId(In.BuildId->HashSize);
+  llvm::ArrayRef<uint8_t> Buf{Out::BufferStart, size_t(FileSize)};
+
   switch (Config->BuildId) {
   case BuildIdKind::Fast:
-    BuildId.resize(8);
     computeHash(BuildId, Buf, [](uint8_t *Dest, ArrayRef<uint8_t> Arr) {
       write64le(Dest, xxHash64(Arr));
     });
     break;
   case BuildIdKind::Md5:
-    BuildId.resize(16);
-    computeHash(BuildId, Buf, [](uint8_t *Dest, ArrayRef<uint8_t> Arr) {
-      memcpy(Dest, MD5::hash(Arr).data(), 16);
+    computeHash(BuildId, Buf, [&](uint8_t *Dest, ArrayRef<uint8_t> Arr) {
+      memcpy(Dest, MD5::hash(Arr).data(), In.BuildId->HashSize);
     });
     break;
   case BuildIdKind::Sha1:
-    BuildId.resize(20);
-    computeHash(BuildId, Buf, [](uint8_t *Dest, ArrayRef<uint8_t> Arr) {
-      memcpy(Dest, SHA1::hash(Arr).data(), 20);
+    computeHash(BuildId, Buf, [&](uint8_t *Dest, ArrayRef<uint8_t> Arr) {
+      memcpy(Dest, SHA1::hash(Arr).data(), In.BuildId->HashSize);
     });
     break;
   case BuildIdKind::Uuid:
-    BuildId.resize(16);
-    if (auto EC = llvm::getRandomBytes(BuildId.data(), 16))
+    if (auto EC = llvm::getRandomBytes(BuildId.data(), In.BuildId->HashSize))
       error("entropy source failure: " + EC.message());
     break;
-  case BuildIdKind::Hexstring:
-    BuildId = Config->BuildIdVector;
-    break;
   default:
     llvm_unreachable("unknown BuildIdKind");
   }
-  return BuildId;
-}
-
-template <class ELFT> void Writer<ELFT>::writeBuildId() {
-  if (!In.BuildId || !In.BuildId->getParent())
-    return;
-
-  // Compute a hash of all sections of the output file.
-  std::vector<uint8_t> BuildId =
-      computeBuildId({Out::BufferStart, size_t(FileSize)});
   In.BuildId->writeBuildId(BuildId);
 }
 




More information about the llvm-commits mailing list