Commit Graph
154 Commits
Author SHA1 Message Date
Stephan Bergmann ef53355355 Rudimentary support for dynamic_cast on UNO proxy objects
<https://gerrit.libreoffice.org/c/core/+/144139> "New loplugin:unocast" had
argued that uses of dynamic_cast from a UNO interface type are broken in general
(because if the source object is a proxy from the C*+ UNO bridge, its vtable's
RTTI slot will normally not be set up, which can cause a crash), and should be
replaced with uses of XUnoTunnel.  Which the various recent "loplugin:unocast
(...)" commits started to do.  However, it became clear that that is not the
most ideal way forward:  For one, getting more and more implementations of
XUnoTunnel::getSomething into existing class hierarchies is error prone, as each
such implementation must manually delegate to all its base class
implementations.  For another, uses of comphelper::getFromUnoTunnel (which often
needs to do a queryInterface to XUnoTunnel first) are easily more expensive than
uses of dynamic_cast.

Thanks to Noel, the insight here is that for the use case of a dynamic_cast from
a UNO interface type to a local C++ class type, and if the source object is a
proxy, it is sufficient that the dynamic_cast will not crash.  It will
necessarily always return null (as the proxy will never be the implementation of
a local C++ class type), so it is sufficient to fill the RTTI slots of the
proxies' vtables with dummy values.  That avoids having to set up proper RTTI
for those potentially multiple-inheritance proxy types.  (And with this in
place, all those recent "loplugin:unocast (...)" commits can be reverted again
in a next step.)

I verified the changes for the gcc3_linux_aarch64 (on macOS), gcc3_linux_intel,
gcc3_linux_x86-64, gcc3_macosx_x86-64, msvc_win32_intel, and msvc_win32_x86-64
bridges.  The changes for all the other bridges were done blindly.

(For gcc3_linux_x86-64, which already conditionally supported proper RTTI for
UBSan, setting the offset-to-top slot to non-zero had to be made conditional
too, as the dummy ProxyRtti will always pretend to be a full class rather than a
potential base class that could have a non-zero offset-to-top value.  For
msvc_win32_*, it turned out that the existing code to set up dummy XInterface
RTTI (which was there for reasons lost to history) was broken.)

Change-Id: Iec4b8067d26b14b6fb02c2fdd15e1eee20919590
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145038
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2023-01-04 13:49:58 +00:00
Caolán McNamara af55dc3891 annocheck warning about missing .note.gnu.property section
copy and paste recommendation from:
https://sourceware.org/annobin/annobin.html/Test-cf-protection.html

and adapt like:
https://github.com/openssl/openssl/commit/51994e505dbb1cd0dd76869ec962e2948b77b585
where https://bugs.ruby-lang.org/attachments/8962 is similar

Intel docs have "The ENDBR32 and ENDBR64 (collectively ENDBRANCH) are
two new instructions that are used to mark valid indirect CALL/JMP
target locations in the program."

Change-Id: Ie867c263a888763db4478720ba189c9ec6cc974d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126859
Tested-by: Jenkins
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
2022-01-06 14:56:27 +01:00
Stephan Bergmann b4a46b47b6 Revert "osl::Mutex->std::mutex in bridges/except"
This reverts commit 739aaf02db.  At least in
bridges/source/cpp_uno/gcc3_macosx_x86-64/except.cxx, getRTTI can call itself
recursively, causing a deadlock on RTTI::m_mutex.  In
bridges/source/cpp_uno/gcc3_linux_x86-64/rtti.cxx that has been addressed with
RTTI::getRTTI_NoLock, but other implementations have not been modified.  Avoid
regressions, esp. on more esoteric platforms, by reverting the change.

Conflicts:
	bridges/source/cpp_uno/gcc3_linux_x86-64/rtti.cxx

Change-Id: I08b57b0561923bdbe191c8e93f8f400e0e4df337
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119442
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2021-07-27 13:38:40 +02:00
Noel Grandin 739aaf02db osl::Mutex->std::mutex in bridges/except
I changed all the bridges to keep them in sync, but only
tested on the LibreOffice CI machines.

