www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - GDC Explorer - an online disassembler for D

reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
I've met Matt Goldbolt, the author of the GCC Explorer at 
http://gcc.godbolt.org - a very handy online disassembler for GCC.

We got to talk a bit about D and he hacked together support for D by 
using gdc. Take a look at http://d.godbolt.org, I think it's pretty darn 
cool! I'm talking to him about integrating his work with our servers.


Andrei
Sep 20 2012
next sibling parent Iain Buclaw <ibuclaw ubuntu.com> writes:
On 21 September 2012 04:47, Andrei Alexandrescu
<SeeWebsiteForEmail erdani.org> wrote:
 I've met Matt Goldbolt, the author of the GCC Explorer at
 http://gcc.godbolt.org - a very handy online disassembler for GCC.

 We got to talk a bit about D and he hacked together support for D by using
 gdc. Take a look at http://d.godbolt.org, I think it's pretty darn cool! I'm
 talking to him about integrating his work with our servers.


 Andrei
That's awesome. :-) -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';
Sep 21 2012
prev sibling next sibling parent reply Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
On 9/21/12, Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> wrote:
 snip
Integrating this with dpaste would be aweee..sooome!
Sep 21 2012
parent "nazriel" <spam dzfl.pl> writes:
On Friday, 21 September 2012 at 07:40:11 UTC, Andrej Mitrovic 
wrote:
 On 9/21/12, Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> 
 wrote:
 snip
Integrating this with dpaste would be aweee..sooome!
http://dpaste.dzfl.pl/news/change-log---v0.82 Those are in plans for all compilers but atm, we are struggling with problem of exceeding monthly bandwidth. Disassemble output takes a lot of space Anyways, I like design of this website! Very similar to dpaste, which rox ;> Looks very nice, probably we could adapt some ideas to dpaste, like __Compiler options__
Sep 21 2012
prev sibling next sibling parent Jacob Carlborg <doob me.com> writes:
On 2012-09-21 05:47, Andrei Alexandrescu wrote:
 I've met Matt Goldbolt, the author of the GCC Explorer at
 http://gcc.godbolt.org - a very handy online disassembler for GCC.

 We got to talk a bit about D and he hacked together support for D by
 using gdc. Take a look at http://d.godbolt.org, I think it's pretty darn
 cool! I'm talking to him about integrating his work with our servers.
That's pretty cool. -- /Jacob Carlborg
Sep 21 2012
prev sibling next sibling parent reply Jens Mueller <jens.k.mueller gmx.de> writes:
Andrei Alexandrescu wrote:
 I've met Matt Goldbolt, the author of the GCC Explorer at
 http://gcc.godbolt.org - a very handy online disassembler for GCC.
This is not a disassembler. It just stops compilation before the assembler (gcc -S). A dissembler would create the assembler code given only the machine code. But it's nice to have source code and assembly side by side. Jens
Sep 21 2012
next sibling parent reply "Bernard Helyer" <b.helyer gmail.com> writes:
On Friday, 21 September 2012 at 10:04:00 UTC, Jens Mueller wrote:
 Andrei Alexandrescu wrote:
 I've met Matt Goldbolt, the author of the GCC Explorer at
 http://gcc.godbolt.org - a very handy online disassembler for 
 GCC.
This is not a disassembler. It just stops compilation before the assembler (gcc -S). A dissembler would create the assembler code given only the machine code.
You are both correct and incredibly pedantic. :P
Sep 21 2012
next sibling parent Iain Buclaw <ibuclaw ubuntu.com> writes:
On 21 September 2012 11:17, Bernard Helyer <b.helyer gmail.com> wrote:
 On Friday, 21 September 2012 at 10:04:00 UTC, Jens Mueller wrote:
 Andrei Alexandrescu wrote:
 I've met Matt Goldbolt, the author of the GCC Explorer at
 http://gcc.godbolt.org - a very handy online disassembler for GCC.
