On Sunday, 5 November 2017 at 14:27:18 UTC, Eugene Wissner wrote:
On Sunday, 5 November 2017 at 13:43:15 UTC, user1234 wrote:
[...]
One of the problems is that "naked" is missing in your
assembly. If you write
asm pure nothrow
{
naked;
mov RAX, 1;
ret;
nop;nop;nop;nop;nop;nop;nop;
mov RAX, 2;
ret;
}
writeln(proc1()) works. Without "naked" dmd generates the
prologue and epilogue for your function. Inside the assembly
you return from the function without restoring the stack. It
causes the segfault. So you have to write the prologue before
returning or use nacked assembly.
With "naked" and "Proc proc2 = cast(Proc) (cast(void*)proc1 +
8);" the example works.
Yeah thanks, i figured it out too. Also there was too much nops.