[lld] r265748 - ELF: Add --build-id=sha1 option.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 7 16:51:56 PDT 2016
Author: ruiu
Date: Thu Apr 7 18:51:56 2016
New Revision: 265748
URL: http://llvm.org/viewvc/llvm-project?rev=265748&view=rev
Log:
ELF: Add --build-id=sha1 option.
Modified:
lld/trunk/ELF/Config.h
lld/trunk/ELF/Driver.cpp
lld/trunk/ELF/OutputSections.cpp
lld/trunk/ELF/OutputSections.h
lld/trunk/ELF/Writer.cpp
lld/trunk/test/ELF/build-id.s
Modified: lld/trunk/ELF/Config.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Config.h?rev=265748&r1=265747&r2=265748&view=diff
==============================================================================
--- lld/trunk/ELF/Config.h (original)
+++ lld/trunk/ELF/Config.h Thu Apr 7 18:51:56 2016
@@ -30,11 +30,7 @@ enum ELFKind {
ELF64BEKind
};
-enum class BuildIdKind {
- None,
- Fnv1,
- Md5,
-};
+enum class BuildIdKind { None, Fnv1, Md5, Sha1 };
// This struct contains the global configuration for the linker.
// Most fields are direct mapping from the command line options
Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=265748&r1=265747&r2=265748&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Thu Apr 7 18:51:56 2016
@@ -343,6 +343,8 @@ void LinkerDriver::readConfigs(opt::Inpu
StringRef S = Arg->getValue();
if (S == "md5") {
Config->BuildId = BuildIdKind::Md5;
+ } else if (S == "sha1") {
+ Config->BuildId = BuildIdKind::Sha1;
} else
error("unknown --build-id style: " + S);
}
Modified: lld/trunk/ELF/OutputSections.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=265748&r1=265747&r2=265748&view=diff
==============================================================================
--- lld/trunk/ELF/OutputSections.cpp (original)
+++ lld/trunk/ELF/OutputSections.cpp Thu Apr 7 18:51:56 2016
@@ -16,6 +16,7 @@
#include "llvm/Support/Dwarf.h"
#include "llvm/Support/MD5.h"
#include "llvm/Support/MathExtras.h"
+#include "llvm/Support/SHA1.h"
#include <map>
using namespace llvm;
@@ -1562,6 +1563,14 @@ template <class ELFT> void BuildIdMd5<EL
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() {
+ memcpy(this->HashBuf, Hash.final().data(), 20);
+}
+
template <class ELFT>
MipsReginfoOutputSection<ELFT>::MipsReginfoOutputSection()
: OutputSectionBase<ELFT>(".reginfo", SHT_MIPS_REGINFO, SHF_ALLOC) {
@@ -1680,5 +1689,10 @@ template class BuildIdMd5<ELF32LE>;
template class BuildIdMd5<ELF32BE>;
template class BuildIdMd5<ELF64LE>;
template class BuildIdMd5<ELF64BE>;
+
+template class BuildIdSha1<ELF32LE>;
+template class BuildIdSha1<ELF32BE>;
+template class BuildIdSha1<ELF64LE>;
+template class BuildIdSha1<ELF64BE>;
}
}
Modified: lld/trunk/ELF/OutputSections.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.h?rev=265748&r1=265747&r2=265748&view=diff
==============================================================================
--- lld/trunk/ELF/OutputSections.h (original)
+++ lld/trunk/ELF/OutputSections.h Thu Apr 7 18:51:56 2016
@@ -17,6 +17,7 @@
#include "llvm/MC/StringTableBuilder.h"
#include "llvm/Object/ELF.h"
#include "llvm/Support/MD5.h"
+#include "llvm/Support/SHA1.h"
namespace lld {
namespace elf {
@@ -528,6 +529,16 @@ private:
llvm::MD5 Hash;
};
+template <class ELFT> class BuildIdSha1 final : public BuildIdSection<ELFT> {
+public:
+ BuildIdSha1() : BuildIdSection<ELFT>(20) {}
+ void update(ArrayRef<uint8_t> Buf) override;
+ void writeBuildId() override;
+
+private:
+ llvm::SHA1 Hash;
+};
+
// All output sections that are hadnled by the linker specially are
// globally accessible. Writer initializes them, so don't use them
// until Writer is initialized.
Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=265748&r1=265747&r2=265748&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Thu Apr 7 18:51:56 2016
@@ -150,6 +150,8 @@ template <class ELFT> void elf::writeRes
BuildId.reset(new BuildIdFnv1<ELFT>);
else if (Config->BuildId == BuildIdKind::Md5)
BuildId.reset(new BuildIdMd5<ELFT>);
+ else if (Config->BuildId == BuildIdKind::Sha1)
+ BuildId.reset(new BuildIdSha1<ELFT>);
if (Config->GnuHash)
GnuHashTab.reset(new GnuHashTableSection<ELFT>);
Modified: lld/trunk/test/ELF/build-id.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/build-id.s?rev=265748&r1=265747&r2=265748&view=diff
==============================================================================
--- lld/trunk/test/ELF/build-id.s (original)
+++ lld/trunk/test/ELF/build-id.s Thu Apr 7 18:51:56 2016
@@ -5,6 +5,8 @@
# RUN: llvm-objdump -s %t2 | FileCheck -check-prefix=DEFAULT %s
# RUN: ld.lld --build-id=md5 %t -o %t2
# RUN: llvm-objdump -s %t2 | FileCheck -check-prefix=MD5 %s
+# RUN: ld.lld --build-id=sha1 %t -o %t2
+# RUN: llvm-objdump -s %t2 | FileCheck -check-prefix=SHA1 %s
# RUN: ld.lld %t -o %t2
# RUN: llvm-objdump -s %t2 | FileCheck -check-prefix=NONE %s
@@ -22,4 +24,7 @@ _start:
# MD5: Contents of section .note.gnu.build-id:
# MD5-NEXT: 04000000 10000000 03000000 474e5500 ............GNU.
+# SHA1: Contents of section .note.gnu.build-id:
+# SHA1-NEXT: 04000000 14000000 03000000 474e5500 ............GNU.
+
# NONE-NOT: Contents of section .note.gnu.build-id:
More information about the llvm-commits
mailing list