VirtualBox

Changeset 66125 in vbox


Ignore:
Timestamp:
Mar 16, 2017 2:00:42 PM (8 years ago)
Author:
vboxsync
Message:

bugref:8019: Undefined behaviour sanitiser: add a build option VBOX_WITH_GCC_SANITIZER to enable the gcc undefined behaviour, address, return, bounds, object size, alignment and vptr sanitiser tools.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Config.kmk

    r66070 r66125  
    27752775VBOX_GCC_NON_PEDANTIC_C   ?= -Wno-sign-compare -Werror-implicit-function-declaration
    27762776
     2777VBOX_GCC_SANITIZER_FLAGS = \
     2778  -fsanitize=undefined \
     2779  -fsanitize=address \
     2780  -fsanitize=return \
     2781  -fsanitize=bounds \
     2782  -fsanitize=object-size \
     2783  -fno-sanitize=alignment \
     2784  -fno-sanitize=vptr \
     2785  -fno-common \
     2786  -static-libasan
     2787# The dynamic sanitiser library intercepts dlopen() and breaks RPATH $ORIGIN.
     2788VBOX_GCC_SANITIZER_LDFLAGS = \
     2789  -fsanitize=undefined \
     2790  -fsanitize=address \
     2791  -fsanitize=return \
     2792  -fsanitize=bounds \
     2793  -fsanitize=object-size \
     2794  -fno-sanitize=alignment \
     2795  -fno-sanitize=vptr \
     2796  -fno-common \
     2797  -static-libasan \
     2798  -static-libubsan
     2799VBOX_GCC_SANITIZER_LIBS= # pthread m rt dl
     2800# When the address sanitiser is enabled, shared objects will contain references
     2801# to ASAN symbols.  Linking in libasan causes problems.
     2802VBOX_GCC_NO_UNDEFINED=$(if $(VBOX_WITH_GCC_SANITIZER),,-Wl,--no-undefined)
     2803VBOX_GCC_NO_UNDEFINED_R0=$(if $(VBOX_WITH_GCC_SANITIZER),,-no-undefined)
     2804
    27772805# Disabled Visual C++ warnings, W4:
    27782806#      -wd4065: switch statement contains 'default' but no 'case' labels
     
    44134441TEMPLATE_VBOXR0DRV_INCS                = $(VBOX_HAIKU_SYS_INCS)
    44144442#TODO: sort this out
    4415 TEMPLATE_VBOXR0DRV_LDFLAGS             = -shared -no-undefined -dc -dy -lroot -rpath-link /boot/system/develop/lib/x86 --no-add-needed /boot/system/develop/lib/_KERNEL_ --no-add-needed /boot/system/develop/lib/haiku_version_glue.o
     4443TEMPLATE_VBOXR0DRV_LDFLAGS             = -shared $(VBOX_GCC_NO_UNDEFINED_R0) -dc -dy -lroot -rpath-link /boot/system/develop/lib/x86 --no-add-needed /boot/system/develop/lib/_KERNEL_ --no-add-needed /boot/system/develop/lib/haiku_version_glue.o
    44164444TEMPLATE_VBOXR0DRV_CFLAGS              = -fno-PIC \
    44174445        $(VBOX_GCC_WARN) -Wstrict-prototypes $(VBOX_GCC_Wno-pointer-sign) -Wno-sign-compare \
     
    45514579TEMPLATE_VBOXR3EXE_CXXFLAGS.sparc64    = -m64
    45524580TEMPLATE_VBOXR3EXE_CXXFLAGS.kprofile   = -finstrument-functions
     4581TEMPLATE_VBOXR3EXE_CXXFLAGS.debug      = $(if $(VBOX_WITH_GCC_SANITIZER),$(VBOX_GCC_SANITIZER_FLAGS),)
    45534582TEMPLATE_VBOXR3EXE_CFLAGS              = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C)   $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
    45544583 ifdef VBOX_WITH_NO_GCC_WARNING_POLICY
     
    45774606TEMPLATE_VBOXR3EXE_LDFLAGS.linux       = -Wl,-z,noexecstack,-z,relro $(VBOX_LD_as_needed)
    45784607TEMPLATE_VBOXR3EXE_LDFLAGS.solaris     = -Wl,-z,ignore # same as VBOX_LD_as_needed
     4608TEMPLATE_VBOXR3EXE_LDFLAGS.debug       = $(if $(VBOX_WITH_GCC_SANITIZER),$(VBOX_GCC_SANITIZER_LDFLAGS),)
     4609TEMPLATE_VBOXR3EXE_LIBS.debug          = $(if $(VBOX_WITH_GCC_SANITIZER),$(VBOX_GCC_SANITIZER_LIBS),)
    45794610
    45804611 ifeq ($(KBUILD_TARGET),linux)
     
    52445275  TEMPLATE_VBoxNoCrtGccLib_LDFLAGS         = -nostdlib
    52455276  ifn1of ($(KBUILD_TARGET), os2 darwin solaris)
    5246    TEMPLATE_VBoxNoCrtGccLib_LDFLAGS       += -Wl,--no-undefined
     5277   TEMPLATE_VBoxNoCrtGccLib_LDFLAGS       += $(VBOX_GCC_NO_UNDEFINED)
    52475278  endif
    52485279 endif # x86
     
    53575388TEMPLATE_VBOXMAINEXE_CXXFLAGS.amd64      = -m64
    53585389TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile   = -finstrument-functions
     5390TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug      = $(if $(VBOX_WITH_GCC_SANITIZER),$(VBOX_GCC_SANITIZER_FLAGS),)
    53595391TEMPLATE_VBOXMAINEXE_CFLAGS              = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) \
    53605392        $(VBOX_GCC_OPT) $(VBOX_GCC_FP) -fno-strict-aliasing $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
     
    53655397TEMPLATE_VBOXMAINEXE_CFLAGS.amd64        = -m64
    53665398TEMPLATE_VBOXMAINEXE_CFLAGS.kprofile     = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.kprofile)
     5399TEMPLATE_VBOXMAINEXE_CFLAGS.debug        = $(TEMPLATE_VBOXMAINEXE_CXXFLAGS.debug)
    53675400TEMPLATE_VBOXMAINEXE_OBJCFLAGS           = $(TEMPLATE_VBOXMAINEXE_CFLAGS)
    53685401TEMPLATE_VBOXMAINEXE_OBJCFLAGS.x86       = $(TEMPLATE_VBOXMAINEXE_CFLAGS.x86)
     
    53755408TEMPLATE_VBOXMAINEXE_LDFLAGS.x86         = -m32
    53765409TEMPLATE_VBOXMAINEXE_LDFLAGS.amd64       = -m64
     5410TEMPLATE_VBOXMAINEXE_LDFLAGS.debug       = $(if $(VBOX_WITH_GCC_SANITIZER),$(VBOX_GCC_SANITIZER_LDFLAGS),)
     5411TEMPLATE_VBOXMAINEXE_LIBS.debug          = $(if $(VBOX_WITH_GCC_SANITIZER),$(VBOX_GCC_SANITIZER_LIBS),)
    53775412 ifeq ($(KBUILD_TARGET),linux)
    53785413TEMPLATE_VBOXMAINEXE_LIBS                = pthread m rt $(LIB_RUNTIME) dl
     
    59075942  TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.amd64 = -m64
    59085943  TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.linux = -pthread
     5944  TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.debug = $(if $(VBOX_WITH_GCC_SANITIZER),$(VBOX_GCC_SANITIZER_FLAGS),)
    59095945  TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS = -g $(VBOX_GCC_pipe) $(VBOX_GCC_PEDANTIC_C) -fno-exceptions $(VBOX_GCC_IPRT_FMT_CHECK)
    59105946  TEMPLATE_VBOXQTGUIEXE_OBJCFLAGS.x86 = $(TEMPLATE_VBOXQTGUIEXE_CXXFLAGS.x86)
     
    59205956  TEMPLATE_VBOXQTGUIEXE_LDFLAGS.x86 = -m32
    59215957  TEMPLATE_VBOXQTGUIEXE_LDFLAGS.amd64 = -m64
     5958  TEMPLATE_VBOXQTGUIEXE_LDFLAGS.debug = $(if $(VBOX_WITH_GCC_SANITIZER),$(VBOX_GCC_SANITIZER_LDFLAGS),)
     5959  TEMPLATE_VBOXQTGUIEXE_LIBS.debug    = $(if $(VBOX_WITH_GCC_SANITIZER),$(VBOX_GCC_SANITIZER_LIBS),)
    59225960  TEMPLATE_VBOXQTGUIEXE_LIBS = \
    59235961        $(VBOX_LIBS_QT) \
     
    63166354 TEMPLATE_VBOXGUESTR3EXE_TOOL    := $(subst GXX,GCC,$(TEMPLATE_VBOXR3EXE_TOOL))
    63176355 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) -fno-exceptions
     6356 # Do not inherit sanitizer flags from VBOXR3EXE in guest executables.  Deal with them separately.
     6357 TEMPLATE_VBOXGUESTR3EXE_CXXFLAGS.debug = $(if $(VBOX_WITH_GCC_SANITIZER),$(NO_SUCH_VARIABLE),)
     6358 TEMPLATE_VBOXGUESTR3EXE_CFLAGS.debug = $(if $(VBOX_WITH_GCC_SANITIZER),$(NO_SUCH_VARIABLE),)
    63186359 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux))
     6360 TEMPLATE_VBOXGUESTR3EXE_LDFLAGS.debug = $(if $(VBOX_WITH_GCC_SANITIZER),$(NO_SUCH_VARIABLE),)
    63196361 ifdef VBOX_WITH_COMPATIBLE_LINUX_GUEST_PACKAGE
    63206362  ifeq ($(KBUILD_TARGET_ARCH),x86)
  • trunk/src/VBox/Devices/Makefile.kmk

    r65977 r66125  
    104104 endif
    105105
    106  VBoxDDU_LDFLAGS.linux    = -Wl,--no-undefined
     106 VBoxDDU_LDFLAGS.linux    = $(VBOX_GCC_NO_UNDEFINED)
    107107 $(call VBOX_SET_VER_INFO_DLL,VBoxDDU,VirtualBox VMM Devices and Drivers Utilities)
    108108
     
    221221        -framework DiskArbitration \
    222222        -framework SystemConfiguration
    223  VBoxDD_LDFLAGS.linux    = -Wl,--no-undefined
     223 VBoxDD_LDFLAGS.linux    = $(VBOX_GCC_NO_UNDEFINED)
    224224
    225225 # --- Tracing bits. ---
     
    10651065 VBoxDD2_LIBS.darwin    += $(LIB_REM)
    10661066 VBoxDD2_LDFLAGS.darwin  = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxDD2.dylib
    1067  VBoxDD2_LDFLAGS.linux   = -Wl,--no-undefined
     1067 VBoxDD2_LDFLAGS.linux   = $(VBOX_GCC_NO_UNDEFINED)
    10681068
    10691069 $(call VBOX_SET_VER_INFO_DLL,VBoxDD2,VirtualBox VMM Devices and Drivers 2) # (last!)
  • trunk/src/VBox/Storage/Makefile.kmk

    r63976 r66125  
    5858  DLLS += VDPluginCrypt
    5959  VDPluginCrypt_TEMPLATE      = VBoxR3ExtPackPuelWithOpenSsl
    60   VDPluginCrypt_LDFLAGS.linux = -Wl,--no-undefined
     60  VDPluginCrypt_LDFLAGS.linux = $(VBOX_GCC_NO_UNDEFINED)
    6161
    6262  VDPluginCrypt_SOURCES  = \
  • trunk/src/VBox/VMM/Makefile.kmk

    r65989 r66125  
    314314
    315315VBoxVMM_LIBS.win = $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib
    316 VBoxVMM_LDFLAGS.linux = -Wl,--no-undefined
     316VBoxVMM_LDFLAGS.linux = $(VBOX_GCC_NO_UNDEFINED)
    317317VBoxVMM_LDFLAGS.darwin = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxVMM.dylib
    318318VBoxVMM_LDFLAGS.solaris = -mimpure-text
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy