My lld executable is 1.6KiB smaller and some functions are now more efficient.
return ::getInteger(args, key, Default, 16);
}
-std::vector<StringRef> lld::args::getStrings(opt::InputArgList &args, int id) {
- std::vector<StringRef> v;
+SmallVector<StringRef, 0> lld::args::getStrings(opt::InputArgList &args,
+ int id) {
+ SmallVector<StringRef, 0> v;
for (auto *arg : args.filtered(id))
v.push_back(arg->getValue());
return v;
}
// Converts a hex string (e.g. "deadbeef") to a vector.
-std::vector<uint8_t> lld::parseHex(StringRef s) {
- std::vector<uint8_t> hex;
+SmallVector<uint8_t, 0> lld::parseHex(StringRef s) {
+ SmallVector<uint8_t, 0> hex;
while (!s.empty()) {
StringRef b = s.substr(0, 2);
s = s.substr(2);
std::pair<llvm::StringRef, llvm::StringRef> thinLTOObjectSuffixReplace;
std::pair<llvm::StringRef, llvm::StringRef> thinLTOPrefixReplace;
std::string rpath;
- std::vector<VersionDefinition> versionDefinitions;
- std::vector<llvm::StringRef> auxiliaryList;
- std::vector<llvm::StringRef> filterList;
- std::vector<llvm::StringRef> passPlugins;
- std::vector<llvm::StringRef> searchPaths;
- std::vector<llvm::StringRef> symbolOrderingFile;
- std::vector<llvm::StringRef> thinLTOModulesToCompile;
- std::vector<llvm::StringRef> undefined;
- std::vector<SymbolVersion> dynamicList;
- std::vector<uint8_t> buildIdVector;
+ llvm::SmallVector<VersionDefinition, 0> versionDefinitions;
+ llvm::SmallVector<llvm::StringRef, 0> auxiliaryList;
+ llvm::SmallVector<llvm::StringRef, 0> filterList;
+ llvm::SmallVector<llvm::StringRef, 0> passPlugins;
+ llvm::SmallVector<llvm::StringRef, 0> searchPaths;
+ llvm::SmallVector<llvm::StringRef, 0> symbolOrderingFile;
+ llvm::SmallVector<llvm::StringRef, 0> thinLTOModulesToCompile;
+ llvm::SmallVector<llvm::StringRef, 0> undefined;
+ llvm::SmallVector<SymbolVersion, 0> dynamicList;
+ llvm::SmallVector<uint8_t, 0> buildIdVector;
llvm::MapVector<std::pair<const InputSectionBase *, const InputSectionBase *>,
uint64_t>
callGraphProfile;
bool checkDynamicRelocs;
bool compressDebugSections;
bool cref;
- std::vector<std::pair<llvm::GlobPattern, uint64_t>> deadRelocInNonAlloc;
+ llvm::SmallVector<std::pair<llvm::GlobPattern, uint64_t>, 0>
+ deadRelocInNonAlloc;
bool demangle = true;
bool dependentLibraries;
bool disableVerify;
bool relrGlibc = false;
bool relrPackDynRelocs = false;
llvm::DenseSet<llvm::StringRef> saveTempsArgs;
- std::vector<std::pair<llvm::GlobPattern, uint32_t>> shuffleSections;
+ llvm::SmallVector<std::pair<llvm::GlobPattern, uint32_t>, 0> shuffleSections;
bool singleRoRx;
bool shared;
bool symbolic;
bool unique;
bool useAndroidRelrTags = false;
bool warnBackrefs;
- std::vector<llvm::GlobPattern> warnBackrefsExclude;
+ llvm::SmallVector<llvm::GlobPattern, 0> warnBackrefsExclude;
bool warnCommon;
bool warnMissingEntry;
bool warnSymbolOrdering;
}
static std::string getRpath(opt::InputArgList &args) {
- std::vector<StringRef> v = args::getStrings(args, OPT_rpath);
+ SmallVector<StringRef, 0> v = args::getStrings(args, OPT_rpath);
return llvm::join(v.begin(), v.end(), ":");
}
// Parse --build-id or --build-id=<style>. We handle "tree" as a
// synonym for "sha1" because all our hash functions including
// --build-id=sha1 are actually tree hashes for performance reasons.
-static std::pair<BuildIdKind, std::vector<uint8_t>>
+static std::pair<BuildIdKind, SmallVector<uint8_t, 0>>
getBuildId(opt::InputArgList &args) {
auto *arg = args.getLastArg(OPT_build_id);
if (!arg)
}
// Parse the symbol ordering file and warn for any duplicate entries.
-static std::vector<StringRef> getSymbolOrderingFile(MemoryBufferRef mb) {
- SetVector<StringRef> names;
+static SmallVector<StringRef, 0> getSymbolOrderingFile(MemoryBufferRef mb) {
+ SetVector<StringRef, SmallVector<StringRef, 0>> names;
for (StringRef s : args::getLines(mb))
if (!names.insert(s) && config->warnSymbolOrdering)
warn(mb.getBufferIdentifier() + ": duplicate ordered symbol: " + s);
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/MapVector.h"
+#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/BinaryFormat/MachO.h"
std::vector<llvm::StringRef> systemLibraryRoots;
std::vector<llvm::StringRef> librarySearchPaths;
std::vector<llvm::StringRef> frameworkSearchPaths;
- std::vector<llvm::StringRef> runtimePaths;
+ llvm::SmallVector<llvm::StringRef, 0> runtimePaths;
std::vector<std::string> astPaths;
std::vector<Symbol *> explicitUndefineds;
llvm::StringSet<> explicitDynamicLookups;
int64_t getHex(llvm::opt::InputArgList &args, unsigned key, int64_t Default);
-std::vector<StringRef> getStrings(llvm::opt::InputArgList &args, int id);
+llvm::SmallVector<StringRef, 0> getStrings(llvm::opt::InputArgList &args,
+ int id);
uint64_t getZOptionValue(llvm::opt::InputArgList &args, int id, StringRef key,
uint64_t Default);
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Demangle/Demangle.h"
#include "llvm/Support/GlobPattern.h"
return std::string(symName);
}
-std::vector<uint8_t> parseHex(llvm::StringRef s);
+llvm::SmallVector<uint8_t, 0> parseHex(llvm::StringRef s);
bool isValidCIdentifier(llvm::StringRef s);
// Write the contents of the a buffer to a file
#ifndef LLD_WASM_CONFIG_H
#define LLD_WASM_CONFIG_H
+#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/BinaryFormat/Wasm.h"
llvm::StringSet<> allowUndefinedSymbols;
llvm::StringSet<> exportedSymbols;
std::vector<llvm::StringRef> requiredExports;
- std::vector<llvm::StringRef> searchPaths;
+ llvm::SmallVector<llvm::StringRef, 0> searchPaths;
llvm::CachePruningPolicy thinLTOCachePolicy;
llvm::Optional<std::vector<std::string>> features;