Index: llvm/trunk/tools/llvm-objcopy/CopyConfig.h =================================================================== --- llvm/trunk/tools/llvm-objcopy/CopyConfig.h +++ llvm/trunk/tools/llvm-objcopy/CopyConfig.h @@ -14,9 +14,9 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" +#include "llvm/Support/Allocator.h" // Necessary for llvm::DebugCompressionType::None #include "llvm/Target/TargetOptions.h" -#include #include namespace llvm { @@ -81,7 +81,7 @@ std::vector SymbolsToRemove; std::vector SymbolsToWeaken; std::vector ToRemove; - std::vector SymbolsToKeepGlobal; + std::vector SymbolsToKeepGlobal; // Map options StringMap SectionsToRename; @@ -112,6 +112,7 @@ // will contain one or more CopyConfigs. struct DriverConfig { SmallVector CopyConfigs; + BumpPtrAllocator Alloc; }; // ParseObjcopyOptions returns the config and sets the input arguments. If a Index: llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp =================================================================== --- llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp +++ llvm/trunk/tools/llvm-objcopy/CopyConfig.cpp @@ -19,8 +19,8 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/Compression.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/StringSaver.h" #include -#include namespace llvm { namespace objcopy { @@ -225,8 +225,10 @@ return Iter->getValue(); } -static void addGlobalSymbolsFromFile(std::vector &Symbols, +static void addGlobalSymbolsFromFile(std::vector &Symbols, + BumpPtrAllocator &Alloc, StringRef Filename) { + StringSaver Saver(Alloc); SmallVector Lines; auto BufOrErr = MemoryBuffer::getFile(Filename); if (!BufOrErr) @@ -238,7 +240,7 @@ // it's not empty. auto TrimmedLine = Line.split('#').first.trim(); if (!TrimmedLine.empty()) - Symbols.push_back(TrimmedLine.str()); + Symbols.push_back(Saver.save(TrimmedLine)); } } @@ -246,6 +248,7 @@ // help flag is set then ParseObjcopyOptions will print the help messege and // exit. DriverConfig parseObjcopyOptions(ArrayRef ArgsArr) { + DriverConfig DC; ObjcopyOptTable T; unsigned MissingArgumentIndex, MissingArgumentCount; llvm::opt::InputArgList InputArgs = @@ -401,7 +404,8 @@ for (auto Arg : InputArgs.filtered(OBJCOPY_keep_global_symbol)) Config.SymbolsToKeepGlobal.push_back(Arg->getValue()); for (auto Arg : InputArgs.filtered(OBJCOPY_keep_global_symbols)) - addGlobalSymbolsFromFile(Config.SymbolsToKeepGlobal, Arg->getValue()); + addGlobalSymbolsFromFile(Config.SymbolsToKeepGlobal, DC.Alloc, + Arg->getValue()); for (auto Arg : InputArgs.filtered(OBJCOPY_globalize_symbol)) Config.SymbolsToGlobalize.push_back(Arg->getValue()); for (auto Arg : InputArgs.filtered(OBJCOPY_weaken_symbol)) @@ -426,7 +430,6 @@ if (Config.DecompressDebugSections && !zlib::isAvailable()) error("LLVM was not compiled with LLVM_ENABLE_ZLIB: cannot decompress."); - DriverConfig DC; DC.CopyConfigs.push_back(std::move(Config)); return DC; }