aboutsummaryrefslogtreecommitdiffstats
path: root/lib/MC
diff options
context:
space:
mode:
authorJack Carter <jack.carter@imgtec.com>2013-10-04 21:26:15 +0000
committerJack Carter <jack.carter@imgtec.com>2013-10-04 21:26:15 +0000
commit8e48edcf3dd7dea9fec58b05a6ace6fbd0260d7c (patch)
treeb5631843b607f2a9a0447dd870eed1f6095a8883 /lib/MC
parent36ea408903e4acafcb90650d94c9aa8e7484c1f5 (diff)
downloadexternal_llvm-8e48edcf3dd7dea9fec58b05a6ace6fbd0260d7c.zip
external_llvm-8e48edcf3dd7dea9fec58b05a6ace6fbd0260d7c.tar.gz
external_llvm-8e48edcf3dd7dea9fec58b05a6ace6fbd0260d7c.tar.bz2
[MC][AsmParser] Hook for post assembly file processing
This patch handles LLVM standalone assembler (llvm-mc) ELF flag setting based on input file directive processing. Mips assembly requires processing inline directives that directly and indirectly affect the output ELF header flags. This patch handles one ".abicalls". To process these directives we are following the model the code generator uses by storing state in a container as we go through processing and when we detect the end of input file processing, AsmParser is notified and we update the ELF header flags through a MipsELFStreamer method with a call from MCTargetAsmParser::emitEndOfAsmFile(MCStreamer &OutStreamer). This patch will allow other targets the same functionality. Jack git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191982 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC')
-rw-r--r--lib/MC/MCParser/AsmParser.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp
index 9854b07..53ce02c 100644
--- a/lib/MC/MCParser/AsmParser.cpp
+++ b/lib/MC/MCParser/AsmParser.cpp
@@ -673,8 +673,10 @@ bool AsmParser::Run(bool NoInitialTextSection, bool NoFinalize) {
// Finalize the output stream if there are no errors and if the client wants
// us to.
- if (!HadError && !NoFinalize)
+ if (!HadError && !NoFinalize) {
+ getTargetParser().emitEndOfAsmFile(Out);
Out.Finish();
+ }
return HadError;
}
@@ -779,7 +781,8 @@ bool AsmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) {
// temporary label to the streamer and refer to it.
MCSymbol *Sym = Ctx.CreateTempSymbol();
Out.EmitLabel(Sym);
- Res = MCSymbolRefExpr::Create(Sym, MCSymbolRefExpr::VK_None, getContext());
+ Res = MCSymbolRefExpr::Create(Sym, MCSymbolRefExpr::VK_None,
+ getContext());
EndLoc = FirstTokenLoc;
return false;
} else