Change-Id: Id8fef017cc6c99c60d64b8f849220d5336abc5d5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119140
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2021-07-19 12:38:02 +02:00
George Bateman 505795db3f tdf#124176 Use #pragma once in bridges
This commit was carried out by a Python script, source of which
is at https://bugs.documentfoundation.org/show_bug.cgi?id=124176#c97.

Change-Id: Icadf43a74e4ba99e587a1e6287adf8d65f819ca1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100144
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2020-09-04 09:00:08 +02:00
Noel Grandin 3eed231541 compact namespace in avmedia..bridges
Change-Id: Iba1282caadab91a0c6e1c044dbab5e6e15f3707b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93705
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2020-05-08 12:16:54 +02:00
Stephan Bergmann 46ba7ac945 Add missing "!"
Change-Id: Ic3e50e1a64b334bee86db7456a4821fa9427370b
2018-12-13 11:11:32 +01:00
Stephan Bergmann 222cea8341 Fix getRTTI for Android x86
First, make sure existing compiler-generated RTTI from liblo-native-code.so is
found (so that catching bridge-synthesized exceptions in native code works with
libc++abi, which checks type equivalence by address instead of string
comparsion), by using the dlsym(RTLD_DEFAULT,...) mechanism as in the ANDROID
gcc3_linux_arm bridge case.  And second, if that should fail, synthesize the
type_info even if the included cxxabi.h doesn't provide the relevant type
declarations, by using copies from the ABI specification, as also done on other
platforms.

Instead of always having getRTTI fail and raiseException throw a non-synthesized
css::uno::RuntimeException("no rtti for type ...").  Which explains the mystery
discussed in the commit message of 312eeeee42
"Switch Android armeabi-v7a to libc++/libc++abi/libunwind too", why the observed
misbehavior on x86 was so different from that on armeabi-v7a.

Change-Id: I9308654c5c2b88b4d27e0e8e9edda1849133a161
Reviewed-on: https://gerrit.libreoffice.org/65070
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-12-13 09:53:50 +01:00
Stephan Bergmann aca3a4c36f -Werror,-Wunused-variable
Change-Id: Ia6b57f0cf508686c437027e5753258169c18b0f7
2018-12-11 17:35:37 +01:00
Stephan Bergmann ab9b67bbb0 Remove obsolete SAL_FALLTHROUGH completely
...after 7ffdd830d5
"HAVE_CPP_ATTRIBUTE_FALLTHROUGH is always true now"

Change-Id: I54e5ff4e036a6bb3e5774d1c0524158aae18e937
Reviewed-on: https://gerrit.libreoffice.org/64800
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-12-08 13:28:16 +01:00
Mike Kaganski e128f78069 replace double-checked locking patterns with thread safe local statics
Change-Id: I1bf67196e97411aeecc13ed4f91d1088a315e323
Reviewed-on: https://gerrit.libreoffice.org/62839
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2018-11-04 14:46:01 +01:00
Caolán McNamara 6ddecf61ec fillUnoException not working on std::rethrow_exception exceptions
used since...

commit dacc1b40df
Date:   Sat Jul 28 16:33:22 2018 +0100

    ofz#9597 rethrown IOException not caught by catch IOException

the adjustedPtr seems to be as expected, but the type_info not.  Presumably
these are thrown as 'dependent exceptions' (?)
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/libsupc%2B%2B/eh_type.cc#L42

