summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-objcopy/llvm-objcopy.cpp')
-rw-r--r--llvm/tools/llvm-objcopy/llvm-objcopy.cpp73
1 files changed, 4 insertions, 69 deletions
diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
index f0d6b4416cf..72501f3eb98 100644
--- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -17,7 +17,6 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/BinaryFormat/ELF.h"
-#include "llvm/MC/MCTargetOptions.h"
#include "llvm/Object/Archive.h"
#include "llvm/Object/ArchiveWriter.h"
#include "llvm/Object/Binary.h"
@@ -176,7 +175,6 @@ struct CopyConfig {
bool StripSections = false;
bool StripUnneeded = false;
bool Weaken = false;
- DebugCompressionType CompressionType = DebugCompressionType::None;
};
using SectionPred = std::function<bool(const SectionBase &Sec)>;
@@ -292,12 +290,12 @@ static SectionRename parseRenameSectionValue(StringRef FlagValue) {
}
static bool isDebugSection(const SectionBase &Sec) {
- return StringRef(Sec.Name).startswith(".debug") ||
- StringRef(Sec.Name).startswith(".zdebug") || Sec.Name == ".gdb_index";
+ return Sec.Name.startswith(".debug") || Sec.Name.startswith(".zdebug") ||
+ Sec.Name == ".gdb_index";
}
static bool isDWOSection(const SectionBase &Sec) {
- return StringRef(Sec.Name).endswith(".dwo");
+ return Sec.Name.endswith(".dwo");
}
static bool onlyKeepDWOPred(const Object &Obj, const SectionBase &Sec) {
@@ -407,49 +405,6 @@ static Error dumpSectionToFile(StringRef SecName, StringRef Filename,
object_error::parse_failed);
}
-static bool isCompressed(const SectionBase &Section) {
- ArrayRef<uint8_t> GnuPrefix = {'Z', 'L', 'I', 'B'};
- return StringRef(Section.Name).startswith(".zdebug") ||
- (Section.OriginalData.size() > strlen("ZLIB") &&
- std::equal(GnuPrefix.begin(), GnuPrefix.end(),
- Section.OriginalData.data())) ||
- (Section.Flags & ELF::SHF_COMPRESSED);
-}
-
-static bool isCompressable(const SectionBase &Section) {
- return !isCompressed(Section) && isDebugSection(Section) &&
- Section.Name != ".gdb_index";
-}
-
-static void compressSections(const CopyConfig &Config, Object &Obj,
- SectionPred &RemovePred) {
- SmallVector<SectionBase *, 13> ToCompress;
- SmallVector<RelocationSection *, 13> RelocationSections;
- for (auto &Sec : Obj.sections()) {
- if (RelocationSection *R = dyn_cast<RelocationSection>(&Sec)) {
- if (isCompressable(*R->getSection()))
- RelocationSections.push_back(R);
- continue;
- }
-
- if (isCompressable(Sec))
- ToCompress.push_back(&Sec);
- }
-
- for (SectionBase *S : ToCompress) {
- CompressedSection &CS =
- Obj.addSection<CompressedSection>(*S, Config.CompressionType);
-
- for (RelocationSection *RS : RelocationSections) {
- if (RS->getSection() == S)
- RS->setSection(&CS);
- }
- }
-
- RemovePred = [RemovePred](const SectionBase &Sec) {
- return isCompressable(Sec) || RemovePred(Sec);
- };
-}
// This function handles the high level operations of GNU objcopy including
// handling command line options. It's important to outline certain properties
// we expect to hold of the command line operations. Any operation that "keeps"
@@ -609,7 +564,7 @@ static void handleArgs(const CopyConfig &Config, Object &Obj,
return true;
if (&Sec == Obj.SectionNames)
return false;
- if (StringRef(Sec.Name).startswith(".gnu.warning"))
+ if (Sec.Name.startswith(".gnu.warning"))
return false;
return (Sec.Flags & SHF_ALLOC) == 0;
};
@@ -661,9 +616,6 @@ static void handleArgs(const CopyConfig &Config, Object &Obj,
};
}
- if (Config.CompressionType != DebugCompressionType::None)
- compressSections(Config, Obj, RemovePred);
-
Obj.removeSections(RemovePred);
if (!Config.SectionsToRename.empty()) {
@@ -908,23 +860,6 @@ static CopyConfig parseObjcopyOptions(ArrayRef<const char *> ArgsArr) {
Config.BinaryArch = getMachineInfo(BinaryArch);
}
- if (auto Arg = InputArgs.getLastArg(OBJCOPY_compress_debug_sections,
- OBJCOPY_compress_debug_sections_eq)) {
- Config.CompressionType = DebugCompressionType::Z;
-
- if (Arg->getOption().getID() == OBJCOPY_compress_debug_sections_eq) {
- Config.CompressionType =
- StringSwitch<DebugCompressionType>(
- InputArgs.getLastArgValue(OBJCOPY_compress_debug_sections_eq))
- .Case("zlib-gnu", DebugCompressionType::GNU)
- .Case("zlib", DebugCompressionType::Z)
- .Default(DebugCompressionType::None);
- if (Config.CompressionType == DebugCompressionType::None)
- error("Invalid or unsupported --compress-debug-sections format: " +
- InputArgs.getLastArgValue(OBJCOPY_compress_debug_sections_eq));
- }
- }
-
Config.SplitDWO = InputArgs.getLastArgValue(OBJCOPY_split_dwo);
Config.AddGnuDebugLink = InputArgs.getLastArgValue(OBJCOPY_add_gnu_debuglink);
Config.SymbolsPrefix = InputArgs.getLastArgValue(OBJCOPY_prefix_symbols);
OpenPOWER on IntegriCloud