printf with asm

David Friedman dvdfrdmn at users.ess-eff.net
Wed Nov 7 18:58:57 PST 2007


Manfred Hansen wrote:
> Manfred Hansen wrote:
> 
>> void main()
>> {
>>     int myint = 1234;
>>     const(char*) mystring = "This number -> %d <- should be 1234\n";
>>
>>     asm
>>     {
>>             push    dword ptr myint     ; // pointer to the integer
>>             variable
>> declared in D
>>             push    dword ptr mystring  ; // pointer into the C-style
>>             string
>> declared in D
>>             call    printf              ; // call the printf function
>>     }
>> }
>>
>> This programm run with dmd 2.007 but not with gdc based on version 2.005 .
>> My Compiler is gcc.4.1.2 under linux.
>>
>> The output:
>> manni at manni-lx:~/dd/ass$ ./asm
>> This number -> 1234 <- should be 1234
>> Speicherzugriffsfehler (core dumped)
>>
>> I believe the core dump has to with the line
>> const(char*) mystring ...
>>
>> manni
> 
> Hello,
> 
> i make my programm a little bit smaller to get a 
> segmentation fault.
> 
> void main()
> {
>         int myint = 1234;
> 
>         asm
>         {
>                 push    dword ptr myint;
>         }
> }
> 
> I have tested the programm under Debian/Sidux and Kubuntu feisty.
> 
> Can someone reproduce the error, maybe the problem is not the
> gdc compiler, it's my operating system ?
> 
> manni 
> 
> 
> 

GCC puts special stack alignment code in the main function so you cannot 
leave the stack unbalanced. You could either restore the stack to the 
state it was in before the asm block or you could put the asm in another 
function.

David


More information about the D.gnu mailing list