llvm-mc standalone assemblers and testing

I have had references to llvm-mc in terms of a tester for MC level code changes and have just found and read the blog http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html.

Am I correct that lib/Target//AsmParser/*.cpp needs to be completed to make a standalone assembler for a specific target and until that is done, llvm-mc can’t be used to generate output object that is tested by elf-dump?

If this is correct, then is there any documentation on what to do or is there a preferred target that currently supports a standalone assembler as llvm-mc.

I’m guessing that the answer is yes, I have to know how to parse the target specific assembly and maybe look at the ARM implementation for guidance.



You need to implement an AsmParser if you want to generate object files from assembly files. You can generate object files from higher-level inputs (.c, .ll) without a functional AsmParser as long as your inputs don’t use inline assembly.


We are already generating object directly.

It is on my roadmap to implement the standalone assembler, but I was hoping for some suggestions :wink:

My target is Mips and I have started looking at what ARM does. If there is a better model or how-to guide I’d like to know.



ARM is the best model currently, though x86 does some interesting things as well and is worth looking at.

If there’s anything in particular that’s causing head-scratching, just ask. There’s not much available in terms of how-to documentation, unfortunately. That’s definitely on my TODO list to write, but time constraints are rough right now.



What I am doing is modeling from ARM and X86 just enough to get “hello world” to produce correct ELF output.

From many years of experience I know this will leave me with little understanding of what is going on and I will need to have this understanding to really add long term value. Maybe my questions will help frame the how-to-and-why documentation.

I think my first patch will include a link from llvm-mc references in CodeGenerator.html pointing to the llvm project blog that discusses what it is trying to do.



Hi Jack,

That sounds great! I look forward to seeing your patches.