Change-Id: Ibd736abe941bb1d5facdb88139b3a0e6cf32cf1f
Reviewed-on: https://gerrit.libreoffice.org/58477
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-08-04 15:37:30 +02:00
Stephan Bergmann 4544713d3a Adapt remaining cpp_uno bridges to #i114635#
..."C++ UNO bridge should convert non-UNO exceptions into RuntimeException"
(<https://bz.apache.org/ooo/show_bug.cgi?id=114635>), see
<https://lists.freedesktop.org/archives/libreoffice/2018-April/079985.html>
"Re: CppunitTest_sw_filters_test failing on x86 Linux, std::exception ->
uno::RuntimeException".

(The msvc_win32_{intel,x86-64} versions already handle non-UNO exceptions in
their msc{i,x}_filterCppException functions, in a different way.)

Change-Id: Ie359affed6831d16be0de3e3ff065484e28bd9c3
Reviewed-on: https://gerrit.libreoffice.org/52665
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-04-10 13:16:23 +02:00
Christian Lohmaier 63860c399b enable c++17 for android again after boost auto_ptr has a workaround
see 90d2155912 for boost fix and
see effe6b3d84 for bridges fix for mac

Change-Id: Ic6209ce0927dafd39763ef0b2fabbcaa7abf743f
Reviewed-on: https://gerrit.libreoffice.org/46002
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
Tested-by: Jenkins <ci@libreoffice.org>
2018-01-18 19:33:52 +01:00
Christian Lohmaier 4082a18406 android: use unified headers and llvm-c++ STL (x86) with NDK 16
gnustl (and others) are to be removed in future versions of the ndk
also bump gradle and build-tools to current versions along with it

arm unfortunately crashes with llvm-c++, so keep with gnustl for now/fix
that later

Change-Id: Ic794c3293b599b77ec48096bf3283a99c09cbb79
Reviewed-on: https://gerrit.libreoffice.org/45163
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
Tested-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
2018-01-18 14:44:25 +01:00
Michael Stahl 9e52685ebd bridges: [loplugin:includeform] gcc3_linux_intel
Change-Id: I0a60521e893990af63d723871edcbc564b135074
2017-12-08 21:40:34 +01:00
Noel Grandin 87a9979c89 overload std::hash for OUString and OString
no need to explicitly specify it anymore

Change-Id: I6ad9259cce77201fdd75152533f5151aae83e9ec
Reviewed-on: https://gerrit.libreoffice.org/43567
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-10-23 08:15:35 +02:00
Michael Stahl 5581ab4a13 bridges: [loplugin:stringconstant]
Change-Id: I07501ac3593cd5df713b74e04ea64d22365958b9
2017-09-18 13:35:45 +02:00
Tor Lillqvist 013d9789c7 Drop :: prefix from std in [a-b]*/
Change-Id: I0422aaf39bbce889c95ed9a81a0784cb03a1badd
Reviewed-on: https://gerrit.libreoffice.org/34320
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2017-02-15 21:50:23 +00:00
Stephan Bergmann 61396df4f4 LEAK_STATIC_DATA is only ever defined for WNT
Change-Id: I1aa7b56b44e5efc8ad407c8d0fe09927f622b5e7
2017-02-11 18:32:05 +01:00
Michael Stahl b647996a9b replace sal_Size with std::size_t (or sal_uInt64 for SvStream pos)
... except in include/rtl, include/sal, include/uno, where sal_Size is
retained for compatibility, and where callers of rtl functions pass in
pointers that are incompatible on MSVC.

Change-Id: I8344453780689f5120ba0870e44965b6d292450c
2016-09-15 12:01:11 +02:00
Caolán McNamara f5f0758080 Revert "hack for now"
This reverts commit f5792667ca.

it turns out it was the use of an intermediate GtkGrid which made a11y work
a little differently under gtk3. Clearly not intended to be pushed.

Change-Id: I6931163e07ea413acdd45ba1353f357d317fdfbd
2016-07-19 23:38:14 +01:00
Caolán McNamara f5792667ca hack for now
Change-Id: I62673e60ac8785c74fc4f97ad76bcb02c7e28941
2016-07-19 22:33:34 +01:00
Michael Stahl 8ad0fb82d4 bridges: [loplugin:staticanonymous]
Change-Id: I9d2c233c7060ea5c7a6bc028a8146ee8b2fd555b
2016-06-21 18:20:26 +02:00
Michael Stahl 67f3a9a48f bridges: [loplugin:nullptr]
Change-Id: I7386569030fc95553bfb423d23d291430388992b
2016-06-21 18:20:26 +02:00
Michael Stahl 371ddde018 bridges: [loplugin:salbool]
Change-Id: I1924f2b18763e42013c2b5ce80b664674e460fc7
2016-06-21 18:20:26 +02:00
Michael Stahl d7777467a3 bridges: -Werror,-Wimplicit-fallthrough
Change-Id: I1ad51d4dc7e6bddfc5fa8d6252a7d6349bd5dfb7
2016-06-21 18:20:25 +02:00
Tor Lillqvist e0849330bc Get rid of unnecessary directory levels $D/inc/$D
Change-Id: Ibf313b8948a493043006ebf3a8281487c1f67b48
Reviewed-on: https://gerrit.libreoffice.org/25532
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
Tested-by: Tor Lillqvist <tml@collabora.com>
2016-05-27 17:10:45 +00:00
Stephan Bergmann 128deeae81 cxxabi.h is not specific to GCC
Change-Id: Icaf4d4d41a36ae469f826ac08ab641a554dff3c9
2016-02-26 08:57:07 +01:00
Stephan Bergmann baad027bb7 Expect _Unwind_Exception to be defined in the compilers' unwind.h
Change-Id: Ie27018d21cf356ea5c6953958b466153f93f9a51
2016-02-26 08:57:07 +01:00
Baptiste Daroussin cee2655445 Kill check for ancient FreeBSD version
Change-Id: Ia6f7d55d2d8d346695658549d2e86eef77215377
Reviewed-on: https://gerrit.libreoffice.org/20625
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
2015-12-11 07:28:09 +00:00
Michael Stahl 0b6a0d4c31 bridges: loplugin:cstylecast
Change-Id: I8613f1f7f2155aa972fa4f841ebfcf6e07e45821
2015-10-30 16:09:37 +01:00
Stephan Bergmann 3a68a7dcf4 Remove workarounds for no longer supported GCC 4.6
In bridges/source/cpp_uno/gcc3_macosx_x86-64/share.hxx, the #if also covered
Clang, which actually needs these declarations (for now; the right fix will
probably be to #include <cxxabi.h>).

Change-Id: I1eebd59e2371f3498d740ab78244927358c4f23f
2015-06-26 17:31:14 +02:00
Stephan Bergmann 6ff2d84ade Various #include <sal/log.hxx> fixups
rtl/string.hxx and rtl/ustring.hxx both unnecessarily #include <sal/log.hxx>
(and don't make use of it themselves), but many other files happen to depend on
it.  Cleaned up some, but something like

  grep -FwL sal/log.hxx $(git grep -Elw \
    'SAL_INFO|SAL_INFO_IF|SAL_WARN|SAL_WARN_IF') -- \*.cxx)

shows lots more files that potentially need fixing before the include can be
removed from rtl/string.hxx and rtl/ustring.hxx.

Change-Id: Ibf033363e83d37851776f392dc0b077381cd8b90
2015-04-22 09:57:47 +02:00
Stephan Bergmann 93b4ec39e2 loplugin:cstylecast, loplugin:redundantcast
Change-Id: If5d839b05c1babecc84b76d2bcdf47009d0f713c
2015-04-07 10:46:18 +02:00
Stephan Bergmann fb088cdd8d Replace remaining getCppuType et al with cppu::UnoType
Change-Id: I37d1a939c1a98f77152ed90dfb201446101f3157
2015-04-01 08:35:33 +02:00
Stephan Bergmann 96f5b780f0 Use OUString::unacquired
found with

  git grep -E '\* *\<reinterpret_cast\>[^>]+\<OUString\>'

Change-Id: I9306d4ad8e3b1664f54cb7df86f2d79bfd3c6cb9
2015-03-31 17:45:27 +02:00
Stephan Bergmann 4a8d478ff2 loplugin:cstylecast (gcc3_linux_intel)
Change-Id: I89c3c2c63c1c1b7478d94c713341db1cd24f0ab8
2015-03-13 18:21:35 +01:00
Stephan Bergmann c85e36bc85 loplugin:cstylecast,stringconstant
Change-Id: Iffc8cbf108310099318e37378c4b3033ea087cee
2015-01-08 14:19:29 +01:00
Stephan Bergmann 063a511583 Revert "Revert "boost::unordered_map->std::unordered_map""
This reverts commit 3976739f23,
the problem mentioned there was caused by a different commit, and
has meanwhile been fixed.
2015-01-07 14:41:11 +01:00
Caolán McNamara 3976739f23 Revert "boost::unordered_map->std::unordered_map"
as an experiment to see if that's somehow the cause of

NEXT    An uncaught exception of type com.sun.star.sdbc.SQLException
NEXT    - General error: java.lang.UnsatisfiedLinkError: com.sun.star.sdbcx.comp.hsqldb.StorageFileAccess.isStreamElement(Ljava/lang/String;Ljava/lang/String;)Z

NEXT    ##Failure Location unknown## : Error
        Test name: HSQLDBTest::testEmptyDBConnection
NEXT    An uncaught exception of type com.sun.star.sdbc.SQLException
NEXT    - General error: java.lang.UnsatisfiedLinkError: com.sun.star.sdbcx.comp.hsqldb.StorageFileAccess.isStreamElement(Ljava/lang/String;Ljava/lang/String;)Z

under clang

This reverts commit ce7f442bd0.

Change-Id: Ieed0be5721953b9644e4be411173e0ea73f33ed8
2015-01-06 09:15:14 +00:00
Caolán McNamara ce7f442bd0 boost::unordered_map->std::unordered_map
Change-Id: I3a16703727f1a421e0ed18079e14219a4feeb8c8
2015-01-05 12:37:48 +00:00
Michael Stahl 1276076ac8 ibridges: convert all legacy osl/diagnose.h assertions in source/cppu_uno
Change-Id: I4e78fac76b6bb4923e3b680d910afe5bb9640c33
2014-11-21 17:32:26 +01:00
Michael Stahl 8b50d6b176 bridges: get at least the x86 bridge to build
Change-Id: Idd2f223e0c83e0a6a19e70bd677058b6899bf766
2014-11-17 12:50:00 +01:00
Michael Stahl b3e5b5941f bridges, vcl: turns out there is sal/alloca.h; replace #ifdefery
Change-Id: I2eda8dab51e66af7856b55f2d5f297620e07ccdb
2014-11-17 11:06:51 +01:00
Noel Grandin 0371a63365 remove unnecessary 'using namespace rtl' declarations
It turns out that almost none of them were necessary.

Change-Id: I1311ed28409c682b57ea8d149bcbaf2c49133e83
Reviewed-on: https://gerrit.libreoffice.org/12133
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Tested-by: Noel Grandin <noelgrandin@gmail.com>
2014-10-29 11:28:54 +00:00
Stephan Bergmann 67a9ae4dd8 Improve debug output
Change-Id: Iba0c35a5bc07ac7b67186c3eeae1a2c926a6bc69
2014-09-29 23:18:26 +02:00
Stephan Bergmann 9c9f0ea2c3 Include RTTI in generated vtables for ubsan's vptr-based checks
...though only on gcc3_linux_x86-64 for now.

Change-Id: Id90554425e78b38a5a97149f2a7d3ac04cbe0c9b
2014-08-07 18:21:19 +02:00
Stephan Bergmann 6526881a0c loplugin:unreffun
Change-Id: Ie5608777b0bee002437117709d2c96062a39ff55
2014-08-05 17:01:36 +02:00
Noel Grandin dac4ca5f68 new loplugin: externalandnotdefined
Find "missing headers," where a function is declared directly in the
.cxx (as extern) and not defined, and should arguably instead be declared
in an include file.

Change-Id: I6d83ee432b2ab0cd050aec2b27c3658d32ac02a2
2014-07-11 14:12:25 +02:00