From fa4643bc2e4c0971aba99c4f1d56ceca908d77261baf95c6a1ca31dbf6bf7f13 Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Tue, 1 Oct 2024 23:42:22 +0000 Subject: [PATCH] [info=9a0c938a8f191766a80b02b1ead5a8e2090c3041f8478d34302cb0228225e728] OBS-URL: https://build.opensuse.org/package/show/Virtualization/virtualbox?expand=0&rev=750 --- _scmsync.obsinfo | 4 ++-- build.specials.obscpio | 2 +- cxx17.patch | 53 ++++++++++++++++++++++++++++++++++-------- virtualbox.changes | 6 +++++ 4 files changed, 52 insertions(+), 13 deletions(-) diff --git a/_scmsync.obsinfo b/_scmsync.obsinfo index 8861618..6f9f7ef 100644 --- a/_scmsync.obsinfo +++ b/_scmsync.obsinfo @@ -1,4 +1,4 @@ -mtime: 1727611249 -commit: e025fac446ecbef0842cc722f451380f4d249ee76f5dae1a384d8d7c7f784449 +mtime: 1727826113 +commit: 9a0c938a8f191766a80b02b1ead5a8e2090c3041f8478d34302cb0228225e728 url: https://src.opensuse.org/jengelh/virtualbox revision: master diff --git a/build.specials.obscpio b/build.specials.obscpio index 59a0cf6..e508ffc 100644 --- a/build.specials.obscpio +++ b/build.specials.obscpio @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b2d0fb674ff92328cdf555b27d9cb87d2494564e48c473cbd34e7e256528648 +oid sha256:ae1d16b98d6e8d40d372ac0d52305fdb37d0175e09483ec1eb427a4fce439941 size 256 diff --git a/cxx17.patch b/cxx17.patch index ba0eafe..ad13122 100644 --- a/cxx17.patch +++ b/cxx17.patch @@ -1,20 +1,36 @@ From: Jan Engelhardt Date: 2024-09-20 22:48:58.758026690 +0200 -The code uses , so ensure we always use -std=c++17 at the very least. +The code uses , 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 noexcept is not part of the -function signature. So it was ok that FNCONSUMER *didn't* match the function definition. +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 part of the signature, so its absence/presence is significant. +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. -The def file is also wrong, but no one at virtualbox.org noticed for some reason even -though it also caused a link/build failure. --- - Config.kmk | 3 +++ - include/iprt/cpp/restclient.h | 12 ++++++++++-- - src/VBox/Runtime/VBox/VBoxRTImp-gcc.def | 2 +- - 3 files changed, 14 insertions(+), 3 deletions(-) + 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 =================================================================== @@ -73,3 +89,20 @@ Index: VirtualBox-7.1.0/src/VBox/Runtime/VBox/VBoxRTImp-gcc.def _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); diff --git a/virtualbox.changes b/virtualbox.changes index 21f4b40..fea7536 100644 --- a/virtualbox.changes +++ b/virtualbox.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Oct 1 23:30:00 UTC 2024 - Jan Engelhardt + +- Edit cxx17.patch to make the Extension Pack work with our + compiler flags and RT_NOEXCEPT choices. [boo#1231255] + ------------------------------------------------------------------- Sun Sep 29 12:00:17 UTC 2024 - Jan Engelhardt