This is not a disassembler. It just stops compilation before the assembler (gcc -S). A dissembler would create the assembler code given only the machine code.
You are both correct and incredibly pedantic. :P
Half correct and incredibly pedantic. :-) There's two modes. One is assembler output, the other is objdump output (which is a disassembler). -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';
Sep 21 2012
prev sibling next sibling parent Iain Buclaw <ibuclaw ubuntu.com> writes:
On 21 September 2012 11:29, Iain Buclaw <ibuclaw ubuntu.com> wrote:
 On 21 September 2012 11:17, Bernard Helyer <b.helyer gmail.com> wrote:
 On Friday, 21 September 2012 at 10:04:00 UTC, Jens Mueller wrote:
 Andrei Alexandrescu wrote:
 I've met Matt Goldbolt, the author of the GCC Explorer at
 http://gcc.godbolt.org - a very handy online disassembler for GCC.
This is not a disassembler. It just stops compilation before the assembler (gcc -S). A dissembler would create the assembler code given only the machine code.
You are both correct and incredibly pedantic. :P
Half correct and incredibly pedantic. :-) There's two modes. One is assembler output, the other is objdump output (which is a disassembler).
And if it doesn't then I must be incredibly confused at this hour in the morning (yawns). -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';
Sep 21 2012
prev sibling parent Jens Mueller <jens.k.mueller gmx.de> writes:
Iain Buclaw wrote:
 On 21 September 2012 11:29, Iain Buclaw <ibuclaw ubuntu.com> wrote:
 On 21 September 2012 11:17, Bernard Helyer <b.helyer gmail.com> wrote:
 On Friday, 21 September 2012 at 10:04:00 UTC, Jens Mueller wrote:
 Andrei Alexandrescu wrote:
 I've met Matt Goldbolt, the author of the GCC Explorer at
 http://gcc.godbolt.org - a very handy online disassembler for GCC.
This is not a disassembler. It just stops compilation before the assembler (gcc -S). A dissembler would create the assembler code given only the machine code.
You are both correct and incredibly pedantic. :P
Half correct and incredibly pedantic. :-) There's two modes. One is assembler output, the other is objdump output (which is a disassembler).
And if it doesn't then I must be incredibly confused at this hour in the morning (yawns).
How do I use the objdump mode in the web interface? Jens
Sep 21 2012
prev sibling parent reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
On 09/21/2012 03:04 AM, Jens Mueller wrote:
 But it's nice to have source code and assembly side by side.

 Jens
And very nice to have demangled names in assembly.
Sep 21 2012
parent Jens Mueller <jens.k.mueller gmx.de> writes:
Ellery Newcomer wrote:
 On 09/21/2012 03:04 AM, Jens Mueller wrote:
But it's nice to have source code and assembly side by side.

Jens
And very nice to have demangled names in assembly.
You can pipe your assembly code to ddemangle if there is some other tool that missing demangling. I did this for example when I looked at output from a statistical profiler. Jens
Sep 21 2012
prev sibling next sibling parent reply "bearophile" <bearophileHUGS lycos.com> writes:
Andrei Alexandrescu:

 I've met Matt Goldbolt, the author of the GCC Explorer at 
 http://gcc.godbolt.org - a very handy online disassembler for 
 GCC.

 We got to talk a bit about D and he hacked together support for 
 D by using gdc. Take a look at http://d.godbolt.org, I think 
 it's pretty darn cool! I'm talking to him about integrating his 
 work with our servers.
It's a nice idea. I'd like a way to filter the output to the disassembly of just one (or few) functions, because otherwise the output risks being too much large. At my second try I have received this, I don't know why: <No output: Error: Command failed: cat: /tmp/gcc-explorer-compiler11285-17644-1vcygvl/output.S: No such file or directory core.exception.AssertError /usr/include/d2/4.6/std/stdio.d(989): Bug in File.readln

Bye,
bearophile
Sep 21 2012
parent reply "bearophile" <bearophileHUGS lycos.com> writes:
 I'd like a way to filter the output to the
 disassembly of just one (or few) functions, because otherwise 
 the output risks being too much large.
