summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2013-09-13 21:14:18 +0000
committerRui Ueyama <ruiu@google.com>2013-09-13 21:14:18 +0000
commitec9bb694bd2e9cb950b9de06140fc6441d9835f0 (patch)
tree19e25ecaa665ec55b250ac688f48df6c82bf3269
parenta8ce9529c34682ab252b5655ce09a6cd4aabcd81 (diff)
downloadbcm5719-llvm-ec9bb694bd2e9cb950b9de06140fc6441d9835f0.tar.gz
bcm5719-llvm-ec9bb694bd2e9cb950b9de06140fc6441d9835f0.zip
Revert "[PECOFF] Allocate storage for .drective in the reader ..."
This reverts r189881 because that patch caused dangling StringRefs. llvm-svn: 190725
-rw-r--r--lld/lib/Driver/WinLinkDriver.cpp8
-rw-r--r--lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp11
2 files changed, 9 insertions, 10 deletions
diff --git a/lld/lib/Driver/WinLinkDriver.cpp b/lld/lib/Driver/WinLinkDriver.cpp
index 1f211832e35..747786a79ac 100644
--- a/lld/lib/Driver/WinLinkDriver.cpp
+++ b/lld/lib/Driver/WinLinkDriver.cpp
@@ -364,12 +364,12 @@ bool WinLinkDriver::parse(int argc, const char *argv[], PECOFFLinkingContext &ct
case OPT_entry:
// handle /entry
- ctx.setEntrySymbolName(inputArg->getValue());
+ ctx.setEntrySymbolName(ctx.allocateString(inputArg->getValue()));
break;
case OPT_libpath:
// handle /libpath
- ctx.appendInputSearchPath(inputArg->getValue());
+ ctx.appendInputSearchPath(ctx.allocateString(inputArg->getValue()));
break;
case OPT_force:
@@ -424,12 +424,12 @@ bool WinLinkDriver::parse(int argc, const char *argv[], PECOFFLinkingContext &ct
case OPT_incl:
// handle /incl
- ctx.addInitialUndefinedSymbol(inputArg->getValue());
+ ctx.addInitialUndefinedSymbol(ctx.allocateString(inputArg->getValue()));
break;
case OPT_out:
// handle /out
- ctx.setOutputPath(inputArg->getValue());
+ ctx.setOutputPath(ctx.allocateString(inputArg->getValue()));
break;
case OPT_INPUT:
diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
index beddcf14f84..2e1695394af 100644
--- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
+++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
@@ -126,7 +126,7 @@ private:
SectionToAtomsT;
public:
- FileCOFF(const PECOFFLinkingContext &context,
+ FileCOFF(const LinkingContext &context,
std::unique_ptr<llvm::MemoryBuffer> mb, error_code &ec)
: File(mb->getBufferIdentifier(), kindObject), _context(context) {
llvm::OwningPtr<llvm::object::Binary> bin;
@@ -666,7 +666,7 @@ private:
ArrayRef<uint8_t> contents;
if (error_code ec = _obj->getSectionContents(section, contents))
return ec;
- _directives = _context.allocateString(ArrayRefToString(contents));
+ _directives = std::move(ArrayRefToString(contents));
}
return error_code::success();
}
@@ -678,7 +678,7 @@ private:
atom_collection_vector<AbsoluteAtom> _absoluteAtoms;
// The contents of .drectve section.
- StringRef _directives;
+ std::string _directives;
// A map from symbol to its name. All symbols should be in this map except
// unnamed ones.
@@ -703,7 +703,7 @@ private:
_definedAtomLocations;
mutable llvm::BumpPtrAllocator _alloc;
- const PECOFFLinkingContext &_context;
+ const LinkingContext &_context;
};
class BumpPtrStringSaver : public llvm::cl::StringSaver {
@@ -781,8 +781,7 @@ private:
std::vector<std::unique_ptr<File> > &result) const {
// Parse the memory buffer as PECOFF file.
error_code ec;
- std::unique_ptr<FileCOFF> file(
- new FileCOFF(_PECOFFLinkingContext, std::move(mb), ec));
+ std::unique_ptr<FileCOFF> file(new FileCOFF(_context, std::move(mb), ec));
if (ec)
return ec;
OpenPOWER on IntegriCloud