int yaml2macho(yaml::Input &YIn, raw_ostream &Out) { MachOYAML::Object Doc; YIn >> Doc; if (YIn.error()) { errs() << "yaml2obj: Failed to parse YAML file!\n"; return 1; } MachOWriter Writer(Doc); if (auto Err = Writer.writeMachO(Out)) { errs() << toString(std::move(Err)); return 1; } return 0; }
bool MIRParserImpl::parseMachineFunction(yaml::Input &In, Module &M, bool NoLLVMIR) { auto MF = llvm::make_unique<yaml::MachineFunction>(); yaml::yamlize(In, *MF, false); if (In.error()) return true; auto FunctionName = MF->Name; if (Functions.find(FunctionName) != Functions.end()) return error(Twine("redefinition of machine function '") + FunctionName + "'"); Functions.insert(std::make_pair(FunctionName, std::move(MF))); if (NoLLVMIR) createDummyFunction(FunctionName, M); else if (!M.getFunction(FunctionName)) return error(Twine("function '") + FunctionName + "' isn't defined in the provided LLVM IR"); return false; }
int yaml2elf(yaml::Input &YIn, raw_ostream &Out) { ELFYAML::Object Doc; YIn >> Doc; if (YIn.error()) { errs() << "yaml2obj: Failed to parse YAML file!\n"; return 1; } using object::ELFType; typedef ELFType<support::little, true> LE64; typedef ELFType<support::big, true> BE64; typedef ELFType<support::little, false> LE32; typedef ELFType<support::big, false> BE32; if (is64Bit(Doc)) { if (isLittleEndian(Doc)) return ELFState<LE64>::writeELF(Out, Doc); else return ELFState<BE64>::writeELF(Out, Doc); } else { if (isLittleEndian(Doc)) return ELFState<LE32>::writeELF(Out, Doc); else return ELFState<BE32>::writeELF(Out, Doc); } }
int yaml2coff(yaml::Input &YIn, raw_ostream &Out) { COFFYAML::Object Doc; YIn >> Doc; if (YIn.error()) { errs() << "yaml2obj: Failed to parse YAML file!\n"; return 1; } COFFParser CP(Doc); if (!CP.parse()) { errs() << "yaml2obj: Failed to parse YAML file!\n"; return 1; } if (!layoutCOFF(CP)) { errs() << "yaml2obj: Failed to layout COFF file!\n"; return 1; } if (!writeCOFF(CP, Out)) { errs() << "yaml2obj: Failed to write COFF file!\n"; return 1; } return 0; }