Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Feb 2023 23:10:38 +0000
From:      Brooks Davis <brooks@freebsd.org>
To:        Kevin Oberman <rkoberman@gmail.com>
Cc:        "freebsd-emulation@freebsd.org" <emulation@freebsd.org>
Subject:   Re: virtualbon-ose-kmod build fails with 14-CURRENT and llvm15
Message-ID:  <Y/04blSCUsZ3JknV@spindle.one-eyed-alien.net>
In-Reply-To: <CAN6yY1sSD6i85Bc8K409wR4W%2Bperxk-A5OM5KQg8m5yaKfdXxQ@mail.gmail.com>
References:  <CAN6yY1td9cRtj3BzMw-eAHS4HCAv049w3rjOpmjq-fCpmfp2Pw@mail.gmail.com> <Y/z2AGoKZ5gtu0Ks@spindle.one-eyed-alien.net> <CAN6yY1sSD6i85Bc8K409wR4W%2Bperxk-A5OM5KQg8m5yaKfdXxQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Feb 27, 2023 at 02:58:44PM -0800, Kevin Oberman wrote:
> On Mon, Feb 27, 2023 at 10:27 AM Brooks Davis <brooks@freebsd.org> wrote:
>=20
> > On Sun, Feb 26, 2023 at 09:45:34AM -0800, Kevin Oberman wrote:
> > > I updated my system yesterday. I then tried to rebuild
> > virtualbox-ose-kmod.
> > > This fails under llvm15. The same source code built successfully with
> > > llvm14, so I assume that the code has a problem with 15. I suspect th=
at
> > 15
> > > changed some default and declared this as an error, but may be "fixed"
> > with
> > > the proper build option.
> > >
> > > Here is the command and error that I see:
> > >
> > > cc  -O2 -pipe -fno-strict-aliasing -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT=
_R0
> > > -DIN_SUP_R0 -DSUPDRV_WITH_RELEASE_LOGGER -DVBOX -DRT_WITH_VBOX -w
> > > -DVBOX_WITH_HARDENING -DVBOX_WITH_64_BITS_GUESTS -DRT_ARCH_AMD64  -We=
rror
> > > -D_KERNEL -DKLD_MODULE -nostdinc  -Iinclude -I. -Ir0drv -include
> > >
> > /usr/ports/emulators/virtualbox-ose-kmod/work/VirtualBox-6.1.36/out/fre=
ebsd.amd64/release/bin/src/vboxdrv/opt_global.h
> > > -I. -I/usr/src/sys -I/usr/src/sys/contrib/ck/include -fno-common
> > >  -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer
> > > -fdebug-prefix-map=3D./machine=3D/usr/src/sys/amd64/include
> > > -fdebug-prefix-map=3D./x86=3D/usr/src/sys/x86/include
> > > -fdebug-prefix-map=3D./i386=3D/usr/src/sys/i386/include     -MD
> > >  -MF.depend.SUPDrv-freebsd.o -MTSUPDrv-freebsd.o -mcmodel=3Dkernel
> > > -mno-red-zone -mno-mmx -mno-sse -msoft-float
> > >  -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-prote=
ctor
> > > -Wall -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes
> > > -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign
> > > -D__printf__=3D__freebsd_kprintf__ -Wmissing-include-dirs
> > > -fdiagnostics-show-option -Wno-unknown-pragmas
> > > -Wno-error=3Dtautological-compare -Wno-error=3Dempty-body
> > > -Wno-error=3Dparentheses-equality -Wno-error=3Dunused-function
> > > -Wno-error=3Dpointer-sign -Wno-error=3Dshift-negative-value
> > > -Wno-address-of-packed-member -Wno-error=3Darray-parameter
> > > -Wno-error=3Ddeprecated-non-prototype -Wno-error=3Dstrict-prototypes
> > > -Wno-error=3Dunused-but-set-variable -Wno-format-zero-length   -mno-a=
es
> > > -mno-avx  -std=3Diso9899:1999 -c
> > >
> > /usr/ports/emulators/virtualbox-ose-kmod/work/VirtualBox-6.1.36/out/fre=
ebsd.amd64/release/bin/src/vboxdrv/freebsd/SUPDrv-freebsd.c
> > > -o SUPDrv-freebsd.o
> > >
> > /usr/ports/emulators/virtualbox-ose-kmod/work/VirtualBox-6.1.36/out/fre=
ebsd.amd64/release/bin/src/vboxdrv/freebsd/SUPDrv-freebsd.c:433:50:
> > > error: incompatible pointer to integer conversion passing 'void *' to
> > > parameter of type 'RTR3PTR' (aka 'unsigned long') [-Wint-conversion]
> > >         if (RT_FAILURE(RTR0MemUserCopyFrom(&Hdr, pvUser, sizeof(Hdr))=
))
> > >                                                  ^~~~~~
> > > include/iprt/errcore.h:99:58: note: expanded from macro 'RT_FAILURE'
> > >
> > > Any help appreciated. I really need virtualbox. I think I may force i=
t to
> > > build with llvm14, but I's prefer a fix to build with llvm15.
> >
> > Assuming the code works in practice, it should just be a matter of
> > adding a cast (void *)(uintptr_t)pvUser.
> >
> > -- Brooks
> >
>=20
> Thanks to both of you. Fixing the code seems preferable to patching and
> rebuilding llvm15, so I tried, but it made no difference, other than the
> cast, but I may have truncated the error message too soon. Here is the
> complete message after the patch:
> /usr/ports/emulators/virtualbox-ose-kmod/work/VirtualBox-6.1.36/out/freeb=
sd.amd64/release/bin/src/vboxdrv/freebsd/SUPDrv-freebsd.c:433:50:
> error: incompatible pointer to integer conversion passing 'void *' to
> parameter of type 'RTR3PTR' (aka 'unsigned long') [-Wint-conversion]
>         if (RT_FAILURE(RTR0MemUserCopyFrom(&Hdr, (void *)(uintptr_t)pvUse=
r,
> sizeof(Hdr))))
>                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~
> include/iprt/errcore.h:99:58: note: expanded from macro 'RT_FAILURE'
> #define RT_FAILURE(rc)      ( RT_UNLIKELY(!RT_SUCCESS_NP(rc)) )
>                                                          ^~
> include/iprt/errcore.h:80:38: note: expanded from macro 'RT_SUCCESS_NP'
> # define RT_SUCCESS_NP(rc)   ( (int)(rc) >=3D VINF_SUCCESS )
>                                      ^~
> include/iprt/cdefs.h:1826:53: note: expanded from macro 'RT_UNLIKELY'
> #  define RT_UNLIKELY(expr)     __builtin_expect(!!(expr), 0)
>                                                     ^~~~
> include/iprt/mem.h:756:56: note: passing argument to parameter 'R3PtrSrc'
> here
> RTR0DECL(int) RTR0MemUserCopyFrom(void *pvDst, RTR3PTR R3PtrSrc, size_t c=
b);
>                                                        ^
>=20
> Please understand that I am not a C programmer.  Looking at this leaves me
> a bit lost.

Sorry, I misread the error message and lead you astray by suggesting
the opposite of the correct thing.  The correct cast is probably
(uintptr_t)pvUser.

-- Brooks



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Y/04blSCUsZ3JknV>