It seems even this program produces a too much long asm listing for the site: import std.stdio; void main() { writeln("%f", 1.5); } Bye, bearophile
Sep 21 2012
parent reply "bearophile" <bearophileHUGS lycos.com> writes:
 It seems even this program produces a too much long asm listing 
 for the site:

 import std.stdio;
 void main() {
     writeln("%f", 1.5);
 }
Compiled with: -O0 -march=native Bye, bearophile
Sep 21 2012
parent Iain Buclaw <ibuclaw ubuntu.com> writes:
On 21 September 2012 14:49, bearophile <bearophileHUGS lycos.com> wrote:
 It seems even this program produces a too much long asm listing for the
 site:

 import std.stdio;
 void main() {
     writeln("%f", 1.5);
 }
Compiled with: -O0 -march=native Bye, bearophile
Curse those templates. ;-) -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';
Sep 21 2012
prev sibling parent IntegratedDimensions <IntegratedDimensions gmail.com> writes:
On Friday, 21 September 2012 at 03:46:12 UTC, Andrei Alexandrescu 
wrote:
 I've met Matt Goldbolt, the author of the GCC Explorer at 
 http://gcc.godbolt.org - a very handy online disassembler for 
 GCC.

 We got to talk a bit about D and he hacked together support for 
 D by using gdc. Take a look at http://d.godbolt.org, I think 
 it's pretty darn cool! I'm talking to him about integrating his 
 work with our servers.


 Andrei
Compare a simple C++ to D and the C++ output is far better: class C { int x = 12; public: int foo(int y) { return y*x; } }; int main() { C* c = new C(); return c->foo(2); } VS class C { int x = 12; public: int foo(int y) { return y*x; } }; int main() { C c = new C(); return c.foo(2); } operator new(unsigned long) plt: new(unsigned long) GLIBCXX_3.4> push 0x1 jmp 400450 <.plt> main: push rbp mov rbp,rsp push rbx sub rsp,0x18 mov edi,0x4 call 400470 <operator new(unsigned long) plt> mov rbx,rax mov DWORD PTR [rbx],0x0 mov rdi,rbx call 4005bc <C::C()> mov QWORD PTR [rbp-0x18],rbx mov rax,QWORD PTR [rbp-0x18] mov esi,0x2 mov rdi,rax call 4005a4 <C::foo(int)> nop add rsp,0x18 pop rbx pop rbp ret nop C::foo(int): push rbp mov rbp,rsp mov QWORD PTR [rbp-0x8],rdi mov DWORD PTR [rbp-0xc],esi mov rax,QWORD PTR [rbp-0x8] mov eax,DWORD PTR [rax] imul eax,DWORD PTR [rbp-0xc] pop rbp ret nop C::C(): push rbp mov rbp,rsp mov QWORD PTR [rbp-0x8],rdi mov rax,QWORD PTR [rbp-0x8] mov DWORD PTR [rax],0xc nop pop rbp ret nop WORD PTR cs:[rax+rax*1+0x0] nop DWORD PTR [rax+rax*1+0x0] VS _Dmain: push rbp mov rbp,rsp sub rsp,0x10 call 14 <_Dmain+0x14> mov QWORD PTR [rbp-0x8],rax mov esi,0x2 mov rdi,rax mov rax,QWORD PTR [rax] rex.W call QWORD PTR [rax+0x28] leave ret add BYTE PTR [rax],al main: push rbp mov rbp,rsp sub rsp,0x10 mov DWORD PTR [rbp-0x10],edi mov QWORD PTR [rbp-0x8],rsi mov rsi,QWORD PTR [rbp-0x8] mov edi,DWORD PTR [rbp-0x10] call 22 <main+0x22> leave ret .text.d_dso_init: push rbp mov rbp,rsp push rax push rax push rax push 0x1 mov rdi,rsp call 26 <.text.d_dso_init+0x26> leave ret the C++ version is more verbose, gives explicit references to functions and methods while the D version requires you to hunt and peck.
May 20 2018