Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Digital Mars D compiler; acquiring ASM output

I am reading the book from Andrei Alexandrescu about the D programming language. He's an excellent writer and does a pretty good job at explaining aspects of the D language. I however find certain constructs hard to understand when I cannot imagine the ASM output or consequences of certain keywords (such as in, out, etc. or other constructs). Even though my ASM is pretty bad and I never use it, it helps me a lot to be able to understand how certain keywords work out to the computer and the work being done.

The DMD compiler has many interesting features (code coverage, generating interfaces (header files), generating documentation, profiling, ...) but I haven't seen a switch to output ASM code. The compiler does generate .obj files, and from reading the following link: http://www.digitalmars.com/ctg/obj2asm.html I suspect I need a tool to convert the object files manually. I would prefer a compiler switch, is there one?

On the bottom of that page, I get linked to a page where I can pay for the products mentioning containing that tool. Coming from a GNU background I highly frowned up on that. Is this for C/C++ only, or does this also apply for the D compiler?

Is there any other way to convert these .obj files to readable ASM code, or must I resort to other D compilers (such as GDC or LDC) to acquire ASM output? I prefer not to. DMD is created by the founder himself, I'm sure he implemented most features correctly / largely optimized.

So, how can I take a peek at the ASM code?

Thank you.

like image 684
Taco de Wolff Avatar asked Aug 28 '10 21:08

Taco de Wolff


2 Answers

The obj2asm utility is provided by the DMD compiler suite, which is available for free (under a dual GPL and Artistic license). See DMD Compiler for Linux on the D Programming Language website.

like image 96
You Avatar answered Oct 04 '22 17:10

You


You could try objconv. It's what I use. The reason DMD doesn't output assembler via a switch is because it never generates ASM as a discrete step. It generates binary opcodes directly from its internal representation. This is part of the reason why it compiles so fast.

Or you can use the DMD obj2asm tool which comes packaged with DMD.

obj2asm somefile.o > somefile.s
like image 43
dsimcha Avatar answered Oct 04 '22 15:10

dsimcha