Date: prev next · Thread: first prev next last
2018 Archives by date, by thread · List index




On 6 Mar 2018, at 14:17, Stephan Bergmann <sbergman@redhat.com> wrote:

On 06.03.2018 11:38, Jan Iversen wrote:
At some point a piece of code (in the same executable) decides to make a uno call, this looks 
like
Cpp2uno_call() ->
     raise_exception()
             __cxa_throw() ->
             ( C++ throw handling) ->
                     getCaughtException() ->
                             UnoInterfaceProxyDispatch() ->
                                     cpp_call() ->
                                             CallVirtualMethod() ->
                                                     ( Call requested function )

Hard to tell what you're actually looking at without seeing a real backtrace (e.g., I have no 
idea what "Cpp2uno_call()" is supposed to mean).

No problem, I just tried to limit the mail size :-) cpp2uno_call is a function implemented in 
bridges/source/cppuno/gcc*

Backtrace:

(lldb) bt
* thread #10, name = 'LOKitThread.queue', stop reason = breakpoint 14.1
  * frame #0: 0x000000010cb6b416 libKit.dylib`gcc3::callVirtualMethod(pThis=0x00000001173b0f20, 
nVtableIndex=4, pRegisterReturn=0x0000000000000000, pReturnTypeRef=0x0000608000098830, 
bSimpleReturn=true, pStack=0x0000700002a04dd0, nStack=0, pGPR=0x0000700002a050e0, 
pFPR=0x0000700002a050a0) at callvirtualmethod.cxx:73
    frame #1: 0x000000010cb6a48f libKit.dylib`cpp_call(pThis=0x0000604000e76c40, 
aVtableSlot=(offset = 0, index = 4), pReturnTypeRef=0x0000608000098830, nParams=0, 
pParams=0x0000000000000000, pUnoReturn=0x0000000000000000, pUnoArgs=0x0000000000000000, 
ppUnoExc=0x0000700002a053f0) at uno2cpp.cxx:233
    frame #2: 0x000000010cb69bee libKit.dylib`unoInterfaceProxyDispatch(pUnoI=0x0000604000e76c40, 
pMemberDescr=0x000060c00015bcd0, pReturn=0x0000000000000000, pArgs=0x0000000000000000, 
ppException=0x0000700002a053f0) at uno2cpp.cxx:418
    frame #3: 0x00000001133528cd 
libKit.dylib`com::sun::star::uno::UnoInterfaceReference::dispatch(this=0x0000700002a05418, 
pMemberType=0x000060c00015bcd0, pReturn=0x0000000000000000, pArgs=0x0000000000000000, 
ppException=0x0000700002a053f0) const at dispatcher.hxx:173
    frame #4: 0x0000000113352558 libKit.dylib`cppu::getCaughtException() at exc_thrower.cxx:238
    frame #5: 0x000000011371d85f 
libKit.dylib`utl::UCBContentHelper::IsDocument(url=0x0000700002a059e0) at ucbhelper.cxx:150
    frame #6: 0x000000010c83d005 
libKit.dylib`FSStorageFactory::createInstanceWithArguments(this=0x0000600001a6b300, 
aArguments=0x0000700002a05b40) at fsfactory.cxx:128
    frame #7: 0x000000010c83d883 libKit.dylib`non-virtual thunk to 
FSStorageFactory::createInstanceWithArguments(this=0x0000600001a6b300, 
aArguments=0x0000700002a05b40) at fsfactory.cxx:0
    frame #8: 0x000000010c917d91 
libKit.dylib`framework::PresetHandler::getOrCreateRootStorageShare(this=0x00006000001f2500) at 
presethandler.cxx:226
    frame #9: 0x000000010c918d52 
libKit.dylib`framework::PresetHandler::connectToResource(this=0x00006000001f2500, 
eConfigType=E_MODULES, sResource=0x0000700002a06740, sModule=0x00007fb0704781a0, 
xDocumentRoot=0x0000700002a06738, rLanguageTag=0x0000700002a067a0) at presethandler.cxx:349
    frame #10: 0x000000010cab7a6c libKit.dylib`(anonymous 
