From nobody Thu Apr 28 20:16:58 2022 X-Original-To: dev-commits-ports-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id A16431996F0D; Thu, 28 Apr 2022 20:16:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Kq6NB3BHWz3nWV; Thu, 28 Apr 2022 20:16:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1651177018; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ECXbS+K7+6vqM4jTfzuFTEz/Os+6+qhSgSH4YCeyowg=; b=fneIqHYVyNIrggm0ZaAIAlUbobSzE4g7Epdihw/S0YGLkkS7MCaDRAHM8OP1Vbw1ZBWp3M phxqM8DOJrD+XnUbzkf+n9MVEZNa+kaqy/Q8skZnrb8bqjCPmVzNwUf58rtibcsO87YR0h RuQGr0vlMnXz0yxJvIk/qSnJcw0QvN9uMQDIx32a+nVKIGbK+ZaDlQhTiFY29SOiNWs1cu 1T5KdoAzCYkhbjGiqOsje0QcJ4y6AB74azQe1XYYcUXbbhPBYkwdlC8eUZ8d6lJKk6oJRV 9Ib0wWYPypIQKyUVYbEROc1R1yVS0uBkoCyvGZMMyUklaLV4wssuCar1qLRBsg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3F64F1F407; Thu, 28 Apr 2022 20:16:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 23SKGwoY059962; Thu, 28 Apr 2022 20:16:58 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 23SKGwMh059961; Thu, 28 Apr 2022 20:16:58 GMT (envelope-from git) Date: Thu, 28 Apr 2022 20:16:58 GMT Message-Id: <202204282016.23SKGwMh059961@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Tijl Coosemans Subject: git: 2c64d6af43f7 - main - editors/openoffice-devel: make robust against __cxa_exception ABI changes List-Id: Commit messages for all branches of the ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-all@freebsd.org X-BeenThere: dev-commits-ports-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: tijl X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2c64d6af43f77d45810a5e183323c856dc7705e2 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1651177018; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ECXbS+K7+6vqM4jTfzuFTEz/Os+6+qhSgSH4YCeyowg=; b=I1TUp77PNhVeiWZp9vMMjiut2t+6lHayoFVk1sDtBM24zA7Gpqioj/gDgVmKtDzWiWkgot XyWUgqMIq3obm4V1N9naCWJ1DEhnF07nyiYjBnQLRRQ9WHkAL647n+99JhXprPamFTEYH6 YvMwxWQBZsyciB0k41TpQ4+TgzvsziwA5F0XLZL0PATGcdC/PuCFlTsTXA3XxSOr2TIkn/ kY1NXwU/iZP+B5/rJvINXcpqk5qlODPJL2/K5im94Z8a6jHH7gyohFPmGC/kybNU25R6W7 +D7z1dQp9sh0Y48crhXxmbbl3AUyRDGR3vAr0u0V+dE7nGCDzJjBmH1XB8Phrg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1651177018; a=rsa-sha256; cv=none; b=kNYveww4sDEoqxZ9/bSJM0i6ZR84XcA8AB9ZWdOL2Ht5Kq9uakslo1K5MMNvjnp92NxvYD YnmZwz+maYes6cVZd8Qhlo9tZNoXPCasprRPTiScOB4BFqj3Peg2FPY9v2YVuhazh3pChH lIOIweOU7YgSaNWnzdLnTYwz0cOlBPOaybYwr641s9S8KOusxCCK7758jPnKcbMFqE4HYx xMPvcs1E1S4sp2CQxlc6Oi6A5WPffHxoCmrysk9m3tcMpTaLZVPejgXmAduiyp4NfqDFFG QKuTM6WMG1+7MLx+asQUKrrPrjqvbbDs6BEEOoX0+0AOqX1RIBca5qUo6PvHwQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by tijl: URL: https://cgit.FreeBSD.org/ports/commit/?id=2c64d6af43f77d45810a5e183323c856dc7705e2 commit 2c64d6af43f77d45810a5e183323c856dc7705e2 Author: Tijl Coosemans AuthorDate: 2022-04-27 19:49:33 +0000 Commit: Tijl Coosemans CommitDate: 2022-04-28 20:15:37 +0000 editors/openoffice-devel: make robust against __cxa_exception ABI changes Patch openoffice to replace __cxa_get_globals()->caughtExceptions, which is a pointer to the start of a struct __cxa_exception, with __cxa_current_primary_exception(), which is a pointer to the end. This allows struct __cxa_exception to be extended at the start as was recently done in FreeBSD main and stable/13 on 64-bit architectures. Recently on FreeBSD main and stable/13 __attribute__((__aligned__)) was added to struct _Unwind_Exception which changes its size on 32-bit architectures, and that of __cxa_exception as well. Patch openoffice to detect this so packages built on 13.0 still work on 13.1. Add a build dependency on a recent version of devel/libunwind so we always build with an unwind.h that has the right definition of _Unwind_Exception. The dependency was already pulled in via gstreamer (with default options). --- editors/openoffice-devel/Makefile | 10 ++++- ...source_cpp__uno_gcc3__freebsd__intel_except.cxx | 15 +++++++ ...ource_cpp__uno_gcc3__freebsd__intel_uno2cpp.cxx | 49 ++++++++++++++++++++++ ...rce_cpp__uno_gcc3__freebsd__powerpc64_share.hxx | 43 +++++++++++++++++++ ...e_cpp__uno_gcc3__freebsd__powerpc64_uno2cpp.cxx | 38 +++++++++++++++++ ...urce_cpp__uno_gcc3__freebsd__x86-64_uno2cpp.cxx | 36 ++++++++++++++++ 6 files changed, 190 insertions(+), 1 deletion(-) diff --git a/editors/openoffice-devel/Makefile b/editors/openoffice-devel/Makefile index 1f7f3e783f32..19d793650b29 100644 --- a/editors/openoffice-devel/Makefile +++ b/editors/openoffice-devel/Makefile @@ -2,7 +2,7 @@ PORTNAME= apache-openoffice PORTVERSION= ${AOOVERSION1}.${AOOVERSION2}.${TIMESTAMP} -PORTREVISION= 0 +PORTREVISION= 1 PORTEPOCH= 4 CATEGORIES= editors java MASTER_SITES= https://dist.apache.org/repos/dist/dev/openoffice/${AOOVERSION}-${AOORC}-${TIMESTAMP}/source/ \ @@ -61,6 +61,7 @@ BUILD_DEPENDS= \ epm:devel/epm \ ${LOCALBASE}/bin/gperf:devel/gperf \ imake:devel/imake \ + libunwind>=20211201_1:devel/libunwind \ gpatch:devel/patch \ ${LOCALBASE}/include/sane/sane.h:graphics/sane-backends \ ${JAVALIBDIR}/commons-lang3.jar:java/apache-commons-lang3 \ @@ -230,6 +231,13 @@ WITH= SDK .include +.if ${OPSYS} == FreeBSD && ( \ + (${OSVERSION} >= 1300525 && ${OSVERSION} < 1301000) || \ + (${OSVERSION} >= 1301500 && ${OSVERSION} < 1301502) || \ + (${OSVERSION} >= 1400051 && ${OSVERSION} < 1400057)) +BROKEN= please update FreeBSD base system first to fix an ABI incompatibility +.endif + .if defined(WITH_DEBUG) CONFIGURE_ARGS+= --enable-symbols .endif diff --git a/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__intel_except.cxx b/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__intel_except.cxx new file mode 100644 index 000000000000..b41a379b409d --- /dev/null +++ b/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__intel_except.cxx @@ -0,0 +1,15 @@ +--- bridges/source/cpp_uno/gcc3_freebsd_intel/except.cxx.orig 2019-09-17 22:55:10 UTC ++++ bridges/source/cpp_uno/gcc3_freebsd_intel/except.cxx +@@ -220,6 +220,12 @@ static void deleteException( void * pExc ) + static void deleteException( void * pExc ) + { + __cxa_exception const * header = ((__cxa_exception const *)pExc - 1); ++ if (header->exceptionDestructor != &deleteException) { ++ // _Unwind_Exception was made __aligned__ which ++ // increased its size by 12 bytes ++ header = reinterpret_cast<__cxa_exception const *>( ++ reinterpret_cast( header ) - 12 ); ++ } + typelib_TypeDescription * pTD = 0; + OUString unoName( toUNOname( header->exceptionType->name() ) ); + ::typelib_typedescription_getByName( &pTD, unoName.pData ); diff --git a/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__intel_uno2cpp.cxx b/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__intel_uno2cpp.cxx new file mode 100644 index 000000000000..2a336ec5fbc5 --- /dev/null +++ b/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__intel_uno2cpp.cxx @@ -0,0 +1,49 @@ +--- bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx.orig 2019-09-17 22:55:10 UTC ++++ bridges/source/cpp_uno/gcc3_freebsd_intel/uno2cpp.cxx +@@ -44,9 +44,12 @@ using namespace ::com::sun::star::uno; + using namespace ::rtl; + using namespace ::com::sun::star::uno; + #ifdef __GLIBCXX__ ++using CPPU_CURRENT_NAMESPACE::__cxa_exception; + using CPPU_CURRENT_NAMESPACE::__cxa_get_globals; + #else +-using __cxxabiv1::__cxa_get_globals; ++using __cxxabiv1::__cxa_exception; ++using __cxxabiv1::__cxa_current_primary_exception; ++using __cxxabiv1::__cxa_decrement_exception_refcount; + #endif + + namespace +@@ -313,8 +316,31 @@ static void cpp_call( + } + catch (...) + { ++ __cxa_exception *header; ++#ifdef __GLIBCXX__ ++ header = __cxa_get_globals()->caughtExceptions; ++#else ++ header = reinterpret_cast<__cxa_exception *>( __cxa_current_primary_exception() ); ++ if (header) { ++ __cxa_decrement_exception_refcount( header ); ++ header--; ++ uint64_t exc_class = header->unwindHeader.exception_class ++ & 0xffffffffffffff00; ++ if (exc_class != /* "GNUCC++" */ 0x474e5543432b2b00) { ++ // _Unwind_Exception was made __aligned__ which ++ // increased its size by 12 bytes. ++ header = reinterpret_cast<__cxa_exception *>( ++ reinterpret_cast( header ) - 12 ); ++ exc_class = header->unwindHeader.exception_class ++ & 0xffffffffffffff00; ++ if (exc_class != /* "GNUCC++" */ 0x474e5543432b2b00) { ++ header = nullptr; ++ } ++ } ++ } ++#endif + // fill uno exception +- CPPU_CURRENT_NAMESPACE::fillUnoException( __cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() ); ++ CPPU_CURRENT_NAMESPACE::fillUnoException( header, *ppUnoExc, pThis->getBridge()->getCpp2Uno() ); + + // temporary params + for ( ; nTempIndizes--; ) diff --git a/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__powerpc64_share.hxx b/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__powerpc64_share.hxx new file mode 100644 index 000000000000..acba73004356 --- /dev/null +++ b/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__powerpc64_share.hxx @@ -0,0 +1,43 @@ +--- bridges/source/cpp_uno/gcc3_freebsd_powerpc64/share.hxx.orig 2019-09-17 22:55:10 UTC ++++ bridges/source/cpp_uno/gcc3_freebsd_powerpc64/share.hxx +@@ -35,6 +35,7 @@ namespace CPPU_CURRENT_NAMESPACE + + // ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h + ++#ifdef __GLIBCXX__ + struct _Unwind_Exception + { + unsigned exception_class __attribute__((__mode__(__DI__))); +@@ -63,18 +64,21 @@ struct __cxa_exception + + _Unwind_Exception unwindHeader; + }; ++#endif /* __GLIBCXX__ */ + + extern "C" void *__cxa_allocate_exception( + std::size_t thrown_size ) throw(); + extern "C" void __cxa_throw ( + void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn)); + ++#ifdef __GLIBCXX__ + struct __cxa_eh_globals + { + __cxa_exception *caughtExceptions; + unsigned int uncaughtExceptions; + }; + extern "C" __cxa_eh_globals *__cxa_get_globals () throw(); ++#endif /* __GLIBCXX__ */ + + // ----- + +@@ -82,6 +86,10 @@ void raiseException( + void raiseException( + uno_Any * pUnoExc, uno_Mapping * pUno2Cpp ); + //================================================================================================== ++#ifndef __GLIBCXX__ ++using __cxxabiv1:: __cxa_exception; ++#endif /* __GLIBCXX__ */ ++ + void fillUnoException( + __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno ); + } diff --git a/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__powerpc64_uno2cpp.cxx b/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__powerpc64_uno2cpp.cxx new file mode 100644 index 000000000000..205333ecb78c --- /dev/null +++ b/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__powerpc64_uno2cpp.cxx @@ -0,0 +1,38 @@ +--- bridges/source/cpp_uno/gcc3_freebsd_powerpc64/uno2cpp.cxx.orig 2019-09-17 22:55:10 UTC ++++ bridges/source/cpp_uno/gcc3_freebsd_powerpc64/uno2cpp.cxx +@@ -42,6 +42,14 @@ using namespace ::com::sun::star::uno; + + using namespace ::rtl; + using namespace ::com::sun::star::uno; ++#ifdef __GLIBCXX__ ++using CPPU_CURRENT_NAMESPACE::__cxa_exception; ++using CPPU_CURRENT_NAMESPACE::__cxa_get_globals; ++#else ++using __cxxabiv1::__cxa_exception; ++using __cxxabiv1::__cxa_current_primary_exception; ++using __cxxabiv1::__cxa_decrement_exception_refcount; ++#endif + + void MapReturn(long r3, double dret, typelib_TypeClass eTypeClass, void *pRegisterReturn) + { +@@ -448,9 +456,18 @@ static void cpp_call( + } + catch (...) + { ++ __cxa_exception *header; ++#ifdef __GLIBCXX__ ++ header = __cxa_get_globals()->caughtExceptions; ++#else ++ header = reinterpret_cast<__cxa_exception *>( __cxa_current_primary_exception() ); ++ if (header) { ++ __cxa_decrement_exception_refcount( header ); ++ header--; ++ } ++#endif + // fill uno exception +- fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions, +- *ppUnoExc, pThis->getBridge()->getCpp2Uno() ); ++ CPPU_CURRENT_NAMESPACE::fillUnoException( header, *ppUnoExc, pThis->getBridge()->getCpp2Uno() ); + + // temporary params + for ( ; nTempIndizes--; ) diff --git a/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__x86-64_uno2cpp.cxx b/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__x86-64_uno2cpp.cxx new file mode 100644 index 000000000000..1a501426d669 --- /dev/null +++ b/editors/openoffice-devel/files/patch-bridges_source_cpp__uno_gcc3__freebsd__x86-64_uno2cpp.cxx @@ -0,0 +1,36 @@ +--- bridges/source/cpp_uno/gcc3_freebsd_x86-64/uno2cpp.cxx.orig 2019-09-17 22:55:10 UTC ++++ bridges/source/cpp_uno/gcc3_freebsd_x86-64/uno2cpp.cxx +@@ -50,9 +50,12 @@ using namespace ::com::sun::star::uno; + using namespace ::rtl; + using namespace ::com::sun::star::uno; + #ifdef __GLIBCXX__ ++using CPPU_CURRENT_NAMESPACE::__cxa_exception; + using CPPU_CURRENT_NAMESPACE::__cxa_get_globals; + #else +-using __cxxabiv1::__cxa_get_globals; ++using __cxxabiv1::__cxa_exception; ++using __cxxabiv1::__cxa_current_primary_exception; ++using __cxxabiv1::__cxa_decrement_exception_refcount; + #endif + + //================================================================================================== +@@ -452,8 +455,18 @@ static void cpp_call( + } + catch (...) + { ++ __cxa_exception *header; ++#ifdef __GLIBCXX__ ++ header = __cxa_get_globals()->caughtExceptions; ++#else ++ header = reinterpret_cast<__cxa_exception *>( __cxa_current_primary_exception() ); ++ if (header) { ++ __cxa_decrement_exception_refcount( header ); ++ header--; ++ } ++#endif + // fill uno exception +- CPPU_CURRENT_NAMESPACE::fillUnoException( __cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() ); ++ CPPU_CURRENT_NAMESPACE::fillUnoException( header, *ppUnoExc, pThis->getBridge()->getCpp2Uno() ); + + // temporary params + for ( ; nTempIndizes--; )