[vbox-dev] Virtualbox build failure with gcc 5-20150205 [partial PATCH included]

Gianfranco Costamagna costamagnagianfranco at yahoo.it
Sat Feb 14 18:25:35 GMT 2015


Hi virtualbox developers,


I'm sending you a patch to make virtualbox "build" against gcc-5
(upcoming release, not yet stable.)

As usual my work has to be considered MIT licensed.

I'm not quite confortable with the patch, but I'm happy to share it with you
(I don't attach a file because as said I'm not quite confortable)


1) usual configure changes (don't know the gcc upper bound)


--- a/configure
+++ b/configure
@@ -420,9 +420,9 @@ check_gcc()
elif [ $cc_maj -lt 3 \
-o \( $cc_maj -eq 3 -a $cc_min -lt 2 \) \
-o \( $cc_maj -eq 4 -a $cc_min -lt 1 -a "$OS" != "darwin" \) \
-             -o \( $cc_maj -eq 4 -a $cc_min -gt 9 \) \
-             -o $cc_maj -gt 4 ]; then
-        log_failure "gcc version $cc_ver found, expected gcc 3.x with x>1 or gcc 4.x with 0<x<10"
+             -o \( $cc_maj -eq 5 -a $cc_min -gt 9 \) \
+             -o $cc_maj -gt 5 ]; then
+        log_failure "gcc version $cc_ver found, expected gcc 3.x with x>1 or gcc 5.x with 0<x<10"
fail really
else
log_success "found version $cc_ver"



2) three changes because gcc doesn't exactly know how to handle parenthesis
(not gcc-5 specific, I guess it is spotted because of some "Wparenthesis" build flag that gcc-5 defaults to true)