namespace)::ModuleUIConfigurationManager::ModuleUIConfigurationManager(this=0x00007fb0704780a0, 
xContext=0x0000700002a06890, aArguments=0x0000700002a06de0) at moduleuiconfigurationmanager.cxx:888
    frame #11: 0x000000010cab6dd5 libKit.dylib`(anonymous 
namespace)::ModuleUIConfigurationManager::ModuleUIConfigurationManager(this=0x00007fb0704780a0, 
xContext=0x0000700002a06890, aArguments=0x0000700002a06de0) at moduleuiconfigurationmanager.cxx:855
    frame #12: 0x000000010cab6cba 
libKit.dylib`::com_sun_star_comp_framework_ModuleUIConfigurationManager_get_implementation(context=0x000060800012af00,
 arguments=0x0000700002a06de0) at moduleuiconfigurationmanager.cxx:1676
    frame #13: 0x00000001133c55a0 libKit.dylib`com::sun::star::uno::XInterface* 
std::__1::__invoke_void_return_wrapper<com::sun::star::uno::XInterface*>::__call<com::sun::star::uno::XInterface*
 (*&)(com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), 
com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> 
const&>(com::sun::star::uno::XInterface* (*&&&)(com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), 
com::sun::star::uno::XComponentContext*&&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> 
const&&&) [inlined] decltype(__f=0x00006000000f6998, __args=0x0000700002a069c0, 
__args=0x0000700002a06de0)(com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> 
const&)>(fp)(std::__1::forward<com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&>(fp0))) 
std::__1::__invoke<com::sun::star::uno::XInterface* (*&)(com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), 
com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> 
const&>(com::sun::star::uno::XInterface* (*&&&)(com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), 
com::sun::star::uno::XComponentContext*&&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> 
const&&&) at type_traits:4291
    frame #14: 0x00000001133c5574 libKit.dylib`com::sun::star::uno::XInterface* 
std::__1::__invoke_void_return_wrapper<com::sun::star::uno::XInterface*>::__call<com::sun::star::uno::XInterface*
 (__args=0x00006000000f6998, __args=0x0000700002a069c0, 
__args=0x0000700002a06de0)(com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), 
com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> 
const&>(com::sun::star::uno::XInterface* (*&&&)(com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), 
com::sun::star::uno::XComponentContext*&&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> 
const&&&) at __functional_base:328
    frame #15: 0x00000001133c5429 
libKit.dylib`std::__1::__function::__func<com::sun::star::uno::XInterface* 
(*)(com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&), 
std::__1::allocator<com::sun::star::uno::XInterface* (*)(com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&)>, com::sun::star::uno::XInterface* 
(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> 
const&)>::operator(this=0x00006000000f6990, __arg=0x0000700002a069c0, 
__arg=0x0000700002a06de0)(com::sun::star::uno::XComponentContext*&&, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&) at functional:1552
    frame #16: 0x0000000113388a8f libKit.dylib`std::__1::function<com::sun::star::uno::XInterface* 
(com::sun::star::uno::XComponentContext*, com::sun::star::uno::Sequence<com::sun::star::uno::Any> 
const&)>::operator(this=0x00006000000f6990, __arg=0x000060800012af00, 
__arg=0x0000700002a06de0)(com::sun::star::uno::XComponentContext*, 
com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&) const at functional:1903
    frame #17: 0x0000000113388d18 
libKit.dylib`cppuhelper::ServiceManager::Data::Implementation::createInstanceWithArguments(this=0x00006000000f6980,
 context=0x0000600000136898, singletonRequest=false, arguments=0x0000700002a06de0) at 
servicemanager.cxx:683
    frame #18: 0x0000000113392794 
libKit.dylib`cppuhelper::ServiceManager::createInstanceWithArgumentsAndContext(this=0x00007fb070600110,
 ServiceSpecifier=0x0000700002a06dc0, Arguments=0x0000700002a06de0, Context=0x0000600000136898) at 
servicemanager.cxx:1004
    frame #19: 0x0000000113392833 libKit.dylib`non-virtual thunk to 
cppuhelper::ServiceManager::createInstanceWithArgumentsAndContext(this=0x00007fb070600110, 
ServiceSpecifier=0x0000700002a06dc0, Arguments=0x0000700002a06de0, Context=0x0000600000136898) at 
servicemanager.cxx:0
    frame #20: 0x000000010cab547b 
libKit.dylib`com::sun::star::ui::ModuleUIConfigurationManager::createDefault(the_context=0x0000600000136898,
 ModuleShortName=0x0000700002a07080, ModuleIdentifier=0x0000700002a07398) at 
ModuleUIConfigurationManager.hpp:50
    frame #21: 0x000000010cab2818 libKit.dylib`(anonymous 
namespace)::ModuleUIConfigurationManagerSupplier::getUIConfigurationManager(this=0x0000600000136800,
 sModuleIdentifier=0x0000700002a07398) at moduleuicfgsupplier.cxx:176
    frame #22: 0x000000010cab2df3 libKit.dylib`non-virtual thunk to (anonymous 
namespace)::ModuleUIConfigurationManagerSupplier::getUIConfigurationManager(this=0x0000600000136800,
 sModuleIdentifier=0x0000700002a07398) at moduleuicfgsupplier.cxx:0
    frame #23: 0x000000010c985574 
libKit.dylib`framework::LayoutManager::implts_reset(this=0x00007fb0705673a0, bAttached=true) at 
layoutmanager.cxx:286
    frame #24: 0x000000010c998c2a 
libKit.dylib`framework::LayoutManager::frameAction(this=0x00007fb0705673a0, 
aEvent=0x0000700002a07768) at layoutmanager.cxx:2700
    frame #25: 0x000000010c998e0c libKit.dylib`non-virtual thunk to 
framework::LayoutManager::frameAction(this=0x00007fb0705673a0, aEvent=0x0000700002a07768) at 
layoutmanager.cxx:0
    frame #26: 0x000000010ca48d72 libKit.dylib`(anonymous 
namespace)::Frame::implts_sendFrameActionEvent(this=0x00007fb0705632e0, aAction=0x00000001157a3834) 
at frame.cxx:2942
    frame #27: 0x000000010ca3b44b libKit.dylib`(anonymous 
namespace)::Frame::setComponent(this=0x00007fb0705632e0, xComponentWindow=0x0000700002a07b30, 
xController=0x0000700002a07b28) at frame.cxx:1536
    frame #28: 0x000000010ca418c4 libKit.dylib`non-virtual thunk to (anonymous 
namespace)::Frame::setComponent(this=0x00007fb0705632e0, xComponentWindow=0x0000700002a07b30, 
xController=0x0000700002a07b28) at frame.cxx:0
    frame #29: 0x00000001103efdbd libKit.dylib`(anonymous 
namespace)::SfxFrameLoader_Impl::impl_createDocumentView(i_rModel=0x0000700002a07e88, 
i_rFrame=0x0000700002a082d8, i_rViewFactoryArgs=0x0000700002a07e50, i_rViewName=0x0000700002a07da0) 
at frmload.cxx:592
    frame #30: 0x00000001103ec7a6 libKit.dylib`(anonymous 
namespace)::SfxFrameLoader_Impl::load(this=0x000060c000a71880, rArgs=0x0000700002a08258, 
_rTargetFrame=0x0000700002a082d8) at frmload.cxx:710
    frame #31: 0x00000001103ecc74 libKit.dylib`non-virtual thunk to (anonymous 
namespace)::SfxFrameLoader_Impl::load(this=0x000060c000a71880, rArgs=0x0000700002a08258, 
_rTargetFrame=0x0000700002a082d8) at frmload.cxx:0
    frame #32: 0x000000010c9df2ab 
libKit.dylib`framework::LoadEnv::impl_loadContent(this=0x0000700002a089c8) at loadenv.cxx:1107
    frame #33: 0x000000010c9d92cc 
libKit.dylib`framework::LoadEnv::startLoading(this=0x0000700002a089c8) at loadenv.cxx:375
    frame #34: 0x000000010c9d7864 
