• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/contrib/llvm-project/lld/lib/ReaderWriter/YAML/

Lines Matching defs:lld

9 #include "lld/Core/AbsoluteAtom.h"
10 #include "lld/Core/ArchiveLibraryFile.h"
11 #include "lld/Core/Atom.h"
12 #include "lld/Core/DefinedAtom.h"
13 #include "lld/Core/Error.h"
14 #include "lld/Core/File.h"
15 #include "lld/Core/LinkingContext.h"
16 #include "lld/Core/Reader.h"
17 #include "lld/Core/Reference.h"
18 #include "lld/Core/SharedLibraryAtom.h"
19 #include "lld/Core/Simple.h"
20 #include "lld/Core/UndefinedAtom.h"
21 #include "lld/Core/Writer.h"
22 #include "lld/ReaderWriter/YamlContext.h"
54 using namespace lld;
57 /// file just defines template specializations on the lld types which control
75 RefNameBuilder(const lld::File &file)
78 for (const lld::DefinedAtom *atom : file.defined()) {
84 for (const lld::Reference *ref : *atom) {
86 const lld::Atom *target = ref->target();
101 for (const lld::UndefinedAtom *undefAtom : file.undefined()) {
104 for (const lld::SharedLibraryAtom *shlibAtom : file.sharedLibrary()) {
107 for (const lld::AbsoluteAtom *absAtom : file.absolute()) {
113 void buildDuplicateNameMap(const lld::Atom &atom) {
128 const lld::Atom *prevAtom = pos->second;
154 bool hasRefName(const lld::Atom *atom) { return _refNames.count(atom); }
156 StringRef refName(const lld::Atom *atom) {
161 typedef llvm::StringMap<const lld::Atom *> NameToAtom;
162 typedef llvm::DenseMap<const lld::Atom *, std::string> AtomToRefName;
183 RefNameResolver(const lld::File *file, IO &io);
185 const lld::Atom *lookup(StringRef name) const {
194 typedef llvm::StringMap<const lld::Atom *> NameToAtom;
196 void add(StringRef name, const lld::Atom *atom) {
228 const lld::File *_content;
239 // lld::Reference::Kind is a tuple of <namespace, arch, value>.
250 LLVM_YAML_IS_SEQUENCE_VECTOR(const lld::Reference *)
285 template <> struct ScalarEnumerationTraits<lld::File::Kind> {
286 static void enumeration(IO &io, lld::File::Kind &value) {
287 io.enumCase(value, "error-object", lld::File::kindErrorObject);
288 io.enumCase(value, "object", lld::File::kindMachObject);
289 io.enumCase(value, "shared-library", lld::File::kindSharedLibrary);
290 io.enumCase(value, "static-library", lld::File::kindArchiveLibrary);
294 template <> struct ScalarEnumerationTraits<lld::Atom::Scope> {
295 static void enumeration(IO &io, lld::Atom::Scope &value) {
296 io.enumCase(value, "global", lld::Atom::scopeGlobal);
297 io.enumCase(value, "hidden", lld::Atom::scopeLinkageUnit);
298 io.enumCase(value, "static", lld::Atom::scopeTranslationUnit);
302 template <> struct ScalarEnumerationTraits<lld::DefinedAtom::SectionChoice> {
303 static void enumeration(IO &io, lld::DefinedAtom::SectionChoice &value) {
304 io.enumCase(value, "content", lld::DefinedAtom::sectionBasedOnContent);
305 io.enumCase(value, "custom", lld::DefinedAtom::sectionCustomPreferred);
307 lld::DefinedAtom::sectionCustomRequired);
311 template <> struct ScalarEnumerationTraits<lld::DefinedAtom::Interposable> {
312 static void enumeration(IO &io, lld::DefinedAtom::Interposable &value) {
319 template <> struct ScalarEnumerationTraits<lld::DefinedAtom::Merge> {
320 static void enumeration(IO &io, lld::DefinedAtom::Merge &value) {
321 io.enumCase(value, "no", lld::DefinedAtom::mergeNo);
322 io.enumCase(value, "as-tentative", lld::DefinedAtom::mergeAsTentative);
323 io.enumCase(value, "as-weak", lld::DefinedAtom::mergeAsWeak);
325 lld::DefinedAtom::mergeAsWeakAndAddressUsed);
326 io.enumCase(value, "by-content", lld::DefinedAtom::mergeByContent);
328 lld::DefinedAtom::mergeSameNameAndSize);
329 io.enumCase(value, "largest", lld::DefinedAtom::mergeByLargestSection);
333 template <> struct ScalarEnumerationTraits<lld::DefinedAtom::DeadStripKind> {
334 static void enumeration(IO &io, lld::DefinedAtom::DeadStripKind &value) {
335 io.enumCase(value, "normal", lld::DefinedAtom::deadStripNormal);
336 io.enumCase(value, "never", lld::DefinedAtom::deadStripNever);
337 io.enumCase(value, "always", lld::DefinedAtom::deadStripAlways);
341 template <> struct ScalarEnumerationTraits<lld::DefinedAtom::DynamicExport> {
342 static void enumeration(IO &io, lld::DefinedAtom::DynamicExport &value) {
343 io.enumCase(value, "normal", lld::DefinedAtom::dynamicExportNormal);
344 io.enumCase(value, "always", lld::DefinedAtom::dynamicExportAlways);
348 template <> struct ScalarEnumerationTraits<lld::DefinedAtom::CodeModel> {
349 static void enumeration(IO &io, lld::DefinedAtom::CodeModel &value) {
350 io.enumCase(value, "none", lld::DefinedAtom::codeNA);
351 io.enumCase(value, "mips-pic", lld::DefinedAtom::codeMipsPIC);
352 io.enumCase(value, "mips-micro", lld::DefinedAtom::codeMipsMicro);
353 io.enumCase(value, "mips-micro-pic", lld::DefinedAtom::codeMipsMicroPIC);
354 io.enumCase(value, "mips-16", lld::DefinedAtom::codeMips16);
355 io.enumCase(value, "arm-thumb", lld::DefinedAtom::codeARMThumb);
356 io.enumCase(value, "arm-a", lld::DefinedAtom::codeARM_a);
357 io.enumCase(value, "arm-d", lld::DefinedAtom::codeARM_d);
358 io.enumCase(value, "arm-t", lld::DefinedAtom::codeARM_t);
363 struct ScalarEnumerationTraits<lld::DefinedAtom::ContentPermissions> {
364 static void enumeration(IO &io, lld::DefinedAtom::ContentPermissions &value) {
365 io.enumCase(value, "---", lld::DefinedAtom::perm___);
366 io.enumCase(value, "r--", lld::DefinedAtom::permR__);
367 io.enumCase(value, "r-x", lld::DefinedAtom::permR_X);
368 io.enumCase(value, "rw-", lld::DefinedAtom::permRW_);
369 io.enumCase(value, "rwx", lld::DefinedAtom::permRWX);
370 io.enumCase(value, "rw-l", lld::DefinedAtom::permRW_L);
371 io.enumCase(value, "unknown", lld::DefinedAtom::permUnknown);
375 template <> struct ScalarEnumerationTraits<lld::DefinedAtom::ContentType> {
376 static void enumeration(IO &io, lld::DefinedAtom::ContentType &value) {
433 template <> struct ScalarEnumerationTraits<lld::UndefinedAtom::CanBeNull> {
434 static void enumeration(IO &io, lld::UndefinedAtom::CanBeNull &value) {
435 io.enumCase(value, "never", lld::UndefinedAtom::canBeNullNever);
436 io.enumCase(value, "at-runtime", lld::UndefinedAtom::canBeNullAtRuntime);
437 io.enumCase(value, "at-buildtime",lld::UndefinedAtom::canBeNullAtBuildtime);
449 struct ScalarEnumerationTraits<lld::SharedLibraryAtom::Type> {
450 static void enumeration(IO &io, lld::SharedLibraryAtom::Type &value) {
451 io.enumCase(value, "code", lld::SharedLibraryAtom::Type::Code);
452 io.enumCase(value, "data", lld::SharedLibraryAtom::Type::Data);
453 io.enumCase(value, "unknown", lld::SharedLibraryAtom::Type::Unknown);
457 /// This is a custom formatter for lld::DefinedAtom::Alignment. Values look
461 template <> struct ScalarTraits<lld::DefinedAtom::Alignment> {
462 static void output(const lld::DefinedAtom::Alignment &value, void *ctxt,
472 lld::DefinedAtom::Alignment &value) {
557 // YAML conversion for std::vector<const lld::File*>
558 template <> struct DocumentListTraits<std::vector<const lld::File *> > {
559 static size_t size(IO &io, std::vector<const lld::File *> &seq) {
562 static const lld::File *&element(IO &io, std::vector<const lld::File *> &seq,
570 // YAML conversion for const lld::File*
571 template <> struct MappingTraits<const lld::File *> {
572 class NormArchiveFile : public lld::ArchiveLibraryFile {
576 NormArchiveFile(IO &io, const lld::File *file)
582 const lld::File *denormalize(IO &io) { return this; }
584 const AtomRange<lld::DefinedAtom> defined() const override {
588 const AtomRange<lld::UndefinedAtom> undefined() const override {
592 const AtomRange<lld::SharedLibraryAtom> sharedLibrary() const override {
596 const AtomRange<lld::AbsoluteAtom> absolute() const override {
609 for (const lld::DefinedAtom *atom : member._content->defined())
624 class NormalizedFile : public lld::File {
633 NormalizedFile(IO &io, const lld::File *file)
645 const lld::File *denormalize(IO &io);
647 const AtomRange<lld::DefinedAtom> defined() const override {
651 const AtomRange<lld::UndefinedAtom> undefined() const override {
655 const AtomRange<lld::SharedLibraryAtom> sharedLibrary() const override {
659 const AtomRange<lld::AbsoluteAtom> absolute() const override {
681 AtomList<lld::DefinedAtom> _definedAtoms;
682 AtomList<lld::UndefinedAtom> _undefinedAtoms;
683 AtomList<lld::SharedLibraryAtom> _sharedLibraryAtoms;
684 AtomList<lld::AbsoluteAtom> _absoluteAtoms;
685 AtomRange<lld::DefinedAtom> _definedAtomsRef;
686 AtomRange<lld::UndefinedAtom> _undefinedAtomsRef;
687 AtomRange<lld::SharedLibraryAtom> _sharedLibraryAtomsRef;
688 AtomRange<lld::AbsoluteAtom> _absoluteAtomsRef;
692 static void mapping(IO &io, const lld::File *&file) {
704 static void mappingAtoms(IO &io, const lld::File *&file) {
706 MappingNormalizationHeap<NormalizedFile, const lld::File *>
726 static void mappingArchive(IO &io, const lld::File *&file) {
728 MappingNormalizationHeap<NormArchiveFile, const lld::File *>
736 // YAML conversion for const lld::Reference*
737 template <> struct MappingTraits<const lld::Reference *> {
738 class NormalizedReference : public lld::Reference {
741 : lld::Reference(lld::Reference::KindNamespace::all,
742 lld::Reference::KindArch::all, 0),
745 NormalizedReference(IO &io, const lld::Reference *ref)
746 : lld::Reference(ref->kindNamespace(), ref->kindArch(),
756 const lld::Reference *denormalize(IO &io) {
759 typedef MappingTraits<const lld::File *>::NormalizedFile NormalizedFile;
775 static StringRef targetName(IO &io, const lld::Reference *ref);
778 const lld::Atom *target() const override { return _target; }
781 void setTarget(const lld::Atom *a) override { _target = a; }
783 const lld::Atom *_target;
791 static void mapping(IO &io, const lld::Reference *&ref) {
793 MappingNormalizationHeap<NormalizedReference, const lld::Reference *> keys(
799 io.mapOptional("addend", keys->_addend, (lld::Reference::Addend)0);
804 // YAML conversion for const lld::DefinedAtom*
805 template <> struct MappingTraits<const lld::DefinedAtom *> {
807 class NormalizedAtom : public lld::DefinedAtom {
815 NormalizedAtom(IO &io, const lld::DefinedAtom *atom)
825 for (const lld::Reference *r : *atom)
837 const lld::DefinedAtom *denormalize(IO &io) {
840 typedef MappingTraits<const lld::File *>::NormalizedFile NormalizedFile;
858 const lld::File &fileFromContext(IO &io) {
865 const lld::File &file() const override { return _file; }
899 const lld::Reference *derefIterator(const void *it) const override {
920 const lld::File &_file;
938 std::vector<const lld::Reference *> _references;
941 static void mapping(IO &io, const lld::DefinedAtom *&atom) {
943 MappingNormalizationHeap<NormalizedAtom, const lld::DefinedAtom *> keys(
947 typedef MappingTraits<const lld::File *>::NormalizedFile NormalizedFile;
987 template <> struct MappingTraits<lld::DefinedAtom *> {
988 static void mapping(IO &io, lld::DefinedAtom *&atom) {
989 const lld::DefinedAtom *atomPtr = atom;
990 MappingTraits<const lld::DefinedAtom *>::mapping(io, atomPtr);
991 atom = const_cast<lld::DefinedAtom *>(atomPtr);
995 // YAML conversion for const lld::UndefinedAtom*
996 template <> struct MappingTraits<const lld::UndefinedAtom *> {
997 class NormalizedAtom : public lld::UndefinedAtom {
1002 NormalizedAtom(IO &io, const lld::UndefinedAtom *atom)
1008 const lld::UndefinedAtom *denormalize(IO &io) {
1011 typedef MappingTraits<const lld::File *>::NormalizedFile NormalizedFile;
1024 const lld::File &fileFromContext(IO &io) {
1031 const lld::File &file() const override { return _file; }
1035 const lld::File &_file;
1040 static void mapping(IO &io, const lld::UndefinedAtom *&atom) {
1042 MappingNormalizationHeap<NormalizedAtom, const lld::UndefinedAtom *> keys(
1047 lld::UndefinedAtom::canBeNullNever);
1051 template <> struct MappingTraits<lld::UndefinedAtom *> {
1052 static void mapping(IO &io, lld::UndefinedAtom *&atom) {
1053 const lld::UndefinedAtom *atomPtr = atom;
1054 MappingTraits<const lld::UndefinedAtom *>::mapping(io, atomPtr);
1055 atom = const_cast<lld::UndefinedAtom *>(atomPtr);
1059 // YAML conversion for const lld::SharedLibraryAtom*
1060 template <> struct MappingTraits<const lld::SharedLibraryAtom *> {
1061 class NormalizedAtom : public lld::SharedLibraryAtom {
1067 NormalizedAtom(IO &io, const lld::SharedLibraryAtom *atom)
1074 const lld::SharedLibraryAtom *denormalize(IO &io) {
1077 typedef MappingTraits<const lld::File *>::NormalizedFile NormalizedFile;
1093 const lld::File &fileFromContext(IO &io) {
1100 const lld::File &file() const override { return _file; }
1107 const lld::File &_file;
1115 static void mapping(IO &io, const lld::SharedLibraryAtom *&atom) {
1118 MappingNormalizationHeap<NormalizedAtom, const lld::SharedLibraryAtom *>
1129 template <> struct MappingTraits<lld::SharedLibraryAtom *> {
1130 static void mapping(IO &io, lld::SharedLibraryAtom *&atom) {
1131 const lld::SharedLibraryAtom *atomPtr = atom;
1132 MappingTraits<const lld::SharedLibraryAtom *>::mapping(io, atomPtr);
1133 atom = const_cast<lld::SharedLibraryAtom *>(atomPtr);
1137 // YAML conversion for const lld::AbsoluteAtom*
1138 template <> struct MappingTraits<const lld::AbsoluteAtom *> {
1139 class NormalizedAtom : public lld::AbsoluteAtom {
1144 NormalizedAtom(IO &io, const lld::AbsoluteAtom *atom)
1150 const lld::AbsoluteAtom *denormalize(IO &io) {
1153 typedef MappingTraits<const lld::File *>::NormalizedFile NormalizedFile;
1166 const lld::File &fileFromContext(IO &io) {
1173 const lld::File &file() const override { return _file; }
1178 const lld::File &_file;
1185 static void mapping(IO &io, const lld::AbsoluteAtom *&atom) {
1187 MappingNormalizationHeap<NormalizedAtom, const lld::AbsoluteAtom *> keys(
1191 typedef MappingTraits<const lld::File *>::NormalizedFile NormalizedFile;
1209 template <> struct MappingTraits<lld::AbsoluteAtom *> {
1210 static void mapping(IO &io, lld::AbsoluteAtom *&atom) {
1211 const lld::AbsoluteAtom *atomPtr = atom;
1212 MappingTraits<const lld::AbsoluteAtom *>::mapping(io, atomPtr);
1213 atom = const_cast<lld::AbsoluteAtom *>(atomPtr);
1220 RefNameResolver::RefNameResolver(const lld::File *file, IO &io) : _io(io) {
1221 typedef MappingTraits<const lld::DefinedAtom *>::NormalizedAtom
1223 for (const lld::DefinedAtom *a : file->defined()) {
1231 for (const lld::UndefinedAtom *a : file->undefined())
1234 for (const lld::SharedLibraryAtom *a : file->sharedLibrary())
1237 typedef MappingTraits<const lld::AbsoluteAtom *>::NormalizedAtom NormAbsAtom;
1238 for (const lld::AbsoluteAtom *a : file->absolute()) {
1247 inline const lld::File *
1248 MappingTraits<const lld::File *>::NormalizedFile::denormalize(IO &io) {
1249 typedef MappingTraits<const lld::DefinedAtom *>::NormalizedAtom
1254 for (const lld::DefinedAtom *a : this->defined()) {
1262 inline void MappingTraits<const lld::DefinedAtom *>::NormalizedAtom::bind(
1264 typedef MappingTraits<const lld::Reference *>::NormalizedReference
1266 for (const lld::Reference *ref : _references) {
1272 inline void MappingTraits<const lld::Reference *>::NormalizedReference::bind(
1278 MappingTraits<const lld::Reference *>::NormalizedReference::targetName(
1279 IO &io, const lld::Reference *ref) {
1284 typedef MappingTraits<const lld::File *>::NormalizedFile NormalizedFile;
1292 namespace lld {
1295 class Writer : public lld::Writer {
1299 llvm::Error writeFile(const lld::File &file, StringRef outPath) override {
1313 const lld::File *fileRef = &file;
1329 bool handledDocTag(llvm::yaml::IO &io, const lld::File *&file) const override {
1331 MappingTraits<const lld::File *>::mappingAtoms(io, file);
1340 bool handledDocTag(llvm::yaml::IO &io, const lld::File *&file) const override {
1342 MappingTraits<const lld::File *>::mappingArchive(io, file);
1368 std::vector<const lld::File *> createdFiles;
1374 return make_error_code(lld::YamlReaderError::illegal_value);
1400 return std::unique_ptr<Writer>(new lld::yaml::Writer(context));
1403 } // end namespace lld