diff --git a/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp b/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp index 8aacf3a2b48938e52287fca449403210a2a7e9f7..065a2c0716621d9eac314696dfad365e384df1ea 100644 --- a/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp +++ b/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp @@ -172,13 +172,35 @@ StringRef PECOFFLinkingContext::searchLibraryFile(StringRef filename) const { Writer &PECOFFLinkingContext::writer() const { return *_writer; } +#define LLD_CASE(name) .Case(#name, llvm::COFF::name) + ErrorOr PECOFFLinkingContext::relocKindFromString(StringRef str) const { - return make_error_code(YamlReaderError::illegal_value); + int32_t ret = llvm::StringSwitch(str) + LLD_CASE(IMAGE_REL_I386_ABSOLUTE) + LLD_CASE(IMAGE_REL_I386_DIR32) + LLD_CASE(IMAGE_REL_I386_DIR32NB) + LLD_CASE(IMAGE_REL_I386_REL32) + .Default(-1); + if (ret == -1) + return make_error_code(YamlReaderError::illegal_value); + return ret; } +#undef LLD_CASE + +#define LLD_CASE(name) \ + case llvm::COFF::name: \ + return std::string(#name); + ErrorOr PECOFFLinkingContext::stringFromRelocKind(Reference::Kind kind) const { + switch (kind) { + LLD_CASE(IMAGE_REL_I386_ABSOLUTE) + LLD_CASE(IMAGE_REL_I386_DIR32) + LLD_CASE(IMAGE_REL_I386_DIR32NB) + LLD_CASE(IMAGE_REL_I386_REL32) + } return make_error_code(YamlReaderError::illegal_value); }