libKit.dylib`framework::LoadEnv::loadComponentFromURL(xLoader=0x0000700002a08b40, 
xContext=0x00007fb07300b5e0, sURL=0x0000700002a09308, sTarget=0x0000700002a091f8, nFlags=0, 
lArgs=0x0000700002a09280) at loadenv.cxx:161
    frame #35: 0x000000010ca2a2c1 
libKit.dylib`framework::Desktop::loadComponentFromURL(this=0x00007fb07300b4c0, 
sURL=0x0000700002a09308, sTargetFrameName=0x0000700002a091f8, nSearchFlags=0, 
lArguments=0x0000700002a09280) at desktop.cxx:618
    frame #36: 0x000000010ca2a3cb libKit.dylib`non-virtual thunk to 
framework::Desktop::loadComponentFromURL(this=0x00007fb07300b4c0, sURL=0x0000700002a09308, 
sTargetFrameName=0x0000700002a091f8, nSearchFlags=0, lArguments=0x0000700002a09280) at desktop.cxx:0
    frame #37: 0x000000011064fdeb libKit.dylib`lo_documentLoadWithOptions(pThis=0x00006040000aae00, 
pURL="file:///Users/jani/Library/Developer/CoreSimulator/Devices/4088A840-32A5-4B26-9225-FF6BFE3DF964/data/Containers/Bundle/Application/FB15EB6A-81ED-41CF-BC95-A6568BCE9AE1/LibreOfficeLight.app/welcome.odt",
 pOptions=0x0000000000000000) at init.cxx:1361
    frame #38: 0x000000011064f091 libKit.dylib`lo_documentLoad(pThis=0x00006040000aae00, 
pURL="file:///Users/jani/Library/Developer/CoreSimulator/Devices/4088A840-32A5-4B26-9225-FF6BFE3DF964/data/Containers/Bundle/Application/FB15EB6A-81ED-41CF-BC95-A6568BCE9AE1/LibreOfficeLight.app/welcome.odt")
 at init.cxx:1279
    frame #39: 0x0000000101440321 
LibreOfficeLight`LibreOffice.documentLoad(url="file:///Users/jani/Library/Developer/CoreSimulator/Devices/4088A840-32A5-4B26-9225-FF6BFE3DF964/data/Containers/Bundle/Application/FB15EB6A-81ED-41CF-BC95-A6568BCE9AE1/LibreOfficeLight.app/welcome.odt",
 self=0x00006000000e7b00) at LibreOfficeKitWrapper.swift:117
    frame #40: 0x000000010145645f LibreOfficeLight`closure #1 in 
