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]