summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objcopy
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-objcopy')
-rw-r--r--llvm/tools/llvm-objcopy/Object.cpp49
-rw-r--r--llvm/tools/llvm-objcopy/Object.h20
-rw-r--r--llvm/tools/llvm-objcopy/llvm-objcopy.cpp8
3 files changed, 0 insertions, 77 deletions
diff --git a/llvm/tools/llvm-objcopy/Object.cpp b/llvm/tools/llvm-objcopy/Object.cpp
index 944075d6197..41c76f863fe 100644
--- a/llvm/tools/llvm-objcopy/Object.cpp
+++ b/llvm/tools/llvm-objcopy/Object.cpp
@@ -18,7 +18,6 @@
#include "llvm/Object/ELFObjectFile.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileOutputBuffer.h"
-#include "llvm/Support/Path.h"
#include <algorithm>
#include <cstddef>
#include <cstdint>
@@ -344,50 +343,6 @@ void SectionWithStrTab::initialize(SectionTableRef SecTable) {
void SectionWithStrTab::finalize() { this->Link = StrTab->Index; }
-template <class ELFT>
-void GnuDebugLinkSection<ELFT>::init(StringRef File, StringRef Data) {
- FileName = sys::path::stem(File);
- // The format for the .gnu_debuglink starts with the stemmed file name and is
- // followed by a null terminator and then the CRC32 of the file. The CRC32
- // should be 4 byte aligned. So we add the FileName size, a 1 for the null
- // byte, and then finally push the size to alignment and add 4.
- Size = alignTo(FileName.size() + 1, 4) + 4;
- // The CRC32 will only be aligned if we align the whole section.
- Align = 4;
- Type = ELF::SHT_PROGBITS;
- Name = ".gnu_debuglink";
- // For sections not found in segments, OriginalOffset is only used to
- // establish the order that sections should go in. By using the maximum
- // possible offset we cause this section to wind up at the end.
- OriginalOffset = std::numeric_limits<uint64_t>::max();
- JamCRC crc;
- crc.update(ArrayRef<char>(Data.data(), Data.size()));
- // The CRC32 value needs to be complemented because the JamCRC dosn't
- // finalize the CRC32 value. It also dosn't negate the initial CRC32 value
- // but it starts by default at 0xFFFFFFFF which is the complement of zero.
- CRC32 = ~crc.getCRC();
-}
-
-template <class ELFT>
-GnuDebugLinkSection<ELFT>::GnuDebugLinkSection(StringRef File)
- : FileName(File) {
- // Read in the file to compute the CRC of it.
- auto DebugOrErr = MemoryBuffer::getFile(File);
- if (!DebugOrErr)
- error("'" + File + "': " + DebugOrErr.getError().message());
- auto Debug = std::move(*DebugOrErr);
- init(File, Debug->getBuffer());
-}
-
-template <class ELFT>
-void GnuDebugLinkSection<ELFT>::writeSection(FileOutputBuffer &Out) const {
- auto Buf = Out.getBufferStart() + Offset;
- char *File = reinterpret_cast<char *>(Buf);
- Elf_Word *CRC = reinterpret_cast<Elf_Word *>(Buf + Size - sizeof(Elf_Word));
- *CRC = CRC32;
- std::copy(std::begin(FileName), std::end(FileName), File);
-}
-
// Returns true IFF a section is wholly inside the range of a segment
static bool sectionWithinSegment(const SectionBase &Section,
const Segment &Segment) {
@@ -763,10 +718,6 @@ void Object<ELFT>::addSection(StringRef SecName, ArrayRef<uint8_t> Data) {
Sections.push_back(std::move(Sec));
}
-template <class ELFT> void Object<ELFT>::addGnuDebugLink(StringRef File) {
- Sections.emplace_back(llvm::make_unique<GnuDebugLinkSection<ELFT>>(File));
-}
-
template <class ELFT> void ELFObject<ELFT>::sortSections() {
// Put all sections in offset order. Maintain the ordering as closely as
// possible while meeting that demand however.
diff --git a/llvm/tools/llvm-objcopy/Object.h b/llvm/tools/llvm-objcopy/Object.h
index 6ac7edd32ae..17ea6c9413b 100644
--- a/llvm/tools/llvm-objcopy/Object.h
+++ b/llvm/tools/llvm-objcopy/Object.h
@@ -16,7 +16,6 @@
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/MC/StringTableBuilder.h"
#include "llvm/Object/ELFObjectFile.h"
-#include "llvm/Support/JamCRC.h"
#include <cstddef>
#include <cstdint>
#include <functional>
@@ -346,24 +345,6 @@ public:
}
};
-template <class ELFT> class GnuDebugLinkSection : public SectionBase {
-private:
- // Elf_Word is 4-bytes on every format but has the same endianess as the elf
- // type ELFT. We'll need to write the CRC32 out in the proper endianess so
- // we'll make sure to use this type.
- using Elf_Word = typename ELFT::Word;
-
- StringRef FileName;
- uint32_t CRC32;
-
- void init(StringRef File, StringRef Data);
-
-public:
- // If we add this section from an external source we can use this ctor.
- GnuDebugLinkSection(StringRef File);
- void writeSection(FileOutputBuffer &Out) const override;
-};
-
template <class ELFT> class Object {
private:
using SecPtr = std::unique_ptr<SectionBase>;
@@ -408,7 +389,6 @@ public:
const SectionBase *getSectionHeaderStrTab() const { return SectionNames; }
void removeSections(std::function<bool(const SectionBase &)> ToRemove);
void addSection(StringRef SecName, ArrayRef<uint8_t> Data);
- void addGnuDebugLink(StringRef File);
virtual size_t totalSize() const = 0;
virtual void finalize() = 0;
virtual void write(FileOutputBuffer &Out) const = 0;
diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
index 0b09184497d..eb1d0de90d5 100644
--- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -121,10 +121,6 @@ static cl::opt<bool> LocalizeHidden(
"localize-hidden",
cl::desc(
"Mark all symbols that have hidden or internal visibility as local"));
-static cl::opt<std::string>
- AddGnuDebugLink("add-gnu-debuglink",
- cl::desc("adds a .gnu_debuglink for <debug-file>"),
- cl::value_desc("debug-file"));
using SectionPred = std::function<bool(const SectionBase &Sec)>;
@@ -322,10 +318,6 @@ template <class ELFT> void CopyBinary(const ELFObjectFile<ELFT> &ObjFile) {
}
}
- if (!AddGnuDebugLink.empty()) {
- Obj->addGnuDebugLink(AddGnuDebugLink);
- }
-
Obj->finalize();
WriteObjectFile(*Obj, OutputFilename.getValue());
}
OpenPOWER on IntegriCloud