LOKitThread.documentLoad(lo=0x00006000000e7b00, 
url="file:///Users/jani/Library/Developer/CoreSimulator/Devices/4088A840-32A5-4B26-9225-FF6BFE3DF964/data/Containers/Bundle/Application/FB15EB6A-81ED-41CF-BC95-A6568BCE9AE1/LibreOfficeLight.app/welcome.odt",
 callback=0x000000010144ef90 LibreOfficeLight`partial apply forwarder for closure #1 
(Swift.Optional<LibreOfficeLight.DocumentHolder>, Swift.Optional<Swift.Error>) -> () in 
LibreOfficeLight.DocumentController.doOpen(Foundation.URL) -> () at DocumentController.swift) at 
LOKitThread.swift:106
    frame #41: 0x0000000101456ac2 LibreOfficeLight`partial apply for closure #1 in 
LOKitThread.documentLoad(url:callback:) at LOKitThread.swift:0
    frame #42: 0x00000001014561fa LibreOfficeLight`closure #1 in 
LOKitThread.withLibreOffice(closure=0x0000000101456a50 LibreOfficeLight`partial apply forwarder for 
closure #1 (LibreOfficeLight.LibreOffice) -> () in LibreOfficeLight.LOKitThread.documentLoad(url: 
Swift.String, callback: (Swift.Optional<LibreOfficeLight.DocumentHolder>, 
Swift.Optional<Swift.Error>) -> ()) -> () at LOKitThread.swift, self=0x000060c00007bec0) at 
LOKitThread.swift:90
    frame #43: 0x00000001014562af LibreOfficeLight`partial apply for closure #1 in 
LOKitThread.withLibreOffice(_:) at LOKitThread.swift:0
    frame #44: 0x00000001014677bc LibreOfficeLight`closure #1 in 
SingleThreadedQueue.async(runnable=0x0000000101456260 LibreOfficeLight`partial apply forwarder for 
closure #1 () -> () in LibreOfficeLight.LOKitThread.withLibreOffice((LibreOfficeLight.LibreOffice) 
-> ()) -> () at LOKitThread.swift) at AsyncUtil.swift:62
    frame #45: 0x000000010146784a LibreOfficeLight`partial apply for closure #1 in 
SingleThreadedQueue.async(_:) at AsyncUtil.swift:0
    frame #46: 0x00000001014466b9 LibreOfficeLight`thunk for @callee_owned () -> () at 
DocumentActions.swift:0
    frame #47: 0x00000001017ff22f Foundation`__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 7
    frame #48: 0x00000001017ff091 Foundation`-[NSBlockOperation main] + 68
    frame #49: 0x00000001017fd54e Foundation`-[__NSOperationInternal _start:] + 778
    frame #50: 0x000000010182a1e8 Foundation`__NSThreadPerformPerform + 334
    frame #51: 0x00000001026fa101 
CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #52: 0x0000000102799f71 CoreFoundation`__CFRunLoopDoSource0 + 81
    frame #53: 0x00000001026dea19 CoreFoundation`__CFRunLoopDoSources0 + 185
    frame #54: 0x00000001026ddfff CoreFoundation`__CFRunLoopRun + 1279
    frame #55: 0x00000001026dd889 CoreFoundation`CFRunLoopRunSpecific + 409
    frame #56: 0x00000001017e46de Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 274
    frame #57: 0x00000001017e45b9 Foundation`-[NSRunLoop(NSRunLoop) run] + 76
    frame #58: 0x000000010146746b 
LibreOfficeLight`SingleThreadedQueue.main(self=0x00006080004735c0) at AsyncUtil.swift:55
    frame #59: 0x00000001014675a4 LibreOfficeLight`@objc SingleThreadedQueue.main() at 
AsyncUtil.swift:0
    frame #60: 0x00000001017f212c Foundation`__NSThread__start__ + 1197
    frame #61: 0x0000000106ef86c1 libsystem_pthread.dylib`_pthread_body + 340
    frame #62: 0x0000000106ef856d libsystem_pthread.dylib`_pthread_start + 377
    frame #63: 0x0000000106ef7c5d libsystem_pthread.dylib`thread_start + 13
(lldb) 

This backtrace is on a Mac, compiled as MAC but with libraries that allow it to run in the iOS 
simulator. This is from loading a document.


As there is "getCaughtException()" in your picture: cppu::getCaughtException 
(cppuhelper/exc_hlp.hxx) internally uses the bridge between C++ and binary UNO to translate the 
C++ exception being caught by the current catch block into a css::uno::Any.  You need that bridge 
in all its glory, beautiful assembler hackery and all, for that functionality to work.

That is for sure an argument, I forgot that using throw is a “modern” way of the old longjump(), 
allowing you not scroll back in the call stack.


Because on iOS, no external process will ever call the UNO interface, it is 1 single executable 
(I also removed the pipes etc).

Just to be clear:  The bridge between C++ and binary UNO is used in more scenarios than just 
inter-process communication.  Other examples are bridging to code in other languages like Java, 
the thread-affine bridge used by some (Java) database code, or cppu::getCaughtException mentioned 
above.  While the former examples may not be relevant on iOS, the latter one certainly is.

I can see now that the throw/catch mechanism needs to stay, but in iOS we do not use java or 
python, so there are no real need to convert everything to uno standard just to convert it back 
again.

Thanks for the answer.
rgds
Jan I.



Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.