--- a/src/VBox/Runtime/common/asn1/asn1-ut-bitstring.cpp
+++ b/src/VBox/Runtime/common/asn1/asn1-ut-bitstring.cpp
@@ -77,7 +77,7 @@ static DECLCALLBACK(int) rtAsn1BitStringEncodeCompare(const void *pvBuf, size_t
{
RTASN1BITSTRINGWRITERCTX *pCtx = (RTASN1BITSTRINGWRITERCTX *)pvUser;
AssertReturn(cbToWrite <= pCtx->cbBuf - pCtx->offBuf, VERR_BUFFER_OVERFLOW);
-    if (!memcmp(&pCtx->pbBuf[pCtx->offBuf], pvBuf, cbToWrite) != 0)
+    if (!memcmp(&pCtx->pbBuf[pCtx->offBuf], pvBuf, cbToWrite))
return VERR_NOT_EQUAL;
pCtx->offBuf += (uint32_t)cbToWrite;
return VINF_SUCCESS;


--- a/src/VBox/Runtime/common/asn1/asn1-ut-octetstring.cpp
+++ b/src/VBox/Runtime/common/asn1/asn1-ut-octetstring.cpp
@@ -77,7 +77,7 @@ static DECLCALLBACK(int) rtAsn1OctetStringEncodeCompare(const void *pvBuf, size_
{
RTASN1OCTETSTRINGWRITERCTX *pCtx = (RTASN1OCTETSTRINGWRITERCTX *)pvUser;
AssertReturn(cbToWrite <= pCtx->cbBuf - pCtx->offBuf, VERR_BUFFER_OVERFLOW);
-    if (!memcmp(&pCtx->pbBuf[pCtx->offBuf], pvBuf, cbToWrite) != 0)
+    if (!memcmp(&pCtx->pbBuf[pCtx->offBuf], pvBuf, cbToWrite))
return VERR_NOT_EQUAL;
pCtx->offBuf += (uint32_t)cbToWrite;
return VINF_SUCCESS;


--- a/src/VBox/Runtime/common/zip/tarvfs.cpp
+++ b/src/VBox/Runtime/common/zip/tarvfs.cpp
@@ -366,7 +366,7 @@ static int rtZipTarHdrValidate(PCRTZIPTARHDR pTar, PRTZIPTARTYPE penmType)
{
case RTZIPTARTYPE_POSIX:
if (   !RT_C_IS_ALNUM(pTar->Common.typeflag)
-                && !pTar->Common.typeflag == '\0')
+                && pTar->Common.typeflag != '\0') (maybe we can even remove the !='\0)
return VERR_TAR_UNKNOWN_TYPE_FLAG;
break;


3) a build failure that goes away without the "-O" flag, but needs to be fixed :)
(I do not have time/knowledge/resources to properly fix this)

root at Unimatrix04:/virtualbox-4.3.22-dfsg# g++ -c -g -pipe -ansi -Wall -Wno-unused -Wno-non-virtual-dtor -Wno-invalid-offsetof -Wno-sign-compare -Wno-unused -Wno-ctor-dtor-privacy -fvisibility-inlines-hidden -fvisibility=hidden -DVBOX_HAVE_VISIBILITY_HIDDEN -DRT_USE_VISIBILITY_DEFAULT -fdiagnostics-show-option -Wno-delete-non-virtual-dtor -fPIC -O -pthread -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/build -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/ds -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/io -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/base -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/components -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/threads -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/proxy/src -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/reflect/xptcall/src -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/ipc/ipcd/client/src -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/ipc/ipcd/shared/src -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/ipc/ipcd/extensions/lock/src -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/ipc/ipcd/extensions/transmngr/src -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/ipc/ipcd/extensions/transmngr/common -I/virtualbox-4.3.22-dfsg/out/bin/sdk/bindings/xpcom/include -I/virtualbox-4.3.22-dfsg/out/bin/sdk/bindings/xpcom/include/nsprpub -I/virtualbox-4.3.22-dfsg/out/bin/sdk/bindings/xpcom/include/string -I/virtualbox-4.3.22-dfsg/out/bin/sdk/bindings/xpcom/include/xpcom -I/virtualbox-4.3.22-dfsg/out/bin/sdk/bindings/xpcom/include/ipcd -I/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4 -I/virtualbox-4.3.22-dfsg/out/obj/VBox-xpcom-xptcall/dtrace -I/virtualbox-4.3.22-dfsg/include -I/virtualbox-4.3.22-dfsg/out -DVBOX -DVBOX_OSE -DVBOX_WITH_64_BITS_GUESTS -DVBOX_WITH_DEBUGGER -DRT_OS_LINUX -D_FILE_OFFSET_BITS=64 -DRT_ARCH_AMD64 -D__AMD64__ -DVBOX_WITH_HARDENING -DRTPATH_APP_PRIVATE=\"/usr/share/virtualbox\" -DRTPATH_APP_PRIVATE_ARCH=\"/usr/lib/virtualbox\" -DRTPATH_SHARED_LIBS=\"/usr/lib/virtualbox\" -DRTPATH_APP_DOCS=\"/usr/share/doc/virtualbox\" -DMOZILLA_CLIENT=1 -DNDEBUG=1 -D_IMPL_NS_COM -DXPCOM_DLL_BASE=\"VBoxXPCOM\" -DMOZ_DLL_SUFFIX=\".so\" -DIN_RING3 -DVBOX_USE_IPRT_IN_XPCOM -DVBOX_WITH_XPCOM_NAMESPACE_CLEANUP -DMOZ_PRESERVE_PIC -D_IMPL_NS_COM -D_IMPL_NS_BASE -DEXPORT_XPTC_API -DOSTYPE=\"Linux2.6\" -DOSARCH=\"Linux\" -DXP_UNIX=1 -D_GNU_SOURCE -DHAVE_VISIBILITY_ATTRIBUTE=1 -DHAVE_VA_LIST_AS_ARRAY -DHAVE_VA_COPY -DVA_COPY\(a\,b\)=__builtin_va_copy\(a\,b\) -Wp,-MD,/virtualbox-4.3.22-dfsg/out/obj/VBox-xpcom-xptcall/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_linux.o.dep -Wp,-MT,/virtualbox-4.3.22-dfsg/out/obj/VBox-xpcom-xptcall/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_linux.o -Wp,-MP -o /virtualbox-4.3.22-dfsg/out/obj/VBox-xpcom-xptcall/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_linux.o /virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_linux.cpp
/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_linux.cpp: In function 'nsresult VBoxNsxpXPTC_InvokeByIndex(nsISupports*, PRUint32, PRUint32, nsXPTCVariant*)':
/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_linux.cpp:211:1: error: unable to find a register to spill
}
^
/virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_linux.cpp:211:1: error: this is the insn:
(insn 257 256 258 14 (parallel [
(set (reg:DI 325)
(udiv:DI (reg:DI 323)
(reg:DI 365)))
(set (reg:DI 382 [326])
(umod:DI (reg:DI 323)
(reg:DI 365)))
(clobber (reg:CC 17 flags))
]) /virtualbox-4.3.22-dfsg/src/libs/xpcom18a4/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_x86_64_linux.cpp:147 352 {*udivmoddi4}
(expr_list:REG_UNUSED (reg:DI 382 [326])
(expr_list:REG_DEAD (reg:DI 365)
(expr_list:REG_DEAD (reg:DI 323)
(expr_list:REG_UNUSED (reg:CC 17 flags)
(nil))))))


4) there are two "while (iPage-- > 0)" loops

the second makes an undefined behavior when "IN_RC" is not defined



/virtualbox-4.3.22-dfsg/src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp: In function 'int PGMRCDynMapAssertIntegrity(PVM)':
/virtualbox-4.3.22-dfsg/src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp:1643:9: error: loop exit may only be reached after undefined behavior [-Werror=aggressive-loop-optimizations]
while (iPage-- > 0)
^


Hope this helps, in the following months hopefully gcc-5 will be released!

cheers,

Gianfranco




More information about the vbox-dev mailing list