diff options
| author | 2017-01-24 08:32:59 +0000 | |
|---|---|---|
| committer | 2017-01-24 08:32:59 +0000 | |
| commit | 53d771aafdbe5b919f264f53cba3788e2c4cffd2 (patch) | |
| tree | 7eca39498be0ff1e3a6daf583cd9ca5886bb2636 /gnu/llvm/tools/llvm-mc/llvm-mc.cpp | |
| parent | In preparation of compiling our kernels with -ffreestanding, explicitly map (diff) | |
| download | wireguard-openbsd-53d771aafdbe5b919f264f53cba3788e2c4cffd2.tar.xz wireguard-openbsd-53d771aafdbe5b919f264f53cba3788e2c4cffd2.zip | |
Import LLVM 4.0.0 rc1 including clang and lld to help the current
development effort on OpenBSD/arm64.
Diffstat (limited to 'gnu/llvm/tools/llvm-mc/llvm-mc.cpp')
| -rw-r--r-- | gnu/llvm/tools/llvm-mc/llvm-mc.cpp | 117 |
1 files changed, 97 insertions, 20 deletions
diff --git a/gnu/llvm/tools/llvm-mc/llvm-mc.cpp b/gnu/llvm/tools/llvm-mc/llvm-mc.cpp index 00f19cb328c..497fb198776 100644 --- a/gnu/llvm/tools/llvm-mc/llvm-mc.cpp +++ b/gnu/llvm/tools/llvm-mc/llvm-mc.cpp @@ -66,8 +66,7 @@ CompressDebugSections("compress-debug-sections", cl::ValueOptional, clEnumValN(DebugCompressionType::DCT_Zlib, "zlib", "Use zlib compression"), clEnumValN(DebugCompressionType::DCT_ZlibGnu, "zlib-gnu", - "Use zlib-gnu compression (depricated)"), - clEnumValEnd)); + "Use zlib-gnu compression (deprecated)"))); static cl::opt<bool> ShowInst("show-inst", cl::desc("Show internal instruction representation")); @@ -105,8 +104,7 @@ FileType("filetype", cl::init(OFT_AssemblyFile), clEnumValN(OFT_Null, "null", "Don't emit anything (for timing purposes)"), clEnumValN(OFT_ObjectFile, "obj", - "Emit a native object ('.o') file"), - clEnumValEnd)); + "Emit a native object ('.o') file"))); static cl::list<std::string> IncludeDirs("I", cl::desc("Directory of include files"), @@ -148,8 +146,7 @@ CMModel("code-model", clEnumValN(CodeModel::Medium, "medium", "Medium code model"), clEnumValN(CodeModel::Large, "large", - "Large code model"), - clEnumValEnd)); + "Large code model"))); static cl::opt<bool> NoInitialTextSection("n", cl::desc("Don't assume assembly file starts " @@ -190,8 +187,7 @@ Action(cl::desc("Action to perform:"), clEnumValN(AC_Disassemble, "disassemble", "Disassemble strings of hex bytes"), clEnumValN(AC_MDisassemble, "mdis", - "Marked up disassembly of strings of hex bytes"), - clEnumValEnd)); + "Marked up disassembly of strings of hex bytes"))); static const Target *GetTarget(const char *ProgName) { // Figure out the target triple. @@ -314,6 +310,78 @@ static int AsLexInput(SourceMgr &SrcMgr, MCAsmInfo &MAI, case AsmToken::Slash: OS << "Slash"; break; case AsmToken::Star: OS << "Star"; break; case AsmToken::Tilde: OS << "Tilde"; break; + case AsmToken::PercentCall16: + OS << "PercentCall16"; + break; + case AsmToken::PercentCall_Hi: + OS << "PercentCall_Hi"; + break; + case AsmToken::PercentCall_Lo: + OS << "PercentCall_Lo"; + break; + case AsmToken::PercentDtprel_Hi: + OS << "PercentDtprel_Hi"; + break; + case AsmToken::PercentDtprel_Lo: + OS << "PercentDtprel_Lo"; + break; + case AsmToken::PercentGot: + OS << "PercentGot"; + break; + case AsmToken::PercentGot_Disp: + OS << "PercentGot_Disp"; + break; + case AsmToken::PercentGot_Hi: + OS << "PercentGot_Hi"; + break; + case AsmToken::PercentGot_Lo: + OS << "PercentGot_Lo"; + break; + case AsmToken::PercentGot_Ofst: + OS << "PercentGot_Ofst"; + break; + case AsmToken::PercentGot_Page: + OS << "PercentGot_Page"; + break; + case AsmToken::PercentGottprel: + OS << "PercentGottprel"; + break; + case AsmToken::PercentGp_Rel: + OS << "PercentGp_Rel"; + break; + case AsmToken::PercentHi: + OS << "PercentHi"; + break; + case AsmToken::PercentHigher: + OS << "PercentHigher"; + break; + case AsmToken::PercentHighest: + OS << "PercentHighest"; + break; + case AsmToken::PercentLo: + OS << "PercentLo"; + break; + case AsmToken::PercentNeg: + OS << "PercentNeg"; + break; + case AsmToken::PercentPcrel_Hi: + OS << "PercentPcrel_Hi"; + break; + case AsmToken::PercentPcrel_Lo: + OS << "PercentPcrel_Lo"; + break; + case AsmToken::PercentTlsgd: + OS << "PercentTlsgd"; + break; + case AsmToken::PercentTlsldm: + OS << "PercentTlsldm"; + break; + case AsmToken::PercentTprel_Hi: + OS << "PercentTprel_Hi"; + break; + case AsmToken::PercentTprel_Lo: + OS << "PercentTprel_Lo"; + break; } // Print the token string. @@ -325,22 +393,22 @@ static int AsLexInput(SourceMgr &SrcMgr, MCAsmInfo &MAI, return Error; } -static int fillCommandLineSymbols(MCAsmParser &Parser){ - for(auto &I: DefineSymbol){ +static int fillCommandLineSymbols(MCAsmParser &Parser) { + for (auto &I: DefineSymbol) { auto Pair = StringRef(I).split('='); - if(Pair.second.empty()){ - errs() << "error: defsym must be of the form: sym=value: " << I; + auto Sym = Pair.first; + auto Val = Pair.second; + + if (Sym.empty() || Val.empty()) { + errs() << "error: defsym must be of the form: sym=value: " << I << "\n"; return 1; } int64_t Value; - if(Pair.second.getAsInteger(0, Value)){ - errs() << "error: Value is not an integer: " << Pair.second; + if (Val.getAsInteger(0, Value)) { + errs() << "error: Value is not an integer: " << Val << "\n"; return 1; } - auto &Context = Parser.getContext(); - auto Symbol = Context.getOrCreateSymbol(Pair.first); - Parser.getStreamer().EmitAssignment(Symbol, - MCConstantExpr::create(Value, Context)); + Parser.getContext().setSymbolValue(Parser.getStreamer(), Sym, Value); } return 0; } @@ -495,6 +563,14 @@ int main(int argc, char **argv) { IP = TheTarget->createMCInstPrinter(Triple(TripleName), OutputAsmVariant, *MAI, *MCII, *MRI); + if (!IP) { + errs() + << "error: unable to create instruction printer for target triple '" + << TheTriple.normalize() << "' with assembly variant " + << OutputAsmVariant << ".\n"; + return 1; + } + // Set the display preference for hex vs. decimal immediates. IP->setPrintImmHex(PrintImmHex); @@ -503,7 +579,7 @@ int main(int argc, char **argv) { MCAsmBackend *MAB = nullptr; if (ShowEncoding) { CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); - MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, MCPU); + MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, MCPU, MCOptions); } auto FOut = llvm::make_unique<formatted_raw_ostream>(*OS); Str.reset(TheTarget->createAsmStreamer( @@ -524,7 +600,8 @@ int main(int argc, char **argv) { } MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); - MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, MCPU); + MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, MCPU, + MCOptions); Str.reset(TheTarget->createMCObjectStreamer( TheTriple, Ctx, *MAB, *OS, CE, *STI, MCOptions.MCRelaxAll, MCOptions.MCIncrementalLinkerCompatible, |
