add elf targethandler
llvm-svn: 173430
diff --git a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
index c17240e..ef22f078 100644
--- a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
+++ b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
@@ -269,19 +269,15 @@
// type to make template matching work, so invent RefKind.
LLVM_YAML_STRONG_TYPEDEF(lld::Reference::Kind, RefKind)
-
} // namespace anon
-
-LLVM_YAML_IS_SEQUENCE_VECTOR(ArchMember);
-LLVM_YAML_IS_SEQUENCE_VECTOR(const lld::Reference*)
-
-// Always write DefinedAtoms content bytes as a flow sequence.
-LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(ImplicitHex8);
-
-// for compatibility with gcc-4.7 in C++11 mode, add extra namespace
-namespace llvm {
-namespace yaml {
+LLVM_YAML_IS_SEQUENCE_VECTOR(ArchMember)
+ LLVM_YAML_IS_SEQUENCE_VECTOR(const lld::Reference *)
+ // Always write DefinedAtoms content bytes as a flow sequence.
+ LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(ImplicitHex8)
+ // for compatibility with gcc-4.7 in C++11 mode, add extra namespace
+ namespace llvm {
+ namespace yaml {
// This is a custom formatter for RefKind
template<>
@@ -607,17 +603,21 @@
// YAML conversion for const lld::File*
template <>
struct MappingTraits<const lld::File*> {
-
- class NormArchiveFile : public lld::ArchiveLibraryFile {
- public:
- NormArchiveFile(IO &io) : ArchiveLibraryFile(""), _path() {
- }
- NormArchiveFile(IO &io, const lld::File *file)
- : ArchiveLibraryFile(file->path()),
- _path(file->path()) {
+
+ class NormArchiveFile : public lld::ArchiveLibraryFile {
+ public:
+ NormArchiveFile(IO &io)
+ : ArchiveLibraryFile(((ContextInfo *)io.getContext())->_targetInfo,
+ ""),
+ _path() {
+ }
+ NormArchiveFile(IO &io, const lld::File *file)
+ : ArchiveLibraryFile(((ContextInfo *)io.getContext())->_targetInfo,
+ file->path()),
+ _path(file->path()) {
// If we want to support writing archives, this constructor would
// need to populate _members.
- }
+ }
const lld::File *denormalize(IO &io) {
return this;
@@ -665,19 +665,16 @@
StringRef _path;
std::vector<ArchMember> _members;
};
-
-
- class NormalizedFile : public lld::File {
- public:
- NormalizedFile(IO &io) : File(""), _rnb(nullptr) {
- }
- NormalizedFile(IO &io, const lld::File *file)
- : File(file->path()),
- _rnb(new RefNameBuilder(*file)),
- _path(file->path()) {
- for (const lld::DefinedAtom *a : file->defined())
- _definedAtoms.push_back(a);
- for (const lld::UndefinedAtom *a : file->undefined())
+
+ class NormalizedFile : public lld::File {
+ public:
+ NormalizedFile(IO &io) : File(""), _IO(io), _rnb(nullptr) {}
+ NormalizedFile(IO &io, const lld::File *file)
+ : File(file->path()), _IO(io), _rnb(new RefNameBuilder(*file)),
+ _path(file->path()) {
+ for (const lld::DefinedAtom *a : file->defined())
+ _definedAtoms.push_back(a);
+ for (const lld::UndefinedAtom *a : file->undefined())
_undefinedAtoms.push_back(a);
for (const lld::SharedLibraryAtom *a : file->sharedLibrary())
_sharedLibraryAtoms.push_back(a);
@@ -695,12 +692,16 @@
virtual const atom_collection<lld::SharedLibraryAtom> &sharedLibrary()const{
return _sharedLibraryAtoms;
}
- virtual const atom_collection<lld::AbsoluteAtom> &absolute() const {
- return _absoluteAtoms;
- }
-
- // Allocate a new copy of this string and keep track of allocations
- // in _stringCopies, so they can be freed when File is destroyed.
+ virtual const atom_collection<lld::AbsoluteAtom> &absolute() const {
+ return _absoluteAtoms;
+ }
+
+ virtual const TargetInfo &getTargetInfo() const {
+ return ((ContextInfo *)_IO.getContext())->_targetInfo;
+ }
+
+ // Allocate a new copy of this string and keep track of allocations
+ // in _stringCopies, so they can be freed when File is destroyed.
StringRef copyString(StringRef str) {
// We want _stringCopies to own the string memory so it is deallocated
// when the File object is destroyed. But we need a StringRef that
@@ -709,12 +710,13 @@
memcpy(s.get(), str.data(), str.size());
llvm::StringRef r = llvm::StringRef(s.get(), str.size());
_stringCopies.push_back(std::move(s));
- return r;
- }
-
- RefNameBuilder *_rnb;
- StringRef _path;
- AtomList<lld::DefinedAtom> _definedAtoms;
+ return r;
+ }
+
+ IO &_IO;
+ RefNameBuilder *_rnb;
+ StringRef _path;
+ AtomList<lld::DefinedAtom> _definedAtoms;
AtomList<lld::UndefinedAtom> _undefinedAtoms;
AtomList<lld::SharedLibraryAtom> _sharedLibraryAtoms;
AtomList<lld::AbsoluteAtom> _absoluteAtoms;