To comment on the following update, log in, then open the issue:
http://www.openoffice.org/issues/show_bug.cgi?id=47459
                  Issue #:|47459
                  Summary:|UNO broken ...
                Component:|udk
                  Version:|680m92
                 Platform:|Other
                      URL:|
               OS/Version:|All
                   Status:|NEW
        Status whiteboard:|
                 Keywords:|
               Resolution:|
               Issue type:|DEFECT
                 Priority:|P1
             Subcomponent:|code
              Assigned to:|kr
              Reported by:|mmeeks





------- Additional comments from [EMAIL PROTECTED] Thu Apr 14 08:11:18 -0700 
2005 -------
It seems with gcc-3.3.3 ( and I assume any number of other compilers ) the cpp
bridge has been broken wrt. returning basic types.

The offending code is:

privateSnippetExecutorGeneral:
.LFBg:
    movl    %esp,%ecx
    pushl   %ebp              # proper stack frame needed for exception handling
.LCFIg0:
    movl    %esp,%ebp
.LCFIg1:
    subl    $0x8,%esp         # 64bit nRegReturn
    pushl   %ecx              # 32bit pCallStack
    pushl   %edx              # 32bit nVtableOffset
    pushl   %eax              # 32bit nFunctionIndex
    call    cpp_vtable_call
    movl    $123,%eax     # 64 bit nRegReturn, lower half
    leave
    ret

This is of course nonsense; it's calling a function:

extern "C" void cpp_vtable_call(
    int nFunctionIndex, int nVtableOffset, void** pCallStack,
    sal_Int64 nRegReturn )

If we add:
        nRegReturn = 3;

as the 1st line of this and examine the assembler we get:

.globl cpp_vtable_call
        .type   cpp_vtable_call, @function
cpp_vtable_call:
.LFB1172:
        pushl   %ebp
.LCFI6:
        movl    %esp, %ebp
.LCFI7:
        pushl   %edi
.LCFI8:
        pushl   %esi
.LCFI9:
        pushl   %ebx
.LCFI10:
        subl    $156, %esp
.LCFI11:
        call    __i686.get_pc_thunk.bx
        addl    $_GLOBAL_OFFSET_TABLE_, %ebx
        movl    8(%ebp), %edi
        movl    20(%ebp), %eax  # read (uninitialized) value of in nRegReturn
        movl    24(%ebp), %edx
        movl    %eax, -32(%ebp) # copy to scratch value
        movl    %edx, -28(%ebp)
        movl    $3, -32(%ebp)   # !!!!!!!!!

Without re-learning my rusty assembler; that's exactly what I'd expect to
happen; you can't have a function wandering around modifying it's parents stack
frame (surely).

Either way - this bit me because a11y was basically not working; dying in a call
returning a basic type.

testtool/unxlngi4.pro/lib/bridgetest_inprocess returns:

### bool does not match! failed
### char does not match! failed
### byte does not match! failed
### short does not match! failed
### unsigned short does not match! failed
### long does not match! failed
### unsigned long does not match! failed
### hyper does not match! failed
### unsigned hyper does not match! failed
### float does not match! failed
### double does not match! failed
### enum does not match! failed
struct comparison test failed

etc. - as one might expect.

The bug was introduced as this code was re-worked between milestone m80 and m81.
I'm reverting that change in my local build.

---------------------------------------------------------------------
Please do not reply to this automatically generated notification from
Issue Tracker. Please log onto the website and enter your comments.
http://qa.openoffice.org/issue_handling/project_issues.html#notification

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to