Strange AV in asm mode (code only for amd64)

user1234 user1234 at 12.nl
Sun Nov 5 14:39:53 UTC 2017


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.


More information about the Digitalmars-d-learn mailing list