This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug java/10878] miscompilation of boolean parameters from bytecode


PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

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



------- Additional Comments From szabo.daniel@dpg.hu  2003-06-03 09:02 -------
Subject:   Re: miscompilation of boolean parameters from bytecode

It definitely matters. Compiled code runs with side effects (for sure, tested, that's why I was looking for what went wrong).
The problem is the _location_ on the stack:

storing parameter in local storage:

>         movb    %al, -1(%ebp)    ;  -1(ebp) = al

vs reading local storage and passing on:

>         movl    -8(%ebp), %edx    edx = -8(ebp)

setting the local storage _inside the function_ is correct:

>         movl    $1, -8(%ebp)   -8(ebp) = 1

the bogus code is the very first store op. it should read
movb    %al, -8(%ebp) 

just compare it to the second store op, where the second function parameter will be stored in local storage:

>         movl    %eax, -12(%ebp) ; -12(ebp) = eax


pinskia@physics.uc.edu  <gcc-bugzilla@gcc.gnu.org> 2003.06.02. 16:33:46-kor írta:

> PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
> 
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=10878
> 
> 
> 
> ------- Additional Comments From pinskia@physics.uc.edu  2003-06-02 16:33
> -------
> I do not think it matters because because gcc always will load in it by a
> byte.
> What do you think?
> 
> _ZN3bug2g1Eb:
>         pushl   %ebp
>         movl    %esp, %ebp        ; ebp = esp
>         subl    $40, %esp             ; esp - = $40
>         movl    12(%ebp), %eax ; eax = 12(ebp)
>         movb    %al, -1(%ebp)    ;  -1(ebp) = al
>         movl    8(%ebp), %eax   ; eax = 8(ebp)
>         movl    %eax, -12(%ebp) ; -12(ebp) = eax
>         cmpl    $0, -12(%ebp)
>         jne     .L12
>         call    _Jv_ThrowNullPointerException
> ..L12:
>         movl    -12(%ebp), %eax   ; eax = -12(ebp)
>         movl    %eax, (%esp)   ;(esp) = eax
>         call    _ZN3bug2f1Ev
>         movzbl  %al, %eax   eax = extend (al)
>         testl   %eax, %eax    
>         jne     .L13
>         jmp     .L9
> ..L13:
>         movl    $1, -8(%ebp)   -8(ebp) = 1
> ..L9:
>         movl    8(%ebp), %eax    eax = 8(ebp)
>         movl    -8(%ebp), %edx    edx = -8(ebp)
>         movl    %edx, -16(%ebp)   -16(ebp) = edx
>         movl    %eax, -20(%ebp)    -20(ebp) = eax
>         cmpl    $0, -20(%ebp)       
>         jne     .L15
>         call    _Jv_ThrowNullPointerException
> ..L15:
>         movl    -16(%ebp), %eax    eax = -16(ebp)
>         movl    %eax, 4(%esp)         4(esp) = eax
>         movl    -20(%ebp), %edx     -20(ebp) = edx
>         movl    %edx, (%esp)     (esp) = edx
>         call    _ZN3bug2g2Eb
>         leave
>         ret
> 
> 
> 
> ------- You are receiving this mail because: -------
> You reported the bug, or are watching the reporter.






------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]