From 53bae6fa6658b9e2dc98326f23da1209bcf18d4e Mon Sep 17 00:00:00 2001 From: Shankar Easwaran Date: Sat, 26 Oct 2013 19:38:31 +0000 Subject: [PATCH] [PECOFF] Add COFF relocations to encode/decode to/from YAML files llvm-svn: 193478 --- .../PECOFF/PECOFFLinkingContext.cpp | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp b/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp index 8aacf3a2b489..065a2c071662 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); } -- GitLab