------- Comment #3 from dg dot recrutement31 at gmail dot com  2010-05-27 09:03 
-------
(In reply to comment #2)
> (In reply to comment #1)
> > I think your inline-asm is totally broken, the constraints you have don't 
> > mean
> > the extended (32bit) registers.
> Humm... strange answer. Certainly, you've read too fast and too late in the
> evening.
> You "think" but it's better to demonstrate.
> How to explain the bug disappears when -g or -O0 turned on ?

To notice:
the bug disappears also if function toto is removed and its code moved in the
main function like this:
#include "far_pointers.h"

char u;

/*void toto(far_pointer<unsigned char> pt)
{
    u = *pt;
}*/

int main(int argc, char **argv)
{
        unsigned short dataSeg = 0;
        asm (
                    "                                     \
                        .intel_syntax noprefix;     \n        \
                        mov %0, cs;                 \n        \
                        "
                        : "=r"(dataSeg)
        );
        far_pointer<unsigned char> pt(dataSeg, (unsigned char*) &main);
        //toto(pt);
        u = *pt;
        return u;
}

The assembly is correctly generated:

        .file   "main.cpp"
        .intel_syntax noprefix
        .def    ___main;        .scl    2;      .type   32;     .endef
        .text
.globl _main
        .def    _main;  .scl    2;      .type   32;     .endef
_main:
LFB30:
        push    ebp
LCFI0:
        mov     ebp, esp
LCFI1:
        and     esp, -16
LCFI2:
        call    ___main
/APP
 # 19 "main.cpp" 1
                                                                .intel_syntax
noprefix;     
                                mov ax, cs;                 

 # 0 "" 2
 # 59 "far_pointers.h" 1
                                .intel_syntax noprefix;     
                        mov gs, ax;                 
                        mov al, gs:[OFFSET FLAT:_main];            

 # 0 "" 2
/NO_APP
        mov     BYTE PTR _u, al
        movsx   eax, al
        leave
LCFI3:
        ret
LFE30:
.globl _u
        .bss
_u:
        .space 1


All these tests seem to demonstrate there is a bug.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44288

Reply via email to