Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Virtualization
virtualbox
cxx17.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File cxx17.patch of Package virtualbox
From: Jan Engelhardt <ej@inai.de> Date: 2024-09-20 22:48:58.758026690 +0200 The code uses <filesystem>, so ensure we always use -std=c++17 at the very least. Prior to C++17, noexcept cannot be part of a type alias, and so is not part of the function signature, and so is not part of the ABI. In C++17, noexcept is significant. There is a compile error because the FNCONSUMER alias as defined in a .h file does not match the function body in a .cpp file. The def file is also wrong, but no one at virtualbox.org noticed for some reason, even though the def mismatch also caused a link/build failure in its own right. To resolve the mismatch between .cpp/.h, the function signature is augmented by RT_NOEXCEPT, based upon the function head being the authoritative source as to whether something was meant to be noexcept or not. In turn, adding RT_NOEXCEPT causes a change in the ABI of VBoxRT.so. The closed-source VirtualBox extension pack does not expect that and is unable to load [LD_BIND_NOW=1]. To resolve _that_, we add extra symbol aliases. --- Config.kmk | 3 +++ include/iprt/cpp/restclient.h | 12 ++++++++++-- src/VBox/Runtime/VBox/VBoxRTImp-gcc.def | 2 +- src/VBox/Runtime/common/rest/rest-binary.cpp | 9 +++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) Index: VirtualBox-7.1.0/Config.kmk =================================================================== --- VirtualBox-7.1.0.orig/Config.kmk +++ VirtualBox-7.1.0/Config.kmk @@ -3093,6 +3093,9 @@ ifeq ($(KBUILD_TARGET),darwin) endif endif endif +ifndef VBOX_GCC_std + VBOX_GCC_std := -std=c++17 +endif # # Check for incompatible rpath combinations. Index: VirtualBox-7.1.0/include/iprt/cpp/restclient.h =================================================================== --- VirtualBox-7.1.0.orig/include/iprt/cpp/restclient.h +++ VirtualBox-7.1.0/include/iprt/cpp/restclient.h @@ -130,7 +130,11 @@ public: * is the sum of the previously returned @a *pcbActual values. */ typedef DECLCALLBACKTYPE(int, FNPRODUCER,(RTCRestBinaryParameter *a_pThis, void *a_pvDst, size_t a_cbDst, - uint64_t a_offContent, size_t *a_pcbActual)) /*RT_NOEXCEPT*/; + uint64_t a_offContent, size_t *a_pcbActual)) +#if defined(__cplusplus) && __cplusplus >= 201700L +RT_NOEXCEPT +#endif +; /** Pointer to a byte producer callback. */ typedef FNPRODUCER *PFNPRODUCER; @@ -268,7 +272,11 @@ public: * is the sum of the previous @a a_cbSrc values. */ typedef DECLCALLBACKTYPE(int, FNCONSUMER,(RTCRestBinaryResponse *a_pThis, const void *a_pvSrc, size_t a_cbSrc, - uint32_t a_uHttpStatus, uint64_t a_offContent, uint64_t a_cbContent)) /*RT_NOEXCEPT*/; + uint32_t a_uHttpStatus, uint64_t a_offContent, uint64_t a_cbContent)) +#if defined(__cplusplus) && __cplusplus >= 201700L +RT_NOEXCEPT +#endif +; /** Pointer to a byte consumer callback. */ typedef FNCONSUMER *PFNCONSUMER; Index: VirtualBox-7.1.0/src/VBox/Runtime/VBox/VBoxRTImp-gcc.def =================================================================== --- VirtualBox-7.1.0.orig/src/VBox/Runtime/VBox/VBoxRTImp-gcc.def +++ VirtualBox-7.1.0/src/VBox/Runtime/VBox/VBoxRTImp-gcc.def @@ -379,7 +379,7 @@ EXPORTS _ZN22RTCRestBinaryParameter16xmitHttpCallbackEP14RTHTTPINTERNALPvmyPmS2_ ; int64=llong _ZN22RTCRestBinaryParameter19setProducerCallbackEPFiPS_PvmmPmES1_m ; before-noexcept int64=long _ZN22RTCRestBinaryParameter19setProducerCallbackEPFiPS_PvmyPmES1_y ; before-noexcept int64=llong - _ZN22RTCRestBinaryParameter19setProducerCallbackEPDoFiPS_PvmyPmES1_m ; after-noexcept int64=long + _ZN22RTCRestBinaryParameter19setProducerCallbackEPDoFiPS_PvmmPmES1_m ; after-noexcept int64=long _ZN22RTCRestBinaryParameter19setProducerCallbackEPDoFiPS_PvmyPmES1_y ; after-noexcept int64=llong _ZN22RTCRestBinaryParameterC1Ev _ZN22RTCRestBinaryParameterC2Ev Index: VirtualBox-7.1.0/src/VBox/Runtime/common/rest/rest-binary.cpp =================================================================== --- VirtualBox-7.1.0.orig/src/VBox/Runtime/common/rest/rest-binary.cpp +++ VirtualBox-7.1.0/src/VBox/Runtime/common/rest/rest-binary.cpp @@ -706,3 +706,12 @@ void RTCRestBinaryResponse::receiveCompl AssertRC(rc); } +// extpack was built with wrong -std=, add a redirect +extern "C" void DECLEXPORT_CLASS __attribute__((weak, +alias("_ZN21RTCRestBinaryResponse19setConsumerCallbackEPDoFiPS_PKvmjmmEPv"))) // T symbol that exists + _ZN21RTCRestBinaryResponse19setConsumerCallbackEPFiPS_PKvmjmmEPv( // W symbol to make + RTCRestBinaryResponse::PFNCONSUMER, void *); +extern "C" void DECLEXPORT_CLASS __attribute__((weak, +alias("_ZN22RTCRestBinaryParameter19setProducerCallbackEPDoFiPS_PvmmPmES1_m"))) // T + _ZN22RTCRestBinaryParameter19setProducerCallbackEPFiPS_PvmmPmES1_m( // W + RTCRestBinaryParameter::PFNPRODUCER, void *, uint64_t);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor