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.