[Pkg-virtualbox-commits] [virtualbox] 01/03: Imported Upstream version 5.0.0-dfsg
Gianfranco Costamagna
locutusofborg-guest at moszumanska.debian.org
Sat Jul 11 18:49:46 UTC 2015
This is an automated email from the git hooks/post-receive script.
locutusofborg-guest pushed a commit to branch experimental
in repository virtualbox.
commit 94a53a2850b92f92b46fbf7239377c68e784c366
Author: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
Date: Sat Jul 11 20:45:08 2015 +0200
Imported Upstream version 5.0.0-dfsg
---
Config.kmk | 6 +-
doc/manual/en_US/user_AdvancedTopics.xml | 11 +-
doc/manual/en_US/user_GuestAdditions.xml | 2 +-
doc/manual/en_US/user_Installation.xml | 4 +-
doc/manual/en_US/user_VBoxManage.xml | 81 ++-
doc/manual/user_ChangeLogImpl.xml | 128 ++++-
include/VBox/intnet.h | 9 +-
include/VBox/ostypes.h | 2 +
include/VBox/settings.h | 7 +-
include/VBox/sup.h | 2 +
src/VBox/Additions/common/crOpenGL/DD_glc.py | 0
src/VBox/Additions/common/crOpenGL/DD_glh.py | 0
src/VBox/Additions/common/crOpenGL/NULLfuncs.py | 0
src/VBox/Additions/common/crOpenGL/cr_gl.py | 0
src/VBox/Additions/common/crOpenGL/entrypoints.py | 0
.../Additions/common/crOpenGL/feedback/feedback.py | 0
.../common/crOpenGL/feedback/feedback_funcs.py | 0
.../common/crOpenGL/feedback/feedback_state.py | 0
.../common/crOpenGL/feedback/feedbackspu_proto.py | 0
.../Additions/common/crOpenGL/getprocaddress.py | 0
src/VBox/Additions/common/crOpenGL/pack/pack.py | 0
.../common/crOpenGL/pack/packspu_beginend.py | 0
.../common/crOpenGL/pack/packspu_flush.py | 0
.../Additions/common/crOpenGL/pack/packspu_get.py | 0
.../common/crOpenGL/pack/packspu_proto.py | 0
.../common/crOpenGL/passthrough/passthrough.py | 0
src/VBox/Additions/common/crOpenGL/stub_common.py | 0
src/VBox/Additions/common/crOpenGL/tsfuncs.py | 0
.../common/crOpenGL/windows_getprocaddress.py | 0
.../Additions/linux/installer/vboxadd-service.sh | 30 --
src/VBox/Additions/linux/installer/vboxadd-x11.sh | 22 +-
src/VBox/Additions/linux/installer/vboxadd.sh | 29 +-
src/VBox/Additions/x11/vboxvideo/vboxvideo.c | 10 +-
src/VBox/Devices/Audio/DevIchAc97.cpp | 2 +-
src/VBox/Devices/Audio/DevIchHda.cpp | 2 +-
src/VBox/Devices/Audio/DevIchHdaCodec.cpp | 4 +-
src/VBox/Devices/Audio/DevSB16.cpp | 2 +-
.../BaseTools/Source/C/PyEfiCompressor/setup.py | 0
.../Firmware/BaseTools/Source/C/PyUtility/setup.py | 0
.../BaseTools/Source/Python/AutoGen/AutoGen.py | 0
.../BaseTools/Source/Python/AutoGen/BuildEngine.py | 0
.../BaseTools/Source/Python/AutoGen/GenC.py | 0
.../BaseTools/Source/Python/AutoGen/GenDepex.py | 0
.../BaseTools/Source/Python/AutoGen/GenMake.py | 0
.../BaseTools/Source/Python/AutoGen/StrGather.py | 0
.../Source/Python/AutoGen/UniClassObject.py | 0
.../Firmware/BaseTools/Source/Python/BPDG/BPDG.py | 0
.../BaseTools/Source/Python/BPDG/GenVpd.py | 0
.../BaseTools/Source/Python/BPDG/StringTable.py | 0
.../BaseTools/Source/Python/Common/Database.py | 0
.../Source/Python/Common/DecClassObject.py | 0
.../BaseTools/Source/Python/Common/Dictionary.py | 0
.../Source/Python/Common/DscClassObject.py | 0
.../Source/Python/Common/EdkIIWorkspace.py | 0
.../Source/Python/Common/EdkIIWorkspaceBuild.py | 0
.../BaseTools/Source/Python/Common/EdkLogger.py | 0
.../BaseTools/Source/Python/Common/Expression.py | 0
.../Source/Python/Common/FdfClassObject.py | 0
.../Source/Python/Common/InfClassObject.py | 0
.../Source/Python/Common/MigrationUtilities.py | 0
.../BaseTools/Source/Python/Common/Misc.py | 0
.../BaseTools/Source/Python/Common/Parsing.py | 0
.../BaseTools/Source/Python/Common/String.py | 0
.../Source/Python/Common/TargetTxtClassObject.py | 0
.../Source/Python/Common/ToolDefClassObject.py | 0
.../Source/Python/CommonDataClass/ModuleClass.py | 0
.../Source/Python/CommonDataClass/PackageClass.py | 0
.../Source/Python/CommonDataClass/PlatformClass.py | 0
.../Firmware/BaseTools/Source/Python/Ecc/CLexer.py | 0
.../BaseTools/Source/Python/Ecc/CParser.py | 0
.../Firmware/BaseTools/Source/Python/Ecc/Check.py | 0
.../Source/Python/Ecc/CodeFragmentCollector.py | 0
.../BaseTools/Source/Python/Ecc/Configuration.py | 0
.../BaseTools/Source/Python/Ecc/Database.py | 0
.../Firmware/BaseTools/Source/Python/Ecc/Ecc.py | 0
.../BaseTools/Source/Python/Ecc/Exception.py | 0
.../BaseTools/Source/Python/Ecc/FileProfile.py | 0
.../BaseTools/Source/Python/Ecc/MetaDataParser.py | 0
.../Python/Ecc/MetaFileWorkspace/MetaDataTable.py | 0
.../Python/Ecc/MetaFileWorkspace/MetaFileParser.py | 0
.../Python/Ecc/MetaFileWorkspace/MetaFileTable.py | 0
.../BaseTools/Source/Python/Ecc/Xml/__init__.py | 0
.../EFI/Firmware/BaseTools/Source/Python/Ecc/c.py | 0
.../Firmware/BaseTools/Source/Python/Eot/CLexer.py | 0
.../BaseTools/Source/Python/Eot/CParser.py | 0
.../Source/Python/Eot/CodeFragmentCollector.py | 0
.../BaseTools/Source/Python/Eot/Database.py | 0
.../Firmware/BaseTools/Source/Python/Eot/Eot.py | 0
.../BaseTools/Source/Python/Eot/EotGlobalData.py | 0
.../BaseTools/Source/Python/Eot/FileProfile.py | 0
.../BaseTools/Source/Python/Eot/FvImage.py | 0
.../BaseTools/Source/Python/Eot/InfParserLite.py | 0
.../Firmware/BaseTools/Source/Python/Eot/Parser.py | 0
.../EFI/Firmware/BaseTools/Source/Python/Eot/c.py | 0
.../Source/Python/GenFds/AprioriSection.py | 0
.../BaseTools/Source/Python/GenFds/Capsule.py | 0
.../BaseTools/Source/Python/GenFds/CapsuleData.py | 0
.../Source/Python/GenFds/ComponentStatement.py | 0
.../Source/Python/GenFds/CompressSection.py | 0
.../BaseTools/Source/Python/GenFds/DataSection.py | 0
.../BaseTools/Source/Python/GenFds/DepexSection.py | 0
.../BaseTools/Source/Python/GenFds/EfiSection.py | 0
.../Firmware/BaseTools/Source/Python/GenFds/Fd.py | 0
.../BaseTools/Source/Python/GenFds/FdfParser.py | 0
.../Firmware/BaseTools/Source/Python/GenFds/Ffs.py | 0
.../Source/Python/GenFds/FfsFileStatement.py | 0
.../Source/Python/GenFds/FfsInfStatement.py | 0
.../Firmware/BaseTools/Source/Python/GenFds/Fv.py | 0
.../Source/Python/GenFds/FvImageSection.py | 0
.../BaseTools/Source/Python/GenFds/GenFds.py | 0
.../Source/Python/GenFds/GenFdsGlobalVariable.py | 0
.../BaseTools/Source/Python/GenFds/GuidSection.py | 0
.../Source/Python/GenFds/OptRomFileStatement.py | 0
.../Source/Python/GenFds/OptRomInfStatement.py | 0
.../BaseTools/Source/Python/GenFds/OptionRom.py | 0
.../BaseTools/Source/Python/GenFds/Region.py | 0
.../BaseTools/Source/Python/GenFds/Rule.py | 0
.../Source/Python/GenFds/RuleComplexFile.py | 0
.../Source/Python/GenFds/RuleSimpleFile.py | 0
.../BaseTools/Source/Python/GenFds/Section.py | 0
.../BaseTools/Source/Python/GenFds/UiSection.py | 0
.../BaseTools/Source/Python/GenFds/VerSection.py | 0
.../Firmware/BaseTools/Source/Python/GenFds/Vtf.py | 0
.../Python/GenPatchPcdTable/GenPatchPcdTable.py | 0
.../Source/Python/PatchPcdValue/PatchPcdValue.py | 0
.../Source/Python/Table/TableDataModel.py | 0
.../BaseTools/Source/Python/Table/TableDec.py | 0
.../BaseTools/Source/Python/Table/TableDsc.py | 0
.../Source/Python/Table/TableEotReport.py | 0
.../BaseTools/Source/Python/Table/TableFdf.py | 0
.../BaseTools/Source/Python/Table/TableFile.py | 0
.../BaseTools/Source/Python/Table/TableFunction.py | 0
.../Source/Python/Table/TableIdentifier.py | 0
.../BaseTools/Source/Python/Table/TableInf.py | 0
.../BaseTools/Source/Python/Table/TablePcd.py | 0
.../BaseTools/Source/Python/Table/TableQuery.py | 0
.../BaseTools/Source/Python/Table/TableReport.py | 0
.../Source/Python/TargetTool/TargetTool.py | 0
.../Firmware/BaseTools/Source/Python/Trim/Trim.py | 0
.../BaseTools/Source/Python/UPT/BuildVersion.py | 0
.../Source/Python/UPT/Core/DependencyRules.py | 0
.../Python/UPT/Core/DistributionPackageClass.py | 0
.../BaseTools/Source/Python/UPT/Core/IpiDb.py | 0
.../Source/Python/UPT/Core/PackageFile.py | 0
.../BaseTools/Source/Python/UPT/Core/__init__.py | 0
.../Source/Python/UPT/GenMetaFile/GenDecFile.py | 0
.../Source/Python/UPT/GenMetaFile/GenInfFile.py | 0
.../Python/UPT/GenMetaFile/GenMetaFileMisc.py | 0
.../Source/Python/UPT/GenMetaFile/GenXmlFile.py | 0
.../Source/Python/UPT/GenMetaFile/__init__.py | 0
.../BaseTools/Source/Python/UPT/InstallPkg.py | 0
.../Source/Python/UPT/Library/CommentGenerating.py | 0
.../Source/Python/UPT/Library/CommentParsing.py | 0
.../Source/Python/UPT/Library/DataType.py | 0
.../Python/UPT/Library/ExpressionValidate.py | 0
.../Source/Python/UPT/Library/GlobalData.py | 0
.../BaseTools/Source/Python/UPT/Library/Misc.py | 0
.../Source/Python/UPT/Library/ParserValidate.py | 0
.../BaseTools/Source/Python/UPT/Library/Parsing.py | 0
.../BaseTools/Source/Python/UPT/Library/String.py | 0
.../Source/Python/UPT/Library/Xml/XmlRoutines.py | 0
.../Source/Python/UPT/Library/Xml/__init__.py | 0
.../Source/Python/UPT/Library/__init__.py | 0
.../BaseTools/Source/Python/UPT/Logger/Log.py | 0
.../Source/Python/UPT/Logger/StringTable.py | 0
.../BaseTools/Source/Python/UPT/Logger/__init__.py | 0
.../Firmware/BaseTools/Source/Python/UPT/MkPkg.py | 0
.../Source/Python/UPT/Object/POM/CommonObject.py | 0
.../Source/Python/UPT/Object/POM/ModuleObject.py | 0
.../Source/Python/UPT/Object/POM/PackageObject.py | 0
.../Source/Python/UPT/Object/POM/__init__.py | 0
.../Source/Python/UPT/Object/Parser/DecObject.py | 0
.../Python/UPT/Object/Parser/InfBinaryObject.py | 0
.../UPT/Object/Parser/InfBuildOptionObject.py | 0
.../UPT/Object/Parser/InfDefineCommonObject.py | 0
.../Python/UPT/Object/Parser/InfDefineObject.py | 0
.../Python/UPT/Object/Parser/InfDepexObject.py | 0
.../Python/UPT/Object/Parser/InfGuidObject.py | 0
.../UPT/Object/Parser/InfLibraryClassesObject.py | 0
.../Source/Python/UPT/Object/Parser/InfMisc.py | 0
.../Python/UPT/Object/Parser/InfPackagesObject.py | 0
.../Python/UPT/Object/Parser/InfPcdObject.py | 0
.../Python/UPT/Object/Parser/InfPpiObject.py | 0
.../Python/UPT/Object/Parser/InfProtocolObject.py | 0
.../Python/UPT/Object/Parser/InfSoucesObject.py | 0
.../UPT/Object/Parser/InfUserExtensionObject.py | 0
.../Source/Python/UPT/Object/Parser/__init__.py | 0
.../BaseTools/Source/Python/UPT/Object/__init__.py | 0
.../Source/Python/UPT/Parser/DecParser.py | 0
.../Source/Python/UPT/Parser/DecParserMisc.py | 0
.../Source/Python/UPT/Parser/InfAsBuiltProcess.py | 0
.../Python/UPT/Parser/InfBinarySectionParser.py | 0
.../UPT/Parser/InfBuildOptionSectionParser.py | 0
.../Python/UPT/Parser/InfDefineSectionParser.py | 0
.../Python/UPT/Parser/InfDepexSectionParser.py | 0
.../UPT/Parser/InfGuidPpiProtocolSectionParser.py | 0
.../Python/UPT/Parser/InfLibrarySectionParser.py | 0
.../Python/UPT/Parser/InfPackageSectionParser.py | 0
.../Source/Python/UPT/Parser/InfParser.py | 0
.../Source/Python/UPT/Parser/InfParserMisc.py | 0
.../Python/UPT/Parser/InfPcdSectionParser.py | 0
.../Source/Python/UPT/Parser/InfSectionParser.py | 0
.../Python/UPT/Parser/InfSourceSectionParser.py | 0
.../BaseTools/Source/Python/UPT/Parser/__init__.py | 0
.../Python/UPT/PomAdapter/DecPomAlignment.py | 0
.../Python/UPT/PomAdapter/InfPomAlignment.py | 0
.../Python/UPT/PomAdapter/InfPomAlignmentMisc.py | 0
.../Source/Python/UPT/PomAdapter/__init__.py | 0
.../Firmware/BaseTools/Source/Python/UPT/RmPkg.py | 0
.../Firmware/BaseTools/Source/Python/UPT/UPT.py | 0
.../UPT/UnitTest/CommentGeneratingUnitTest.py | 0
.../Python/UPT/UnitTest/CommentParsingUnitTest.py | 0
.../Source/Python/UPT/UnitTest/DecParserTest.py | 0
.../Python/UPT/UnitTest/DecParserUnitTest.py | 0
.../Python/UPT/UnitTest/InfBinarySectionTest.py | 0
.../BaseTools/Source/Python/UPT/Xml/CommonXml.py | 0
.../Source/Python/UPT/Xml/GuidProtocolPpiXml.py | 0
.../BaseTools/Source/Python/UPT/Xml/IniToXml.py | 0
.../Source/Python/UPT/Xml/ModuleSurfaceAreaXml.py | 0
.../Source/Python/UPT/Xml/PackageSurfaceAreaXml.py | 0
.../BaseTools/Source/Python/UPT/Xml/PcdXml.py | 0
.../BaseTools/Source/Python/UPT/Xml/XmlParser.py | 0
.../Source/Python/UPT/Xml/XmlParserMisc.py | 0
.../BaseTools/Source/Python/UPT/Xml/__init__.py | 0
.../Source/Python/Workspace/BuildClassObject.py | 0
.../Source/Python/Workspace/MetaDataTable.py | 0
.../Source/Python/Workspace/MetaFileParser.py | 0
.../Source/Python/Workspace/MetaFileTable.py | 0
.../Source/Python/Workspace/WorkspaceDatabase.py | 0
.../BaseTools/Source/Python/build/BuildReport.py | 0
.../BaseTools/Source/Python/build/build.py | 0
src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd | Bin 1048576 -> 1048576 bytes
src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd | Bin 1048576 -> 1048576 bytes
.../Graphics/BIOS/VBoxVgaBiosAlternative.asm | 259 ++++-----
.../Graphics/BIOS/VBoxVgaBiosAlternative.md5sum | 2 +-
src/VBox/Devices/Graphics/DevVGA_VBVA.cpp | 23 +-
src/VBox/Devices/Network/DrvNetSniffer.cpp | 10 +
src/VBox/Devices/Network/SrvIntNetR0.cpp | 6 +-
src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c | 15 +-
src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm | 160 +++---
.../Devices/PC/BIOS/VBoxBiosAlternative.md5sum | 2 +-
src/VBox/Devices/PC/DevAPIC.cpp | 2 +-
src/VBox/Devices/PC/DevHPET.cpp | 14 +-
.../VBoxDTrace/onnv/cmd/dtrace/demo/mkdemo.pl | 0
.../dtrace/test/tst/common/funcs/tst.index.d.out | 0
.../dtrace/test/tst/common/funcs/tst.substr.d.out | 0
.../dtrace/test/tst/common/ip/tst.ipv4localtcp.ksh | 0
.../dtrace/test/tst/common/ip/tst.ipv4localudp.ksh | 0
.../test/tst/common/ip/tst.ipv4remotetcp.ksh | 0
.../test/tst/common/ip/tst.ipv4remoteudp.ksh | 0
.../test/tst/common/ip/tst.localtcpstate.ksh | 0
.../test/tst/common/ip/tst.remotetcpstate.ksh | 0
.../scripting/err.D_MACRO_UNDEF.invalidargs.d | 0
.../tst/common/scripting/err.D_OP_LVAL.rdonly.d | 0
.../common/scripting/err.D_OP_WRITE.usepidmacro.d | 0
.../test/tst/common/scripting/err.D_SYNTAX.inval.d | 0
.../test/tst/common/scripting/err.D_SYNTAX.pid.d | 0
.../dtrace/test/tst/common/scripting/tst.arg0.d | 0
.../dtrace/test/tst/common/scripting/tst.assign.d | 0
.../dtrace/test/tst/common/scripting/tst.basic.d | 0
.../dtrace/test/tst/common/scripting/tst.egid.d | 0
.../dtrace/test/tst/common/scripting/tst.euid.d | 0
.../cmd/dtrace/test/tst/common/scripting/tst.gid.d | 0
.../dtrace/test/tst/common/scripting/tst.pgid.d | 0
.../cmd/dtrace/test/tst/common/scripting/tst.pid.d | 0
.../dtrace/test/tst/common/scripting/tst.ppid.d | 0
.../dtrace/test/tst/common/scripting/tst.projid.d | 0
.../dtrace/test/tst/common/scripting/tst.quite.d | 0
.../cmd/dtrace/test/tst/common/scripting/tst.sid.d | 0
.../dtrace/test/tst/common/scripting/tst.taskid.d | 0
.../dtrace/test/tst/common/scripting/tst.trace.d | 0
.../cmd/dtrace/test/tst/common/scripting/tst.uid.d | 0
.../err.D_ACT_SPEC.SpeculateWithBreakPoint.d | 0
.../err.D_ACT_SPEC.SpeculateWithChill.d | 0
.../err.D_ACT_SPEC.SpeculateWithCopyOut.d | 0
.../err.D_ACT_SPEC.SpeculateWithCopyOutStr.d | 0
.../err.D_ACT_SPEC.SpeculateWithPanic.d | 0
.../err.D_ACT_SPEC.SpeculateWithRaise.d | 0
.../speculation/err.D_ACT_SPEC.SpeculateWithStop.d | 0
.../dtrace/test/tst/common/usdt/tst.corruptenv.ksh | 0
.../onnv/lib/libdtrace/common/mkerrtags.sh | 0
src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp | 14 +-
.../Frontends/VBoxManage/VBoxManageModifyVM.cpp | 141 ++++-
.../VBoxManage/VBoxManageStorageController.cpp | 27 +
src/VBox/Frontends/VirtualBox/Makefile.kmk | 12 +-
src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts | 592 ++++++++++-----------
src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts | 18 +-
src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts | 8 +-
.../Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts | 2 +-
.../VirtualBox/src/globals/UIIconPool.cpp | 2 +
src/VBox/Frontends/VirtualBox/src/hardenedmain.cpp | 6 +
.../VirtualBox/src/runtime/UIDnDMIMEData.cpp | 75 ++-
.../VirtualBox/src/runtime/UIDnDMIMEData.h | 22 +
.../VirtualBox/src/runtime/UIMachineLogic.cpp | 4 +-
.../VirtualBox/src/runtime/UIMachineWindow.h | 3 +
.../fullscreen/UIMachineWindowFullscreen.cpp | 17 +-
.../runtime/fullscreen/UIMachineWindowFullscreen.h | 3 +
.../runtime/seamless/UIMachineWindowSeamless.cpp | 17 +-
.../src/runtime/seamless/UIMachineWindowSeamless.h | 3 +
.../src/settings/machine/UIMachineSettingsUSB.cpp | 70 ++-
.../VirtualBox/src/widgets/UIFilmContainer.cpp | 0
.../src/wizards/newvm/UIWizardNewVMPageBasic1.cpp | 2 +
src/VBox/GuestHost/OpenGL/error/error.py | 0
src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.py | 0
src/VBox/GuestHost/OpenGL/packer/pack_current.py | 0
.../GuestHost/OpenGL/packer/pack_currentheader.py | 0
src/VBox/GuestHost/OpenGL/packer/pack_header.py | 0
src/VBox/GuestHost/OpenGL/packer/packer.py | 0
src/VBox/GuestHost/OpenGL/packer/packer_bbox.py | 0
src/VBox/GuestHost/OpenGL/spu_loader/dispatch.py | 0
.../GuestHost/OpenGL/spu_loader/dispatchheader.py | 0
src/VBox/GuestHost/OpenGL/spu_loader/glloader.py | 0
src/VBox/GuestHost/OpenGL/spu_loader/spuchange.py | 0
src/VBox/GuestHost/OpenGL/spu_loader/spucopy.py | 0
src/VBox/GuestHost/OpenGL/state_tracker/convert.py | 0
.../GuestHost/OpenGL/state_tracker/dump_gen.py | 0
.../OpenGL/state_tracker/state_current.py | 0
.../GuestHost/OpenGL/state_tracker/state_defs.py | 0
.../GuestHost/OpenGL/state_tracker/state_funcs.py | 0
.../GuestHost/OpenGL/state_tracker/state_get.py | 0
.../OpenGL/state_tracker/state_isenabled.py | 0
src/VBox/GuestHost/OpenGL/util/debug_opcodes.py | 0
src/VBox/HostDrivers/Support/SUPLibInternal.h | 2 +-
src/VBox/HostDrivers/Support/SUPLibLdr.cpp | 50 +-
src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp | 73 ++-
.../HostDrivers/Support/SUPR3HardenedVerify.cpp | 39 +-
src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk | 1 +
.../VBoxNetFlt/linux/VBoxNetFlt-linux.c | 15 +-
.../VBoxNetFlt/win/drv/VBoxNetFltCmn-win.h | 9 +
.../VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp | 209 ++++++++
.../SharedOpenGL/crserverlib/server_dispatch.py | 0
.../crserverlib/server_dispatch_header.py | 0
.../SharedOpenGL/crserverlib/server_get.py | 0
.../SharedOpenGL/crserverlib/server_getshaders.c | 14 +-
.../SharedOpenGL/crserverlib/server_retval.py | 0
.../SharedOpenGL/crserverlib/server_simpleget.py | 0
.../HostServices/SharedOpenGL/expando/expando.py | 0
.../HostServices/SharedOpenGL/unpacker/unpack.py | 0
.../SharedOpenGL/unpacker/unpack_extend.py | 0
.../SharedOpenGL/unpacker/unpack_header.py | 0
src/VBox/Installer/linux/Makefile.kmk | 17 +-
src/VBox/Installer/linux/install.sh | 30 +-
src/VBox/Installer/linux/routines.sh | 111 ++--
src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec | 8 +-
src/VBox/Installer/linux/rpm/rules | 9 +-
src/VBox/Installer/linux/run-inst.sh | 28 +-
.../linux/scripts/check_module_dependencies.sh | 5 -
src/VBox/Installer/linux/vboxautostart-service.sh | 28 -
.../Installer/linux/vboxballoonctrl-service.sh | 29 -
src/VBox/Installer/linux/vboxdrv-pardus.py | 28 -
src/VBox/Installer/linux/vboxweb-service.sh | 29 -
src/VBox/Main/Makefile.kmk | 1 -
src/VBox/Main/glue/vboxapi.py | 0
src/VBox/Main/idl/VirtualBox.xidl | 30 +-
src/VBox/Main/include/MachineImpl.h | 10 +-
src/VBox/Main/include/MediumAttachmentImpl.h | 11 +-
src/VBox/Main/src-all/Global.cpp | 12 +
src/VBox/Main/src-client/ConsoleImpl2.cpp | 10 +-
src/VBox/Main/src-client/DisplayImpl.cpp | 17 +-
src/VBox/Main/src-server/ApplianceImpl.cpp | 2 +
src/VBox/Main/src-server/MachineImpl.cpp | 33 +-
src/VBox/Main/src-server/MediumAttachmentImpl.cpp | 27 +-
src/VBox/Main/src-server/NetworkAdapterImpl.cpp | 4 +-
src/VBox/Main/src-server/SnapshotImpl.cpp | 2 +-
src/VBox/Main/src-server/StorageControllerImpl.cpp | 33 +-
.../src-server/freebsd/HostHardwareFreeBSD.cpp | 138 -----
src/VBox/Main/src-server/linux/HostPowerLinux.cpp | 3 +-
src/VBox/Main/testcase/Makefile.kmk | 3 +-
src/VBox/Main/xml/Settings.cpp | 10 +-
src/VBox/Runtime/common/checksum/manifest3.cpp | 5 +-
src/VBox/Storage/QCOW.cpp | 1 +
src/VBox/VMM/Makefile.kmk | 1 +
src/VBox/VMM/VMMAll/GIMAllHv.cpp | 3 +-
src/VBox/VMM/VMMAll/GIMAllKvm.cpp | 31 +-
src/VBox/VMM/VMMR0/GIMR0.cpp | 6 +
src/VBox/VMM/VMMR0/GIMR0Kvm.cpp | 117 ++++
src/VBox/VMM/VMMR0/HMSVMR0.cpp | 4 +
src/VBox/VMM/VMMR0/HMVMXR0.cpp | 9 +-
src/VBox/VMM/VMMR3/CPUM.cpp | 10 +-
src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp | 6 +-
src/VBox/VMM/VMMR3/GIMKvm.cpp | 28 +-
src/VBox/VMM/VMMR3/HM.cpp | 2 +-
src/VBox/VMM/include/GIMKvmInternal.h | 13 +-
src/VBox/ValidationKit/common/__init__.py | 0
.../ValidationKit/common/constants/__init__.py | 0
src/VBox/ValidationKit/common/constants/result.py | 0
.../ValidationKit/common/constants/rtexitcode.py | 0
src/VBox/ValidationKit/common/constants/tbreq.py | 0
src/VBox/ValidationKit/common/constants/tbresp.py | 0
.../ValidationKit/common/constants/valueunit.py | 0
src/VBox/ValidationKit/common/utils.py | 0
src/VBox/ValidationKit/common/webutils.py | 0
src/VBox/ValidationKit/testanalysis/__init__.py | 0
src/VBox/ValidationKit/testanalysis/diff.py | 0
.../ValidationKit/testboxscript/testboxcommand.py | 0
.../ValidationKit/testboxscript/testboxcommons.py | 0
.../testboxscript/testboxconnection.py | 0
.../ValidationKit/testboxscript/testboxtasks.py | 0
.../ValidationKit/testboxscript/testboxupgrade.py | 0
src/VBox/ValidationKit/testdriver/__init__.py | 0
src/VBox/ValidationKit/testdriver/base.py | 0
src/VBox/ValidationKit/testdriver/reporter.py | 0
src/VBox/ValidationKit/testdriver/tst-txsclient.py | 0
src/VBox/ValidationKit/testdriver/txsclient.py | 0
src/VBox/ValidationKit/testdriver/vbox.py | 11 +-
src/VBox/ValidationKit/testdriver/vboxtestvms.py | 0
src/VBox/ValidationKit/testdriver/vboxwrappers.py | 0
src/VBox/ValidationKit/testdriver/winbase.py | 0
src/VBox/ValidationKit/testmanager/__init__.py | 0
.../testmanager/batch/regen_sched_queues.py | 118 ++++
src/VBox/ValidationKit/testmanager/config.py | 0
.../ValidationKit/testmanager/core/__init__.py | 0
src/VBox/ValidationKit/testmanager/core/base.py | 0
src/VBox/ValidationKit/testmanager/core/build.py | 0
.../testmanager/core/buildblacklist.py | 0
.../ValidationKit/testmanager/core/buildsource.py | 0
.../ValidationKit/testmanager/core/coreconsts.py | 0
src/VBox/ValidationKit/testmanager/core/db.py | 45 +-
.../ValidationKit/testmanager/core/dbobjcache.py | 0
.../testmanager/core/failurecategory.py | 0
.../testmanager/core/failurereason.py | 0
.../testmanager/core/globalresource.py | 0
src/VBox/ValidationKit/testmanager/core/report.py | 0
.../ValidationKit/testmanager/core/schedgroup.py | 0
.../testmanager/core/schedulerbase.py | 43 +-
.../testmanager/core/schedulerbeci.py | 4 +-
.../ValidationKit/testmanager/core/systemlog.py | 0
src/VBox/ValidationKit/testmanager/core/testbox.py | 0
.../testmanager/core/testboxcontroller.py | 0
.../testmanager/core/testboxstatus.py | 0
.../ValidationKit/testmanager/core/testcase.py | 0
.../ValidationKit/testmanager/core/testcaseargs.py | 0
.../ValidationKit/testmanager/core/testgroup.py | 0
.../ValidationKit/testmanager/core/testresults.py | 222 ++++++--
src/VBox/ValidationKit/testmanager/core/testset.py | 0
.../ValidationKit/testmanager/core/useraccount.py | 0
.../ValidationKit/testmanager/core/vcsrevisions.py | 0
.../testmanager/core/webservergluebase.py | 0
.../testmanager/core/webservergluecgi.py | 0
.../testmanager/db/TestManagerDatabaseInit.pgsql | 24 +-
.../testmanager/db/tmdb-r15-index-sorting.pgsql | 98 ++++
.../ValidationKit/testmanager/debug/__init__.py | 0
.../ValidationKit/testmanager/webui/__init__.py | 0
.../ValidationKit/testmanager/webui/wuiadmin.py | 0
.../testmanager/webui/wuiadminbuild.py | 0
.../testmanager/webui/wuiadminbuildblacklist.py | 0
.../testmanager/webui/wuiadminbuildcategory.py | 0
.../testmanager/webui/wuiadminbuildsource.py | 0
.../testmanager/webui/wuiadminfailurereason.py | 0
.../testmanager/webui/wuiadminglobalrsrc.py | 0
.../testmanager/webui/wuiadminschedgroup.py | 0
.../testmanager/webui/wuiadminsystemlog.py | 0
.../testmanager/webui/wuiadmintestbox.py | 0
.../testmanager/webui/wuiadmintestcase.py | 0
.../testmanager/webui/wuiadmintestgroup.py | 0
.../testmanager/webui/wuiadminuseraccount.py | 0
.../ValidationKit/testmanager/webui/wuibase.py | 0
.../testmanager/webui/wuicontentbase.py | 30 +-
.../testmanager/webui/wuifailurecategory.py | 0
.../ValidationKit/testmanager/webui/wuigraphwiz.py | 0
.../ValidationKit/testmanager/webui/wuihlpform.py | 0
.../testmanager/webui/wuihlpgraphgooglechart.py | 0
.../testmanager/webui/wuihlpgraphmatplotlib.py | 0
.../testmanager/webui/wuihlpgraphsimple.py | 0
.../testmanager/webui/wuilogviewer.py | 0
.../ValidationKit/testmanager/webui/wuimain.py | 65 ++-
.../ValidationKit/testmanager/webui/wuireport.py | 0
.../testmanager/webui/wuitestresult.py | 9 +-
.../testmanager/webui/wuivcshistory.py | 0
src/libs/xpcom18a4/nsprpub/Makefile.in | 0
src/libs/xpcom18a4/nsprpub/config/config.mk | 0
src/libs/xpcom18a4/nsprpub/config/rules.mk | 0
src/libs/xpcom18a4/python/client/__init__.py | 0
src/libs/xpcom18a4/python/file.py | 0
src/libs/xpcom18a4/python/primitives.py | 0
src/libs/xpcom18a4/python/server/__init__.py | 0
src/libs/xpcom18a4/python/server/enumerator.py | 0
src/libs/xpcom18a4/python/server/factory.py | 0
src/libs/xpcom18a4/python/server/loader.py | 0
src/libs/xpcom18a4/python/server/module.py | 0
src/libs/xpcom18a4/python/server/policy.py | 0
.../xpcom18a4/python/test/pyxpcom_test_tools.py | 0
.../xpcom18a4/python/test/test_com_exceptions.py | 0
src/libs/xpcom18a4/python/test/test_comfile.py | 0
.../test/test_component/py_test_component.py | 0
src/libs/xpcom18a4/python/test/test_components.py | 0
.../python/test/test_isupports_primitives.py | 0
src/libs/xpcom18a4/python/test/test_misc.py | 0
src/libs/xpcom18a4/python/test/test_streams.py | 0
.../xpcom18a4/python/test/test_test_component.py | 0
.../xpcom18a4/python/test/test_weakreferences.py | 0
src/libs/xpcom18a4/python/tools/regxpcom.py | 0
src/libs/xpcom18a4/python/xpt.py | 0
493 files changed, 2594 insertions(+), 1275 deletions(-)
diff --git a/Config.kmk b/Config.kmk
index e9f110f..bdb233e 100644
--- a/Config.kmk
+++ b/Config.kmk
@@ -220,9 +220,9 @@ VBOX_BUILD_PUBLISHER =
# Note! The BETA[n],ALPHA[n],RC[n] indicators should be inserted before the
# publisher so that RTStrVersionCompare have a chance of comparing
# prerelease from different publishers correctly.
-VBOX_VERSION_STRING = $(VBOX_VERSION_STRING_RAW)_RC3$(VBOX_BUILD_PUBLISHER)
+VBOX_VERSION_STRING = $(VBOX_VERSION_STRING_RAW)$(VBOX_BUILD_PUBLISHER)
# Just the BETA[n],ALPHA[n],RC[n] indicators. Set to empty string for release.
-VBOX_VERSION_PRERELEASE = RC3
+VBOX_VERSION_PRERELEASE =
# Force the additions.sh script to get an exact additions build when we're doing the release.
ifeq ($(int-mod $(VBOX_VERSION_BUILD),2),0)
@@ -6089,7 +6089,7 @@ endif
SVN ?= svn$(HOSTSUFF_EXE)
VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk
ifndef VBOX_SVN_REV
- VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 101436 $ )
+ VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 101573 $ )
VBOX_SVN_DEP := $(firstword $(wildcard $(PATH_ROOT)/.svn/wc.db $(abspath $(PATH_ROOT)/../.svn/wc.db) $(abspath $(PATH_ROOT)/../../.svn/wc.db) $(PATH_ROOT)/.svn/entries))
ifeq ($(which $(SVN)),)
VBOX_SVN_DEP :=
diff --git a/doc/manual/en_US/user_AdvancedTopics.xml b/doc/manual/en_US/user_AdvancedTopics.xml
index 9333a26..621621c 100644
--- a/doc/manual/en_US/user_AdvancedTopics.xml
+++ b/doc/manual/en_US/user_AdvancedTopics.xml
@@ -591,20 +591,21 @@ greeter-session=vbox-greeter</screen></para>
<screen> sh ./VBoxLinuxAdditions.run no_setup</screen>
<para>After this, you will need to at least compile the kernel modules
- by running the command <screen> /usr/lib/VBoxGuestAdditions/vboxadd setup</screen>
+ by running the command <screen> rcvboxadd setup</screen>
as root (you will need to replace <emphasis>lib</emphasis> by
<emphasis>lib64</emphasis> on some 64bit guests), and on older guests
without the udev service you will need to add the
<emphasis>vboxadd</emphasis> service to the default runlevel to ensure
that the modules get loaded.</para>
- <para>To setup the time synchronization service, run the command
- <screen> /usr/lib/VBoxGuestAdditions/vboxadd-service setup</screen> and
+ <para>To setup the time synchronization service,
add the service vboxadd-service to the default runlevel. To set up the
- X11 and OpenGL part of the Guest Additions, run the command <screen> /usr/lib/VBoxGuestAdditions/vboxadd-x11 setup</screen>
+ X11 and OpenGL part of the Guest Additions, run the command
+ <screen> rcvboxadd-x11 setup</screen>
(you do not need to enable any services for this).</para>
- <para>To recompile the guest kernel modules, use this command: <screen> /usr/lib/VBoxGuestAdditions/vboxadd setup</screen>
+ <para>To recompile the guest kernel modules, use this command:
+ <screen> rcvboxadd setup</screen>
After compilation you should reboot your guest to ensure that the new
modules are actually used.</para>
</sect2>
diff --git a/doc/manual/en_US/user_GuestAdditions.xml b/doc/manual/en_US/user_GuestAdditions.xml
index cdc8299..bfc06fd 100644
--- a/doc/manual/en_US/user_GuestAdditions.xml
+++ b/doc/manual/en_US/user_GuestAdditions.xml
@@ -600,7 +600,7 @@
installing the Linux Guest Additions. If DKMS is not available
or not installed, the guest kernel modules will need to be
recreated manually whenever the guest kernel is updated using
- the command <screen>/etc/init.d/vboxadd setup</screen> as root.
+ the command <screen>rcvboxadd setup</screen> as root.
</para>
</listitem>
diff --git a/doc/manual/en_US/user_Installation.xml b/doc/manual/en_US/user_Installation.xml
index fbecbbc..ed4055b 100644
--- a/doc/manual/en_US/user_Installation.xml
+++ b/doc/manual/en_US/user_Installation.xml
@@ -391,7 +391,7 @@
installed. In that case, the kernel module will need to be
reinstalled by executing (as root):</para>
- <screen>/etc/init.d/vboxdrv setup</screen>
+ <screen>rcvboxdrv setup</screen>
</listitem>
</orderedlist></para>
</sect2>
@@ -428,7 +428,7 @@
out why the compilation failed. You may have to install the
appropriate Linux kernel headers (see <xref
linkend="externalkernelmodules" />). After correcting any problems, do
- <screen>sudo /etc/init.d/vboxdrv setup</screen>This will start a
+ <screen>sudo rcvboxdrv setup</screen>This will start a
second attempt to build the module.</para>
<para>If a suitable kernel module was found in the package or the
diff --git a/doc/manual/en_US/user_VBoxManage.xml b/doc/manual/en_US/user_VBoxManage.xml
index 958c393..1ff417d 100644
--- a/doc/manual/en_US/user_VBoxManage.xml
+++ b/doc/manual/en_US/user_VBoxManage.xml
@@ -1181,9 +1181,72 @@ Statistics update: disabled</screen></para>
option enables or disables the VM's virtual USB 3.0 controller;
see <xref linkend="settings-usb" /> for details.</para>
</listitem>
+ <!-- @todo r=andy Document tracing-* commands -->
</itemizedlist></para>
- <!-- @todo r=andy Document tracing-* commands -->
+ </sect2>
+
+ <sect2 id="vboxmanage-modifyvm-videocap">
+ <title>Video Capture settings</title>
+
+ <para>The following settings for changing video recording parameters are
+ available through <computeroutput>VBoxManage modifyvm</computeroutput>.
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>--videocap on|off</computeroutput>:
+ This option enables or disables recording a VM session into a WebM/VP8
+ file. If this option is enabled, recording will start when the VM
+ session is started.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--videocapscreens all|<screen ID>
+ [<screen ID> ...]</computeroutput>: This option allows to specify which screens of
+ the VM are being recorded. Each screen is recorded into a separate file.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--videocapfile <filename></computeroutput>:
+ This option sets the filename VirtualBox uses to save the recorded content.
+ </para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--videocapres <width>x<height></computeroutput>:
+ This option sets the resolution (in pixels) of the recorded video.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--videocaprate <rate></computeroutput>:
+ This option sets the bitrate in kilobits (kb) per second. Increasing this
+ value makes the video look better for the cost of an increased file size.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--videocapfps <fps></computeroutput>:
+ This option sets the maximum number of frames per second (FPS) to be
+ recorded. Frames with a higher frequency will be skipped. Reducing this
+ value increases the number of skipped frames and reduces the file size.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--videocapmaxtime <ms></computeroutput>:
+ This option sets the maximum time in milliseconds the video capturing
+ will be enabled since activation. The capturing stops when the defined
+ time interval has elapsed. If this value is zero the capturing is not
+ limited by time.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--videocapmaxsize <MB></computeroutput>:
+ This option limits the maximum size of the captured video file (in MB).
+ The capturing stops when the file size has reached the specified size. If
+ this value is zero the capturing will not be limited by file size.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--videocapopts <key=value>
+ [,<key=value> ...]</computeroutput>:
+ This format can be used to specify additional video capturing options.
+ These options only are for advanced users and must be specified in a
+ comma-separated key=value format, e.g.
+ <computeroutput>foo=bar,a=b</computeroutput>.
+ </para>
+ </listitem>
+ </itemizedlist></para>
+
</sect2>
<sect2 id="vboxmanage-modifyvm-vrde">
@@ -1843,8 +1906,9 @@ Virtual system 0:
</listitem>
<listitem>
- <para><computeroutput>videocapscreens all|<screen ID> [<screen ID> ...]]</computeroutput>
- allows to specify which screens of the VM are being recorded. This setting
+ <para><computeroutput>videocapscreens all|<screen ID>
+ [<screen ID> ...]]</computeroutput> allows to specify which screens of
+ the VM are being recorded. This setting
cannot be changed while video capturing is enabled. Each screen is recorded
into a separate file.</para>
</listitem>
@@ -1877,8 +1941,9 @@ Virtual system 0:
</listitem>
<listitem> <!-- @todo r=andy Clarify time format. -->
- <para><computeroutput>videocapmaxtime <time></computeroutput> sets
- the maximum time the video capturing will take place since activation.
+ <para><computeroutput>videocapmaxtime <ms></computeroutput> sets
+ the maximum time in milliseconds the video capturing will be enabled
+ since activation.
The capturing stops when the defined time interval has elapsed. If this
value is zero the capturing is not limited by time. This setting cannot
be changed while video capturing is enabled.</para>
@@ -1887,13 +1952,13 @@ Virtual system 0:
<listitem>
<para><computeroutput>videocapmaxsize <MB></computeroutput> limits
the maximum size of the captured video file (in MB). The capturing stops
- when file size has reached the specified size. If this value is zero
+ when the file size has reached the specified size. If this value is zero
the capturing will not be limited by file size. This setting cannot be
changed while video capturing is enabled.</para>
</listitem>
<listitem>
- <para><computeroutput>videocapopts <key=value> [<key=value> ...]</computeroutput>
+ <para><computeroutput>videocapopts <key=value>[,<key=value> ...]</computeroutput>
can be used to specify additional video capturing options. These options
only are for advanced users and must be specified in a comma-separated
key=value format, e.g. <computeroutput>foo=bar,a=b</computeroutput>.
@@ -1909,7 +1974,7 @@ Virtual system 0:
<!-- @todo r=andy Document teleport! -->
<listitem>
- <para><computeroutput>--plugcpu|unplugcpu
+ <para><computeroutput>plugcpu|unplugcpu
<id></computeroutput>: If CPU hot-plugging is enabled, this adds
a virtual CPU to the virtual machines (or removes one).
<computeroutput><id></computeroutput> specifies the index of
diff --git a/doc/manual/user_ChangeLogImpl.xml b/doc/manual/user_ChangeLogImpl.xml
index 622f703..7d3f73d 100644
--- a/doc/manual/user_ChangeLogImpl.xml
+++ b/doc/manual/user_ChangeLogImpl.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
-
+
<chapter> <!-- HACK ALERT! Seems we must have a single top level element for xi:include to work.
So, we use chapter and xpointer="xpointer(/chapter/)" with xi:include. -->
<sect1>
- <title>Version 5.0.0 Release Candidate 3 (2015-07-03)</title>
+ <title>Version 5.0.0 (2015-07-09)</title>
<para>This is a major update. The following major new features
were added:</para>
@@ -92,11 +92,19 @@
</listitem>
<listitem>
- <para>VMM: debug facility now includes includes the guest CPU's
+ <para>VMM: debug facility now includes the guest CPU's
FPU/SSE/extended state in the core dump</para>
</listitem>
<listitem>
+ <para>VMM: fixed a hang under rare conditions on 32-bit hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: several fixes</para>
+ </listitem>
+
+ <listitem>
<para>GUI: improved HID LEDs synchronization for Mac and Windows hosts.
The physical LEDs state now restored together with the VM state.</para>
</listitem>
@@ -111,6 +119,11 @@
</listitem>
<listitem>
+ <para>GUI: allow to save the VM state from the selector even if the VM
+ is already paused</para>
+ </listitem>
+
+ <listitem>
<para>VBoxManage: when exporting an appliance, support the suppression
of MAC addresses, which means they will be always recreated on
import, avoiding duplicate MAC addresses for VMs which are imported
@@ -118,6 +131,10 @@
</listitem>
<listitem>
+ <para>VBoxManage: now supports renaming storage controllers and USB controllers</para>
+ </listitem>
+
+ <listitem>
<para>Guest Control: major overhaul, for example fixing wrong parameter quoting
(bug #13157)</para>
</listitem>
@@ -165,11 +182,34 @@
</listitem>
<listitem>
+ <para>API: don't lose the saved state and "current state changed" flag
+ during cloning of a VM</para>
+ </listitem>
+
+ <listitem>
+ <para>API: OS type description consistency fix (bug #14162)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSVC: don't keep the support driver permanently open</para>
+ </listitem>
+
+ <listitem>
<para>Main/Properties: properly drop transient guest properties when
the VM is powered off</para>
</listitem>
<listitem>
+ <para>VRDP: fixed a couple of races which may cause a crash during
+ VM poweroff</para>
+ </listitem>
+
+ <listitem>
+ <para>ExtPack: don't fail if the TMP directory contains non-latin1
+ characters (bug #14159)</para>
+ </listitem>
+
+ <listitem>
<para>3D: fix potential race in which might cause a crash on VM
termination</para>
</listitem>
@@ -188,8 +228,8 @@
</listitem>
<listitem>
- <para>Storage: added vbox-img standalone tool for direct manipulation
- of virtual hard disk images without VBoxManage</para>
+ <para>Storage: added <emphasis>vbox-img</emphasis> standalone tool for
+ direct manipulation of virtual hard disk images without VBoxManage</para>
</listitem>
<listitem>
@@ -198,11 +238,44 @@
</listitem>
<listitem>
+ <para>NAT: fixed several potential crashes</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: don't forcibly reset/drop all connections when the link goes
+ down</para>
+ </listitem>
+
+ <listitem>
+ <para>Netsniffer: properly handle changing of the trace file name
+ at VM runtime</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: fixed audio output and input when changing the default audio device
+ more than once on OS X</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: fixed audio input on OS X under certain circumstances</para>
+ </listitem>
+
+ <listitem>
<para>ICH9: fixed the interrupt disable logic for MSI interrupts; should
fix old Linux guests with AHCI</para>
</listitem>
<listitem>
+ <para>USB: improve playback with USB sound devices attached to the emulated
+ OHCI controller</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: provide Linux guests a different AC97 audio codec type so Linux
+ ALSA does not mis-detect the link speed (default for new VMs)</para>
+ </listitem>
+
+ <listitem>
<para>BIOS: fix for booting from SCSI CD/DVD media</para>
</listitem>
@@ -219,16 +292,57 @@
</listitem>
<listitem>
+ <para>Linux hosts: fixed a bug which made the netfilter driver ignore
+ certain events (bug #12264)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: El Capitan fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed a bug which might trigger a host kernel panic
+ if a VM is started and another hypervisor is active</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: Solaris 12 installer fix</para>
+ </listitem>
+
+ <listitem>
<para>Guest Additions: added a heartbeat service
(see <xref linkend="heartbeatservice" />)</para>
</listitem>
<listitem>
+ <para>Linux hosts / guests: support for Linux distributions using systemd
+ without sysv emulation (e.g. ArchLinux)</para>
+ </listitem>
+
+ <listitem>
<para>Windows Additions/WDDM: improved video memory utilization and
allow more/bigger guest screens with large resolutions (including HiDPI)
</para>
</listitem>
+ <listitem>
+ <para>Linux Additions: added <emphasis>-s</emphasis> parameter to
+ <emphasis>mount.vboxsf</emphasis> to be sloppy with invalid parameters</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 Additions: fixed wrong DPI value (bug #14151)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X guests: limit the CPU family for legacy guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: added quiesce support to co-operate with Solaris'
+ fast-reboot feature</para>
+ </listitem>
+
</itemizedlist>
</sect1>
@@ -727,7 +841,7 @@
<listitem>
<para>GUI: fix 3D overlay window reparenting issue when VM goes to
- fullscreen mode on X11 hosts.</para>
+ fullscreen mode on X11 hosts</para>
</listitem>
<listitem>
@@ -1321,7 +1435,7 @@
<listitem>
<para>Mac OS X hosts: fixed host shutdown and reboot delay caused by running VBoxSVC
- process in some cases.</para>
+ process in some cases</para>
</listitem>
<listitem>
diff --git a/include/VBox/intnet.h b/include/VBox/intnet.h
index b91dad6..f502801 100644
--- a/include/VBox/intnet.h
+++ b/include/VBox/intnet.h
@@ -638,7 +638,14 @@ typedef struct INTNETTRUNKSWPORT
uint32_t u32VersionEnd;
} INTNETTRUNKSWPORT;
-/** Version number for the INTNETTRUNKIFPORT::u32Version and INTNETTRUNKIFPORT::u32VersionEnd fields. */
+/**
+ * Version number for the INTNETTRUNKIFPORT::u32Version and
+ * INTNETTRUNKIFPORT::u32VersionEnd fields.
+ *
+ * NB: Version @c 0xA2CDf005 is consumed by 4.x branches for the
+ * backport of pfnNotifyHostAddress. On the next version bump use
+ * @c 0xA2CDf006 and remove this reminder.
+ */
# define INTNETTRUNKSWPORT_VERSION UINT32_C(0xA2CDf004)
diff --git a/include/VBox/ostypes.h b/include/VBox/ostypes.h
index de0245f..998e008 100644
--- a/include/VBox/ostypes.h
+++ b/include/VBox/ostypes.h
@@ -127,6 +127,8 @@ typedef enum VBOXOSTYPE
VBOXOSTYPE_MacOS107_x64 = 0xB3100,
VBOXOSTYPE_MacOS108_x64 = 0xB4100,
VBOXOSTYPE_MacOS109_x64 = 0xB5100,
+ VBOXOSTYPE_MacOS1010_x64 = 0xB6100,
+ VBOXOSTYPE_MacOS1011_x64 = 0xB7100,
VBOXOSTYPE_JRockitVE = 0xC0000,
VBOXOSTYPE_Haiku = 0xD0000,
VBOXOSTYPE_Haiku_x64 = 0xD0100,
diff --git a/include/VBox/settings.h b/include/VBox/settings.h
index 038b651..c81e0f6 100644
--- a/include/VBox/settings.h
+++ b/include/VBox/settings.h
@@ -1198,7 +1198,8 @@ struct MachineUserData
enmFaultToleranceState(FaultToleranceState_Inactive),
uFaultTolerancePort(0),
uFaultToleranceInterval(0),
- fRTCUseUTC(false)
+ fRTCUseUTC(false),
+ strVMPriority("")
{
llGroups.push_back("/");
}
@@ -1222,7 +1223,8 @@ struct MachineUserData
&& (strFaultToleranceAddress == c.strFaultToleranceAddress)
&& (strFaultTolerancePassword == c.strFaultTolerancePassword)
&& (fRTCUseUTC == c.fRTCUseUTC)
- && (ovIcon == c.ovIcon);
+ && (ovIcon == c.ovIcon)
+ && (strVMPriority == c.strVMPriority);
}
com::Utf8Str strName;
@@ -1243,6 +1245,7 @@ struct MachineUserData
uint32_t uFaultToleranceInterval;
bool fRTCUseUTC;
com::Utf8Str ovIcon;
+ com::Utf8Str strVMPriority;
};
extern const struct Snapshot g_SnapshotEmpty;
diff --git a/include/VBox/sup.h b/include/VBox/sup.h
index 644b169..e44a68f 100644
--- a/include/VBox/sup.h
+++ b/include/VBox/sup.h
@@ -1050,6 +1050,8 @@ DECLHIDDEN(int) SUPR3HardenedMain(const char *pszProgName, uint32_t fFlags, int
#define SUPSECMAIN_FLAGS_DONT_OPEN_DEV RT_BIT_32(0)
/** The hardened DLL has a "TrustedError" function (see FNSUPTRUSTEDERROR). */
#define SUPSECMAIN_FLAGS_TRUSTED_ERROR RT_BIT_32(1)
+/** Hack for making VirtualBoxVM use VirtualBox.dylib on Mac OS X. */
+#define SUPSECMAIN_FLAGS_OSX_VM_APP RT_BIT_32(2)
/** Program binary location mask. */
#define SUPSECMAIN_FLAGS_LOC_MASK UINT32_C(0x00000010)
/** Default binary location is the application binary directory. Does
diff --git a/src/VBox/Additions/common/crOpenGL/DD_glc.py b/src/VBox/Additions/common/crOpenGL/DD_glc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/DD_glh.py b/src/VBox/Additions/common/crOpenGL/DD_glh.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/NULLfuncs.py b/src/VBox/Additions/common/crOpenGL/NULLfuncs.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/cr_gl.py b/src/VBox/Additions/common/crOpenGL/cr_gl.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/entrypoints.py b/src/VBox/Additions/common/crOpenGL/entrypoints.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/feedback/feedback.py b/src/VBox/Additions/common/crOpenGL/feedback/feedback.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/feedback/feedback_funcs.py b/src/VBox/Additions/common/crOpenGL/feedback/feedback_funcs.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/feedback/feedback_state.py b/src/VBox/Additions/common/crOpenGL/feedback/feedback_state.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu_proto.py b/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu_proto.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/getprocaddress.py b/src/VBox/Additions/common/crOpenGL/getprocaddress.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/pack/pack.py b/src/VBox/Additions/common/crOpenGL/pack/pack.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_beginend.py b/src/VBox/Additions/common/crOpenGL/pack/packspu_beginend.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_flush.py b/src/VBox/Additions/common/crOpenGL/pack/packspu_flush.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py b/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_proto.py b/src/VBox/Additions/common/crOpenGL/pack/packspu_proto.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/passthrough/passthrough.py b/src/VBox/Additions/common/crOpenGL/passthrough/passthrough.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/stub_common.py b/src/VBox/Additions/common/crOpenGL/stub_common.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/tsfuncs.py b/src/VBox/Additions/common/crOpenGL/tsfuncs.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/common/crOpenGL/windows_getprocaddress.py b/src/VBox/Additions/common/crOpenGL/windows_getprocaddress.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Additions/linux/installer/vboxadd-service.sh b/src/VBox/Additions/linux/installer/vboxadd-service.sh
index 4c7b656..4087908 100755
--- a/src/VBox/Additions/linux/installer/vboxadd-service.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd-service.sh
@@ -40,9 +40,6 @@ elif [ -f /etc/debian_version ]; then
elif [ -f /etc/gentoo-release ]; then
system=gentoo
PIDFILE="/var/run/vboxadd-service"
-elif [ -f /etc/arch-release ]; then
- system=arch
- PIDFILE="/var/run/vboxadd-service"
elif [ -f /etc/slackware-version ]; then
system=slackware
PIDFILE="/var/run/vboxadd-service"
@@ -147,33 +144,6 @@ if [ "$system" = "gentoo" ]; then
fi
fi
-if [ "$system" = "arch" ]; then
- USECOLOR=yes
- . /etc/rc.d/functions
- daemon() {
- $@
- test $? -eq 0 && add_daemon rc.`basename $1`
- }
-
- killproc() {
- killall $@
- rm_daemon `basename $@`
- }
-
- fail_msg() {
- stat_fail
- }
-
- succ_msg() {
- stat_done
- }
-
- begin() {
- stat_busy "$1"
- }
-
-fi
-
if [ "$system" = "slackware" -o "$system" = "other" ]; then
daemon() {
$1 $2
diff --git a/src/VBox/Additions/linux/installer/vboxadd-x11.sh b/src/VBox/Additions/linux/installer/vboxadd-x11.sh
index efb4d4d..8f16660 100755
--- a/src/VBox/Additions/linux/installer/vboxadd-x11.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd-x11.sh
@@ -1,6 +1,6 @@
#! /bin/sh
#
-# Linux Additions X11 setup init script ($Revision: 101426 $)
+# Linux Additions X11 setup init script ($Revision: 101523 $)
#
#
@@ -68,9 +68,7 @@ x11conf_files="/etc/X11/xorg.conf /etc/X11/xorg.conf-4 /etc/X11/.xorg.conf \
/usr/X11R6/etc/X11/XF86Config /usr/X11R6/lib/X11/XF86Config-4 \
/usr/X11R6/lib/X11/XF86Config"
-if [ -f /etc/arch-release ]; then
- system=arch
-elif [ -f /etc/redhat-release ]; then
+if [ -f /etc/redhat-release ]; then
system=redhat
elif [ -f /etc/debian_version ]; then
system=debian
@@ -84,22 +82,6 @@ else
system=other
fi
-if [ "$system" = "arch" ]; then
- USECOLOR=yes
- . /etc/rc.d/functions
- fail_msg() {
- stat_fail
- }
-
- succ_msg() {
- stat_done
- }
-
- begin() {
- stat_busy "$1"
- }
-fi
-
if [ "$system" = "redhat" ]; then
. /etc/init.d/functions
fail_msg() {
diff --git a/src/VBox/Additions/linux/installer/vboxadd.sh b/src/VBox/Additions/linux/installer/vboxadd.sh
index a6ccc51..cb83479 100755
--- a/src/VBox/Additions/linux/installer/vboxadd.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd.sh
@@ -1,6 +1,6 @@
#! /bin/sh
#
-# Linux Additions kernel module init script ($Revision: 101396 $)
+# Linux Additions kernel module init script ($Revision: 101557 $)
#
#
@@ -16,7 +16,7 @@
#
-# chkconfig: 3457 30 70
+# chkconfig: 345 30 70
# description: VirtualBox Linux Additions kernel modules
#
### BEGIN INIT INFO
@@ -57,9 +57,7 @@ for i in $lib_candidates; do
fi
done
-if [ -f /etc/arch-release ]; then
- system=arch
-elif [ -f /etc/redhat-release ]; then
+if [ -f /etc/redhat-release ]; then
system=redhat
elif [ -f /etc/SuSE-release ]; then
system=suse
@@ -71,22 +69,6 @@ else
system=other
fi
-if [ "$system" = "arch" ]; then
- USECOLOR=yes
- . /etc/rc.d/functions
- fail_msg() {
- stat_fail
- }
-
- succ_msg() {
- stat_done
- }
-
- begin() {
- stat_busy "$1"
- }
-fi
-
if [ "$system" = "redhat" ]; then
. /etc/init.d/functions
fail_msg() {
@@ -472,6 +454,9 @@ extra_setup()
# Put mount.vboxsf in the right place
ln -sf "$lib_path/$PACKAGE/mount.vboxsf" /sbin
+ # And an rc file to re-build the kernel modules and re-set-up the X server.
+ ln -sf "$lib_path/$PACKAGE/vboxadd" /sbin/rcvboxadd
+ ln -sf "$lib_path/$PACKAGE/vboxadd-x11" /sbin/rcvboxadd-x11
# At least Fedora 11 and Fedora 12 require the correct security context when
# executing this command from service scripts. Shouldn't hurt for other
# distributions.
@@ -546,6 +531,8 @@ cleanup()
# Remove other files
rm /sbin/mount.vboxsf 2>/dev/null
+ rm /sbin/rcvboxadd 2>/dev/null
+ rm /sbin/rcvboxadd-x11 2>/dev/null
rm /etc/udev/rules.d/60-vboxadd.rules 2>/dev/null
}
diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo.c b/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
index 594c138..7a79b8c 100644
--- a/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
+++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
@@ -568,9 +568,15 @@ vbox_output_get_modes (xf86OutputPtr output)
RT_CLAMP(pVBox->pScreens[iScreen].aPreferredSize.cx, VBOX_VIDEO_MIN_SIZE, VBOX_VIDEO_MAX_VIRTUAL),
RT_CLAMP(pVBox->pScreens[iScreen].aPreferredSize.cy, VBOX_VIDEO_MIN_SIZE, VBOX_VIDEO_MAX_VIRTUAL),
TRUE, FALSE);
+ vbox_output_add_mode(pVBox, &pModes, NULL, 2560, 1600, FALSE, FALSE);
+ vbox_output_add_mode(pVBox, &pModes, NULL, 2560, 1440, FALSE, FALSE);
+ vbox_output_add_mode(pVBox, &pModes, NULL, 2048, 1536, FALSE, FALSE);
+ vbox_output_add_mode(pVBox, &pModes, NULL, 1920, 1600, FALSE, FALSE);
+ vbox_output_add_mode(pVBox, &pModes, NULL, 1920, 1080, FALSE, FALSE);
+ vbox_output_add_mode(pVBox, &pModes, NULL, 1680, 1050, FALSE, FALSE);
vbox_output_add_mode(pVBox, &pModes, NULL, 1600, 1200, FALSE, FALSE);
- vbox_output_add_mode(pVBox, &pModes, NULL, 1440, 1050, FALSE, FALSE);
- vbox_output_add_mode(pVBox, &pModes, NULL, 1280, 960, FALSE, FALSE);
+ vbox_output_add_mode(pVBox, &pModes, NULL, 1400, 1050, FALSE, FALSE);
+ vbox_output_add_mode(pVBox, &pModes, NULL, 1280, 1024, FALSE, FALSE);
vbox_output_add_mode(pVBox, &pModes, NULL, 1024, 768, FALSE, FALSE);
vbox_output_add_mode(pVBox, &pModes, NULL, 800, 600, FALSE, FALSE);
vbox_output_add_mode(pVBox, &pModes, NULL, 640, 480, FALSE, FALSE);
diff --git a/src/VBox/Devices/Audio/DevIchAc97.cpp b/src/VBox/Devices/Audio/DevIchAc97.cpp
index 4ef9cd6..e2864af 100644
--- a/src/VBox/Devices/Audio/DevIchAc97.cpp
+++ b/src/VBox/Devices/Audio/DevIchAc97.cpp
@@ -857,7 +857,7 @@ static void ichac97MixerReset(PAC97STATE pThis)
{
/* Set a default audio format for our mixer. */
PDMAUDIOSTREAMCFG streamCfg;
- streamCfg.uHz = 41000;
+ streamCfg.uHz = 44100;
streamCfg.cChannels = 2;
streamCfg.enmFormat = AUD_FMT_S16;
streamCfg.enmEndianness = PDMAUDIOHOSTENDIANNESS;
diff --git a/src/VBox/Devices/Audio/DevIchHda.cpp b/src/VBox/Devices/Audio/DevIchHda.cpp
index fef5ac8..3a1ae3c 100644
--- a/src/VBox/Devices/Audio/DevIchHda.cpp
+++ b/src/VBox/Devices/Audio/DevIchHda.cpp
@@ -3720,7 +3720,7 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
{
/* Set a default audio format for our mixer. */
PDMAUDIOSTREAMCFG streamCfg;
- streamCfg.uHz = 41000;
+ streamCfg.uHz = 44100;
streamCfg.cChannels = 2;
streamCfg.enmFormat = AUD_FMT_S16;
streamCfg.enmEndianness = PDMAUDIOHOSTENDIANNESS;
diff --git a/src/VBox/Devices/Audio/DevIchHdaCodec.cpp b/src/VBox/Devices/Audio/DevIchHdaCodec.cpp
index 1f1dc99..71f5942 100644
--- a/src/VBox/Devices/Audio/DevIchHdaCodec.cpp
+++ b/src/VBox/Devices/Audio/DevIchHdaCodec.cpp
@@ -896,7 +896,7 @@ static int stac9220ResetNode(PHDACODEC pThis, uint8_t nodenum, PCODECNODE pNode)
case 4:
case 5:
memset(pNode->dac.B_params, 0, AMPLIFIER_SIZE);
- pNode->dac.u32A_param = CODEC_MAKE_A(0, 1, CODEC_A_MULT_1X, CODEC_A_DIV_1X, CODEC_A_16_BIT, 1);//RT_BIT(14)|(0x1 << 4)|0x1; /* 441000Hz/16bit/2ch */
+ pNode->dac.u32A_param = CODEC_MAKE_A(0, 1, CODEC_A_MULT_1X, CODEC_A_DIV_1X, CODEC_A_16_BIT, 1);//RT_BIT(14)|(0x1 << 4)|0x1; /* 44100Hz/16bit/2ch */
AMPLIFIER_REGISTER(pNode->dac.B_params, AMPLIFIER_OUT, AMPLIFIER_LEFT, 0) = 0x7F | RT_BIT(7);
AMPLIFIER_REGISTER(pNode->dac.B_params, AMPLIFIER_OUT, AMPLIFIER_RIGHT, 0) = 0x7F | RT_BIT(7);
@@ -915,7 +915,7 @@ static int stac9220ResetNode(PHDACODEC pThis, uint8_t nodenum, PCODECNODE pNode)
case 7:
pNode->node.au32F02_param[0] = 0x18;
adc_init:
- pNode->adc.u32A_param = CODEC_MAKE_A(0, 1, CODEC_A_MULT_1X, CODEC_A_DIV_1X, CODEC_A_16_BIT, 1);//RT_BIT(14)|(0x1 << 3)|0x1; /* 441000Hz/16bit/2ch */
+ pNode->adc.u32A_param = CODEC_MAKE_A(0, 1, CODEC_A_MULT_1X, CODEC_A_DIV_1X, CODEC_A_16_BIT, 1);//RT_BIT(14)|(0x1 << 3)|0x1; /* 44100Hz/16bit/2ch */
pNode->adc.node.au32F00_param[0xE] = CODEC_MAKE_F00_0E(0, 1);//RT_BIT(0);
pNode->adc.u32F03_param = RT_BIT(0);
pNode->adc.u32F05_param = CODEC_MAKE_F05(0, 0, 0, CODEC_F05_D3, CODEC_F05_D3);//0x3 << 4 | 0x3; /* PS-Act: D3 Set: D3 */
diff --git a/src/VBox/Devices/Audio/DevSB16.cpp b/src/VBox/Devices/Audio/DevSB16.cpp
index d1814b3..eef92d7 100644
--- a/src/VBox/Devices/Audio/DevSB16.cpp
+++ b/src/VBox/Devices/Audio/DevSB16.cpp
@@ -1272,7 +1272,7 @@ static void sb16MixerReset(PSB16STATE pThis)
{
/* Set a default audio format for our mixer. */
PDMAUDIOSTREAMCFG streamCfg;
- streamCfg.uHz = 41000;
+ streamCfg.uHz = 44100;
streamCfg.cChannels = 2;
streamCfg.enmFormat = AUD_FMT_S16;
streamCfg.enmEndianness = PDMAUDIOHOSTENDIANNESS;
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/PyEfiCompressor/setup.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/PyEfiCompressor/setup.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/PyUtility/setup.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/PyUtility/setup.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/AutoGen.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/AutoGen.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/BuildEngine.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/BuildEngine.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/GenC.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/GenC.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/GenDepex.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/GenDepex.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/GenMake.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/GenMake.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/StrGather.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/StrGather.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/UniClassObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/UniClassObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/BPDG/BPDG.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/BPDG/BPDG.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/BPDG/GenVpd.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/BPDG/GenVpd.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/BPDG/StringTable.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/BPDG/StringTable.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/Database.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/Database.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/DecClassObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/DecClassObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/Dictionary.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/Dictionary.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/DscClassObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/DscClassObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/EdkIIWorkspace.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/EdkIIWorkspace.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/EdkIIWorkspaceBuild.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/EdkIIWorkspaceBuild.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/EdkLogger.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/EdkLogger.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/Expression.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/Expression.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/FdfClassObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/FdfClassObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/InfClassObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/InfClassObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/MigrationUtilities.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/MigrationUtilities.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/Misc.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/Misc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/Parsing.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/Parsing.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/String.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/String.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/TargetTxtClassObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/TargetTxtClassObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/ToolDefClassObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Common/ToolDefClassObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/CommonDataClass/ModuleClass.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/CommonDataClass/ModuleClass.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/CommonDataClass/PackageClass.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/CommonDataClass/PackageClass.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/CommonDataClass/PlatformClass.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/CommonDataClass/PlatformClass.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/CLexer.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/CLexer.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/CParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/CParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Check.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Check.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/CodeFragmentCollector.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/CodeFragmentCollector.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Configuration.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Configuration.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Database.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Database.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Ecc.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Ecc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Exception.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Exception.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/FileProfile.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/FileProfile.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/MetaDataParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/MetaDataParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaDataTable.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaDataTable.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileTable.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileTable.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Xml/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/Xml/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/c.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/c.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/CLexer.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/CLexer.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/CParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/CParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/CodeFragmentCollector.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/CodeFragmentCollector.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/Database.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/Database.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/Eot.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/Eot.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/EotGlobalData.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/EotGlobalData.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/FileProfile.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/FileProfile.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/FvImage.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/FvImage.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/InfParserLite.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/InfParserLite.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/Parser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/Parser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/c.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Eot/c.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/AprioriSection.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/AprioriSection.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Capsule.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Capsule.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/CapsuleData.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/CapsuleData.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/ComponentStatement.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/ComponentStatement.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/CompressSection.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/CompressSection.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/DataSection.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/DataSection.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/DepexSection.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/DepexSection.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/EfiSection.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/EfiSection.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Fd.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Fd.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/FdfParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/FdfParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Ffs.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Ffs.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/FfsFileStatement.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/FfsFileStatement.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/FfsInfStatement.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/FfsInfStatement.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Fv.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Fv.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/FvImageSection.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/FvImageSection.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/GenFds.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/GenFds.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/GuidSection.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/GuidSection.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/OptRomFileStatement.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/OptRomFileStatement.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/OptRomInfStatement.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/OptRomInfStatement.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/OptionRom.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/OptionRom.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Region.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Region.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Rule.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Rule.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/RuleComplexFile.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/RuleComplexFile.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/RuleSimpleFile.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/RuleSimpleFile.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Section.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Section.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/UiSection.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/UiSection.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/VerSection.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/VerSection.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Vtf.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/Vtf.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableDataModel.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableDataModel.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableDec.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableDec.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableDsc.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableDsc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableEotReport.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableEotReport.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableFdf.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableFdf.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableFile.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableFile.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableFunction.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableFunction.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableIdentifier.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableIdentifier.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableInf.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableInf.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TablePcd.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TablePcd.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableQuery.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableQuery.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableReport.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Table/TableReport.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/TargetTool/TargetTool.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/TargetTool/TargetTool.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Trim/Trim.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Trim/Trim.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/BuildVersion.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/BuildVersion.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Core/DependencyRules.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Core/DependencyRules.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Core/DistributionPackageClass.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Core/DistributionPackageClass.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Core/IpiDb.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Core/IpiDb.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Core/PackageFile.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Core/PackageFile.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Core/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Core/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/GenMetaFile/GenMetaFileMisc.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/GenMetaFile/GenMetaFileMisc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/GenMetaFile/GenXmlFile.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/GenMetaFile/GenXmlFile.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/GenMetaFile/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/GenMetaFile/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/InstallPkg.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/InstallPkg.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/CommentGenerating.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/CommentGenerating.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/CommentParsing.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/CommentParsing.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/DataType.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/DataType.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/ExpressionValidate.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/ExpressionValidate.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/GlobalData.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/GlobalData.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/Misc.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/Misc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/ParserValidate.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/ParserValidate.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/Parsing.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/Parsing.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/String.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/String.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/Xml/XmlRoutines.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/Xml/XmlRoutines.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/Xml/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/Xml/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Library/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Logger/Log.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Logger/Log.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Logger/StringTable.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Logger/StringTable.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Logger/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Logger/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/MkPkg.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/MkPkg.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/POM/CommonObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/POM/CommonObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/POM/ModuleObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/POM/ModuleObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/POM/PackageObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/POM/PackageObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/POM/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/POM/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/DecObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/DecObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfBinaryObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfBinaryObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfBuildOptionObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfBuildOptionObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfDefineCommonObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfDefineCommonObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfDefineObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfDefineObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfDepexObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfDepexObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfGuidObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfGuidObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfLibraryClassesObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfLibraryClassesObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfMisc.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfMisc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfPackagesObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfPackagesObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfPcdObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfPcdObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfPpiObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfPpiObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfProtocolObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfProtocolObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfSoucesObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfSoucesObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfUserExtensionObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/InfUserExtensionObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/Parser/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Object/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/DecParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/DecParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/DecParserMisc.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/DecParserMisc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfAsBuiltProcess.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfAsBuiltProcess.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfBinarySectionParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfBinarySectionParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfBuildOptionSectionParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfBuildOptionSectionParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfDefineSectionParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfDefineSectionParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfDepexSectionParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfDepexSectionParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfGuidPpiProtocolSectionParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfGuidPpiProtocolSectionParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfLibrarySectionParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfLibrarySectionParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfPackageSectionParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfPackageSectionParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfParserMisc.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfParserMisc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfPcdSectionParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfPcdSectionParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfSectionParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfSectionParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfSourceSectionParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/InfSourceSectionParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Parser/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/PomAdapter/DecPomAlignment.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/PomAdapter/DecPomAlignment.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/PomAdapter/InfPomAlignment.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/PomAdapter/InfPomAlignment.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/PomAdapter/InfPomAlignmentMisc.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/PomAdapter/InfPomAlignmentMisc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/PomAdapter/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/PomAdapter/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/RmPkg.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/RmPkg.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UPT.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UPT.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UnitTest/CommentGeneratingUnitTest.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UnitTest/CommentGeneratingUnitTest.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UnitTest/CommentParsingUnitTest.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UnitTest/CommentParsingUnitTest.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UnitTest/DecParserTest.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UnitTest/DecParserTest.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UnitTest/DecParserUnitTest.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UnitTest/DecParserUnitTest.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UnitTest/InfBinarySectionTest.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/UnitTest/InfBinarySectionTest.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/CommonXml.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/CommonXml.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/GuidProtocolPpiXml.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/GuidProtocolPpiXml.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/IniToXml.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/IniToXml.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/ModuleSurfaceAreaXml.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/ModuleSurfaceAreaXml.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/PackageSurfaceAreaXml.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/PackageSurfaceAreaXml.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/PcdXml.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/PcdXml.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/XmlParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/XmlParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/XmlParserMisc.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/XmlParserMisc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/__init__.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/UPT/Xml/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Workspace/BuildClassObject.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Workspace/BuildClassObject.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Workspace/MetaDataTable.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Workspace/MetaDataTable.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Workspace/MetaFileParser.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Workspace/MetaFileParser.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Workspace/MetaFileTable.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Workspace/MetaFileTable.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/build/BuildReport.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/build/BuildReport.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/build/build.py b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/build/build.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd
index 9c1178a..b962910 100644
Binary files a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd and b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd differ
diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd
index be17d03..987a305 100644
Binary files a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd and b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd differ
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
index 072db21..c63998a 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
@@ -1651,7 +1651,7 @@ vga_read_char_attr_: ; 0xc0acb LB 0xa8
call 02f5ah ; e8 3a 24
movzx bx, ch ; 0f b6 dd
sal bx, 003h ; c1 e3 03
- cmp byte [bx+04633h], 000h ; 80 bf 33 46 00
+ cmp byte [bx+0462fh], 000h ; 80 bf 2f 46 00
jne short 00b5ah ; 75 2d
mov dx, ax ; 89 c2
imul dx, di ; 0f af d7
@@ -1667,7 +1667,7 @@ vga_read_char_attr_: ; 0xc0acb LB 0xa8
add ax, ax ; 01 c0
mov dx, cx ; 89 ca
add dx, ax ; 01 c2
- mov ax, word [bx+04636h] ; 8b 87 36 46
+ mov ax, word [bx+04632h] ; 8b 87 32 46
call 02f5ah ; e8 03 24
mov word [ss:si], ax ; 36 89 04
lea sp, [bp-008h] ; 8d 66 f8
@@ -1733,18 +1733,18 @@ vga_get_font_info_: ; 0xc0b73 LB 0x82
retn 00002h ; c2 02 00
mov dx, 0010ch ; ba 0c 01
jmp short 00b91h ; eb bf
- mov ax, 05bf0h ; b8 f0 5b
+ mov ax, 05bech ; b8 ec 5b
mov dx, 0c000h ; ba 00 c0
jmp short 00b96h ; eb bc
- mov ax, 053f0h ; b8 f0 53
+ mov ax, 053ech ; b8 ec 53
jmp short 00bd5h ; eb f6
- mov ax, 057f0h ; b8 f0 57
+ mov ax, 057ech ; b8 ec 57
jmp short 00bd5h ; eb f1
- mov ax, 079f0h ; b8 f0 79
+ mov ax, 079ech ; b8 ec 79
jmp short 00bd5h ; eb ec
- mov ax, 069f0h ; b8 f0 69
+ mov ax, 069ech ; b8 ec 69
jmp short 00bd5h ; eb e7
- mov ax, 07b1dh ; b8 1d 7b
+ mov ax, 07b19h ; b8 19 7b
jmp short 00bd5h ; eb e2
jmp short 00bc4h ; eb cf
vga_read_pixel_: ; 0xc0bf5 LB 0x139
@@ -1766,9 +1766,9 @@ vga_read_pixel_: ; 0xc0bf5 LB 0x139
je near 00d27h ; 0f 84 0d 01
movzx bx, al ; 0f b6 d8
sal bx, 003h ; c1 e3 03
- cmp byte [bx+04633h], 000h ; 80 bf 33 46 00
+ cmp byte [bx+0462fh], 000h ; 80 bf 2f 46 00
je near 00d27h ; 0f 84 fe 00
- mov bl, byte [bx+04634h] ; 8a 9f 34 46
+ mov bl, byte [bx+04630h] ; 8a 9f 30 46
cmp bl, 003h ; 80 fb 03
jc short 00c43h ; 72 11
jbe short 00c4bh ; 76 17
@@ -1827,7 +1827,7 @@ vga_read_pixel_: ; 0xc0bf5 LB 0x139
call 02f3eh ; e8 7b 22
movzx bx, cl ; 0f b6 d9
sal bx, 003h ; c1 e3 03
- cmp byte [bx+04635h], 002h ; 80 bf 35 46 02
+ cmp byte [bx+04631h], 002h ; 80 bf 31 46 02
jne short 00cebh ; 75 1b
mov cx, si ; 89 f1
xor ch, ch ; 30 ed
@@ -2128,7 +2128,7 @@ biosfn_set_active_page_: ; 0xc0f00 LB 0xdc
movzx bx, ch ; 0f b6 dd
mov si, bx ; 89 de
sal si, 003h ; c1 e6 03
- cmp byte [si+04633h], 000h ; 80 bc 33 46 00
+ cmp byte [si+0462fh], 000h ; 80 bc 2f 46 00
jne short 00f83h ; 75 40
mov dx, strict word 0004ah ; ba 4a 00
mov ax, strict word 00040h ; b8 40 00
@@ -2155,10 +2155,10 @@ biosfn_set_active_page_: ; 0xc0f00 LB 0xdc
lea bx, [si+001h] ; 8d 5c 01
imul bx, di ; 0f af df
jmp short 00f95h ; eb 12
- movzx bx, byte [bx+046b2h] ; 0f b6 9f b2 46
+ movzx bx, byte [bx+046aeh] ; 0f b6 9f ae 46
sal bx, 006h ; c1 e3 06
movzx ax, cl ; 0f b6 c1
- mov bx, word [bx+046c9h] ; 8b 9f c9 46
+ mov bx, word [bx+046c5h] ; 8b 9f c5 46
imul bx, ax ; 0f af d8
mov dx, strict word 00063h ; ba 63 00
mov ax, strict word 00040h ; b8 40 00
@@ -2226,15 +2226,15 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
cmp AL, strict byte 0ffh ; 3c ff
je near 01363h ; 0f 84 43 03
movzx si, al ; 0f b6 f0
- mov al, byte [si+046b2h] ; 8a 84 b2 46
+ mov al, byte [si+046aeh] ; 8a 84 ae 46
mov byte [bp-00eh], al ; 88 46 f2
movzx bx, al ; 0f b6 d8
sal bx, 006h ; c1 e3 06
- movzx ax, byte [bx+046c6h] ; 0f b6 87 c6 46
+ movzx ax, byte [bx+046c2h] ; 0f b6 87 c2 46
mov word [bp-018h], ax ; 89 46 e8
- movzx ax, byte [bx+046c7h] ; 0f b6 87 c7 46
+ movzx ax, byte [bx+046c3h] ; 0f b6 87 c3 46
mov word [bp-016h], ax ; 89 46 ea
- movzx ax, byte [bx+046c8h] ; 0f b6 87 c8 46
+ movzx ax, byte [bx+046c4h] ; 0f b6 87 c4 46
mov word [bp-014h], ax ; 89 46 ec
mov dx, 00087h ; ba 87 00
mov ax, strict word 00040h ; b8 40 00
@@ -2250,13 +2250,13 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
jne near 010f5h ; 0f 85 8a 00
mov bx, si ; 89 f3
sal bx, 003h ; c1 e3 03
- mov al, byte [bx+04638h] ; 8a 87 38 46
+ mov al, byte [bx+04634h] ; 8a 87 34 46
mov dx, 003c6h ; ba c6 03
out DX, AL ; ee
xor al, al ; 30 c0
mov dx, 003c8h ; ba c8 03
out DX, AL ; ee
- mov bl, byte [bx+04639h] ; 8a 9f 39 46
+ mov bl, byte [bx+04635h] ; 8a 9f 35 46
cmp bl, 001h ; 80 fb 01
jc short 01095h ; 72 0e
jbe short 0109eh ; 76 15
@@ -2267,13 +2267,13 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
jmp short 010abh ; eb 16
test bl, bl ; 84 db
jne short 010abh ; 75 12
- mov di, 04e46h ; bf 46 4e
+ mov di, 04e42h ; bf 42 4e
jmp short 010abh ; eb 0d
- mov di, 04f06h ; bf 06 4f
+ mov di, 04f02h ; bf 02 4f
jmp short 010abh ; eb 08
- mov di, 04fc6h ; bf c6 4f
+ mov di, 04fc2h ; bf c2 4f
jmp short 010abh ; eb 03
- mov di, 05086h ; bf 86 50
+ mov di, 05082h ; bf 82 50
xor bx, bx ; 31 db
jmp short 010beh ; eb 0f
xor al, al ; 30 c0
@@ -2286,8 +2286,8 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
jnc short 010e8h ; 73 2a
movzx si, byte [bp-012h] ; 0f b6 76 ee
sal si, 003h ; c1 e6 03
- movzx si, byte [si+04639h] ; 0f b6 b4 39 46
- movzx dx, byte [si+046c2h] ; 0f b6 94 c2 46
+ movzx si, byte [si+04635h] ; 0f b6 b4 35 46
+ movzx dx, byte [si+046beh] ; 0f b6 94 be 46
cmp bx, dx ; 39 d3
jnbe short 010afh ; 77 dc
imul si, bx, strict byte 00003h ; 6b f3 03
@@ -2319,7 +2319,7 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
movzx si, byte [bp-00eh] ; 0f b6 76 f2
sal si, 006h ; c1 e6 06
add si, bx ; 01 de
- mov al, byte [si+046e9h] ; 8a 84 e9 46
+ mov al, byte [si+046e5h] ; 8a 84 e5 46
out DX, AL ; ee
inc bx ; 43
jmp short 010ffh ; eb e4
@@ -2343,7 +2343,7 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
movzx si, byte [bp-00eh] ; 0f b6 76 f2
sal si, 006h ; c1 e6 06
add si, bx ; 01 de
- mov al, byte [si+046cah] ; 8a 84 ca 46
+ mov al, byte [si+046c6h] ; 8a 84 c6 46
mov dx, 003c5h ; ba c5 03
out DX, AL ; ee
inc bx ; 43
@@ -2358,14 +2358,14 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
movzx si, byte [bp-00eh] ; 0f b6 76 f2
sal si, 006h ; c1 e6 06
add si, bx ; 01 de
- mov al, byte [si+046fdh] ; 8a 84 fd 46
+ mov al, byte [si+046f9h] ; 8a 84 f9 46
mov dx, 003cfh ; ba cf 03
out DX, AL ; ee
inc bx ; 43
jmp short 01156h ; eb e1
movzx bx, byte [bp-012h] ; 0f b6 5e ee
sal bx, 003h ; c1 e3 03
- cmp byte [bx+04634h], 001h ; 80 bf 34 46 01
+ cmp byte [bx+04630h], 001h ; 80 bf 30 46 01
jne short 01188h ; 75 05
mov dx, 003b4h ; ba b4 03
jmp short 0118bh ; eb 03
@@ -2385,12 +2385,12 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
mov di, cx ; 89 cf
add di, bx ; 01 df
lea dx, [si+001h] ; 8d 54 01
- mov al, byte [di+046d0h] ; 8a 85 d0 46
+ mov al, byte [di+046cch] ; 8a 85 cc 46
out DX, AL ; ee
inc bx ; 43
jmp short 01195h ; eb e0
mov bx, cx ; 89 cb
- mov al, byte [bx+046cfh] ; 8a 87 cf 46
+ mov al, byte [bx+046cbh] ; 8a 87 cb 46
mov dx, 003c2h ; ba c2 03
out DX, AL ; ee
mov AL, strict byte 020h ; b0 20
@@ -2404,9 +2404,9 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
jne short 01230h ; 75 5f
movzx bx, byte [bp-012h] ; 0f b6 5e ee
sal bx, 003h ; c1 e3 03
- cmp byte [bx+04633h], 000h ; 80 bf 33 46 00
+ cmp byte [bx+0462fh], 000h ; 80 bf 2f 46 00
jne short 011f2h ; 75 13
- mov es, [bx+04636h] ; 8e 87 36 46
+ mov es, [bx+04632h] ; 8e 87 32 46
mov cx, 04000h ; b9 00 40
mov ax, 00720h ; b8 20 07
xor di, di ; 31 ff
@@ -2416,7 +2416,7 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
jmp short 01230h ; eb 3e
cmp byte [bp-00ch], 00dh ; 80 7e f4 0d
jnc short 0120ah ; 73 12
- mov es, [bx+04636h] ; 8e 87 36 46
+ mov es, [bx+04632h] ; 8e 87 32 46
mov cx, 04000h ; b9 00 40
xor ax, ax ; 31 c0
xor di, di ; 31 ff
@@ -2434,7 +2434,7 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
mov word [bp-01ah], ax ; 89 46 e6
mov AL, strict byte 00fh ; b0 0f
out DX, AL ; ee
- mov es, [bx+04636h] ; 8e 87 36 46
+ mov es, [bx+04632h] ; 8e 87 32 46
mov cx, 08000h ; b9 00 80
xor ax, ax ; 31 c0
xor di, di ; 31 ff
@@ -2453,7 +2453,7 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
call 02f68h ; e8 1f 1d
movzx bx, byte [bp-00eh] ; 0f b6 5e f2
sal bx, 006h ; c1 e3 06
- mov bx, word [bx+046c9h] ; 8b 9f c9 46
+ mov bx, word [bx+046c5h] ; 8b 9f c5 46
mov dx, strict word 0004ch ; ba 4c 00
mov ax, strict word 00040h ; b8 40 00
call 02f68h ; e8 0b 1d
@@ -2492,7 +2492,7 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
mov ax, strict word 00040h ; b8 40 00
call 02f4ch ; e8 8b 1c
mov cx, ds ; 8c d9
- mov bx, 053d4h ; bb d4 53
+ mov bx, 053d0h ; bb d0 53
mov dx, 000a8h ; ba a8 00
mov ax, strict word 00040h ; b8 40 00
call 02f88h ; e8 b9 1c
@@ -2506,7 +2506,7 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
call 02f4ch ; e8 67 1c
movzx bx, byte [bp-012h] ; 0f b6 5e ee
sal bx, 003h ; c1 e3 03
- cmp byte [bx+04633h], 000h ; 80 bf 33 46 00
+ cmp byte [bx+0462fh], 000h ; 80 bf 2f 46 00
jne short 012fch ; 75 09
mov dx, strict word 00007h ; ba 07 00
mov ax, strict word 00006h ; b8 06 00
@@ -2524,7 +2524,7 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
call 00f00h ; e8 eb fb
movzx bx, byte [bp-012h] ; 0f b6 5e ee
sal bx, 003h ; c1 e3 03
- cmp byte [bx+04633h], 000h ; 80 bf 33 46 00
+ cmp byte [bx+0462fh], 000h ; 80 bf 2f 46 00
jne short 01333h ; 75 10
xor bl, bl ; 30 db
mov AL, strict byte 004h ; b0 04
@@ -2534,7 +2534,7 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
mov AL, strict byte 003h ; b0 03
mov AH, strict byte 011h ; b4 11
int 010h ; cd 10
- mov dx, 057f0h ; ba f0 57
+ mov dx, 057ech ; ba ec 57
mov ax, strict word 0001fh ; b8 1f 00
call 00a00h ; e8 c4 f6
mov ax, word [bp-014h] ; 8b 46 ec
@@ -2544,13 +2544,13 @@ biosfn_set_video_mode_: ; 0xc0fdc LB 0x391
je short 01359h ; 74 10
cmp ax, strict word 00008h ; 3d 08 00
jne short 01363h ; 75 15
- mov dx, 053f0h ; ba f0 53
+ mov dx, 053ech ; ba ec 53
mov ax, strict word 00043h ; b8 43 00
call 00a00h ; e8 a9 f6
jmp short 01363h ; eb 0a
- mov dx, 05bf0h ; ba f0 5b
+ mov dx, 05bech ; ba ec 5b
jmp short 01351h ; eb f3
- mov dx, 069f0h ; ba f0 69
+ mov dx, 069ech ; ba ec 69
jmp short 01351h ; eb ee
lea sp, [bp-00ah] ; 8d 66 f6
pop di ; 5f
@@ -2860,7 +2860,7 @@ biosfn_scroll_: ; 0xc1572 LB 0x506
mov word [bp-01ah], ax ; 89 46 e6
mov ax, word [bp-016h] ; 8b 46 ea
imul ax, cx ; 0f af c1
- cmp byte [di+04633h], 000h ; 80 bd 33 46 00
+ cmp byte [di+0462fh], 000h ; 80 bd 2f 46 00
jne near 017d1h ; 0f 85 9f 01
mov dx, ax ; 89 c2
add dx, ax ; 01 c2
@@ -2883,7 +2883,7 @@ biosfn_scroll_: ; 0xc1572 LB 0x506
movzx dx, byte [bp-00ch] ; 0f b6 56 f4
sal dx, 008h ; c1 e2 08
add dx, strict byte 00020h ; 83 c2 20
- mov es, [di+04636h] ; 8e 85 36 46
+ mov es, [di+04632h] ; 8e 85 32 46
mov cx, ax ; 89 c1
mov ax, dx ; 89 d0
mov di, bx ; 89 df
@@ -2917,7 +2917,7 @@ biosfn_scroll_: ; 0xc1572 LB 0x506
add di, dx ; 01 d7
movzx si, byte [bp-00eh] ; 0f b6 76 f2
sal si, 003h ; c1 e6 03
- mov es, [si+04636h] ; 8e 84 36 46
+ mov es, [si+04632h] ; 8e 84 32 46
cld ; fc
jcxz 016ddh ; e3 02
rep stosw ; f3 ab
@@ -2931,7 +2931,7 @@ biosfn_scroll_: ; 0xc1572 LB 0x506
add dx, dx ; 01 d2
movzx si, byte [bp-00eh] ; 0f b6 76 f2
sal si, 003h ; c1 e6 03
- mov ax, word [si+04636h] ; 8b 84 36 46
+ mov ax, word [si+04632h] ; 8b 84 32 46
mov si, word [bp-014h] ; 8b 76 ec
imul si, word [bp-016h] ; 0f af 76 ea
add cx, si ; 01 f1
@@ -2975,7 +2975,7 @@ biosfn_scroll_: ; 0xc1572 LB 0x506
add di, dx ; 01 d7
movzx si, byte [bp-00eh] ; 0f b6 76 f2
sal si, 003h ; c1 e6 03
- mov es, [si+04636h] ; 8e 84 36 46
+ mov es, [si+04632h] ; 8e 84 32 46
cld ; fc
jcxz 0177eh ; e3 02
rep stosw ; f3 ab
@@ -2990,7 +2990,7 @@ biosfn_scroll_: ; 0xc1572 LB 0x506
add dx, dx ; 01 d2
movzx si, byte [bp-00eh] ; 0f b6 76 f2
sal si, 003h ; c1 e6 03
- mov ax, word [si+04636h] ; 8b 84 36 46
+ mov ax, word [si+04632h] ; 8b 84 32 46
mov si, word [bp-014h] ; 8b 76 ec
imul si, word [bp-016h] ; 0f af 76 ea
add di, si ; 01 f7
@@ -3010,11 +3010,11 @@ biosfn_scroll_: ; 0xc1572 LB 0x506
jc near 01a6fh ; 0f 82 a4 02
dec word [bp-014h] ; ff 4e ec
jmp near 0172dh ; e9 5c ff
- movzx bx, byte [si+046b2h] ; 0f b6 9c b2 46
+ movzx bx, byte [si+046aeh] ; 0f b6 9c ae 46
sal bx, 006h ; c1 e3 06
- mov dl, byte [bx+046c8h] ; 8a 97 c8 46
+ mov dl, byte [bx+046c4h] ; 8a 97 c4 46
mov byte [bp-00ah], dl ; 88 56 f6
- mov bl, byte [di+04634h] ; 8a 9d 34 46
+ mov bl, byte [di+04630h] ; 8a 9d 30 46
cmp bl, 004h ; 80 fb 04
je short 017f8h ; 74 0f
cmp bl, 003h ; 80 fb 03
@@ -3047,7 +3047,7 @@ biosfn_scroll_: ; 0xc1572 LB 0x506
movzx ax, byte [bp-00ch] ; 0f b6 46 f4
movzx bx, byte [bp-00eh] ; 0f b6 5e f2
sal bx, 003h ; c1 e3 03
- mov es, [bx+04636h] ; 8e 87 36 46
+ mov es, [bx+04632h] ; 8e 87 32 46
xor di, di ; 31 ff
cld ; fc
jcxz 01849h ; e3 02
@@ -3129,7 +3129,7 @@ biosfn_scroll_: ; 0xc1572 LB 0x506
jc near 01a6fh ; 0f 82 3d 01
dec word [bp-014h] ; ff 4e ec
jmp short 018c6h ; eb 8f
- mov dl, byte [di+04635h] ; 8a 95 35 46
+ mov dl, byte [di+04631h] ; 8a 95 31 46
cmp byte [bp-010h], 000h ; 80 7e f0 00
jne short 0197eh ; 75 3d
cmp byte [bp-008h], 000h ; 80 7e f8 00
@@ -3147,7 +3147,7 @@ biosfn_scroll_: ; 0xc1572 LB 0x506
movzx cx, dl ; 0f b6 ca
imul cx, ax ; 0f af c8
movzx ax, byte [bp-00ch] ; 0f b6 46 f4
- mov es, [di+04636h] ; 8e 85 36 46
+ mov es, [di+04632h] ; 8e 85 32 46
xor di, di ; 31 ff
cld ; fc
jcxz 0197bh ; e3 02
@@ -3249,11 +3249,11 @@ write_gfx_char_pl4_: ; 0xc1a78 LB 0xeb
je short 01a96h ; 74 0b
cmp byte [bp+006h], 00eh ; 80 7e 06 0e
jne short 01a9bh ; 75 0a
- mov di, 05bf0h ; bf f0 5b
+ mov di, 05bech ; bf ec 5b
jmp short 01a9eh ; eb 08
- mov di, 069f0h ; bf f0 69
+ mov di, 069ech ; bf ec 69
jmp short 01a9eh ; eb 03
- mov di, 053f0h ; bf f0 53
+ mov di, 053ech ; bf ec 53
movzx si, cl ; 0f b6 f1
movzx bx, byte [bp+006h] ; 0f b6 5e 06
imul si, bx ; 0f af f3
@@ -3340,7 +3340,7 @@ write_gfx_char_cga_: ; 0xc1b63 LB 0x11e
push di ; 57
sub sp, strict byte 00008h ; 83 ec 08
mov byte [bp-008h], dl ; 88 56 f8
- mov si, 053f0h ; be f0 53
+ mov si, 053ech ; be ec 53
xor bh, bh ; 30 ff
movzx di, byte [bp+006h] ; 0f b6 7e 06
imul di, bx ; 0f af fb
@@ -3454,7 +3454,7 @@ write_gfx_char_lin_: ; 0xc1c81 LB 0x91
push di ; 57
sub sp, strict byte 00008h ; 83 ec 08
mov byte [bp-006h], dl ; 88 56 fa
- mov di, 053f0h ; bf f0 53
+ mov di, 053ech ; bf ec 53
movzx dx, cl ; 0f b6 d1
movzx cx, byte [bp+004h] ; 0f b6 4e 04
imul cx, dx ; 0f af ca
@@ -3549,7 +3549,7 @@ biosfn_write_char_attr_: ; 0xc1d12 LB 0x168
movzx bx, cl ; 0f b6 d9
mov di, bx ; 89 df
sal di, 003h ; c1 e7 03
- cmp byte [di+04633h], 000h ; 80 bd 33 46 00
+ cmp byte [di+0462fh], 000h ; 80 bd 2f 46 00
jne short 01dcdh ; 75 47
mov bx, word [bp-018h] ; 8b 5e e8
imul bx, ax ; 0f af d8
@@ -3570,18 +3570,18 @@ biosfn_write_char_attr_: ; 0xc1d12 LB 0x168
add ax, bx ; 01 d8
mov word [bp-01ah], ax ; 89 46 e6
mov ax, word [bp-01ah] ; 8b 46 e6
- mov es, [di+04636h] ; 8e 85 36 46
+ mov es, [di+04632h] ; 8e 85 32 46
mov cx, si ; 89 f1
mov di, dx ; 89 d7
cld ; fc
jcxz 01dcah ; e3 02
rep stosw ; f3 ab
jmp near 01e73h ; e9 a6 00
- movzx bx, byte [bx+046b2h] ; 0f b6 9f b2 46
+ movzx bx, byte [bx+046aeh] ; 0f b6 9f ae 46
sal bx, 006h ; c1 e3 06
- mov al, byte [bx+046c8h] ; 8a 87 c8 46
+ mov al, byte [bx+046c4h] ; 8a 87 c4 46
mov byte [bp-008h], al ; 88 46 f8
- mov al, byte [di+04635h] ; 8a 85 35 46
+ mov al, byte [di+04631h] ; 8a 85 31 46
mov byte [bp-014h], al ; 88 46 ec
dec si ; 4e
cmp si, strict byte 0ffffh ; 83 fe ff
@@ -3591,7 +3591,7 @@ biosfn_write_char_attr_: ; 0xc1d12 LB 0x168
jnc near 01e73h ; 0f 83 7d 00
movzx bx, byte [bp-006h] ; 0f b6 5e fa
sal bx, 003h ; c1 e3 03
- mov al, byte [bx+04634h] ; 8a 87 34 46
+ mov al, byte [bx+04630h] ; 8a 87 30 46
cmp AL, strict byte 003h ; 3c 03
jc short 01e11h ; 72 0c
jbe short 01e17h ; 76 10
@@ -3679,7 +3679,7 @@ biosfn_write_char_only_: ; 0xc1e7a LB 0x16f
movzx di, cl ; 0f b6 f9
mov bx, di ; 89 fb
sal bx, 003h ; c1 e3 03
- cmp byte [bx+04633h], 000h ; 80 bf 33 46 00
+ cmp byte [bx+0462fh], 000h ; 80 bf 2f 46 00
jne short 01f38h ; 75 4a
mov dx, word [bp-018h] ; 8b 56 e8
imul dx, ax ; 0f af d0
@@ -3701,7 +3701,7 @@ biosfn_write_char_only_: ; 0xc1e7a LB 0x16f
movzx ax, byte [bp-012h] ; 0f b6 46 ee
movzx bx, byte [bp-00eh] ; 0f b6 5e f2
sal bx, 003h ; c1 e3 03
- mov di, word [bx+04636h] ; 8b bf 36 46
+ mov di, word [bx+04632h] ; 8b bf 32 46
mov bx, ax ; 89 c3
mov dx, cx ; 89 ca
mov ax, di ; 89 f8
@@ -3709,11 +3709,11 @@ biosfn_write_char_only_: ; 0xc1e7a LB 0x16f
inc cx ; 41
inc cx ; 41
jmp short 01f14h ; eb dc
- movzx di, byte [di+046b2h] ; 0f b6 bd b2 46
+ movzx di, byte [di+046aeh] ; 0f b6 bd ae 46
sal di, 006h ; c1 e7 06
- mov al, byte [di+046c8h] ; 8a 85 c8 46
+ mov al, byte [di+046c4h] ; 8a 85 c4 46
mov byte [bp-00ah], al ; 88 46 f6
- mov al, byte [bx+04635h] ; 8a 87 35 46
+ mov al, byte [bx+04631h] ; 8a 87 31 46
mov byte [bp-008h], al ; 88 46 f8
dec si ; 4e
cmp si, strict byte 0ffffh ; 83 fe ff
@@ -3723,7 +3723,7 @@ biosfn_write_char_only_: ; 0xc1e7a LB 0x16f
jnc near 01fe2h ; 0f 83 81 00
movzx bx, byte [bp-00eh] ; 0f b6 5e f2
sal bx, 003h ; c1 e3 03
- mov bl, byte [bx+04634h] ; 8a 9f 34 46
+ mov bl, byte [bx+04630h] ; 8a 9f 30 46
cmp bl, 003h ; 80 fb 03
jc short 01f7fh ; 72 0e
jbe short 01f86h ; 76 13
@@ -3786,9 +3786,9 @@ biosfn_write_pixel_: ; 0xc1fe9 LB 0x16a
je near 0212bh ; 0f 84 1e 01
movzx bx, al ; 0f b6 d8
sal bx, 003h ; c1 e3 03
- cmp byte [bx+04633h], 000h ; 80 bf 33 46 00
+ cmp byte [bx+0462fh], 000h ; 80 bf 2f 46 00
je near 0212bh ; 0f 84 0f 01
- mov al, byte [bx+04634h] ; 8a 87 34 46
+ mov al, byte [bx+04630h] ; 8a 87 30 46
cmp AL, strict byte 003h ; 3c 03
jc short 02033h ; 72 0f
jbe short 0203ah ; 76 14
@@ -3842,7 +3842,7 @@ biosfn_write_pixel_: ; 0xc1fe9 LB 0x16a
mov ax, cx ; 89 c8
shr ax, 1 ; d1 e8
imul ax, ax, strict byte 00050h ; 6b c0 50
- cmp byte [bx+04635h], 002h ; 80 bf 35 46 02
+ cmp byte [bx+04631h], 002h ; 80 bf 31 46 02
jne short 020b5h ; 75 08
mov bx, word [bp-00ah] ; 8b 5e f6
shr bx, 002h ; c1 eb 02
@@ -3860,7 +3860,7 @@ biosfn_write_pixel_: ; 0xc1fe9 LB 0x16a
mov bl, al ; 88 c3
movzx si, byte [bp-004h] ; 0f b6 76 fc
sal si, 003h ; c1 e6 03
- cmp byte [si+04635h], 002h ; 80 bc 35 46 02
+ cmp byte [si+04631h], 002h ; 80 bc 31 46 02
jne short 020fbh ; 75 19
mov al, byte [bp-00ah] ; 8a 46 f6
and AL, strict byte 003h ; 24 03
@@ -3973,7 +3973,7 @@ biosfn_write_teletype_: ; 0xc2153 LB 0x241
movzx bx, byte [bp-010h] ; 0f b6 5e f0
mov si, bx ; 89 de
sal si, 003h ; c1 e6 03
- cmp byte [si+04633h], 000h ; 80 bc 33 46 00
+ cmp byte [si+0462fh], 000h ; 80 bc 2f 46 00
jne short 02256h ; 75 4d
mov ax, word [bp-012h] ; 8b 46 ee
imul ax, word [bp-014h] ; 0f af 46 ec
@@ -3990,7 +3990,7 @@ biosfn_write_teletype_: ; 0xc2153 LB 0x241
add ax, ax ; 01 c0
add cx, ax ; 01 c1
movzx bx, byte [bp-00ch] ; 0f b6 5e f4
- mov ax, word [si+04636h] ; 8b 84 36 46
+ mov ax, word [si+04632h] ; 8b 84 32 46
mov dx, cx ; 89 ca
call 02f4ch ; e8 0f 0d
cmp byte [bp-00eh], 003h ; 80 7e f2 03
@@ -3998,14 +3998,14 @@ biosfn_write_teletype_: ; 0xc2153 LB 0x241
movzx bx, byte [bp-004h] ; 0f b6 5e fc
mov dx, cx ; 89 ca
inc dx ; 42
- mov ax, word [si+04636h] ; 8b 84 36 46
+ mov ax, word [si+04632h] ; 8b 84 32 46
call 02f4ch ; e8 f9 0c
jmp near 022d4h ; e9 7e 00
- movzx bx, byte [bx+046b2h] ; 0f b6 9f b2 46
+ movzx bx, byte [bx+046aeh] ; 0f b6 9f ae 46
sal bx, 006h ; c1 e3 06
- mov ah, byte [bx+046c8h] ; 8a a7 c8 46
- mov dl, byte [si+04635h] ; 8a 94 35 46
- mov al, byte [si+04634h] ; 8a 84 34 46
+ mov ah, byte [bx+046c4h] ; 8a a7 c4 46
+ mov dl, byte [si+04631h] ; 8a 94 31 46
+ mov al, byte [si+04630h] ; 8a 84 30 46
cmp AL, strict byte 003h ; 3c 03
jc short 0227ah ; 72 0c
jbe short 02280h ; 76 10
@@ -4061,7 +4061,7 @@ biosfn_write_teletype_: ; 0xc2153 LB 0x241
mov bl, byte [bp-012h] ; 8a 5e ee
db 0feh, 0cbh
; dec bl ; fe cb
- cmp byte [si+04633h], 000h ; 80 bc 33 46 00
+ cmp byte [si+0462fh], 000h ; 80 bc 2f 46 00
jne short 02354h ; 75 4a
mov ax, word [bp-012h] ; 8b 46 ee
imul ax, word [bp-014h] ; 0f af 46 ec
@@ -4080,7 +4080,7 @@ biosfn_write_teletype_: ; 0xc2153 LB 0x241
mov dx, cx ; 89 ca
add dx, ax ; 01 c2
inc dx ; 42
- mov ax, word [si+04636h] ; 8b 84 36 46
+ mov ax, word [si+04632h] ; 8b 84 32 46
call 02f3eh ; e8 02 0c
push strict byte 00001h ; 6a 01
movzx dx, byte [bp-006h] ; 0f b6 56 fa
@@ -4355,7 +4355,7 @@ biosfn_load_text_8_14_pat_: ; 0xc2538 LB 0x70
mov di, bx ; 89 df
sal di, 005h ; c1 e7 05
add di, word [bp-00ch] ; 03 7e f4
- add si, 05bf0h ; 81 c6 f0 5b
+ add si, 05bech ; 81 c6 ec 5b
mov cx, strict word 0000eh ; b9 0e 00
mov dx, 0c000h ; ba 00 c0
mov ax, 0a000h ; b8 00 a0
@@ -4411,7 +4411,7 @@ biosfn_load_text_8_8_pat_: ; 0xc25a8 LB 0x72
mov di, bx ; 89 df
sal di, 005h ; c1 e7 05
add di, word [bp-00ch] ; 03 7e f4
- add si, 053f0h ; 81 c6 f0 53
+ add si, 053ech ; 81 c6 ec 53
mov cx, strict word 00008h ; b9 08 00
mov dx, 0c000h ; ba 00 c0
mov ax, 0a000h ; b8 00 a0
@@ -4467,7 +4467,7 @@ biosfn_load_text_8_16_pat_: ; 0xc261a LB 0x72
mov di, bx ; 89 df
sal di, 005h ; c1 e7 05
add di, word [bp-00ch] ; 03 7e f4
- add si, 069f0h ; 81 c6 f0 69
+ add si, 069ech ; 81 c6 ec 69
mov cx, strict word 00010h ; b9 10 00
mov dx, 0c000h ; ba 00 c0
mov ax, 0a000h ; b8 00 a0
@@ -4601,7 +4601,7 @@ biosfn_read_state_info_: ; 0xc2752 LB 0x101
push dx ; 52
push bx ; 53
mov cx, ds ; 8c d9
- mov bx, 05386h ; bb 86 53
+ mov bx, 05382h ; bb 82 53
mov dx, word [bp-00ah] ; 8b 56 f6
mov ax, word [bp-008h] ; 8b 46 f8
call 02f88h ; e8 20 08
@@ -5501,7 +5501,7 @@ find_vga_entry_: ; 0xc2f17 LB 0x27
jnbe short 02f38h ; 77 0e
movzx bx, al ; 0f b6 d8
sal bx, 003h ; c1 e3 03
- cmp dl, byte [bx+04632h] ; 3a 97 32 46
+ cmp dl, byte [bx+0462eh] ; 3a 97 2e 46
jne short 02f24h ; 75 ee
mov ah, al ; 88 c4
mov al, ah ; 88 e0
@@ -6202,7 +6202,7 @@ vbe_biosfn_return_controller_information_: ; 0xc3503 LB 0x129
db 066h, 026h, 0c7h, 007h, 056h, 045h, 053h, 041h
; mov dword [es:bx], strict dword 041534556h ; 66 26 c7 07 56 45 53 41
mov word [es:bx+004h], 00200h ; 26 c7 47 04 00 02
- mov word [es:bx+006h], 07c62h ; 26 c7 47 06 62 7c
+ mov word [es:bx+006h], 07c5eh ; 26 c7 47 06 5e 7c
mov [es:bx+008h], ds ; 26 8c 5f 08
db 066h, 026h, 0c7h, 047h, 00ah, 001h, 000h, 000h, 000h
; mov dword [es:bx+00ah], strict dword 000000001h ; 66 26 c7 47 0a 01 00 00 00
@@ -6218,11 +6218,11 @@ vbe_biosfn_return_controller_information_: ; 0xc3503 LB 0x129
cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00
je short 035d5h ; 74 24
mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00
- mov word [es:bx+016h], 07c77h ; 26 c7 47 16 77 7c
+ mov word [es:bx+016h], 07c73h ; 26 c7 47 16 73 7c
mov [es:bx+018h], ds ; 26 8c 5f 18
- mov word [es:bx+01ah], 07c8ah ; 26 c7 47 1a 8a 7c
+ mov word [es:bx+01ah], 07c86h ; 26 c7 47 1a 86 7c
mov [es:bx+01ch], ds ; 26 8c 5f 1c
- mov word [es:bx+01eh], 07cabh ; 26 c7 47 1e ab 7c
+ mov word [es:bx+01eh], 07ca7h ; 26 c7 47 1e a7 7c
mov [es:bx+020h], ds ; 26 8c 5f 20
mov dx, cx ; 89 ca
add dx, strict byte 0001bh ; 83 c2 1b
@@ -6767,10 +6767,10 @@ vesa_pm_end: ; 0xc4514 LB 0x1
; Padding 0xeb bytes at 0xc4515
times 235 db 0
-section _DATA progbits vstart=0x4600 align=1 ; size=0x3726 class=DATA group=DGROUP
-_msg_vga_init: ; 0xc4600 LB 0x32
- db 'Oracle VM VirtualBox Version 5.0.0_RC3 VGA BIOS', 00dh, 00ah, 000h
-_vga_modes: ; 0xc4632 LB 0x80
+section _DATA progbits vstart=0x4600 align=1 ; size=0x371e class=DATA group=DGROUP
+_msg_vga_init: ; 0xc4600 LB 0x2e
+ db 'Oracle VM VirtualBox Version 5.0.0 VGA BIOS', 00dh, 00ah, 000h
+_vga_modes: ; 0xc462e LB 0x80
db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h
@@ -6779,11 +6779,11 @@ _vga_modes: ; 0xc4632 LB 0x80
db 00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
db 011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
db 013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
-_line_to_vpti: ; 0xc46b2 LB 0x10
+_line_to_vpti: ; 0xc46ae LB 0x10
db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh
-_dac_regs: ; 0xc46c2 LB 0x4
+_dac_regs: ; 0xc46be LB 0x4
dd 0ff3f3f3fh
-_video_param_table: ; 0xc46c6 LB 0x780
+_video_param_table: ; 0xc46c2 LB 0x780
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
@@ -6904,7 +6904,7 @@ _video_param_table: ; 0xc46c6 LB 0x780
db 072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h
db 073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
-_palette0: ; 0xc4e46 LB 0xc0
+_palette0: ; 0xc4e42 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
@@ -6917,7 +6917,7 @@ _palette0: ; 0xc4e46 LB 0xc0
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
-_palette1: ; 0xc4f06 LB 0xc0
+_palette1: ; 0xc4f02 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
@@ -6930,7 +6930,7 @@ _palette1: ; 0xc4f06 LB 0xc0
db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
-_palette2: ; 0xc4fc6 LB 0xc0
+_palette2: ; 0xc4fc2 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah
db 015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh
@@ -6943,7 +6943,7 @@ _palette2: ; 0xc4fc6 LB 0xc0
db 015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh
db 015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
-_palette3: ; 0xc5086 LB 0x300
+_palette3: ; 0xc5082 LB 0x300
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
@@ -6992,19 +6992,19 @@ _palette3: ; 0xc5086 LB 0x300
db 00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh
db 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_static_functionality: ; 0xc5386 LB 0x10
+_static_functionality: ; 0xc5382 LB 0x10
db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h
-_dcc_table: ; 0xc5396 LB 0x24
+_dcc_table: ; 0xc5392 LB 0x24
db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h
-_secondary_save_area: ; 0xc53ba LB 0x1a
- db 01ah, 000h, 096h, 053h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+_secondary_save_area: ; 0xc53b6 LB 0x1a
+ db 01ah, 000h, 092h, 053h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_video_save_pointer_table: ; 0xc53d4 LB 0x1c
- db 0c6h, 046h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 0bah, 053h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_vgafont8: ; 0xc53f0 LB 0x800
+_video_save_pointer_table: ; 0xc53d0 LB 0x1c
+ db 0c2h, 046h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 0b6h, 053h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+_vgafont8: ; 0xc53ec LB 0x800
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh
db 07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h
db 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch
@@ -7133,7 +7133,7 @@ _vgafont8: ; 0xc53f0 LB 0x800
db 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch
db 078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h
db 000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_vgafont14: ; 0xc5bf0 LB 0xe00
+_vgafont14: ; 0xc5bec LB 0xe00
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh
db 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh
@@ -7358,7 +7358,7 @@ _vgafont14: ; 0xc5bf0 LB 0xe00
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_vgafont16: ; 0xc69f0 LB 0x1000
+_vgafont16: ; 0xc69ec LB 0x1000
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h
db 000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h
@@ -7615,7 +7615,7 @@ _vgafont16: ; 0xc69f0 LB 0x1000
db 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_vgafont14alt: ; 0xc79f0 LB 0x12d
+_vgafont14alt: ; 0xc79ec LB 0x12d
db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h
db 000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h
db 000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h
@@ -7635,7 +7635,7 @@ _vgafont14alt: ; 0xc79f0 LB 0x12d
db 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h
db 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h
db 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
-_vgafont16alt: ; 0xc7b1d LB 0x145
+_vgafont16alt: ; 0xc7b19 LB 0x145
db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h
db 000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h
db 000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h
@@ -7657,24 +7657,24 @@ _vgafont16alt: ; 0xc7b1d LB 0x145
db 000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh
db 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
db 006h, 000h, 000h, 000h, 000h
-_vbebios_copyright: ; 0xc7c62 LB 0x15
+_vbebios_copyright: ; 0xc7c5e LB 0x15
db 'VirtualBox VESA BIOS', 000h
-_vbebios_vendor_name: ; 0xc7c77 LB 0x13
+_vbebios_vendor_name: ; 0xc7c73 LB 0x13
db 'Oracle Corporation', 000h
-_vbebios_product_name: ; 0xc7c8a LB 0x21
+_vbebios_product_name: ; 0xc7c86 LB 0x21
db 'Oracle VM VirtualBox VBE Adapter', 000h
-_vbebios_product_revision: ; 0xc7cab LB 0x27
- db 'Oracle VM VirtualBox Version 5.0.0_RC3', 000h
-_vbebios_info_string: ; 0xc7cd2 LB 0x2b
+_vbebios_product_revision: ; 0xc7ca7 LB 0x23
+ db 'Oracle VM VirtualBox Version 5.0.0', 000h
+_vbebios_info_string: ; 0xc7cca LB 0x2b
db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
-_no_vbebios_info_string: ; 0xc7cfd LB 0x29
+_no_vbebios_info_string: ; 0xc7cf5 LB 0x29
db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h
-section CONST progbits vstart=0x7d26 align=1 ; size=0x0 class=DATA group=DGROUP
+section CONST progbits vstart=0x7d1e align=1 ; size=0x0 class=DATA group=DGROUP
-section CONST2 progbits vstart=0x7d26 align=1 ; size=0x0 class=DATA group=DGROUP
+section CONST2 progbits vstart=0x7d1e align=1 ; size=0x0 class=DATA group=DGROUP
- ; Padding 0x2da bytes at 0xc7d26
+ ; Padding 0x2e2 bytes at 0xc7d1e
db 001h, 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh
db 065h, 02fh, 066h, 06dh, 033h, 02fh, 073h, 072h, 063h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 06fh
db 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h
@@ -7720,4 +7720,5 @@ section CONST2 progbits vstart=0x7d26 align=1 ; size=0x0 class=DATA group=DGROUP
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
- db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ach
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 082h
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
index 40c7a0a..c70788c 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
@@ -1 +1 @@
-3cd25bfc319bf0c0eb3d8865c5944e35 *VBoxVgaBios.rom
+4d4a3bac0edc2bcde2596ea9a37e8a82 *VBoxVgaBios.rom
diff --git a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
index 6e7429f..673442c 100644
--- a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
@@ -528,6 +528,8 @@ static int vbvaFlush(PVGASTATE pVGAState, VBVACONTEXT *pCtx)
{
/* Turn off VBVA processing. */
LogRel(("VBVA: Disabling\n", rc));
+ pVGAState->fGuestCaps = 0;
+ pVGAState->pDrv->pfnVBVAGuestCapabilityUpdate(pVGAState->pDrv, pVGAState->fGuestCaps);
for (uScreenId = 0; uScreenId < pCtx->cViews; uScreenId++)
{
VBVADATA *pVBVAData = &pCtx->aViews[uScreenId].vbva;
@@ -637,6 +639,11 @@ static int vbvaDisable (unsigned uScreenId, PVGASTATE pVGAState, VBVACONTEXT *pC
VBVADATA *pVBVAData = &pCtx->aViews[uScreenId].vbva;
vbvaDataCleanup(pVBVAData);
+ if (uScreenId == 0)
+ {
+ pVGAState->fGuestCaps = 0;
+ pVGAState->pDrv->pfnVBVAGuestCapabilityUpdate(pVGAState->pDrv, pVGAState->fGuestCaps);
+ }
pVGAState->pDrv->pfnVBVADisable(pVGAState->pDrv, uScreenId);
return VINF_SUCCESS;
}
@@ -2043,8 +2050,15 @@ int vboxVBVALoadStateDone (PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
#ifdef VBOX_WITH_CRHGSMI
Assert(!vboxCmdVBVAIsEnabled(pVGAState));
#endif
- vbvaEnable (iView, pVGAState, pCtx, pView->vbva.guest.pVBVA, pView->vbva.u32VBVAOffset, true /* fRestored */);
- vbvaResize (pVGAState, pView, &pView->screen);
+ int rc = vbvaEnable(iView, pVGAState, pCtx, pView->vbva.guest.pVBVA, pView->vbva.u32VBVAOffset, true /* fRestored */);
+ if (RT_SUCCESS(rc))
+ {
+ vbvaResize(pVGAState, pView, &pView->screen);
+ }
+ else
+ {
+ LogRel(("VBVA: can not restore: %Rrc\n", rc));
+ }
}
}
@@ -2328,6 +2342,11 @@ static int vbvaHandleEnable(PVGASTATE pVGAState, const VBVAENABLE *pVbvaEnable,
rc = VERR_INVALID_PARAMETER;
}
}
+
+ if (RT_FAILURE(rc))
+ {
+ LogRelMax(8, ("VBVA: can not enable: %Rrc\n", rc));
+ }
}
else if ((parms.u32Flags & (VBVA_F_ENABLE | VBVA_F_DISABLE)) == VBVA_F_DISABLE)
{
diff --git a/src/VBox/Devices/Network/DrvNetSniffer.cpp b/src/VBox/Devices/Network/DrvNetSniffer.cpp
index 4f26982..ed32c44 100644
--- a/src/VBox/Devices/Network/DrvNetSniffer.cpp
+++ b/src/VBox/Devices/Network/DrvNetSniffer.cpp
@@ -31,6 +31,7 @@
#include <iprt/string.h>
#include <iprt/time.h>
#include <iprt/uuid.h>
+#include <iprt/path.h>
#include <VBox/param.h>
#include "Pcap.h"
@@ -488,6 +489,15 @@ static DECLCALLBACK(int) drvNetSnifferConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pC
return PDMDrvHlpVMSetError(pDrvIns, rc, RT_SRC_POS,
N_("Netsniffer cannot open '%s' for writing. The directory must exist and it must be writable for the current user"), pThis->szFilename);
+ char *pszPathReal = RTPathRealDup(pThis->szFilename);
+ if (pszPathReal)
+ {
+ LogRel(("NetSniffer: Sniffing to '%s'\n", pszPathReal));
+ RTStrFree(pszPathReal);
+ }
+ else
+ LogRel(("NetSniffer: Sniffing to '%s'\n", pThis->szFilename));
+
/*
* Write pcap header.
* Some time has gone by since capturing pThis->StartNanoTS so get the
diff --git a/src/VBox/Devices/Network/SrvIntNetR0.cpp b/src/VBox/Devices/Network/SrvIntNetR0.cpp
index 678b776..4f02381 100644
--- a/src/VBox/Devices/Network/SrvIntNetR0.cpp
+++ b/src/VBox/Devices/Network/SrvIntNetR0.cpp
@@ -1103,7 +1103,7 @@ static void intnetR0IfAddrCacheDeleteIt(PINTNETIF pIf, PINTNETADDRCACHE pCache,
break;
case kIntNetAddrType_IPv6:
Log(("intnetR0IfAddrCacheDeleteIt: hIf=%#x MAC=%.6Rhxs IPv6 deleted #%d %RTnaipv6 %s\n",
- pIf->hIf, &pIf->MacAddr, iEntry, pAddr->IPv6, pszMsg));
+ pIf->hIf, &pIf->MacAddr, iEntry, &pAddr->IPv6, pszMsg));
break;
default:
Log(("intnetR0IfAddrCacheDeleteIt: hIf=%RX32 MAC=%.6Rhxs type=%d #%d %.*Rhxs %s\n",
@@ -1446,7 +1446,7 @@ static void intnetR0IfAddrCacheAddIt(PINTNETIF pIf, INTNETADDRTYPE enmAddrType,
break;
case kIntNetAddrType_IPv6:
Log(("intnetR0IfAddrCacheAddIt: hIf=%#x MAC=%.6Rhxs IPv6 added #%d %RTnaipv6 %s\n",
- pIf->hIf, &pIf->MacAddr, pCache->cEntries, pAddr->IPv6, pszMsg));
+ pIf->hIf, &pIf->MacAddr, pCache->cEntries, &pAddr->IPv6, pszMsg));
break;
default:
Log(("intnetR0IfAddrCacheAddIt: hIf=%#x MAC=%.6Rhxs type=%d added #%d %.*Rhxs %s\n",
@@ -1525,7 +1525,7 @@ DECLINLINE(void) intnetR0IfAddrCacheAdd(PINTNETIF pIf, INTNETADDRTYPE enmAddrTyp
if (RT_LIKELY( i > 0
&& ( intnetR0AddrUIsEqualEx((PCRTNETADDRU)pCache->pbEntries, pAddr, cbAddr)
|| (i > 1
- && intnetR0AddrUIsEqualEx((PCRTNETADDRU)(pCache->pbEntries + pCache->cbEntry * i), pAddr, cbAddr))) ))
+ && intnetR0AddrUIsEqualEx((PCRTNETADDRU)(pCache->pbEntries + pCache->cbEntry * (i-1)), pAddr, cbAddr))) ))
return;
intnetR0IfAddrCacheAddSlow(pIf, enmAddrType, pAddr, pszMsg);
diff --git a/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c b/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c
index 9ed5937..dc4ffc3 100644
--- a/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c
+++ b/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c
@@ -534,9 +534,9 @@ dnsproxy_answer(PNATState pData, struct socket *so, struct mbuf *m)
return;
}
+ /* find corresponding query (XXX: but see below) */
query = hash_find_request(pData, *((unsigned short *)buf));
- /* find corresponding query */
if (query == NULL)
{
/* XXX: if we haven't found anything for this request ...
@@ -548,6 +548,19 @@ dnsproxy_answer(PNATState pData, struct socket *so, struct mbuf *m)
return;
}
+ /*
+ * XXX: The whole hash thing is pretty meaningless right now since
+ * we use a separate socket for each request, so we already know
+ * the answer.
+ *
+ * If the answer is not what we expect it to be, then it's
+ * probably a stray or malicious reply and we'd better not free a
+ * query owned by some other socket - that would cause
+ * use-after-free later on.
+ */
+ if (query != so->so_timeout_arg)
+ return;
+
so->so_timeout = NULL;
so->so_timeout_arg = NULL;
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
index 1ce6f75..4018a8a 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
@@ -981,20 +981,20 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xce0 class=DATA group=DGROUP
db 'APM: Unsupported function AX=%04X BX=%04X called', 00ah, 000h, 000h
db 'PCI: Unsupported function AX=%04X BX=%04X called', 00ah, 000h
-section CONST2 progbits vstart=0xd90 align=1 ; size=0x3fe class=DATA group=DGROUP
-_bios_cvs_version_string: ; 0xf0d90 LB 0x16
- db 'VirtualBox 5.0.0_RC3', 000h, 000h
-_bios_prefix_string: ; 0xf0da6 LB 0x8
+section CONST2 progbits vstart=0xd90 align=1 ; size=0x3fa class=DATA group=DGROUP
+_bios_cvs_version_string: ; 0xf0d90 LB 0x12
+ db 'VirtualBox 5.0.0', 000h, 000h
+_bios_prefix_string: ; 0xf0da2 LB 0x8
db 'BIOS: ', 000h, 000h
-_isotag: ; 0xf0dae LB 0x6
+_isotag: ; 0xf0daa LB 0x6
db 'CD001', 000h
-_eltorito: ; 0xf0db4 LB 0x18
+_eltorito: ; 0xf0db0 LB 0x18
db 'EL TORITO SPECIFICATION', 000h
-_drivetypes: ; 0xf0dcc LB 0x28
+_drivetypes: ; 0xf0dc8 LB 0x28
db 046h, 06ch, 06fh, 070h, 070h, 079h, 000h, 000h, 000h, 000h, 048h, 061h, 072h, 064h, 020h, 044h
db 069h, 073h, 06bh, 000h, 043h, 044h, 02dh, 052h, 04fh, 04dh, 000h, 000h, 000h, 000h, 04ch, 041h
db 04eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_scan_to_scanascii: ; 0xf0df4 LB 0x37a
+_scan_to_scanascii: ; 0xf0df0 LB 0x37a
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01bh, 001h, 01bh, 001h, 01bh, 001h
db 000h, 001h, 000h, 000h, 031h, 002h, 021h, 002h, 000h, 000h, 000h, 078h, 000h, 000h, 032h, 003h
db 040h, 003h, 000h, 003h, 000h, 079h, 000h, 000h, 033h, 004h, 023h, 004h, 000h, 000h, 000h, 07ah
@@ -1051,11 +1051,11 @@ _scan_to_scanascii: ; 0xf0df4 LB 0x37a
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 05ch, 056h, 07ch, 056h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 085h, 000h, 087h, 000h, 089h, 000h, 08bh, 000h, 000h
db 000h, 086h, 000h, 088h, 000h, 08ah, 000h, 08ch, 000h, 000h
-_panic_msg_keyb_buffer_full: ; 0xf116e LB 0x20
+_panic_msg_keyb_buffer_full: ; 0xf116a LB 0x20
db '%s: keyboard input buffer full', 00ah, 000h
- ; Padding 0x472 bytes at 0xf118e
- times 1138 db 0
+ ; Padding 0x476 bytes at 0xf118a
+ times 1142 db 0
section _TEXT progbits vstart=0x1600 align=1 ; size=0x8235 class=CODE group=AUTO
rom_scan_: ; 0xf1600 LB 0x50
@@ -1279,7 +1279,7 @@ _int18_panic_msg: ; 0xf1765 LB 0x12
_log_bios_start: ; 0xf1777 LB 0x20
push bp ; 55
mov bp, sp ; 89 e5
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 ac 01
@@ -2418,7 +2418,7 @@ _ata_detect: ; 0xf1fa7 LB 0x617
mov dx, ss ; 8c d2
lea ax, [bp-036h] ; 8d 46 ca
call 055b6h ; e8 99 33
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 09 f7
@@ -3066,7 +3066,7 @@ ata_cmd_packet_: ; 0xf288f LB 0x2e8
mov byte [bp-006h], ah ; 88 66 fa
cmp byte [bp+00ah], 002h ; 80 7e 0a 02
jne short 028e1h ; 75 1f
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 64 f0
@@ -3946,7 +3946,7 @@ _int13_diskette_function: ; 0xf2f2e LB 0x8f7
je short 0306fh ; 74 05
cmp cl, 048h ; 80 f9 48
jbe short 03099h ; 76 2a
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 b7 e8
@@ -4708,7 +4708,7 @@ _int13_diskette_function: ; 0xf2f2e LB 0x8f7
call 03825h ; e8 29 00
mov word [bp+008h], ax ; 89 46 08
jmp near 036a4h ; e9 a2 fe
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 24 e1
@@ -4805,7 +4805,7 @@ _int13_eltorito: ; 0xf389f LB 0x189
jmp near 039ech ; e9 25 01
cmp ax, strict word 0004ah ; 3d 4a 00
jne near 039ech ; 0f 85 1e 01
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 58 e0
@@ -4903,7 +4903,7 @@ _int13_eltorito: ; 0xf389f LB 0x189
pop si ; 5e
pop bp ; 5d
retn ; c3
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 3a df
@@ -5038,7 +5038,7 @@ cdrom_boot_: ; 0xf3a5d LB 0x416
cmp di, strict byte 00005h ; 83 ff 05
jnc short 03b56h ; 73 10
mov al, byte [bp+di-00825h] ; 8a 83 db f7
- cmp al, byte [di+00daeh] ; 3a 85 ae 0d
+ cmp al, byte [di+00daah] ; 3a 85 aa 0d
je short 03b40h ; 74 f0
mov ax, strict word 00005h ; b8 05 00
jmp near 03e10h ; e9 ba 02
@@ -5048,7 +5048,7 @@ cdrom_boot_: ; 0xf3a5d LB 0x416
cmp di, strict byte 00017h ; 83 ff 17
jnc short 03b70h ; 73 10
mov al, byte [bp+di-0081fh] ; 8a 83 e1 f7
- cmp al, byte [di+00db4h] ; 3a 85 b4 0d
+ cmp al, byte [di+00db0h] ; 3a 85 b0 0d
je short 03b5ah ; 74 f0
mov ax, strict word 00006h ; b8 06 00
jmp near 03e10h ; e9 a0 02
@@ -5326,7 +5326,7 @@ _int13_cdemu: ; 0xf3e73 LB 0x434
xor ah, ah ; 30 e4
cmp dx, ax ; 39 c2
je short 03ef2h ; 74 29
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 5d da
@@ -5548,7 +5548,7 @@ _int13_cdemu: ; 0xf3e73 LB 0x434
; mov dword [es:bx+01ah], strict dword 000000000h ; 66 26 c7 47 1a 00 00 00 00
test al, al ; 84 c0
je near 03f3eh ; 0f 84 13 fe
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 fb d7
@@ -5629,7 +5629,7 @@ _int13_cdemu: ; 0xf3e73 LB 0x434
or bh, 003h ; 80 cf 03
mov word [bp+016h], bx ; 89 5e 16
jmp near 03f42h ; e9 37 fd
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 1b d7
@@ -5840,7 +5840,7 @@ _int13_cdrom: ; 0xf42a7 LB 0x562
mov word [es:bx+002h], ax ; 26 89 47 02
test dl, dl ; 84 d2
je near 04568h ; 0f 84 cb 00
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 89 d4
@@ -6124,7 +6124,7 @@ _int13_cdrom: ; 0xf42a7 LB 0x562
call 0165eh ; e8 79 ce
or byte [bp+01eh], 001h ; 80 4e 1e 01
jmp near 0457bh ; e9 8f fd
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 3a d1
@@ -6154,12 +6154,12 @@ print_boot_device_: ; 0xf4809 LB 0x4b
test bl, 080h ; f6 c3 80
je short 0484eh ; 74 21
mov dx, strict word 00001h ; ba 01 00
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 f6 d0
imul dx, dx, strict byte 0000ah ; 6b d2 0a
- add dx, 00dcch ; 81 c2 cc 0d
+ add dx, 00dc8h ; 81 c2 c8 0d
push dx ; 52
push 00474h ; 68 74 04
push strict byte 00004h ; 6a 04
@@ -6179,11 +6179,11 @@ print_boot_failure_: ; 0xf4854 LB 0x93
movzx si, ah ; 0f b6 f4
test al, al ; 84 c0
je short 04881h ; 74 1b
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 c0 d0
- push 00de0h ; 68 e0 0d
+ push 00ddch ; 68 dc 0d
push 00488h ; 68 88 04
push strict byte 00004h ; 6a 04
call 01972h ; e8 f6 d0
@@ -6191,27 +6191,27 @@ print_boot_failure_: ; 0xf4854 LB 0x93
jmp short 048c5h ; eb 44
test dl, dl ; 84 d2
je short 04895h ; 74 10
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 a1 d0
- push 00deah ; 68 ea 0d
+ push 00de6h ; 68 e6 0d
jmp short 04874h ; eb df
test bl, 080h ; f6 c3 80
je short 048abh ; 74 11
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 8c d0
push si ; 56
- push 00dd6h ; 68 d6 0d
+ push 00dd2h ; 68 d2 0d
jmp short 048bah ; eb 0f
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 7b d0
push si ; 56
- push 00dcch ; 68 cc 0d
+ push 00dc8h ; 68 c8 0d
push 0049dh ; 68 9d 04
push strict byte 00004h ; 6a 04
call 01972h ; e8 b0 d0
@@ -6237,7 +6237,7 @@ print_cdromboot_failure_: ; 0xf48e7 LB 0x27
push cx ; 51
push dx ; 52
mov dx, ax ; 89 c2
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 37 d0
@@ -6312,7 +6312,7 @@ _int19_function: ; 0xf490e LB 0x256
mov byte [bp-006h], al ; 88 46 fa
mov byte [bp-00ah], al ; 88 46 f6
mov byte [bp-00ch], al ; 88 46 f4
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 7b cf
@@ -6874,7 +6874,7 @@ _int09_function: ; 0xf4e74 LB 0x3c7
mov byte [bp-008h], al ; 88 46 f8
test al, al ; 84 c0
jne short 04e9eh ; 75 19
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 a1 ca
@@ -7112,7 +7112,7 @@ _int09_function: ; 0xf4e74 LB 0x3c7
jmp near 05217h ; e9 fa 00
cmp byte [bp-008h], 058h ; 80 7e f8 58
jbe short 05141h ; 76 1e
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 03 c8
@@ -7128,15 +7128,15 @@ _int09_function: ; 0xf4e74 LB 0x3c7
je short 0515ah ; 74 12
movzx bx, byte [bp-008h] ; 0f b6 5e f8
imul bx, bx, strict byte 0000ah ; 6b db 0a
- mov dl, byte [bx+00dfah] ; 8a 97 fa 0d
- mov ax, word [bx+00dfah] ; 8b 87 fa 0d
+ mov dl, byte [bx+00df6h] ; 8a 97 f6 0d
+ mov ax, word [bx+00df6h] ; 8b 87 f6 0d
jmp near 051e8h ; e9 8e 00
test AL, strict byte 004h ; a8 04
je short 05170h ; 74 12
movzx bx, byte [bp-008h] ; 0f b6 5e f8
imul bx, bx, strict byte 0000ah ; 6b db 0a
- mov dl, byte [bx+00df8h] ; 8a 97 f8 0d
- mov ax, word [bx+00df8h] ; 8b 87 f8 0d
+ mov dl, byte [bx+00df4h] ; 8a 97 f4 0d
+ mov ax, word [bx+00df4h] ; 8b 87 f4 0d
jmp near 051e8h ; e9 78 00
mov al, byte [bp-00ch] ; 8a 46 f4
and AL, strict byte 002h ; 24 02
@@ -7155,36 +7155,36 @@ _int09_function: ; 0xf4e74 LB 0x3c7
je short 051c2h ; 74 2e
movzx bx, byte [bp-008h] ; 0f b6 5e f8
imul bx, bx, strict byte 0000ah ; 6b db 0a
- movzx ax, byte [bx+00dfch] ; 0f b6 87 fc 0d
+ movzx ax, byte [bx+00df8h] ; 0f b6 87 f8 0d
movzx dx, byte [bp-00ah] ; 0f b6 56 f6
test dx, ax ; 85 c2
je short 051b2h ; 74 0a
- mov dl, byte [bx+00df4h] ; 8a 97 f4 0d
- mov ax, word [bx+00df4h] ; 8b 87 f4 0d
+ mov dl, byte [bx+00df0h] ; 8a 97 f0 0d
+ mov ax, word [bx+00df0h] ; 8b 87 f0 0d
jmp short 051bah ; eb 08
- mov dl, byte [bx+00df6h] ; 8a 97 f6 0d
- mov ax, word [bx+00df6h] ; 8b 87 f6 0d
+ mov dl, byte [bx+00df2h] ; 8a 97 f2 0d
+ mov ax, word [bx+00df2h] ; 8b 87 f2 0d
shr ax, 008h ; c1 e8 08
mov byte [bp-008h], al ; 88 46 f8
jmp short 051eeh ; eb 2c
movzx bx, byte [bp-008h] ; 0f b6 5e f8
imul bx, bx, strict byte 0000ah ; 6b db 0a
- movzx ax, byte [bx+00dfch] ; 0f b6 87 fc 0d
+ movzx ax, byte [bx+00df8h] ; 0f b6 87 f8 0d
movzx dx, byte [bp-00ah] ; 0f b6 56 f6
test dx, ax ; 85 c2
je short 051e0h ; 74 0a
- mov dl, byte [bx+00df6h] ; 8a 97 f6 0d
- mov ax, word [bx+00df6h] ; 8b 87 f6 0d
+ mov dl, byte [bx+00df2h] ; 8a 97 f2 0d
+ mov ax, word [bx+00df2h] ; 8b 87 f2 0d
jmp short 051e8h ; eb 08
- mov dl, byte [bx+00df4h] ; 8a 97 f4 0d
- mov ax, word [bx+00df4h] ; 8b 87 f4 0d
+ mov dl, byte [bx+00df0h] ; 8a 97 f0 0d
+ mov ax, word [bx+00df0h] ; 8b 87 f0 0d
shr ax, 008h ; c1 e8 08
mov byte [bp-008h], al ; 88 46 f8
cmp byte [bp-008h], 000h ; 80 7e f8 00
jne short 0520eh ; 75 1a
test dl, dl ; 84 d2
jne short 0520eh ; 75 16
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 2e c7
@@ -7550,7 +7550,7 @@ _int16_function: ; 0xf52cf LB 0x2e7
xor ah, ah ; 30 e4
or ah, 080h ; 80 cc 80
jmp near 05442h ; e9 d5 fe
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 b9 c3
@@ -7561,7 +7561,7 @@ _int16_function: ; 0xf52cf LB 0x2e7
push strict byte 00004h ; 6a 04
call 01972h ; e8 eb c3
add sp, strict byte 00006h ; 83 c4 06
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 9c c3
@@ -7767,7 +7767,7 @@ _int13_harddisk: ; 0xf5654 LB 0x441
jnbe short 0576ch ; 77 04
test ax, ax ; 85 c0
jne short 0578fh ; 75 23
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 ba c1
@@ -7796,7 +7796,7 @@ _int13_harddisk: ; 0xf5654 LB 0x441
mov ax, word [bp-006h] ; 8b 46 fa
cmp ax, dx ; 39 d0
jbe short 057eah ; 76 2e
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 6a c1
@@ -7894,7 +7894,7 @@ _int13_harddisk: ; 0xf5654 LB 0x441
mov word [bp+016h], bx ; 89 5e 16
test dl, dl ; 84 d2
je near 056edh ; 0f 84 13 fe
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 4c c0
@@ -7912,7 +7912,7 @@ _int13_harddisk: ; 0xf5654 LB 0x441
xor ah, ah ; 30 e4
or ah, 00ch ; 80 cc 0c
jmp near 05a5ah ; e9 51 01
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 1d c0
@@ -8011,7 +8011,7 @@ _int13_harddisk: ; 0xf5654 LB 0x441
or ah, 003h ; 80 cc 03
mov word [bp+016h], ax ; 89 46 16
jmp near 056f1h ; e9 dd fc
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 12 bf
@@ -8024,7 +8024,7 @@ _int13_harddisk: ; 0xf5654 LB 0x441
call 01972h ; e8 41 bf
add sp, strict byte 00008h ; 83 c4 08
jmp near 056edh ; e9 b6 fc
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 ef be
@@ -8176,7 +8176,7 @@ _int13_harddisk_ext: ; 0xf5a95 LB 0x4cc
mov dx, word [bp-00ah] ; 8b 56 f6
cmp dx, word [es:bx+032h] ; 26 3b 57 32
jc short 05bdch ; 72 23
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 6d bd
@@ -8228,7 +8228,7 @@ _int13_harddisk_ext: ; 0xf5a95 LB 0x4cc
mov word [es:di+002h], ax ; 26 89 45 02
test dl, dl ; 84 d2
je near 05ef7h ; 0f 84 97 02
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 c6 bc
@@ -8464,7 +8464,7 @@ _int13_harddisk_ext: ; 0xf5a95 LB 0x4cc
call 0165eh ; e8 1e b7
or byte [bp+01ch], 001h ; 80 4e 1c 01
jmp short 05f0ah ; eb c4
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 e0 b9
@@ -8766,7 +8766,7 @@ _int15_function: ; 0xf616e LB 0x4cd
mov byte [bp+013h], ah ; 88 66 13
mov word [bp+00ch], ax ; 89 46 0c
jmp near 0624eh ; e9 2b 00
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 03 b7
@@ -9108,7 +9108,7 @@ _int15_function: ; 0xf616e LB 0x4cd
push cx ; 51
retf ; cb
jmp near 0624eh ; e9 b7 fc
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 8f b3
@@ -9148,7 +9148,7 @@ _int15_function: ; 0xf616e LB 0x4cd
jmp near 0624eh ; e9 48 fc
or byte [bp+018h], 001h ; 80 4e 18 01
jmp near 0624eh ; e9 41 fc
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 19 b3
@@ -9461,7 +9461,7 @@ _int15_function32: ; 0xf663b LB 0x37e
mov word [bp+020h], ax ; 89 46 20
mov word [bp+014h], dx ; 89 56 14
jmp short 069b3h ; eb 2a
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 9d af
@@ -9916,7 +9916,7 @@ send_to_mouse_ctrl_: ; 0xf6e1d LB 0x34
test AL, strict byte 002h ; a8 02
je short 06e3ch ; 74 0e
push 008f6h ; 68 f6 08
- push 0116eh ; 68 6e 11
+ push 0116ah ; 68 6a 11
push strict byte 00007h ; 6a 07
call 01972h ; e8 39 ab
add sp, strict byte 00006h ; 83 c4 06
@@ -9979,7 +9979,7 @@ set_kbd_command_byte_: ; 0xf6e8c LB 0x32
test AL, strict byte 002h ; a8 02
je short 06eabh ; 74 0e
push 00900h ; 68 00 09
- push 0116eh ; 68 6e 11
+ push 0116ah ; 68 6a 11
push strict byte 00007h ; 6a 07
call 01972h ; e8 ca aa
add sp, strict byte 00006h ; 83 c4 06
@@ -11392,7 +11392,7 @@ scsi_cmd_packet_: ; 0xf7b89 LB 0x166
mov word [bp-00eh], ax ; 89 46 f2
cmp byte [bp+00ah], 002h ; 80 7e 0a 02
jne short 07bd0h ; 75 1f
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 75 9d
@@ -11605,7 +11605,7 @@ scsi_enumerate_attached_devices_: ; 0xf7cef LB 0x3e4
jne short 07dc9h ; 75 05
cmp ax, 00200h ; 3d 00 02
je short 07de9h ; 74 20
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 5d 9b
@@ -11718,7 +11718,7 @@ scsi_enumerate_attached_devices_: ; 0xf7cef LB 0x3e4
jmp short 07f08h ; eb 07
mov ax, word [bp-01eh] ; 8b 46 e2
mov word [es:bx+028h], ax ; 26 89 47 28
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 1e 9a
@@ -11778,7 +11778,7 @@ scsi_enumerate_attached_devices_: ; 0xf7cef LB 0x3e4
call 0165eh ; e8 ab 96
inc byte [bp-00ch] ; fe 46 f4
jmp near 08041h ; e9 88 00
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 6d 99
@@ -12804,7 +12804,7 @@ ahci_cmd_packet_: ; 0xf896b LB 0x173
mov word [bp-008h], ax ; 89 46 f8
cmp byte [bp+00ah], 002h ; 80 7e 0a 02
jne short 089b1h ; 75 1f
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 94 8f
@@ -13210,7 +13210,7 @@ ahci_port_detect_device_: ; 0xf8ade LB 0x451
mov dx, ss ; 8c d2
lea ax, [bp-026h] ; 8d 46 da
call 055b6h ; e8 c3 c7
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 33 8b
@@ -13685,7 +13685,7 @@ _apm_function: ; 0xf91ce LB 0xf5
jmp short 092bdh ; eb 30
or ah, 080h ; 80 cc 80
jmp short 0927eh ; eb ec
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 94 86
@@ -13979,7 +13979,7 @@ _pci16_function: ; 0xf93de LB 0x1d7
les bx, [bp-008h] ; c4 5e f8
mov word [es:bx], ax ; 26 89 07
jmp short 095aeh ; eb 2d
- mov bx, 00da6h ; bb a6 0d
+ mov bx, 00da2h ; bb a2 0d
mov cx, ds ; 8c d9
mov ax, strict word 00004h ; b8 04 00
call 01931h ; e8 a5 83
@@ -16348,4 +16348,4 @@ dummy_iret: ; 0xfff53 LB 0x9d
db 'XM'
cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0
- db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 04ch
+ db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 083h
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
index cf4b52f..5af2d28 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
@@ -1 +1 @@
-a8579d1e2df1ae49b45cbb8a5bb47d0e *VBoxPcBios.rom
+bde30dfb170090c2f4d75b419b69f84c *VBoxPcBios.rom
diff --git a/src/VBox/Devices/PC/DevAPIC.cpp b/src/VBox/Devices/PC/DevAPIC.cpp
index 3a46ebd..a5b31d4 100644
--- a/src/VBox/Devices/PC/DevAPIC.cpp
+++ b/src/VBox/Devices/PC/DevAPIC.cpp
@@ -1161,7 +1161,7 @@ PDMBOTHCBDECL(int) apicLocalInterrupt(PPDMDEVINS pDevIns, uint8_t u8Pin, uint8_t
case APIC_DM_FIXED:
{
/** @todo implement APIC_DM_FIXED! */
- LogRelMax(5, ("delivery type APIC_DM_FIXED not implemented. u8Pin=%d u8Level=%d\n", u8Pin, u8Level));
+ LogRelMax(5, ("APIC: Delivery type APIC_DM_FIXED not implemented. u8Pin=%d u8Level=%d\n", u8Pin, u8Level));
return VINF_SUCCESS;
}
case APIC_DM_INIT:
diff --git a/src/VBox/Devices/PC/DevHPET.cpp b/src/VBox/Devices/PC/DevHPET.cpp
index 1baade1..370198e 100644
--- a/src/VBox/Devices/PC/DevHPET.cpp
+++ b/src/VBox/Devices/PC/DevHPET.cpp
@@ -445,7 +445,7 @@ static int hpetTimerRegRead32(HPET const *pThis, uint32_t iTimerNo, uint32_t iTi
if ( iTimerNo >= HPET_CAP_GET_TIMERS(pThis->u32Capabilities) /* The second check is only to satisfy Parfait; */
|| iTimerNo >= RT_ELEMENTS(pThis->aTimers) ) /* in practice, the number of configured timers */
{ /* will always be <= aTimers elements. */
- LogRelMax(10, ("HPET: using timer above configured range: %d\n", iTimerNo));
+ LogRelMax(10, ("HPET: Using timer above configured range: %d\n", iTimerNo));
*pu32Value = 0;
return VINF_SUCCESS;
}
@@ -481,7 +481,7 @@ static int hpetTimerRegRead32(HPET const *pThis, uint32_t iTimerNo, uint32_t iTi
default:
{
- LogRelMax(10, ("invalid HPET register read %d on %d\n", iTimerReg, pHpetTimer->idxTimer));
+ LogRelMax(10, ("HPET: Invalid HPET register read %d on %d\n", iTimerReg, pHpetTimer->idxTimer));
u32Value = 0;
break;
}
@@ -510,7 +510,7 @@ static int hpetTimerRegWrite32(HPET *pThis, uint32_t iTimerNo, uint32_t iTimerRe
if ( iTimerNo >= HPET_CAP_GET_TIMERS(pThis->u32Capabilities)
|| iTimerNo >= RT_ELEMENTS(pThis->aTimers) ) /* Parfait - see above. */
{
- LogRelMax(10, ("HPET: using timer above configured range: %d\n", iTimerNo));
+ LogRelMax(10, ("HPET: Using timer above configured range: %d\n", iTimerNo));
return VINF_SUCCESS;
}
HPETTIMER *pHpetTimer = &pThis->aTimers[iTimerNo];
@@ -539,7 +539,7 @@ static int hpetTimerRegWrite32(HPET *pThis, uint32_t iTimerNo, uint32_t iTimerRe
}
if ((u32NewValue & HPET_TN_INT_TYPE) == HPET_TIMER_TYPE_LEVEL)
{
- LogRelMax(10, ("level-triggered config not yet supported\n"));
+ LogRelMax(10, ("HPET: Level-triggered config not yet supported\n"));
AssertFailed();
}
@@ -600,7 +600,7 @@ static int hpetTimerRegWrite32(HPET *pThis, uint32_t iTimerNo, uint32_t iTimerRe
break;
default:
- LogRelMax(10, ("invalid timer register write: %d\n", iTimerReg));
+ LogRelMax(10, ("HPET: Invalid timer register write: %d\n", iTimerReg));
break;
}
@@ -795,7 +795,7 @@ static int hpetConfigRegWrite32(HPET *pThis, uint32_t idxReg, uint32_t u32NewVal
{
Log(("write HPET_STATUS + 4: %x\n", u32NewValue));
if (u32NewValue != 0)
- LogRelMax(10, ("Writing HPET_STATUS + 4 with non-zero, ignored\n"));
+ LogRelMax(10, ("HPET: Writing HPET_STATUS + 4 with non-zero, ignored\n"));
break;
}
@@ -818,7 +818,7 @@ static int hpetConfigRegWrite32(HPET *pThis, uint32_t idxReg, uint32_t u32NewVal
}
default:
- LogRelMax(10, ("invalid HPET config write: %x\n", idxReg));
+ LogRelMax(10, ("HPET: Invalid HPET config write: %x\n", idxReg));
break;
}
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/demo/mkdemo.pl b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/demo/mkdemo.pl
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/funcs/tst.index.d.out b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/funcs/tst.index.d.out
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/funcs/tst.substr.d.out b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/funcs/tst.substr.d.out
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.ipv4localtcp.ksh b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.ipv4localtcp.ksh
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.ipv4localudp.ksh b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.ipv4localudp.ksh
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.ipv4remotetcp.ksh b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.ipv4remotetcp.ksh
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.ipv4remoteudp.ksh b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.ipv4remoteudp.ksh
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.localtcpstate.ksh b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.localtcpstate.ksh
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.remotetcpstate.ksh b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/ip/tst.remotetcpstate.ksh
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/err.D_MACRO_UNDEF.invalidargs.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/err.D_MACRO_UNDEF.invalidargs.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/err.D_OP_LVAL.rdonly.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/err.D_OP_LVAL.rdonly.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/err.D_OP_WRITE.usepidmacro.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/err.D_OP_WRITE.usepidmacro.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/err.D_SYNTAX.inval.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/err.D_SYNTAX.inval.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/err.D_SYNTAX.pid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/err.D_SYNTAX.pid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.arg0.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.arg0.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.assign.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.assign.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.basic.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.basic.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.egid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.egid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.euid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.euid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.gid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.gid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.pgid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.pgid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.pid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.pid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.ppid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.ppid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.projid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.projid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.quite.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.quite.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.sid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.sid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.taskid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.taskid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.trace.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.trace.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.uid.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/scripting/tst.uid.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithBreakPoint.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithBreakPoint.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithChill.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithChill.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithCopyOut.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithCopyOut.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithCopyOutStr.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithCopyOutStr.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithPanic.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithPanic.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithRaise.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithRaise.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithStop.d b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/speculation/err.D_ACT_SPEC.SpeculateWithStop.d
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/usdt/tst.corruptenv.ksh b/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/test/tst/common/usdt/tst.corruptenv.ksh
old mode 100755
new mode 100644
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/mkerrtags.sh b/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/mkerrtags.sh
old mode 100755
new mode 100644
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
index c955631..4a0ffc3 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
@@ -850,6 +850,7 @@ void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm)
" [--usb on|off]\n"
" [--usbehci on|off]\n"
" [--usbxhci on|off]\n"
+ " [--usbrename <oldname> <newname>]\n"
" [--snapshotfolder default|<path>]\n"
" [--teleporter on|off]\n"
" [--teleporterport <port>]\n"
@@ -886,7 +887,7 @@ void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm)
" [--videocapres <width> <height>]\n"
" [--videocaprate <rate>]\n"
" [--videocapfps <fps>]\n"
- " [--videocapmaxtime <time>]\n"
+ " [--videocapmaxtime <ms>]\n"
" [--videocapmaxsize <MB>]\n"
" [--videocapopts <key=value> [<key=value> ...]]\n"
#endif
@@ -984,8 +985,14 @@ void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm)
" [[<display>] [<enabled:yes|no> |\n"
" [<xorigin> <yorigin>]]] |\n"
" screenshotpng <file> [display] |\n"
- " vcpenabled on|off |\n"
- " vcpscreens all|none|<screen>,[<screen>...] |\n"
+ " videocap on|off |\n"
+ " videocapscreens all|none|<screen>,[<screen>...] |\n"
+ " videocapfile <file>\n"
+ " videocapres <width>x<height>\n"
+ " videocaprate <rate>\n"
+ " videocapfps <fps>\n"
+ " videocapmaxtime <ms>\n"
+ " videocapmaxsize <MB>\n"
" setcredentials <username>\n"
" --passwordfile <file> | <password>\n"
" <domain>\n"
@@ -1079,6 +1086,7 @@ void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm)
" [--portcount <1-n>]\n"
" [--hostiocache on|off]\n"
" [--bootable on|off]\n"
+ " [--rename <name>]\n"
" [--remove]\n"
"\n", SEP);
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
index 4f6c946..e0f7459 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
@@ -162,6 +162,7 @@ enum
MODIFYVM_VRDE_EXTPACK,
MODIFYVM_VRDE,
MODIFYVM_RTCUSEUTC,
+ MODIFYVM_USBRENAME,
MODIFYVM_USBXHCI,
MODIFYVM_USBEHCI,
MODIFYVM_USB,
@@ -200,6 +201,7 @@ enum
MODIFYVM_VCP_FILENAME,
MODIFYVM_VCP_WIDTH,
MODIFYVM_VCP_HEIGHT,
+ MODIFYVM_VCP_RES,
MODIFYVM_VCP_RATE,
MODIFYVM_VCP_FPS,
MODIFYVM_VCP_MAXTIME,
@@ -330,6 +332,7 @@ static const RTGETOPTDEF g_aModifyVMOptions[] =
{ "--vrdevideochannelquality", MODIFYVM_VRDEVIDEOCHANNELQUALITY, RTGETOPT_REQ_STRING },
{ "--vrdeextpack", MODIFYVM_VRDE_EXTPACK, RTGETOPT_REQ_STRING },
{ "--vrde", MODIFYVM_VRDE, RTGETOPT_REQ_BOOL_ONOFF },
+ { "--usbrename", MODIFYVM_USBRENAME, RTGETOPT_REQ_STRING },
{ "--usbxhci", MODIFYVM_USBXHCI, RTGETOPT_REQ_BOOL_ONOFF },
{ "--usbehci", MODIFYVM_USBEHCI, RTGETOPT_REQ_BOOL_ONOFF },
{ "--usb", MODIFYVM_USB, RTGETOPT_REQ_BOOL_ONOFF },
@@ -354,16 +357,25 @@ static const RTGETOPTDEF g_aModifyVMOptions[] =
{ "--faulttolerancesyncinterval", MODIFYVM_FAULT_TOLERANCE_SYNC_INTERVAL, RTGETOPT_REQ_UINT32 },
{ "--chipset", MODIFYVM_CHIPSET, RTGETOPT_REQ_STRING },
#ifdef VBOX_WITH_VPX
- { "--vcpenabled", MODIFYVM_VCP, RTGETOPT_REQ_BOOL_ONOFF },
- { "--vcpscreens", MODIFYVM_VCP_SCREENS, RTGETOPT_REQ_STRING },
- { "--vcpfile", MODIFYVM_VCP_FILENAME, RTGETOPT_REQ_STRING },
- { "--vcpwidth", MODIFYVM_VCP_WIDTH, RTGETOPT_REQ_UINT32 },
- { "--vcpheight", MODIFYVM_VCP_HEIGHT, RTGETOPT_REQ_UINT32 },
- { "--vcprate", MODIFYVM_VCP_RATE, RTGETOPT_REQ_UINT32 },
- { "--vcpfps", MODIFYVM_VCP_FPS, RTGETOPT_REQ_UINT32 },
- { "--vcpmaxtime", MODIFYVM_VCP_MAXTIME, RTGETOPT_REQ_INT32 },
- { "--vcpmaxsize", MODIFYVM_VCP_MAXSIZE, RTGETOPT_REQ_INT32 },
- { "--vcpoptions", MODIFYVM_VCP_OPTIONS, RTGETOPT_REQ_STRING },
+ { "--videocap", MODIFYVM_VCP, RTGETOPT_REQ_BOOL_ONOFF },
+ { "--vcpenabled", MODIFYVM_VCP, RTGETOPT_REQ_BOOL_ONOFF }, /* deprecated */
+ { "--videocapscreens", MODIFYVM_VCP_SCREENS, RTGETOPT_REQ_STRING },
+ { "--vcpscreens", MODIFYVM_VCP_SCREENS, RTGETOPT_REQ_STRING }, /* deprecated */
+ { "--videocapfile", MODIFYVM_VCP_FILENAME, RTGETOPT_REQ_STRING },
+ { "--vcpfile", MODIFYVM_VCP_FILENAME, RTGETOPT_REQ_STRING }, /* deprecated */
+ { "--videocapres", MODIFYVM_VCP_RES, RTGETOPT_REQ_STRING },
+ { "--vcpwidth", MODIFYVM_VCP_WIDTH, RTGETOPT_REQ_UINT32 }, /* deprecated */
+ { "--vcpheight", MODIFYVM_VCP_HEIGHT, RTGETOPT_REQ_UINT32 }, /* deprecated */
+ { "--videocaprate", MODIFYVM_VCP_RATE, RTGETOPT_REQ_UINT32 },
+ { "--vcprate", MODIFYVM_VCP_RATE, RTGETOPT_REQ_UINT32 }, /* deprecated */
+ { "--videocapfps", MODIFYVM_VCP_FPS, RTGETOPT_REQ_UINT32 },
+ { "--vcpfps", MODIFYVM_VCP_FPS, RTGETOPT_REQ_UINT32 }, /* deprecated */
+ { "--videocapmaxtime", MODIFYVM_VCP_MAXTIME, RTGETOPT_REQ_INT32 },
+ { "--vcpmaxtime", MODIFYVM_VCP_MAXTIME, RTGETOPT_REQ_INT32 }, /* deprecated */
+ { "--videocapmaxsize", MODIFYVM_VCP_MAXSIZE, RTGETOPT_REQ_INT32 },
+ { "--vcpmaxsize", MODIFYVM_VCP_MAXSIZE, RTGETOPT_REQ_INT32 }, /* deprecated */
+ { "--videocapopts", MODIFYVM_VCP_OPTIONS, RTGETOPT_REQ_STRING },
+ { "--vcpoptions", MODIFYVM_VCP_OPTIONS, RTGETOPT_REQ_STRING }, /* deprecated */
#endif
{ "--autostart-enabled", MODIFYVM_AUTOSTART_ENABLED, RTGETOPT_REQ_BOOL_ONOFF },
{ "--autostart-delay", MODIFYVM_AUTOSTART_DELAY, RTGETOPT_REQ_UINT32 },
@@ -2514,6 +2526,39 @@ RTEXITCODE handleModifyVM(HandlerArg *a)
break;
}
+ case MODIFYVM_USBRENAME:
+ {
+ const char *pszName = ValueUnion.psz;
+ int vrc = RTGetOptFetchValue(&GetOptState, &ValueUnion, RTGETOPT_REQ_STRING);
+ if (RT_FAILURE(vrc))
+ return errorSyntax(USAGE_MODIFYVM,
+ "Missing or Invalid argument to '%s'",
+ GetOptState.pDef->pszLong);
+ const char *pszNewName = ValueUnion.psz;
+
+ SafeIfaceArray<IUSBController> ctrls;
+ CHECK_ERROR(sessionMachine, COMGETTER(USBControllers)(ComSafeArrayAsOutParam(ctrls)));
+ bool fRenamed = false;
+ for (size_t i = 0; i < ctrls.size(); i++)
+ {
+ ComPtr<IUSBController> pCtrl = ctrls[i];
+ Bstr bstrName;
+ CHECK_ERROR(pCtrl, COMGETTER(Name)(bstrName.asOutParam()));
+ if (bstrName == pszName)
+ {
+ bstrName = pszNewName;
+ CHECK_ERROR(pCtrl, COMSETTER(Name)(bstrName.raw()));
+ fRenamed = true;
+ }
+ }
+ if (!fRenamed)
+ {
+ errorArgument("Invalid --usbrename parameters, nothing renamed");
+ rc = E_FAIL;
+ }
+ break;
+ }
+
case MODIFYVM_USBXHCI:
{
ULONG cXhciCtrls = 0;
@@ -2523,11 +2568,26 @@ RTEXITCODE handleModifyVM(HandlerArg *a)
if (!cXhciCtrls && ValueUnion.f)
{
ComPtr<IUSBController> UsbCtl;
- CHECK_ERROR(sessionMachine, AddUSBController(Bstr("XHCI").raw(), USBControllerType_XHCI,
+ CHECK_ERROR(sessionMachine, AddUSBController(Bstr("xHCI").raw(), USBControllerType_XHCI,
UsbCtl.asOutParam()));
}
else if (cXhciCtrls && !ValueUnion.f)
- CHECK_ERROR(sessionMachine, RemoveUSBController(Bstr("XHCI").raw()));
+ {
+ SafeIfaceArray<IUSBController> ctrls;
+ CHECK_ERROR(sessionMachine, COMGETTER(USBControllers)(ComSafeArrayAsOutParam(ctrls)));
+ for (size_t i = 0; i < ctrls.size(); i++)
+ {
+ ComPtr<IUSBController> pCtrl = ctrls[i];
+ USBControllerType_T enmType;
+ CHECK_ERROR(pCtrl, COMGETTER(Type)(&enmType));
+ if (enmType == USBControllerType_XHCI)
+ {
+ Bstr ctrlName;
+ CHECK_ERROR(pCtrl, COMGETTER(Name)(ctrlName.asOutParam()));
+ CHECK_ERROR(sessionMachine, RemoveUSBController(ctrlName.raw()));
+ }
+ }
+ }
}
break;
}
@@ -2545,7 +2605,22 @@ RTEXITCODE handleModifyVM(HandlerArg *a)
UsbCtl.asOutParam()));
}
else if (cEhciCtrls && !ValueUnion.f)
- CHECK_ERROR(sessionMachine, RemoveUSBController(Bstr("EHCI").raw()));
+ {
+ SafeIfaceArray<IUSBController> ctrls;
+ CHECK_ERROR(sessionMachine, COMGETTER(USBControllers)(ComSafeArrayAsOutParam(ctrls)));
+ for (size_t i = 0; i < ctrls.size(); i++)
+ {
+ ComPtr<IUSBController> pCtrl = ctrls[i];
+ USBControllerType_T enmType;
+ CHECK_ERROR(pCtrl, COMGETTER(Type)(&enmType));
+ if (enmType == USBControllerType_EHCI)
+ {
+ Bstr ctrlName;
+ CHECK_ERROR(pCtrl, COMGETTER(Name)(ctrlName.asOutParam()));
+ CHECK_ERROR(sessionMachine, RemoveUSBController(ctrlName.raw()));
+ }
+ }
+ }
}
break;
}
@@ -2563,7 +2638,22 @@ RTEXITCODE handleModifyVM(HandlerArg *a)
UsbCtl.asOutParam()));
}
else if (cOhciCtrls && !ValueUnion.f)
- CHECK_ERROR(sessionMachine, RemoveUSBController(Bstr("OHCI").raw()));
+ {
+ SafeIfaceArray<IUSBController> ctrls;
+ CHECK_ERROR(sessionMachine, COMGETTER(USBControllers)(ComSafeArrayAsOutParam(ctrls)));
+ for (size_t i = 0; i < ctrls.size(); i++)
+ {
+ ComPtr<IUSBController> pCtrl = ctrls[i];
+ USBControllerType_T enmType;
+ CHECK_ERROR(pCtrl, COMGETTER(Type)(&enmType));
+ if (enmType == USBControllerType_OHCI)
+ {
+ Bstr ctrlName;
+ CHECK_ERROR(pCtrl, COMGETTER(Name)(ctrlName.asOutParam()));
+ CHECK_ERROR(sessionMachine, RemoveUSBController(ctrlName.raw()));
+ }
+ }
+ }
}
break;
}
@@ -2770,6 +2860,29 @@ RTEXITCODE handleModifyVM(HandlerArg *a)
CHECK_ERROR(sessionMachine, COMSETTER(VideoCaptureHeight)(ValueUnion.u32));
break;
}
+ case MODIFYVM_VCP_RES:
+ {
+ uint32_t uWidth = 0;
+ char *pszNext;
+ int vrc = RTStrToUInt32Ex(ValueUnion.psz, &pszNext, 0, &uWidth);
+ if (RT_FAILURE(vrc) || vrc != VWRN_TRAILING_CHARS || !pszNext || *pszNext != 'x')
+ {
+ errorArgument("Error parsing geomtry '%s' (expected <width>x<height>)", ValueUnion.psz);
+ rc = E_FAIL;
+ break;
+ }
+ uint32_t uHeight = 0;
+ vrc = RTStrToUInt32Ex(pszNext+1, NULL, 0, &uHeight);
+ if (vrc != VINF_SUCCESS)
+ {
+ errorArgument("Error parsing geomtry '%s' (expected <width>x<height>)", ValueUnion.psz);
+ rc = E_FAIL;
+ break;
+ }
+ CHECK_ERROR(sessionMachine, COMSETTER(VideoCaptureWidth)(uWidth));
+ CHECK_ERROR(sessionMachine, COMSETTER(VideoCaptureHeight)(uHeight));
+ break;
+ }
case MODIFYVM_VCP_RATE:
{
CHECK_ERROR(sessionMachine, COMSETTER(VideoCaptureRate)(ValueUnion.u32));
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp
index 932dbb1..dc213b9 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp
@@ -946,6 +946,7 @@ static const RTGETOPTDEF g_aStorageControllerOptions[] =
{ "--controller", 'c', RTGETOPT_REQ_STRING },
{ "--portcount", 'p', RTGETOPT_REQ_UINT32 },
{ "--remove", 'r', RTGETOPT_REQ_NOTHING },
+ { "--rename", 'R', RTGETOPT_REQ_STRING },
{ "--hostiocache", 'i', RTGETOPT_REQ_STRING },
{ "--bootable", 'b', RTGETOPT_REQ_STRING },
};
@@ -958,6 +959,7 @@ RTEXITCODE handleStorageController(HandlerArg *a)
const char *pszCtlType = NULL;
const char *pszHostIOCache = NULL;
const char *pszBootable = NULL;
+ const char *pszCtlNewName = NULL;
ULONG satabootdev = ~0U;
ULONG sataidedev = ~0U;
ULONG portcount = ~0U;
@@ -999,6 +1001,11 @@ RTEXITCODE handleStorageController(HandlerArg *a)
fRemoveCtl = true;
break;
+ case 'R': // rename controller
+ Assert(ValueUnion.psz);
+ pszCtlNewName = ValueUnion.psz;
+ break;
+
case 'i':
pszHostIOCache = ValueUnion.psz;
break;
@@ -1218,6 +1225,26 @@ RTEXITCODE handleStorageController(HandlerArg *a)
rc = E_FAIL;
}
}
+
+ if ( pszCtlNewName
+ && SUCCEEDED(rc))
+ {
+ ComPtr<IStorageController> ctl;
+
+ CHECK_ERROR(machine, GetStorageControllerByName(Bstr(pszCtl).raw(),
+ ctl.asOutParam()));
+
+ if (SUCCEEDED(rc))
+ {
+ CHECK_ERROR(ctl, COMSETTER(Name)(Bstr(pszCtlNewName).raw()));
+ }
+ else
+ {
+ errorArgument("Couldn't find the controller with the name: '%s'\n", pszCtl);
+ rc = E_FAIL;
+ }
+ }
+
}
/* commit changes */
diff --git a/src/VBox/Frontends/VirtualBox/Makefile.kmk b/src/VBox/Frontends/VirtualBox/Makefile.kmk
index c047618..421fc87 100644
--- a/src/VBox/Frontends/VirtualBox/Makefile.kmk
+++ b/src/VBox/Frontends/VirtualBox/Makefile.kmk
@@ -35,6 +35,7 @@ endif
#
ifdef VBOX_WITH_HARDENING
PROGRAMS += VirtualBoxHardened
+PROGRAMS.darwin += VirtualBoxVM
DLLS += VirtualBox
else
PROGRAMS += VirtualBox
@@ -56,13 +57,22 @@ VirtualBoxHardened_TEMPLATE = VBOXR3HARDENEDEXE
VirtualBoxHardened_SOURCES = src/hardenedmain.cpp
VirtualBoxHardened_SOURCES.win = src/platform/win/VirtualBoxHardened.rc
VirtualBoxHardened_NAME = VirtualBox
-VirtualBoxHardened_INST.darwin = $(INST_BIN)VirtualBox $(INST_BIN)VirtualBoxVM
VirtualBoxHardened_LDFLAGS.win = /SUBSYSTEM:$(if-expr "$(KBUILD_TYPE)" != "release",console,windows)
src/platform/win/VirtualBoxHardened.rc_INCS = $(VirtualBox_0_OUTDIR)
src/platform/win/VirtualBoxHardened.rc_DEPS = $(VirtualBox_0_OUTDIR)/VirtualBox-icon.rc
#
+# Hardened VirtualBoxVM.
+#
+ifeq ($(KBUILD_TARGET),darwin)
+ VirtualBoxVM_EXTENDS = VirtualBoxHardened
+ VirtualBoxVM_NAME = VirtualBoxVM
+ VirtualBoxVM_DEFS = $(VirtualBoxHardened_DEFS) VIRTUALBOX_VM
+endif
+
+
+#
# Include Qt project file, we'll use FORMS and TRANSLATIONS in
# the VirtualBox setup below.
#
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
index 2c35f93..f68e8d0 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
@@ -1150,312 +1150,312 @@
</message>
<message>
<source>Minimize active window</source>
- <translation type="unfinished"></translation>
+ <translation>Минимизиране на активния прозорец</translation>
</message>
<message>
<source>Display the Network Operations Manager window</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозореца Управление на мрежови операции</translation>
</message>
<message>
<source>Display a window with product information</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозорец с информация за продукта</translation>
</message>
<message>
<source>&Preferences...</source>
<comment>global preferences window</comment>
- <translation type="unfinished">&Предпочитания...</translation>
+ <translation>&Предпочитания...</translation>
</message>
<message>
<source>Display the global preferences window</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозорец с глобалните предпочитания</translation>
</message>
<message>
<source>Display the virtual machine settings window</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозорец с настройките на виртуалната машина</translation>
</message>
<message>
<source>Display the virtual machine session information window</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозорец със сесийната информация на виртуалната машина</translation>
</message>
<message>
<source>&Save State</source>
- <translation type="unfinished"></translation>
+ <translation>&Запазване на състояние</translation>
</message>
<message>
<source>Save the state of the virtual machine</source>
- <translation type="unfinished"></translation>
+ <translation>Запазване състоянието на виртуалната машина</translation>
</message>
<message>
<source>Send the ACPI Shutdown signal to the virtual machine</source>
- <translation type="unfinished"></translation>
+ <translation>Изпращане на изключващ ACPI сигнал към виртуалната машина</translation>
</message>
<message>
<source>&Minimize Window</source>
- <translation type="unfinished"></translation>
+ <translation>&Минимизиране на прозореца</translation>
</message>
<message>
<source>Automatically resize the guest display when the window is resized</source>
- <translation type="unfinished"></translation>
+ <translation>Автоматично преоразмеряване на виртуалния екран, когато прозорецът е преоразмерен</translation>
</message>
<message>
<source>Take guest display screenshot</source>
- <translation type="unfinished"></translation>
+ <translation>Вземане на снимка на виртуалния екран</translation>
</message>
<message>
<source>Display virtual machine settings window to configure video capture</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозореца с настройки на виртуалната машина за конфигуриране на видео заснемане</translation>
</message>
<message>
<source>Enable guest display video capture</source>
- <translation type="unfinished"></translation>
+ <translation>Включване на видео заснемане на виртуалния екран</translation>
</message>
<message>
<source>Allow remote desktop (RDP) connections to this machine</source>
- <translation type="unfinished"></translation>
+ <translation>Позволяване на връзки за отдалечен работен плот (RDP) към тази машина</translation>
</message>
<message>
<source>Display window to configure menu-bar</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозорец за настройка на меню лентата</translation>
</message>
<message>
<source>Enable menu-bar</source>
- <translation type="unfinished"></translation>
+ <translation>Включване на меню лента</translation>
</message>
<message>
<source>Display window to configure status-bar</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозорец за настройка на статус лентата</translation>
</message>
<message>
<source>Enable status-bar</source>
- <translation type="unfinished"></translation>
+ <translation>Включване на статус лента</translation>
</message>
<message>
<source>Display global preferences window to configure keyboard shortcuts</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозореца с глобални предпочитания за настройка на клавишните комбинации</translation>
</message>
<message>
<source>&Insert %1</source>
<comment>that means send the %1 key sequence to the virtual machine</comment>
- <translation type="unfinished">&Вмъкване на %1</translation>
+ <translation>&Изпращане на %1</translation>
</message>
<message>
<source>&Hard Disks</source>
- <translation type="unfinished"></translation>
+ <translation>&Твърди дискове</translation>
</message>
<message>
<source>&Hard Disk Settings...</source>
- <translation type="unfinished"></translation>
+ <translation>Настройки на &твърди дискове...</translation>
</message>
<message>
<source>Display virtual machine settings window to configure hard disks</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозореца с настройки на виртуалната машина за конфигуриране на твърди дискове</translation>
</message>
<message>
<source>&Network</source>
- <translation type="unfinished"></translation>
+ <translation>&Мрежа</translation>
</message>
<message>
<source>Display virtual machine settings window to configure network adapters</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозореца с настройки на виртуалната машина за конфигуриране на мрежови адаптери</translation>
</message>
<message>
<source>Display virtual machine settings window to configure USB devices</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозореца с настройки на виртуалната машина за конфигуриране на USB устройства</translation>
</message>
<message>
<source>&Drag and Drop</source>
- <translation type="unfinished"></translation>
+ <translation>&Влачене и пускане</translation>
</message>
<message>
<source>Display virtual machine settings window to configure shared folders</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозореца с настройки на виртуалната машина за конфигуриране на споделени папки</translation>
</message>
<message>
<source>Insert the Guest Additions disk file into the virtual optical drive</source>
- <translation type="unfinished"></translation>
+ <translation>Вкарване на диска Виртуални Добавки във виртуалното оптично устройство</translation>
</message>
<message>
<source>%1%</source>
<comment>scale-factor</comment>
- <translation type="unfinished">%1%</translation>
+ <translation>%1%</translation>
</message>
<message>
<source>Enable</source>
<comment>Virtual Screen</comment>
- <translation type="unfinished"></translation>
+ <translation>Включване</translation>
</message>
<message>
<source>Resize to %1x%2</source>
<comment>Virtual Screen</comment>
- <translation type="unfinished">Преоразмеряване към %1x%2</translation>
+ <translation>Преоразмеряване към %1x%2</translation>
</message>
<message>
<source>Preview Monitor %1</source>
- <translation type="unfinished">Преглед на монитор %1</translation>
+ <translation>Преглед на монитор %1</translation>
</message>
<message>
<source>&Connect Network Adapter</source>
- <translation type="unfinished"></translation>
+ <translation>&Свързване на мрежов адаптер</translation>
</message>
<message>
<source>Connect Network Adapter &%1</source>
- <translation type="unfinished"></translation>
+ <translation>Свързване на мрежов адаптер &%1</translation>
</message>
<message>
<source>No USB Devices Connected</source>
- <translation type="unfinished">Няма свързани USB устройства</translation>
+ <translation>Няма свързани USB устройства</translation>
</message>
<message>
<source>No supported devices connected to the host PC</source>
- <translation type="unfinished">Няма поддържани устройства, свързани към реалната машина</translation>
+ <translation>Няма поддържани устройства, свързани към реалната машина</translation>
</message>
<message>
<source>No Webcams Connected</source>
- <translation type="unfinished">Няма свързани уеб камери</translation>
+ <translation>Няма свързани уеб камери</translation>
</message>
<message>
<source>No supported webcams connected to the host PC</source>
- <translation type="unfinished">Няма поддържани уеб камери, свързани към реалния ПК</translation>
+ <translation>Няма поддържани уеб камери, свързани към реалната машина</translation>
</message>
<message>
<source>Create new virtual machine</source>
- <translation type="unfinished"></translation>
+ <translation>Създаване на нова виртуална машина</translation>
</message>
<message>
<source>Add existing virtual machine</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на съществуваща виртуална машина</translation>
</message>
<message>
<source>Rename selected virtual machine group</source>
- <translation type="unfinished"></translation>
+ <translation>Преименуване групата на избраната виртуална машина</translation>
</message>
<message>
<source>&Ungroup</source>
- <translation type="unfinished"></translation>
+ <translation>Ра&згрупиране</translation>
</message>
<message>
<source>Ungroup items of selected virtual machine group</source>
- <translation type="unfinished"></translation>
+ <translation>Разгрупира елементи от групата на избраната виртуална машина</translation>
</message>
<message>
<source>&Sort</source>
- <translation type="unfinished"></translation>
+ <translation>&Сортиране</translation>
</message>
<message>
<source>Sort items of selected virtual machine group alphabetically</source>
- <translation type="unfinished"></translation>
+ <translation>Сортиране елементите на групата на избраната виртуална машина азбучно</translation>
</message>
<message>
<source>Add new group based on selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на нова група, базирана на избраните виртуални машини</translation>
</message>
<message>
<source>Clone selected virtual machine</source>
- <translation type="unfinished"></translation>
+ <translation>Клониране на избраната виртуална машина</translation>
</message>
<message>
<source>Remove selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на избраните виртуални машини</translation>
</message>
<message>
<source>Start selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Стартиране на избраните виртуални машини</translation>
</message>
<message>
<source>Switch to the windows of selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Превключване към прозорците на избраните виртуални машини</translation>
</message>
<message>
<source>Start selected virtual machines in the background</source>
- <translation type="unfinished"></translation>
+ <translation>Стартиране на избраните виртуални машини във фон</translation>
</message>
<message>
<source>Start selected virtual machines with option of continuing in background</source>
- <translation type="unfinished"></translation>
+ <translation>Стартиране на избраните виртуални машини с опция на по-късен етап да се преместят във фон</translation>
</message>
<message>
<source>Suspend execution of selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Задържане изпълнението на избраните виртуални машини</translation>
</message>
<message>
<source>Reset selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Рестартиране на избраните виртуални машини</translation>
</message>
<message>
<source>D&iscard Saved State...</source>
- <translation type="unfinished"></translation>
+ <translation>Из&чистване на запазено състояние...</translation>
</message>
<message>
<source>Discard saved state of selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Изчистване на запазеното състояние на избраните виртуални машини</translation>
</message>
<message>
<source>Show log files of selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на файловете със записки за избраните виртуални машини</translation>
</message>
<message>
<source>Re&fresh</source>
- <translation type="unfinished"></translation>
+ <translation>О&бновяване</translation>
</message>
<message>
<source>Refresh accessibility state of selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Обновяване състоянието на достъпност на избраните виртуални машини</translation>
</message>
<message>
<source>S&how in Finder</source>
- <translation type="unfinished"></translation>
+ <translation>Показване в &Търсачката</translation>
</message>
<message>
<source>Show the VirtualBox Machine Definition files in Finder</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на описателните файлове на VirtualBox за машината в Търсачката</translation>
</message>
<message>
<source>S&how in Explorer</source>
- <translation type="unfinished"></translation>
+ <translation>Показване в &Explorer</translation>
</message>
<message>
<source>Show the VirtualBox Machine Definition files in Explorer</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на описателните файлове на VirtualBox за машината в Explorer</translation>
</message>
<message>
<source>S&how in File Manager</source>
- <translation type="unfinished"></translation>
+ <translation>Показване във &файловия мениджър</translation>
</message>
<message>
<source>Show the VirtualBox Machine Definition files in the File Manager</source>
- <translation type="unfinished"></translation>
+ <translation>Показва описателните файлове на VirtualBox за машината във файловия мениджър</translation>
</message>
<message>
<source>Cr&eate Alias on Desktop</source>
- <translation type="unfinished"></translation>
+ <translation>Създаване на &дубликат на работния плот</translation>
</message>
<message>
<source>Create alias files to the VirtualBox Machine Definition files on your desktop</source>
- <translation type="unfinished"></translation>
+ <translation>Създаване на файлове за дубликат до описателните файлове на VirtualBox за машината на работния плот</translation>
</message>
<message>
<source>Cr&eate Shortcut on Desktop</source>
- <translation type="unfinished"></translation>
+ <translation>Създаване на &пряк път на работния плот</translation>
</message>
<message>
<source>Create shortcut files to the VirtualBox Machine Definition files on your desktop</source>
- <translation type="unfinished"></translation>
+ <translation>Създаване на файлове за пряк път до описателните файлове на VirtualBox за машината на работния плот</translation>
</message>
<message>
<source>Sort group of first selected virtual machine alphabetically</source>
- <translation type="unfinished"></translation>
+ <translation>Сортиране на групата на първата избрана виртуална машина азбучно</translation>
</message>
<message>
<source>Save state of selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Запазване състоянията на избраните виртуални машини</translation>
</message>
<message>
<source>Send ACPI Shutdown signal to selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Изпращане на изключващ ACPI сигнал към избраните виртуални машини</translation>
</message>
<message>
<source>Power off selected virtual machines</source>
- <translation type="unfinished"></translation>
+ <translation>Изключване на избраните виртуални машини</translation>
</message>
</context>
<context>
@@ -1493,24 +1493,24 @@
<message>
<source>Status</source>
<comment>password table field</comment>
- <translation type="unfinished">Статус</translation>
+ <translation>Статус</translation>
</message>
<message>
<source>ID</source>
<comment>password table field</comment>
- <translation type="unfinished">ID</translation>
+ <translation>ID</translation>
</message>
<message>
<source>Password</source>
<comment>password table field</comment>
- <translation type="unfinished">Парола</translation>
+ <translation>Парола</translation>
</message>
<message numerus="yes">
<source><nobr>Used by the following %n hard disk(s):</nobr><br>%1</source>
<comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many hard drives are in the tool-tip and doesn't need to be told).</comment>
- <translation type="unfinished">
- <numerusform></numerusform>
- <numerusform></numerusform>
+ <translation>
+ <numerusform><nobr>Използва се от следния %n твърд диск:</nobr><br>%1</numerusform>
+ <numerusform><nobr>Използва се от следните %n твърди дискове:</nobr><br>%1</numerusform>
</translation>
</message>
</context>
@@ -1644,19 +1644,19 @@
</message>
<message>
<source>Storage Controller (IDE)</source>
- <translation type="unfinished"></translation>
+ <translation>Контролер за съхранение (IDE)</translation>
</message>
<message>
<source>Storage Controller (SATA)</source>
- <translation type="unfinished"></translation>
+ <translation>Контролер за съхранение (SATA)</translation>
</message>
<message>
<source>Storage Controller (SCSI)</source>
- <translation type="unfinished"></translation>
+ <translation>Контролер за съхранение (SCSI)</translation>
</message>
<message>
<source>Storage Controller (SAS)</source>
- <translation type="unfinished"></translation>
+ <translation>Контролер за съхранение (SAS)</translation>
</message>
</context>
<context>
@@ -2360,7 +2360,7 @@
</message>
<message>
<source>Retrieving data ...</source>
- <translation type="unfinished">Извличане на данни ...</translation>
+ <translation>Извличане на данни ...</translation>
</message>
</context>
<context>
@@ -3317,7 +3317,7 @@ p, li { white-space: pre-wrap; </style></head><body style="
<message>
<source>Generic Driver, '%1' { %2 }</source>
<comment>details (network)</comment>
- <translation type="unfinished">Основен драйвер, '%1' { %2 }</translation>
+ <translation>Основен драйвер, '%1' { %2 }</translation>
</message>
<message>
<source>Device Filters</source>
@@ -3733,15 +3733,15 @@ p, li { white-space: pre-wrap; </style></head><body style="
</message>
<message>
<source>Holds the maximum width which we would like the guest to use.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва максималната широчина, която виртуалният екран да заема.</translation>
</message>
<message>
<source>Holds the maximum height which we would like the guest to use.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва максималната височина, която виртуалният екран да заема.</translation>
</message>
<message>
<source>When checked, machine windows will be raised when the mouse pointer moves over them.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, прозорците на машината ще се активират, когато мишката застане върху тях.</translation>
</message>
</context>
<context>
@@ -3792,19 +3792,19 @@ p, li { white-space: pre-wrap; </style></head><body style="
</message>
<message>
<source>Add Package</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на пакет</translation>
</message>
<message>
<source>Remove Package</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на пакет</translation>
</message>
<message>
<source>Adds new package.</source>
- <translation type="unfinished"></translation>
+ <translation>Добавя нов пакет.</translation>
</message>
<message>
<source>Removes selected package.</source>
- <translation type="unfinished"></translation>
+ <translation>Премахва избрания пакет.</translation>
</message>
</context>
<context>
@@ -3887,11 +3887,11 @@ p, li { white-space: pre-wrap; </style></head><body style="
</message>
<message>
<source>Host Screensaver:</source>
- <translation type="unfinished"></translation>
+ <translation>Екранен предпазител:</translation>
</message>
<message>
<source>&Disable When Running Virtual Machines</source>
- <translation type="unfinished"></translation>
+ <translation>&Забраняване, когато се включват виртуални машини</translation>
</message>
</context>
<context>
@@ -3954,11 +3954,11 @@ p, li { white-space: pre-wrap; </style></head><body style="
</message>
<message>
<source>Lists all available shortcuts which can be configured.</source>
- <translation type="unfinished"></translation>
+ <translation>Извежда всички клавишни комбинации, които могат да бъдат зададени.</translation>
</message>
<message>
<source>Holds a sequence to filter the shortcut list.</source>
- <translation type="unfinished"></translation>
+ <translation>Въвеждане на израз за филтриране на списъка с клавиши.</translation>
</message>
</context>
<context>
@@ -4299,51 +4299,51 @@ p, li { white-space: pre-wrap; </style></head><body style="
</message>
<message>
<source>Add NAT Network</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на NAT мрежа</translation>
</message>
<message>
<source>Remove NAT Network</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на NAT мрежа</translation>
</message>
<message>
<source>Edit NAT Network</source>
- <translation type="unfinished"></translation>
+ <translation>Редактиране на NAT мрежа</translation>
</message>
<message>
<source>Adds new NAT network.</source>
- <translation type="unfinished"></translation>
+ <translation>Добавя нова NAT мрежа.</translation>
</message>
<message>
<source>Removes selected NAT network.</source>
- <translation type="unfinished"></translation>
+ <translation>Премахва избраната NAT мрежа.</translation>
</message>
<message>
<source>Edits selected NAT network.</source>
- <translation type="unfinished"></translation>
+ <translation>Редактира избраната NAT мрежа.</translation>
</message>
<message>
<source>Add Host-only Network</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на мрежа само-хост</translation>
</message>
<message>
<source>Remove Host-only Network</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на мрежа само-хост</translation>
</message>
<message>
<source>Edit Host-only Network</source>
- <translation type="unfinished"></translation>
+ <translation>Редактиране на мрежа само-хост</translation>
</message>
<message>
<source>Adds new host-only network.</source>
- <translation type="unfinished"></translation>
+ <translation>Добавя нова мрежа само-хост.</translation>
</message>
<message>
<source>Removes selected host-only network.</source>
- <translation type="unfinished"></translation>
+ <translation>Премахва избраната само-хост мрежа.</translation>
</message>
<message>
<source>Edits selected host-only network.</source>
- <translation type="unfinished"></translation>
+ <translation>Редактира избраната само-хост мрежа.</translation>
</message>
</context>
<context>
@@ -4537,11 +4537,11 @@ p, li { white-space: pre-wrap; </style></head><body style="
</message>
<message>
<source>When checked, manual configuration will be used for this network adapter.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, използване на ръчно конфигуриране за този мрежови адаптер.</translation>
</message>
<message>
<source>When checked, the DHCP Server will be enabled for this network on machine start-up.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, активиране на DHCP сървър за тази мрежа при включване на машината.</translation>
</message>
</context>
<context>
@@ -4612,23 +4612,23 @@ p, li { white-space: pre-wrap; </style></head><body style="
</message>
<message>
<source>When checked, this network will be enabled.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, тази мрежа ще бъде активирана.</translation>
</message>
<message>
<source>When checked, this network will support DHCP.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, тази мрежа ще поддържа DHCP.</translation>
</message>
<message>
<source>When checked, this network will support IPv6.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, тази мрежа ще поддържа IPv6.</translation>
</message>
<message>
<source>When checked, this network will be advertised as the default IPv6 route.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, тази мрежа ще бъде обявявана като IPv6 рутиране по подразбиране.</translation>
</message>
<message>
<source>Displays a window to configure port forwarding rules.</source>
- <translation type="unfinished"></translation>
+ <translation>Отваря прозорец за управление на правилата за пренасочване на портове.</translation>
</message>
</context>
<context>
@@ -4706,11 +4706,11 @@ p, li { white-space: pre-wrap; </style></head><body style="
</message>
<message>
<source>Holds the proxy host.</source>
- <translation type="unfinished"></translation>
+ <translation>Задава хоста на проксито.</translation>
</message>
<message>
<source>Holds the proxy port.</source>
- <translation type="unfinished"></translation>
+ <translation>Задава порта на проксито.</translation>
</message>
</context>
<context>
@@ -4765,7 +4765,7 @@ p, li { white-space: pre-wrap; </style></head><body style="
</message>
<message>
<source>Selects how often the new version check should be performed. Note that if you want to completely disable this check, just clear the above check box.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва колко често ще бъде извършвана проверката за нова версия. Имайте предвид, че за да забраните напълно тази проверка, е достатъчно да махнете тази отметка.</translation>
</message>
</context>
<context>
@@ -5314,11 +5314,11 @@ p, li { white-space: pre-wrap; }
<message>
<source><p style='white-space:pre'><nobr>Indicates the activity of the hard disks:</nobr>%1</p></source>
<comment>HDD tooltip</comment>
- <translation type="unfinished"></translation>
+ <translation><p style='white-space:pre'><nobr>Показва активността на твърдите дискове:</nobr>%1</p></translation>
</message>
<message>
<source>Indicates whether the host keyboard is captured by the guest OS:<br><nobr><img src=:/hostkey_16px.png/> keyboard is not captured</nobr><br><nobr><img src=:/hostkey_captured_16px.png/> keyboard is captured</nobr></source>
- <translation type="unfinished"></translation>
+ <translation>Показва дали реалната клавиатура е прихваната от виртуалната ОС:<br><nobr><img src=:/hostkey_16px.png/> клавиатурата не е прихваната</nobr><br><nobr><img src=:/hostkey_captured_16px.png/> клавиатурата е прихваната</nobr></translation>
</message>
</context>
<context>
@@ -5435,7 +5435,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Selects the audio output driver. The <b>Null Audio Driver</b> makes the guest see an audio card, however every access to it will be ignored.</source>
- <translation type="unfinished"></translation>
+ <translation>Избира драйвера за изходящ звук. При <b>Без аудио драйвер</b> виртуалната машина ще вижда звукова карта, въпреки че всеки достъп до нея ще бъде игнориран.</translation>
</message>
</context>
<context>
@@ -5781,67 +5781,67 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>HiDPI Support:</source>
- <translation type="unfinished"></translation>
+ <translation>Поддръжка на HiDPI:</translation>
</message>
<message>
<source>Holds the VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва номера на порта на VRDP сървъра. Можете да укажете <tt>0</tt> (нула), за да изберете порт 3389, стандартният порт за RDP.</translation>
</message>
<message>
<source>Selects the VRDP authentication method.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва метода за VRDP автентикация.</translation>
</message>
<message>
<source>Holds the timeout for guest authentication, in milliseconds.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва просроченото време за автентикация на виртуалната машина, в милисекунди.</translation>
</message>
<message>
<source>When checked, multiple simultaneous connections to the VM are permitted.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, ще бъдат позволени множество едновременни връзки към тази ВМ.</translation>
</message>
<message>
<source>Holds the filename VirtualBox uses to save the recorded content.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва името на файла, в който VirtualBox да запазва записаното съдържание.</translation>
</message>
<message>
<source>Selects the resolution (frame size) of the recorded video.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва разделителната способност (размер на кадъра) на записаното видео.</translation>
</message>
<message>
<source>Holds the <b>horizontal</b> resolution (frame width) of the recorded video.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва <b>хоризонталната</b> разделителната способност (ширина на кадъра) на записаното видео.</translation>
</message>
<message>
<source>Holds the <b>vertical</b> resolution (frame height) of the recorded video.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва <b>вертикалната</b> разделителната способност (височина на кадъра) на записаното видео.</translation>
</message>
<message>
<source>Controls the maximum number of <b>frames per second</b>. Additional frames will be skipped. Reducing this value will increase the number of skipped frames and reduce the file size.</source>
- <translation type="unfinished"></translation>
+ <translation>Контролира максималния брой <b>кадри в секунда</b>. Допълнителните кадри ще бъдат пропускани. Намаляването на стойността ще увеличи броя пропуснати кадри и ще намали размера на файла.</translation>
</message>
<message>
<source>Controls the <b>quality</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
- <translation type="unfinished"></translation>
+ <translation>Контролира <b>качеството</b>. Увеличаването ѝ ще направи видеото да изглежда по-добре, но за сметка на увеличен размер на файла.</translation>
</message>
<message>
<source>Holds the bitrate in <b>kilobits per second</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва скоростта на битовете в <b>килобити в секунда</b>. Увеличаването ѝ ще направи видеото да изглежда по-добре, но за сметка на увеличен размер на файла.</translation>
</message>
<message>
<source>The virtual machine is currently assigned less than <b>%1</b> of video memory which is the minimum amount required to switch to full-screen or seamless mode.</source>
- <translation type="unfinished"></translation>
+ <translation>Задали сте по-малко от <b>%1</b> за видео памет на виртуалната машина, което е минималното количество, нужно за превключването на виртуалната машина на цял екран или в безрамков режим.</translation>
</message>
<message>
<source>%1 MB</source>
- <translation type="unfinished">%1 МБ</translation>
+ <translation>%1 МБ</translation>
</message>
<message>
<source>%1%</source>
- <translation type="unfinished">%1%</translation>
+ <translation>%1%</translation>
</message>
<message>
<source>When checked, enables video recording for screen %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, включва видео записване на екран %1.</translation>
</message>
</context>
<context>
@@ -6149,11 +6149,11 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Selects the cipher to be used for encrypting the virtual machine disks.</source>
- <translation type="unfinished"></translation>
+ <translation>Задава шифъра, който да се използва за криптиране дисковете на виртуалната машина.</translation>
</message>
<message>
<source>Holds the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of storage space.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва пътя, където да се пазят снимките на тази виртуална машина. Имайте предвид, че снимките могат да заемат много дисково пространство.</translation>
</message>
</context>
<context>
@@ -6220,15 +6220,15 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>When checked, show the Mini ToolBar in full-screen and seamless modes.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, ще се показва малка лента с инструменти при цял екран и безрамков режим.</translation>
</message>
<message>
<source>Show in &Full-screen/Seamless</source>
- <translation type="unfinished"></translation>
+ <translation>Показване при &Цял екран/Безрамков режим</translation>
</message>
<message>
<source>When checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, малката лента с инструменти ще се показва в горния край на екрана, вместо на стандартната ѝ позиция в долния край на екрана.</translation>
</message>
</context>
<context>
@@ -6404,23 +6404,23 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Selects how this virtual adapter is attached to the real network of the Host OS.</source>
- <translation type="unfinished"></translation>
+ <translation>Избира как този виртуален адаптер да се закача към реалната мрежа на реалната ОС.</translation>
</message>
<message>
<source>Shows additional network adapter options.</source>
- <translation type="unfinished"></translation>
+ <translation>Показва допълнителни опции на мрежовия адаптер.</translation>
</message>
<message>
<source>Holds the configuration settings for the network attachment driver. The settings should be of the form <b>name=value</b> and will depend on the driver. Use <b>shift-enter</b> to add a new entry.</source>
- <translation type="unfinished"></translation>
+ <translation>Задаване конфигурационните настройки за закачащия към мрежата драйвер. Настройките трябва да са във формат <b>име=стойност</b> и ще зависят от драйвера. Използвайте <b>Shift+Enter</b>, за да добавите нов елемент.</translation>
</message>
<message>
<source>When checked, the virtual network cable is plugged in.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, кабелът на виртуалната мрежа ще е включен.</translation>
</message>
<message>
<source>Displays a window to configure port forwarding rules.</source>
- <translation type="unfinished"></translation>
+ <translation>Отваря прозорец за управление на правилата за пренасочване на портове.</translation>
</message>
</context>
<context>
@@ -6507,23 +6507,23 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>No IRQ is currently specified.</source>
- <translation type="unfinished">Текущо не е указан IRQ.</translation>
+ <translation>Текущо не е указан IRQ.</translation>
</message>
<message>
<source>No I/O port is currently specified.</source>
- <translation type="unfinished">Текущо не е указан I/O порт.</translation>
+ <translation>Текущо не е указан I/O порт.</translation>
</message>
<message>
<source>Two or more ports have the same settings.</source>
- <translation type="unfinished">Два или повече порта имат еднакви настройки.</translation>
+ <translation>Два или повече порта имат еднакви настройки.</translation>
</message>
<message>
<source>No port path is currently specified.</source>
- <translation type="unfinished">Текущо не е указан път на порт.</translation>
+ <translation>Текущо не е указан път на порт.</translation>
</message>
<message>
<source>There are currently duplicate port paths specified.</source>
- <translation type="unfinished">Текущо има указани дублиращи се пътища на портове.</translation>
+ <translation>Текущо има указани дублиращи се пътища на портове.</translation>
</message>
</context>
<context>
@@ -6680,27 +6680,27 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Add Shared Folder</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на споделена папка</translation>
</message>
<message>
<source>Edit Shared Folder</source>
- <translation type="unfinished"></translation>
+ <translation>Редактиране на споделена папка</translation>
</message>
<message>
<source>Remove Shared Folder</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на споделена папка</translation>
</message>
<message>
<source>Adds new shared folder.</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на нова споделена папка.</translation>
</message>
<message>
<source>Edits selected shared folder.</source>
- <translation type="unfinished"></translation>
+ <translation>Редактиране на избраната споделена папка.</translation>
</message>
<message>
<source>Removes selected shared folder.</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на избраната споделена папка.</translation>
</message>
</context>
<context>
@@ -6755,7 +6755,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>When checked, this shared folder will be permanent.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, тази споделена папка ще бъде постоянна.</translation>
</message>
</context>
<context>
@@ -6851,31 +6851,31 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Selects the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source>
- <translation type="unfinished"></translation>
+ <translation>Избира работния режим на този сериен порт. Ако изберете <b>Изключен</b>, виртуалната ОС ще засече сериен порт, но няма да може да оперира с него.</translation>
</message>
<message>
<source>When checked, the virtual machine will assume that the pipe or socket specified in the <b>Path/Address</b> field exists and try to use it. Otherwise, the pipe or socket will be created by the virtual machine when it starts.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, виртуалната машина ще предполага, че проводът или сокетът, указан в полето <b>Път/Адрес</b>, съществува и ще пробва да го използва. В противен случай проводът или сокетът ще бъде създаден от виртуалната машина, когато бъде стартирана.</translation>
</message>
<message>
<source>No IRQ is currently specified.</source>
- <translation type="unfinished">Текущо не е указан IRQ.</translation>
+ <translation>Текущо не е указан IRQ.</translation>
</message>
<message>
<source>No I/O port is currently specified.</source>
- <translation type="unfinished">Текущо не е указан I/O порт.</translation>
+ <translation>Текущо не е указан I/O порт.</translation>
</message>
<message>
<source>Two or more ports have the same settings.</source>
- <translation type="unfinished">Два или повече порта имат еднакви настройки.</translation>
+ <translation>Два или повече порта имат еднакви настройки.</translation>
</message>
<message>
<source>No port path is currently specified.</source>
- <translation type="unfinished">Текущо не е указан път на порт.</translation>
+ <translation>Текущо не е указан път на порт.</translation>
</message>
<message>
<source>There are currently duplicate port paths specified.</source>
- <translation type="unfinished">Текущо има указани дублиращи се пътища на портове.</translation>
+ <translation>Текущо има указани дублиращи се пътища на портове.</translation>
</message>
</context>
<context>
@@ -7399,89 +7399,89 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Lists all storage controllers for this machine and the virtual images and host drives attached to them.</source>
- <translation type="unfinished"></translation>
+ <translation>Извежда всички съхраняващи контролери за тази машина и виртуалните изображения и реални устройства, закачени към тях.</translation>
</message>
<message>
<source>Holds the name of the storage controller currently selected in the Storage Tree.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва името на съхраняващия контролер, текущо избран в Дървото със съхранения.</translation>
</message>
<message>
<source>When checked, allows to use host I/O caching capabilities.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, позволява използването на I/O кеширащите възможности на реалната машина.</translation>
</message>
<message>
<source>When checked, the virtual disk will not be removed when the guest system ejects it.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, спира демонтирането на медията, когато виртуалната ОС я извади.</translation>
</message>
<message>
<source>When checked, the guest system will see the virtual disk as a solid-state device.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, виртуалната система ще вижда виртуалния диск като твърдотелно устройство.</translation>
</message>
<message>
<source>When checked, the guest system will see the virtual disk as a hot-pluggable device.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, виртуалната система ще вижда виртуалния диск като горещо сменяемо устройство.</translation>
</message>
<message>
<source>Image</source>
<comment>storage image</comment>
- <translation type="unfinished">Изображение</translation>
+ <translation>Изображение</translation>
</message>
<message>
<source><nobr>Expands/Collapses item.</nobr></source>
- <translation type="unfinished"></translation>
+ <translation><nobr>Разгъване/Сгъване на обект.</nobr></translation>
</message>
<message>
<source><nobr>Adds hard disk.</nobr></source>
- <translation type="unfinished"></translation>
+ <translation><nobr>Добавяне на твърд диск.</nobr></translation>
</message>
<message>
<source><nobr>Adds optical drive.</nobr></source>
- <translation type="unfinished"></translation>
+ <translation><nobr>Добавяне на оптично устройство.</nobr></translation>
</message>
<message>
<source><nobr>Adds floppy drive.</nobr></source>
- <translation type="unfinished"></translation>
+ <translation><nobr>Добавяне на флопи устройство.</nobr></translation>
</message>
<message>
<source>Adds new storage controller.</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на нов контролер за съхранение.</translation>
</message>
<message>
<source>Removes selected storage controller.</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на избрания контролер за съхранение.</translation>
</message>
<message>
<source>Adds new storage attachment.</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на ново закачане за съхранение.</translation>
</message>
<message>
<source>Removes selected storage attachment.</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на избраното закачане за съхранение.</translation>
</message>
<message>
<source>Create New Hard Disk...</source>
- <translation type="unfinished"></translation>
+ <translation>Създаване на нов твърд диск...</translation>
</message>
<message>
<source>Choose Virtual Hard Disk File...</source>
- <translation type="unfinished"></translation>
+ <translation>Изберете файл с виртуален твърд диск...</translation>
</message>
<message>
<source>Choose Virtual Optical Disk File...</source>
- <translation type="unfinished"></translation>
+ <translation>Изберете файл с виртуален оптичен диск...</translation>
</message>
<message>
<source>Remove Disk from Virtual Drive</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на диск от виртуалното устройство</translation>
</message>
<message>
<source>Choose Virtual Floppy Disk File...</source>
- <translation type="unfinished"></translation>
+ <translation>Изберете файл с виртуален флопи диск...</translation>
</message>
<message>
<source>Choose disk image...</source>
<comment>This is used for hard disks, optical media and floppies</comment>
- <translation type="unfinished"></translation>
+ <translation>Изберете дисково изображение...</translation>
</message>
</context>
<context>
@@ -7761,29 +7761,29 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>When checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, RTC устройството ще съобщава времето в UTC, иначе - в локално (на реалната машина) време. Unix обикновено очаква хардуерният часовник да бъде зададен към UTC.</translation>
</message>
<message>
<source>%</source>
- <translation type="unfinished">%</translation>
+ <translation>%</translation>
</message>
<message>
<source>%1 MB</source>
- <translation type="unfinished">%1 МБ</translation>
+ <translation>%1 МБ</translation>
</message>
<message>
<source>%1 CPU</source>
<comment>%1 is 1 for now</comment>
- <translation type="unfinished"></translation>
+ <translation>%1 CPU</translation>
</message>
<message>
<source>%1 CPUs</source>
<comment>%1 is host cpu count * 2 for now</comment>
- <translation type="unfinished"></translation>
+ <translation>%1 CPU-та</translation>
</message>
<message>
<source>%1%</source>
- <translation type="unfinished">%1%</translation>
+ <translation>%1%</translation>
</message>
</context>
<context>
@@ -7947,63 +7947,63 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>When chosen, enables the virtual USB OHCI controller of this machine. The USB OHCI controller provides USB 1.0 support.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, позволява виртуалния USB OHCI контролер за тази машина. USB OHCI контролерът предоставя поддръжка на USB 1.0.</translation>
</message>
<message>
<source>When chosen, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, позволява виртуалния USB EHCI контролер за тази машина. USB EHCI контролерът предоставя поддръжка на USB 2.0.</translation>
</message>
<message>
<source>When chosen, enables the virtual USB xHCI controller of this machine. The USB xHCI controller provides USB 3.0 support.</source>
- <translation type="unfinished"></translation>
+ <translation>Когато е избрано, позволява виртуалния USB xHCI контролер за тази машина. USB xHCI контролерът предоставя поддръжка на USB 3.0.</translation>
</message>
<message>
<source>Add Empty Filter</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на празен филтър</translation>
</message>
<message>
<source>Add Filter From Device</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на филтър от устройство</translation>
</message>
<message>
<source>Edit Filter</source>
- <translation type="unfinished"></translation>
+ <translation>Редактиране на филтър</translation>
</message>
<message>
<source>Remove Filter</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на филтър</translation>
</message>
<message>
<source>Move Filter Up</source>
- <translation type="unfinished"></translation>
+ <translation>Преместване на филтъра нагоре</translation>
</message>
<message>
<source>Move Filter Down</source>
- <translation type="unfinished"></translation>
+ <translation>Преместване на филтъра надолу</translation>
</message>
<message>
<source>Adds new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source>
- <translation type="unfinished"></translation>
+ <translation>Добавя нов USB филтър с начално зададени празни полета. Имайте предвид, че такъв филтър ще съвпадне с всяко закачено USB устройство.</translation>
</message>
<message>
<source>Adds new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source>
- <translation type="unfinished"></translation>
+ <translation>Добавя нов USB филтър със стойности на полетата, отговарящи на USB устройството, което е закачено към реалната машина.</translation>
</message>
<message>
<source>Edits selected USB filter.</source>
- <translation type="unfinished"></translation>
+ <translation>Редактира избрания USB филтър.</translation>
</message>
<message>
<source>Removes selected USB filter.</source>
- <translation type="unfinished"></translation>
+ <translation>Премахва избрания USB филтър.</translation>
</message>
<message>
<source>Moves selected USB filter up.</source>
- <translation type="unfinished"></translation>
+ <translation>Премества избрания USB филтър нагоре.</translation>
</message>
<message>
<source>Moves selected USB filter down.</source>
- <translation type="unfinished"></translation>
+ <translation>Премества избрания USB филтър надолу.</translation>
</message>
</context>
<context>
@@ -8109,35 +8109,35 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Holds the vendor ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва филтър за производител ID. Форматът на стойността за <i>точно съвпадение</i> е <tt>XXXX</tt>, където <tt>X</tt> е шестнадесетична цифра. Празна стойност ще съвпада с всички.</translation>
</message>
<message>
<source>Holds the product ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва филтър за продукт ID. Форматът на стойността за <i>точно съвпадение</i> е <tt>XXXX</tt>, където <tt>X</tt> е шестнадесетична цифра. Празна стойност ще съвпада с всички.</translation>
</message>
<message>
<source>Holds the revision number filter. The <i>exact match</i> string format is <tt>IIFF</tt> where <tt>I</tt> is a decimal digit of the integer part and <tt>F</tt> is a decimal digit of the fractional part. An empty string will match any value.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва филтър за номер на ревизия. Форматът на стойността за <i>точно съвпадение</i> е <tt>IIFF</tt>, където <tt>I</tt> е десетична цифра на целочислената част, а <tt>F</tt> е десетична цифра на дробната част. Празна стойност ще съвпада с всички.</translation>
</message>
<message>
<source>Holds the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва филтър за производител със стойност <i>точно съвпадение</i>. Празна стойност ще съвпада с всички.</translation>
</message>
<message>
<source>Holds the product name filter as an <i>exact match</i> string. An empty string will match any value.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва филтър за име на продукта със стойност <i>точно съвпадение</i>. Празна стойност ще съвпада с всички.</translation>
</message>
<message>
<source>Holds the serial number filter as an <i>exact match</i> string. An empty string will match any value.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва филтър за сериен номер със стойност <i>точно съвпадение</i>. Празна стойност ще съвпада с всички.</translation>
</message>
<message>
<source>Holds the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва филтър за реален USB порт със стойност <i>точно съвпадение</i>. Празна стойност ще съвпада с всички.</translation>
</message>
<message>
<source>Holds whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source>
- <translation type="unfinished"></translation>
+ <translation>Указва дали този филтър се прилага за USB устройства, които са закачени локално към реалния компютър (<i>Не</i>), към компютъра на VRDP клиент (<i>Да</i>) или и двете (<i>Всяко</i>).</translation>
</message>
</context>
<context>
@@ -8182,7 +8182,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>&Hard disks</source>
- <translation type="unfinished"></translation>
+ <translation>&Твърди дискове</translation>
</message>
</context>
<context>
@@ -9985,43 +9985,43 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source><p>One or more disk image files are not currently accessible. As a result, you will not be able to operate virtual machines that use these files until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see which files are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>Един или повече файлове на дискови изображения не са достъпни в момента. В резултат на това, няма да можете да работите с виртуалните машини, които ги използват, докато не станат достъпни по-късно.</p><p>Натиснете <b>Проверка</b>, за да отворите прозореца на Управлението на виртуални дискове и да видите кои файлове са недостъпни, или натиснете <b>Игнориране</b>, за да игнорирате това съобщение.</p></translation>
</message>
<message>
<source><p>Deleting the snapshot will cause the state information saved in it to be lost, and storage data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>С изтриването на снимка запазената информация в нея ще бъде премахната, и дисковите данни, разпръснати в няколко файлове с изображения, които VirtualBox е създал заедно със снимката, ще бъдат обединени в един файл. Това може да бъде продължителен процес, и информацията в снимката не може да бъде възстановена.</p><p>Сигурни ли сте, че искате да изтриете избраната снимка <b>%1</b>?</p></translation>
</message>
<message>
<source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>Изтриването на снимката %1 временно ще се нуждае от повече дисково пространство. В най-лошия случай размерът на изображението %2 ще нарасне с %3, а на тази файлова система има само %4 свободни.</p><p>Свършването на дисковото пространство по време на сливането може да причини счупване на изображението и конфигурацията на ВМ, като например загуба на ВМ и нейните данни.</p><p>Може да продължите с изтриването на снимката на ваша отговорно [...]
</message>
<message>
<source><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>Сигурни ли сте, че искате да освободите файла с дисково изображение <nobr><b>%1</b></nobr>?</p><p>Това ще го разкачи от следните виртуални машини: <b>%2</b>.</p></translation>
</message>
<message>
<source><p>Do you want to delete the storage unit of the virtual hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which mak [...]
- <translation type="unfinished"></translation>
+ <translation><p>Искате ли да изтриете съхраняващия елемент на твърдия диск <nobr><b>%1</b></nobr>?</p><p>Ако изберете <b>Изтриване</b>, избраният съхраняващ елемент ще бъде безвъзвратно изтрит. Тази операция <b>не може да бъде върната</b>.</p><p>Ако изберете <b>Запазване</b>, тогава само твърдият диск ще бъде премахнат от списъка с познати твърди дискове, но съхраняващият му елемент няма да [...]
</message>
<message>
<source>Failed to open the disk image file <nobr><b>%1</b></nobr>.</source>
- <translation type="unfinished"></translation>
+ <translation>Неуспешно отваряне на файла с дисково изображение <nobr><b>%1</b></nobr>.</translation>
</message>
<message>
<source>Failed to close the disk image file <nobr><b>%1</b></nobr>.</source>
- <translation type="unfinished"></translation>
+ <translation>Неуспешно затваряне на файла с дисково изображение <nobr><b>%1</b></nobr>.</translation>
</message>
<message>
<source>You are about to create a new virtual machine without a hard disk. You will not be able to install an operating system on the machine until you add one. In the mean time you will only be able to start the machine using a virtual optical disk or from the network.</source>
- <translation type="unfinished"></translation>
+ <translation>Предстои да създадете нова виртуална машина без твърд диск. Няма да можете да инсталирате операционна система в машината, докато не добавите такъв. Междувременно ще можете да стартирате машината само с оптичен диск или от мрежата.</translation>
</message>
<message>
<source><p>The virtual machine window will be now switched to <b>full-screen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in full-screen mode. You can access it by pressing <b>Host+Home</b>.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>Прозорецът на виртуалната машина ще бъде превключен към режим <b>на цял екран</b>. Можете да се върнете към прозоречен режим по всяко време чрез натискане на <b>%1</b>.</p><p> Имайте предвид, че за <i>Основен</i> клавиш в момента е зададен <b>%2</b>.</p><p>Имайте предвид, че лентата на основното меню е скрита в режим на цял екран. Можете да я достъпите чрез натискане на <b>Основен+ [...]
</message>
<message>
<source><p>Could not switch the guest display to full-screen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to full-screen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>Не може да се премине в режим на цял екран, поради недостиг на виртуална видео памет.</p><p>Трябва да конфигурирате виртуалната машина с поне <b>%1</b> видео памет.</p><p>Натиснете <b>Игнориране</b>, за да превключите към цял екран все пак, или натиснете <b>Отказ</b>, за да откажете тази операция.</p></translation>
</message>
</context>
<context>
@@ -10936,55 +10936,55 @@ p, li { white-space: pre-wrap; }
<name>UIPortForwardingTable</name>
<message>
<source>Name</source>
- <translation type="unfinished">Име</translation>
+ <translation>Име</translation>
</message>
<message>
<source>Protocol</source>
- <translation type="unfinished">Протокол</translation>
+ <translation>Протокол</translation>
</message>
<message>
<source>Host IP</source>
- <translation type="unfinished">IP на хоста</translation>
+ <translation>IP на хоста</translation>
</message>
<message>
<source>Host Port</source>
- <translation type="unfinished">Порт на хоста</translation>
+ <translation>Порт на хоста</translation>
</message>
<message>
<source>Guest IP</source>
- <translation type="unfinished">Виртуално IP</translation>
+ <translation>Виртуално IP</translation>
</message>
<message>
<source>Guest Port</source>
- <translation type="unfinished">Виртуален порт</translation>
+ <translation>Виртуален порт</translation>
</message>
<message>
<source>Contains a list of port forwarding rules.</source>
- <translation type="unfinished"></translation>
+ <translation>Съдържа списък на правилата за пренасочване на портове.</translation>
</message>
<message>
<source>Add New Rule</source>
- <translation type="unfinished"></translation>
+ <translation>Добавяне на ново правило</translation>
</message>
<message>
<source>Copy Selected Rule</source>
- <translation type="unfinished"></translation>
+ <translation>Копиране на избраното правило</translation>
</message>
<message>
<source>Remove Selected Rule</source>
- <translation type="unfinished"></translation>
+ <translation>Премахване на избраното правило</translation>
</message>
<message>
<source>Adds new port forwarding rule.</source>
- <translation type="unfinished"></translation>
+ <translation>Добавя ново правило за пренасочване на портове.</translation>
</message>
<message>
<source>Copies selected port forwarding rule.</source>
- <translation type="unfinished"></translation>
+ <translation>Копира избраното правило за пренасочване на портове.</translation>
</message>
<message>
<source>Removes selected port forwarding rule.</source>
- <translation type="unfinished"></translation>
+ <translation>Премахва избраното правило за пренасочване на портове.</translation>
</message>
</context>
<context>
@@ -11306,7 +11306,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source><nobr><b>Click</b> to toggle indicator presence.</nobr><br><nobr><b>Drag&Drop</b> to change indicator position.</nobr></source>
- <translation type="unfinished"><nobr><b>Клик</b> за превключване показването на индикатора.</nobr><br><nobr><b>Влачене и &пускане</b> за промяна позицията на индикатора.</nobr></translation>
+ <translation><nobr><b>Клик</b> за превключване показването на индикатора.</nobr><br><nobr><b>Влачене и &пускане</b> за промяна позицията на индикатора.</nobr></translation>
</message>
</context>
<context>
@@ -11922,75 +11922,75 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Copy Virtual Hard Disk</source>
- <translation type="unfinished"></translation>
+ <translation>Копиране на виртуален твърд диск</translation>
</message>
<message>
<source>Hard disk to copy</source>
- <translation type="unfinished"></translation>
+ <translation>Твърд диск за копиране</translation>
</message>
<message>
<source><p>Please select the virtual hard disk file that you would like to copy if it is not already selected. You can either choose one from the list or use the folder icon beside the list to select one.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>Моля, изберете файла на виртуалния диск, който искате да копирате, ако вече не е избран. Можете да изберете един от списъка или използвайте иконата на папка до списъка, за да изберете един.</p></translation>
</message>
<message>
<source>Choose a virtual hard disk file to copy...</source>
- <translation type="unfinished"></translation>
+ <translation>Изберете файл с виртуален твърд диск за копиране...</translation>
</message>
<message>
<source>Hard disk file type</source>
- <translation type="unfinished"></translation>
+ <translation>Тип файл за твърд диск</translation>
</message>
<message>
<source>Please choose the type of file that you would like to use for the new virtual hard disk. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
- <translation type="unfinished"></translation>
+ <translation>Моля, изберете типа на файла, който искате да използвате за новия виртуален твърд диск! Ако нямате нужда да използвате този файл с друг виртуализационен софтуер, можете да оставите тази настройка непроменена.</translation>
</message>
<message>
<source>Storage on physical hard disk</source>
- <translation type="unfinished"></translation>
+ <translation>Съхранение на физически твърд диск</translation>
</message>
<message>
<source>Please choose whether the new virtual hard disk file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
- <translation type="unfinished"></translation>
+ <translation>Моля, изберете дали файлът на новия виртуален твърд диск ще нараства докато се използва (динамично зададен), или искате да бъде създаден в максималния си размер (фиксиран размер).</translation>
</message>
<message>
<source><p>A <b>dynamically allocated</b> hard disk file will only use space on your physical hard disk as it fills up (up to a maximum <b>fixed size</b>), although it will not shrink again automatically when space on it is freed.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p><b>Днамично зададен</b> файл на виртуален твърд диск ще използва място на вашия физически твърд диск, само когато се запълни (но не повече от максималния <b>фиксиран размер</b>), но няма да се смали отново автоматично, когато се освободи място на него.</p></translation>
</message>
<message>
<source><p>A <b>fixed size</b> hard disk file may take longer to create on some systems but is often faster to use.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>Файл с<b>фиксиран размер</b> на виртуален твърд диск може да отнеме повече време при създаване на някои системи, но често е по-бърз при използване.</p></translation>
</message>
<message>
<source><p>You can also choose to <b>split</b> the hard disk file into several files of up to two gigabytes each. This is mainly useful if you wish to store the virtual machine on removable USB devices or old systems, some of which cannot handle very large files.</source>
- <translation type="unfinished"></translation>
+ <translation><p>Също така, можете да изберете да <b>разделите</b> виртуалния диск в няколко файла до 2ГБ всеки. Това е полезно, ако искате да съхраните виртуалната машина на преносими USB устройства или стари системи, някои от които не поддържат много големи файлове.</translation>
</message>
<message>
<source>Please choose a location for new virtual hard disk file</source>
- <translation type="unfinished"></translation>
+ <translation>Моля, изберете папка за новия файл на виртуален твърд диск</translation>
</message>
<message>
<source>New hard disk to create</source>
- <translation type="unfinished"></translation>
+ <translation>Нов твърд диск за създаване</translation>
</message>
<message>
<source>Please type the name of the new virtual hard disk file into the box below or click on the folder icon to select a different folder to create the file in.</source>
- <translation type="unfinished"></translation>
+ <translation>Моля, впишете името на файла на новия виртуален твърд диск в кутийката по-долу или щракнете на иконата с папка, за да изберете друга папка, в която да се създаде файлът.</translation>
</message>
<message>
<source>Choose a location for new virtual hard disk file...</source>
- <translation type="unfinished"></translation>
+ <translation>Изберете папка за новия файл на виртуален твърд диск...</translation>
</message>
<message>
<source>Hard disk to ©</source>
- <translation type="unfinished"></translation>
+ <translation>Твърд диск за &копиране</translation>
</message>
<message>
<source>&New hard disk to create</source>
- <translation type="unfinished"></translation>
+ <translation>&Нов твърд диск за създаване</translation>
</message>
<message>
<source>Hard disk file &type</source>
- <translation type="unfinished"></translation>
+ <translation>&Тип файл за твърд диск</translation>
</message>
</context>
<context>
@@ -12093,7 +12093,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source><p>Please choose the type of clone you wish to create.</p><p>If you choose <b>Full clone</b>, an exact copy (including all virtual hard disk files) of the original virtual machine will be created.</p><p>If you choose <b>Linked clone</b>, a new machine will be created, but the virtual hard disk files will be tied to the virtual hard disk files of original machine and you will not be able to move the new virtual machine [...]
- <translation type="unfinished"></translation>
+ <translation><p>Моля, изберете типа на клонинга, който искате да създадете.</p><p>Ако изберете <b>Пълен клонинг</b>, ще бъде създадено точно копие (включително и всички файлове на виртуални твърди дискове) на оригиналната машина.</p><p>Ако изберете <b>Свързан клонинг</b>, ще бъде създадена нова машина, но файловете на виртуалните твърди дискове ще сочат към файловете на виртуалните дискове на оригиналната машина и няма да може [...]
</message>
</context>
<context>
@@ -12451,51 +12451,51 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Create Virtual Hard Disk</source>
- <translation type="unfinished"></translation>
+ <translation>Създаване на виртуален твърд диск</translation>
</message>
<message>
<source>Hard disk file type</source>
- <translation type="unfinished"></translation>
+ <translation>Тип файл за твърд диск</translation>
</message>
<message>
<source>Please choose the type of file that you would like to use for the new virtual hard disk. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
- <translation type="unfinished"></translation>
+ <translation>Моля, изберете типа на файла, който искате да използвате за новия виртуален твърд диск! Ако нямате нужда да използвате този файл с друг виртуализационен софтуер, можете да оставите тази настройка непроменена.</translation>
</message>
<message>
<source>Storage on physical hard disk</source>
- <translation type="unfinished"></translation>
+ <translation>Съхранение на физически твърд диск</translation>
</message>
<message>
<source>Please choose whether the new virtual hard disk file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
- <translation type="unfinished"></translation>
+ <translation>Моля, изберете дали файлът на новия виртуален твърд диск ще нараства докато се използва (динамично зададен), или искате да бъде създаден в максималния си размер (фиксиран размер).</translation>
</message>
<message>
<source><p>A <b>dynamically allocated</b> hard disk file will only use space on your physical hard disk as it fills up (up to a maximum <b>fixed size</b>), although it will not shrink again automatically when space on it is freed.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p><b>Днамично зададен</b> файл на виртуален твърд диск ще използва място на вашия физически твърд диск, само когато се запълни (но не повече от максималния <b>фиксиран размер</b>), но няма да се смали отново автоматично, когато се освободи място на него.</p></translation>
</message>
<message>
<source><p>A <b>fixed size</b> hard disk file may take longer to create on some systems but is often faster to use.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>Файл с<b>фиксиран размер</b> на виртуален твърд диск може да отнеме повече време при създаване на някои системи, но често е по-бърз при използване.</p></translation>
</message>
<message>
<source><p>You can also choose to <b>split</b> the hard disk file into several files of up to two gigabytes each. This is mainly useful if you wish to store the virtual machine on removable USB devices or old systems, some of which cannot handle very large files.</source>
- <translation type="unfinished"></translation>
+ <translation><p>Също така, можете да изберете да <b>разделите</b> виртуалния диск в няколко файла до 2ГБ всеки. Това е полезно, ако искате да съхраните виртуалната машина на преносими USB устройства или стари системи, някои от които не поддържат много големи файлове.</translation>
</message>
<message>
<source>Please type the name of the new virtual hard disk file into the box below or click on the folder icon to select a different folder to create the file in.</source>
- <translation type="unfinished"></translation>
+ <translation>Моля, впишете името на файла на новия виртуален твърд диск в кутийката по-долу или щракнете на иконата с папка, за да изберете друга папка, в която да се създаде файлът.</translation>
</message>
<message>
<source>Choose a location for new virtual hard disk file...</source>
- <translation type="unfinished"></translation>
+ <translation>Изберете папка за новия файл на виртуален твърд диск...</translation>
</message>
<message>
<source>Select the size of the virtual hard disk in megabytes. This size is the limit on the amount of file data that a virtual machine will be able to store on the hard disk.</source>
- <translation type="unfinished"></translation>
+ <translation>Избор на размера на виртуалния твърд диск в мегабайти. Този размер е лимитът на количеството данни, които виртуалната машина ще може да съхрани на твърдия диск.</translation>
</message>
<message>
<source>Hard disk file &type</source>
- <translation type="unfinished"></translation>
+ <translation>&Тип файл за твърд диск</translation>
</message>
</context>
<context>
@@ -12574,27 +12574,27 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Hard disk</source>
- <translation type="unfinished"></translation>
+ <translation>Твърд диск</translation>
</message>
<message>
<source><p>If you wish you can add a virtual hard disk to the new machine. You can either create a new hard disk file or select one from the list or from another location using the folder icon.</p><p>If you need a more complex storage set-up you can skip this step and make the changes to the machine settings once the machine is created.</p><p>The recommended size of the hard disk is <b>%1</b>.</p></source>
- <translation type="unfinished"></translation>
+ <translation><p>Ако искате, можете да добавите виртуален твърд диск към новата машина. Можете също да създадете нов файл на твърд диск или да изберете един от списъка или друго място, като използвате иконата с папка.</p><p>Ако имате нужда от по-комплексна настройка на съхранението, пропуснете тази стъпка и направете промените в настройките на машината, след като бъде създадена.</p><p>Препоръчителният размер за твърдия диск е <b>%1</b>.< [...]
</message>
<message>
<source>&Do not add a virtual hard disk</source>
- <translation type="unfinished"></translation>
+ <translation>Да &не се добавя виртуален твърд диск</translation>
</message>
<message>
<source>&Create a virtual hard disk now</source>
- <translation type="unfinished"></translation>
+ <translation>&Създаване на виртуален твърд диск сега</translation>
</message>
<message>
<source>&Use an existing virtual hard disk file</source>
- <translation type="unfinished"></translation>
+ <translation>&Използване на съществуващ файл с виртуален твърд диск</translation>
</message>
<message>
<source>Choose a virtual hard disk file...</source>
- <translation type="unfinished">Изберете файл с виртуален твърд диск...</translation>
+ <translation>Изберете файл с виртуален твърд диск...</translation>
</message>
</context>
<context>
@@ -13289,19 +13289,19 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Displays a window to select a different folder.</source>
- <translation type="unfinished"></translation>
+ <translation>Отваря прозорец за избор на друга папка.</translation>
</message>
<message>
<source>Displays a window to select a different file.</source>
- <translation type="unfinished"></translation>
+ <translation>Отваря прозорец за избор на друг файл.</translation>
</message>
<message>
<source>Holds the folder path.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва пътя до папката.</translation>
</message>
<message>
<source>Holds the file path.</source>
- <translation type="unfinished"></translation>
+ <translation>Указва пътя до файла.</translation>
</message>
</context>
<context>
@@ -14416,7 +14416,7 @@ p, li { white-space: pre-wrap; }
<message>
<source>Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source>
<comment>medium</comment>
- <translation type="unfinished">Свързването на този твърд диск ще бъде извършено индиректно, като се използва новосъздаден различаващ твърд диск.</translation>
+ <translation>Свързването на този твърд диск ще бъде извършено индиректно, като се използва новосъздаден различаващ твърд диск.</translation>
</message>
<message>
<source>Some of the files in this hard disk chain are inaccessible. Please use the Virtual Media Manager in <b>Show Differencing Hard Disks</b> mode to inspect these files.</source>
@@ -14426,7 +14426,7 @@ p, li { white-space: pre-wrap; }
<message>
<source>This base hard disk is indirectly attached using the following differencing hard disk:</source>
<comment>medium</comment>
- <translation type="unfinished">Този основен твърд диск е свързан индиректно като се използва следният различаващ твърд диск:</translation>
+ <translation>Този основен твърд диск е свързан индиректно, като се използва следният различаващ твърд диск:</translation>
</message>
<message numerus="yes">
<source>%n year(s)</source>
@@ -15240,20 +15240,20 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Please choose a virtual hard disk file</source>
- <translation type="unfinished"></translation>
+ <translation>Моля, изберете файл с виртуален твърд диск</translation>
</message>
<message>
<source>All virtual hard disk files (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>Всички файлове с виртуални твърди дискове (%1)</translation>
</message>
<message>
<source>Some of the files in this hard disk chain are inaccessible. Please use the Virtual Medium Manager to inspect these files.</source>
<comment>medium</comment>
- <translation type="unfinished"></translation>
+ <translation>Някои от файловете в тази верига от твърди дискове са недостъпни. Моля, използвайте Управлението на виртуални дискове, за да проверите тези файлове.</translation>
</message>
<message>
<source>Please choose a location for new virtual hard disk file</source>
- <translation type="unfinished"></translation>
+ <translation>Моля, изберете папка за новия файл на виртуален твърд диск</translation>
</message>
</context>
<context>
@@ -16258,19 +16258,19 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore selected snapshot of the virtual machine</source>
- <translation type="unfinished"></translation>
+ <translation>Възстановяване на избраната снимка на виртуалната машина</translation>
</message>
<message>
<source>Delete selected snapshot of the virtual machine</source>
- <translation type="unfinished"></translation>
+ <translation>Изтриване на избраната снимка на виртуалната машина</translation>
</message>
<message>
<source>Display a window with selected snapshot details</source>
- <translation type="unfinished"></translation>
+ <translation>Показване на прозорец с детайлите на избраната снимка</translation>
</message>
<message>
<source>Clone selected virtual machine</source>
- <translation type="unfinished"></translation>
+ <translation>Клониране на избраната виртуална машина</translation>
</message>
</context>
<context>
@@ -16307,7 +16307,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Snapshot %1</source>
- <translation type="unfinished">Снимка %1</translation>
+ <translation>Снимка %1</translation>
</message>
</context>
<context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
index 0eb6127..9bbaa72 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
@@ -416,7 +416,7 @@
</message>
<message>
<source>&Network Settings...</source>
- <translation>&Einstellungen für Netzwerk...</translation>
+ <translation>&Einstellungen Netzwerk...</translation>
</message>
<message>
<source>&Shared Folders Settings...</source>
@@ -432,7 +432,7 @@
</message>
<message>
<source>&Video Capture Settings...</source>
- <translation>Einstellungen für &Videoaufzeichnung...</translation>
+ <translation>Einstellungen &Videoaufzeichnung...</translation>
</message>
<message>
<source>Popup Menu</source>
@@ -456,7 +456,7 @@
</message>
<message>
<source>&Menu Bar Settings...</source>
- <translation>&Einstelungen für Menüleiste...</translation>
+ <translation>&Einstellungen Menüleiste...</translation>
</message>
<message>
<source>Show Menu &Bar</source>
@@ -468,7 +468,7 @@
</message>
<message>
<source>&Status Bar Settings...</source>
- <translation>&Einstellungen für Statusleiste...</translation>
+ <translation>&Einstellungen Statusleiste...</translation>
</message>
<message>
<source>Show Status &Bar</source>
@@ -484,7 +484,7 @@
</message>
<message>
<source>&Keyboard Settings...</source>
- <translation>&Einstellungen für Tastatur...</translation>
+ <translation>&Einstellungen Tastatur...</translation>
</message>
<message>
<source>&Mouse</source>
@@ -492,7 +492,7 @@
</message>
<message>
<source>&USB Settings...</source>
- <translation>&Einstellungen für USB...</translation>
+ <translation>&Einstellungen USB...</translation>
</message>
<message>
<source>&Shared Folders</source>
@@ -680,7 +680,7 @@
</message>
<message>
<source>&Hard Disk Settings...</source>
- <translation>&Einstellungen für Festplatten...</translation>
+ <translation>&Einstellungen Festplatten...</translation>
</message>
<message>
<source>Display virtual machine settings window to configure hard disks</source>
@@ -2062,7 +2062,7 @@
<name>UIGlobalSettingsNetworkDetailsHost</name>
<message>
<source>Host-only Network Details</source>
- <translation>Einstellungen für Host-only Netzwerk</translation>
+ <translation>Einstellungen Host-only Netzwerk</translation>
</message>
<message>
<source>&Adapter</source>
@@ -2157,7 +2157,7 @@
<name>UIGlobalSettingsNetworkDetailsNAT</name>
<message>
<source>NAT Network Details</source>
- <translation>Einstellungen für NAT-Netzwerk</translation>
+ <translation>Einstellungen NAT-Netzwerk</translation>
</message>
<message>
<source>&Enable Network</source>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
index 7a486f4..6a292d6 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
@@ -2008,7 +2008,7 @@
<translation>Datuak erortzen...</translation>
</message>
<message>
- <location line="+310"/>
+ <location line="+314"/>
<source>Retrieving data ...</source>
<translation type="unfinished"></translation>
</message>
@@ -6961,7 +6961,7 @@
<context>
<name>UIMenuBarEditorWidget</name>
<message>
- <location filename="../src/runtime/UIMenuBarEditorWindow.cpp" line="+570"/>
+ <location filename="../src/runtime/UIMenuBarEditorWindow.cpp" line="+911"/>
<source>Virtual Screen Resize</source>
<translation type="unfinished"></translation>
</message>
@@ -6976,7 +6976,7 @@
<translation type="unfinished">Aldatu</translation>
</message>
<message>
- <location line="+318"/>
+ <location line="+26"/>
<source>Close</source>
<translation type="unfinished">Itxi</translation>
</message>
@@ -9090,7 +9090,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+361"/>
+ <location line="+364"/>
<source>Close</source>
<translation type="unfinished">Itxi</translation>
</message>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
index f6c9531..4de5b31 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
@@ -6385,7 +6385,7 @@
<message>
<source>Choose disk image...</source>
<comment>This is used for hard disks, optical media and floppies</comment>
- <translation type="unfinished"></translation>
+ <translation>选择虚拟盘...</translation>
</message>
</context>
<context>
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.cpp
index 25bdca3..5a8fed8 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.cpp
@@ -347,6 +347,8 @@ UIIconPoolGeneral::UIIconPoolGeneral()
m_guestOSTypeIconNames.insert("MacOS107_64", ":/os_macosx_64.png");
m_guestOSTypeIconNames.insert("MacOS108_64", ":/os_macosx_64.png");
m_guestOSTypeIconNames.insert("MacOS109_64", ":/os_macosx_64.png");
+ m_guestOSTypeIconNames.insert("MacOS1010_64", ":/os_macosx_64.png");
+ m_guestOSTypeIconNames.insert("MacOS1011_64", ":/os_macosx_64.png");
m_guestOSTypeIconNames.insert("JRockitVE", ":/os_jrockitve.png");
}
diff --git a/src/VBox/Frontends/VirtualBox/src/hardenedmain.cpp b/src/VBox/Frontends/VirtualBox/src/hardenedmain.cpp
index 99531bb..3818e8d 100644
--- a/src/VBox/Frontends/VirtualBox/src/hardenedmain.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/hardenedmain.cpp
@@ -64,6 +64,12 @@ int main(int argc, char **argv, char **envp)
uint32_t fFlags = (fStartVM && !fSeparateProcess) ? 0 : SUPSECMAIN_FLAGS_DONT_OPEN_DEV;
+#ifdef VIRTUALBOX_VM
+ return SUPR3HardenedMain("VirtualBoxVM",
+ fFlags | SUPSECMAIN_FLAGS_TRUSTED_ERROR | SUPSECMAIN_FLAGS_OSX_VM_APP,
+ argc, argv, envp);
+#else
return SUPR3HardenedMain("VirtualBox", fFlags | SUPSECMAIN_FLAGS_TRUSTED_ERROR, argc, argv, envp);
+#endif
}
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp
index 339dfff..28f359c 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp
@@ -44,29 +44,67 @@ UIDnDMIMEData::UIDnDMIMEData(UIDnDHandler *pDnDHandler,
, m_actions(actions)
, m_enmState(Dragging)
, m_vaData(QVariant::Invalid)
+#ifdef RT_OS_DARWIN
+ , m_fCanDrop(false)
+#endif
{
LogFlowThisFuncEnter();
#ifdef DEBUG
- LogFlowFunc(("Number of formats: %d\n", lstFormats.size()));
- for (int i = 0; i < lstFormats.size(); i++)
- LogFlowFunc(("\tFormat %d: %s\n", i, lstFormats.at(i).toAscii().constData()));
+ LogFlowFunc(("Number of formats: %d\n", m_lstFormats.size()));
+ for (int i = 0; i < m_lstFormats.size(); i++)
+ LogFlowFunc(("\tFormat %d: %s\n", i, m_lstFormats.at(i).toAscii().constData()));
+#endif
+
+#ifdef RT_OS_DARWIN
+ connect(this, SIGNAL(notifyDropped()), this, SLOT(sltDropped()));
#endif
}
QStringList UIDnDMIMEData::formats(void) const
{
+ LogFlowFuncEnter();
return m_lstFormats;
}
bool UIDnDMIMEData::hasFormat(const QString &strMIMEType) const
{
- bool fRc = (m_curAction != Qt::IgnoreAction);
+ bool fRc = false;
+
+#ifdef RT_OS_DARWIN
+ if (strMIMEType.compare("application/x-qt-mime-type-name", Qt::CaseInsensitive) == 0)
+ fRc = true;
+#endif
+
+ if (!fRc)
+ fRc = m_curAction != Qt::IgnoreAction;
+
LogFlowFunc(("%s: %RTbool (QtMimeData: %RTbool, curAction=0x%x)\n",
strMIMEType.toStdString().c_str(), fRc, QMimeData::hasFormat(strMIMEType), m_curAction));
+
+#ifdef RT_OS_DARWIN
+ /*
+ * On OS X hasFormat() only seems to get called on a successful
+ * drop, that is, if the host knows (and the user accepts) the drop operation.
+ *
+ * As we can't do here much since this is a const'ed function we're emitting a
+ * signal to ourselves in order to let us know that we can start receiving data
+ * from the guest within the next retrieveData() call.
+ */
+ emit notifyDropped();
+#endif
+
return fRc;
}
+#ifdef RT_OS_DARWIN
+void UIDnDMIMEData::sltDropped(void)
+{
+ LogFlowFuncEnter();
+ m_fCanDrop = true;
+}
+#endif
+
/**
* Called by Qt's drag'n drop operation (QDrag) for retrieving the actual drag'n drop
* data in case of a successful drag'n drop operation.
@@ -81,17 +119,28 @@ QVariant UIDnDMIMEData::retrieveData(const QString &strMIMEType, QVariant::Type
LogFlowFunc(("state=%RU32, curAction=0x%x, defAction=0x%x, mimeType=%s, type=%d (%s)\n",
m_enmState, m_curAction, m_defAction, strMIMEType.toStdString().c_str(), vaType, QVariant::typeToName(vaType)));
- bool fCanDrop = true;
+ bool fCanDrop = true; /* Accept by default. */
#ifdef RT_OS_WINDOWS
- /* On Windows this function will be called several times by Qt's
+ /*
+ * On Windows this function will be called several times by Qt's
* OLE-specific internals to figure out which data formats we have
- * to offer. So just assume we can drop data here for a start.* */
- fCanDrop = true;
+ * to offer. So just assume we can drop data here for a start.
+ */
+#elif defined(RT_OS_DARWIN)
+ /*
+ * On OS X we rely on an internal flag which gets set in the overriden
+ * hasFormat() function. That function only gets called on a successful drop
+ * so that we can tell if we have to start receiving data the next time
+ * we come by here.
+ */
+ fCanDrop = m_fCanDrop;
#else
- /* On non-Windows our state gets updated via an own event filter
+ /*
+ * On non-Windows our state gets updated via an own event filter
* (see UIDnDMimeData::eventFilter). This filter will update the current
- * operation state for us (based on the mouse buttons). */
+ * operation state for us (based on the mouse buttons).
+ */
if (m_curAction == Qt::IgnoreAction)
{
LogFlowFunc(("Current drop action is 0x%x, so can't drop yet\n", m_curAction));
@@ -138,8 +187,13 @@ QVariant UIDnDMIMEData::retrieveData(const QString &strMIMEType, QVariant::Type
return vaData;
}
+#ifdef RT_OS_DARWIN
+ LogFlowFunc(("Returning data for Cocoa\n"));
+ return QMimeData::retrieveData(strMIMEType, vaType);
+#else
LogFlowFunc(("Skipping request, state=%RU32 ...\n", m_enmState));
return QVariant(QVariant::Invalid); /* Return a NULL variant. */
+#endif
}
int UIDnDMIMEData::setData(const QString &strMIMEType, const QVariant &vaData)
@@ -203,4 +257,3 @@ void UIDnDMIMEData::sltDropActionChanged(Qt::DropAction dropAction)
LogFlowFunc(("dropAction=0x%x\n", dropAction));
m_curAction = dropAction;
}
-
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h
index fb7497e..cdaa6a6 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h
@@ -66,10 +66,26 @@ signals:
int getData(const QString &strMIMEType, QVariant::Type vaType, QVariant &vaData) const;
+#ifdef RT_OS_DARWIN
+ void notifyDropped(void) const;
+#endif
+
public slots:
+ /**
+ * Slot indicating that the current drop target has been changed.
+ * @note Does not work on OS X.
+ */
void sltDropActionChanged(Qt::DropAction dropAction);
+#ifdef RT_OS_DARWIN
+ /**
+ * Slot indicating that the host wants us to drop the
+ * data from the guest to the host.
+ */
+ void sltDropped(void);
+#endif
+
protected:
/** @name Overridden functions of QMimeData.
* @{ */
@@ -110,6 +126,12 @@ protected:
mutable State m_enmState;
mutable QVariant m_vaData;
+
+#ifdef RT_OS_DARWIN
+ /** Flag indicating whether we can drop data from the
+ * guest to the host or not. */
+ bool m_fCanDrop;
+#endif
};
#endif /* ___UIDnDMIMEData_h___ */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
index 8791bf7..05d1c92 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
@@ -1052,7 +1052,7 @@ void UIMachineLogic::prepareActionConnections()
/* 'View' actions connections: */
#ifndef Q_WS_MAC
connect(actionPool()->action(UIActionIndexRT_M_View_S_MinimizeWindow), SIGNAL(triggered()),
- this, SLOT(sltMinimizeActiveMachineWindow()));
+ this, SLOT(sltMinimizeActiveMachineWindow()), Qt::QueuedConnection);
#endif /* !Q_WS_MAC */
connect(actionPool()->action(UIActionIndexRT_M_View_S_AdjustWindow), SIGNAL(triggered()),
this, SLOT(sltAdjustMachineWindows()));
@@ -1111,7 +1111,7 @@ void UIMachineLogic::prepareActionConnections()
#ifdef Q_WS_MAC
/* 'Window' action connections: */
connect(actionPool()->action(UIActionIndex_M_Window_S_Minimize), SIGNAL(triggered()),
- this, SLOT(sltMinimizeActiveMachineWindow()));
+ this, SLOT(sltMinimizeActiveMachineWindow()), Qt::QueuedConnection);
#endif /* Q_WS_MAC */
}
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.h
index 8e05bd5..dfb1f8a 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.h
@@ -97,6 +97,9 @@ protected slots:
/* Session event-handlers: */
virtual void sltMachineStateChanged();
+ /** Shows window minimized. */
+ virtual void showMinimized() { QMainWindow::showMinimized(); }
+
protected:
/* Constructor: */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp
index af8f571..c7c21cf 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp
@@ -188,6 +188,21 @@ void UIMachineWindowFullscreen::sltRevokeFocus()
#endif /* Q_WS_MAC || Q_WS_X11 */
}
+void UIMachineWindowFullscreen::showMinimized()
+{
+#ifdef Q_WS_X11
+ /* If there is mini-toolbar: */
+ if (m_pMiniToolBar)
+ {
+ /* Minimize it first: */
+ m_pMiniToolBar->showMinimized();
+ }
+#endif /* Q_WS_X11 */
+
+ /* Call to base-class: */
+ UIMachineWindow::showMinimized();
+}
+
void UIMachineWindowFullscreen::prepareVisualState()
{
/* Call to base-class: */
@@ -246,7 +261,7 @@ void UIMachineWindowFullscreen::prepareMiniToolbar()
gEDataManager->miniToolbarAlignment(vboxGlobal().managedVMUuid()),
gEDataManager->autoHideMiniToolbar(vboxGlobal().managedVMUuid()));
m_pMiniToolBar->addMenus(actionPool()->menus());
- connect(m_pMiniToolBar, SIGNAL(sigMinimizeAction()), this, SLOT(showMinimized()));
+ connect(m_pMiniToolBar, SIGNAL(sigMinimizeAction()), this, SLOT(showMinimized()), Qt::QueuedConnection);
connect(m_pMiniToolBar, SIGNAL(sigExitAction()),
actionPool()->action(UIActionIndexRT_M_View_T_Fullscreen), SLOT(trigger()));
connect(m_pMiniToolBar, SIGNAL(sigCloseAction()),
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h
index b046e0f..fa404a7 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h
@@ -74,6 +74,9 @@ private slots:
/** Revokes keyboard-focus. */
void sltRevokeFocus();
+ /** Shows window minimized. */
+ void showMinimized();
+
private:
/* Prepare helpers: */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp
index 378ff29..709f327 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp
@@ -79,6 +79,21 @@ void UIMachineWindowSeamless::sltRevokeFocus()
#endif /* Q_WS_MAC || Q_WS_X11 */
}
+void UIMachineWindowSeamless::showMinimized()
+{
+#ifdef Q_WS_X11
+ /* If there is mini-toolbar: */
+ if (m_pMiniToolBar)
+ {
+ /* Minimize it first: */
+ m_pMiniToolBar->showMinimized();
+ }
+#endif /* Q_WS_X11 */
+
+ /* Call to base-class: */
+ UIMachineWindow::showMinimized();
+}
+
void UIMachineWindowSeamless::prepareVisualState()
{
/* Call to base-class: */
@@ -130,7 +145,7 @@ void UIMachineWindowSeamless::prepareMiniToolbar()
gEDataManager->autoHideMiniToolbar(vboxGlobal().managedVMUuid()));
m_pMiniToolBar->show();
m_pMiniToolBar->addMenus(actionPool()->menus());
- connect(m_pMiniToolBar, SIGNAL(sigMinimizeAction()), this, SLOT(showMinimized()));
+ connect(m_pMiniToolBar, SIGNAL(sigMinimizeAction()), this, SLOT(showMinimized()), Qt::QueuedConnection);
connect(m_pMiniToolBar, SIGNAL(sigExitAction()),
actionPool()->action(UIActionIndexRT_M_View_T_Seamless), SLOT(trigger()));
connect(m_pMiniToolBar, SIGNAL(sigCloseAction()),
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h
index 947eb1f..6c8b16c 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h
@@ -46,6 +46,9 @@ private slots:
/** Revokes keyboard-focus. */
void sltRevokeFocus();
+ /** Shows window minimized. */
+ void showMinimized();
+
private:
/* Prepare helpers: */
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSB.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSB.cpp
index 49d212b..1dcbc9e 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSB.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSB.cpp
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2015 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -399,12 +399,16 @@ void UIMachineSettingsUSB::saveFromCacheTo(QVariant &data)
/* Removing USB controllers: */
if (!usbData.m_fUSBEnabled)
{
- if (cXhciCtls)
- m_machine.RemoveUSBController("XHCI");
- if (cEhciCtls)
- m_machine.RemoveUSBController("EHCI");
- if (cOhciCtls)
- m_machine.RemoveUSBController("OHCI");
+ if (cXhciCtls || cEhciCtls || cOhciCtls)
+ {
+ CUSBControllerVector ctlvec = m_machine.GetUSBControllers();
+ for (int i = 0; i < ctlvec.size(); ++i)
+ {
+ CUSBController ctl = ctlvec[i];
+ QString strName = ctl.GetName();
+ m_machine.RemoveUSBController(strName);
+ }
+ }
}
/* Creating/replacing USB controllers: */
else
@@ -413,10 +417,20 @@ void UIMachineSettingsUSB::saveFromCacheTo(QVariant &data)
{
case KUSBControllerType_OHCI:
{
- if (cEhciCtls)
- m_machine.RemoveUSBController("EHCI");
- if (cXhciCtls)
- m_machine.RemoveUSBController("XHCI");
+ if (cXhciCtls || cEhciCtls)
+ {
+ CUSBControllerVector ctlvec = m_machine.GetUSBControllers();
+ for (int i = 0; i < ctlvec.size(); ++i)
+ {
+ CUSBController ctl = ctlvec[i];
+ KUSBControllerType enmType = ctl.GetType();
+ if (enmType == KUSBControllerType_XHCI || enmType == KUSBControllerType_EHCI)
+ {
+ QString strName = ctl.GetName();
+ m_machine.RemoveUSBController(strName);
+ }
+ }
+ }
if (!cOhciCtls)
m_machine.AddUSBController("OHCI", KUSBControllerType_OHCI);
break;
@@ -424,7 +438,19 @@ void UIMachineSettingsUSB::saveFromCacheTo(QVariant &data)
case KUSBControllerType_EHCI:
{
if (cXhciCtls)
- m_machine.RemoveUSBController("XHCI");
+ {
+ CUSBControllerVector ctlvec = m_machine.GetUSBControllers();
+ for (int i = 0; i < ctlvec.size(); ++i)
+ {
+ CUSBController ctl = ctlvec[i];
+ KUSBControllerType enmType = ctl.GetType();
+ if (enmType == KUSBControllerType_XHCI)
+ {
+ QString strName = ctl.GetName();
+ m_machine.RemoveUSBController(strName);
+ }
+ }
+ }
if (!cOhciCtls)
m_machine.AddUSBController("OHCI", KUSBControllerType_OHCI);
if (!cEhciCtls)
@@ -433,12 +459,22 @@ void UIMachineSettingsUSB::saveFromCacheTo(QVariant &data)
}
case KUSBControllerType_XHCI:
{
- if (cEhciCtls)
- m_machine.RemoveUSBController("EHCI");
- if (cOhciCtls)
- m_machine.RemoveUSBController("OHCI");
+ if (cEhciCtls || cOhciCtls)
+ {
+ CUSBControllerVector ctlvec = m_machine.GetUSBControllers();
+ for (int i = 0; i < ctlvec.size(); ++i)
+ {
+ CUSBController ctl = ctlvec[i];
+ KUSBControllerType enmType = ctl.GetType();
+ if (enmType == KUSBControllerType_EHCI || enmType == KUSBControllerType_OHCI)
+ {
+ QString strName = ctl.GetName();
+ m_machine.RemoveUSBController(strName);
+ }
+ }
+ }
if (!cXhciCtls)
- m_machine.AddUSBController("XHCI", KUSBControllerType_XHCI);
+ m_machine.AddUSBController("xHCI", KUSBControllerType_XHCI);
break;
}
default:
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp
old mode 100644
new mode 100755
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp
index 84a68ac..0d16792 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp
@@ -107,6 +107,8 @@ static const osTypePattern gs_OSTypePattern[] =
{ QRegExp( "(mac.*10[.,]{0,1}7)|(os.*x.*10[.,]{0,1}7)|(mac.*ML)|(os.*x.*ML)|(Mount)", Qt::CaseInsensitive), "MacOS108_64" },
{ QRegExp( "(mac.*10[.,]{0,1}8)|(os.*x.*10[.,]{0,1}8)|(Lion)", Qt::CaseInsensitive), "MacOS107_64" },
{ QRegExp( "(mac.*10[.,]{0,1}9)|(os.*x.*10[.,]{0,1}9)|(mac.*mav)|(os.*x.*mav)|(Mavericks)", Qt::CaseInsensitive), "MacOS109_64" },
+ { QRegExp( "(mac.*yos)|(os.*x.*yos)|(Yosemite)", Qt::CaseInsensitive), "MacOS1010_64" },
+ { QRegExp( "(mac.*yos)|(os.*x.*yos)|(Capitan)", Qt::CaseInsensitive), "MacOS1011_64" },
{ QRegExp("((Mac)|(Tig)|(Leop)|(Yose)|(os[ ]*x)).*64", Qt::CaseInsensitive), "MacOS_64" },
{ QRegExp("((Mac)|(Tig)|(Leop)|(Yose)|(os[ ]*x)).*32", Qt::CaseInsensitive), "MacOS" },
diff --git a/src/VBox/GuestHost/OpenGL/error/error.py b/src/VBox/GuestHost/OpenGL/error/error.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.py b/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.py
old mode 100755
new mode 100644
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_current.py b/src/VBox/GuestHost/OpenGL/packer/pack_current.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_currentheader.py b/src/VBox/GuestHost/OpenGL/packer/pack_currentheader.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_header.py b/src/VBox/GuestHost/OpenGL/packer/pack_header.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/packer/packer.py b/src/VBox/GuestHost/OpenGL/packer/packer.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/packer/packer_bbox.py b/src/VBox/GuestHost/OpenGL/packer/packer_bbox.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/spu_loader/dispatch.py b/src/VBox/GuestHost/OpenGL/spu_loader/dispatch.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/spu_loader/dispatchheader.py b/src/VBox/GuestHost/OpenGL/spu_loader/dispatchheader.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/spu_loader/glloader.py b/src/VBox/GuestHost/OpenGL/spu_loader/glloader.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/spu_loader/spuchange.py b/src/VBox/GuestHost/OpenGL/spu_loader/spuchange.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/spu_loader/spucopy.py b/src/VBox/GuestHost/OpenGL/spu_loader/spucopy.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/convert.py b/src/VBox/GuestHost/OpenGL/state_tracker/convert.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py b/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_current.py b/src/VBox/GuestHost/OpenGL/state_tracker/state_current.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_defs.py b/src/VBox/GuestHost/OpenGL/state_tracker/state_defs.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_funcs.py b/src/VBox/GuestHost/OpenGL/state_tracker/state_funcs.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_get.py b/src/VBox/GuestHost/OpenGL/state_tracker/state_get.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_isenabled.py b/src/VBox/GuestHost/OpenGL/state_tracker/state_isenabled.py
old mode 100644
new mode 100755
diff --git a/src/VBox/GuestHost/OpenGL/util/debug_opcodes.py b/src/VBox/GuestHost/OpenGL/util/debug_opcodes.py
old mode 100644
new mode 100755
diff --git a/src/VBox/HostDrivers/Support/SUPLibInternal.h b/src/VBox/HostDrivers/Support/SUPLibInternal.h
index 56f4132..381f9c9 100644
--- a/src/VBox/HostDrivers/Support/SUPLibInternal.h
+++ b/src/VBox/HostDrivers/Support/SUPLibInternal.h
@@ -439,7 +439,7 @@ DECLHIDDEN(void) supR3HardenedLog(const char *pszFormat, ...);
DECLHIDDEN(void) supR3HardenedLogFlush(void);
-DECLHIDDEN(int) supR3HardenedVerifyAll(bool fFatal, const char *pszProgName, const char *pszExePath);
+DECLHIDDEN(int) supR3HardenedVerifyAll(bool fFatal, const char *pszProgName, const char *pszExePath, uint32_t fMainFlags);
DECLHIDDEN(int) supR3HardenedVerifyFixedDir(SUPINSTDIR enmDir, bool fFatal);
DECLHIDDEN(int) supR3HardenedVerifyFixedFile(const char *pszFilename, bool fFatal);
DECLHIDDEN(int) supR3HardenedVerifyDir(const char *pszDirPath, bool fRecursive, bool fCheckFiles, PRTERRINFO pErrInfo);
diff --git a/src/VBox/HostDrivers/Support/SUPLibLdr.cpp b/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
index 6bbd32a..86be45b 100644
--- a/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
+++ b/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
@@ -95,8 +95,10 @@ static RTR0PTR g_pvVMMR0 = NIL_RTR0PTR;
/*******************************************************************************
* Internal Functions *
*******************************************************************************/
-static int supLoadModule(const char *pszFilename, const char *pszModule, const char *pszSrvReqHandler, void **ppvImageBase);
-static DECLCALLBACK(int) supLoadModuleResolveImport(RTLDRMOD hLdrMod, const char *pszModule, const char *pszSymbol, unsigned uSymbol, RTUINTPTR *pValue, void *pvUser);
+static int supLoadModule(const char *pszFilename, const char *pszModule, const char *pszSrvReqHandler,
+ PRTERRINFO pErrInfo, void **ppvImageBase);
+static DECLCALLBACK(int) supLoadModuleResolveImport(RTLDRMOD hLdrMod, const char *pszModule, const char *pszSymbol,
+ unsigned uSymbol, RTUINTPTR *pValue, void *pvUser);
SUPR3DECL(int) SUPR3LoadModule(const char *pszFilename, const char *pszModule, void **ppvImageBase, PRTERRINFO pErrInfo)
@@ -107,7 +109,7 @@ SUPR3DECL(int) SUPR3LoadModule(const char *pszFilename, const char *pszModule, v
int rc = SUPR3HardenedVerifyPlugIn(pszFilename, pErrInfo);
if (RT_SUCCESS(rc))
{
- rc = supLoadModule(pszFilename, pszModule, NULL, ppvImageBase);
+ rc = supLoadModule(pszFilename, pszModule, NULL, pErrInfo, ppvImageBase);
if (RT_FAILURE(rc))
RTErrInfoSetF(pErrInfo, rc, "SUPR3LoadModule: supLoadModule returned %Rrc", rc);
}
@@ -125,7 +127,7 @@ SUPR3DECL(int) SUPR3LoadServiceModule(const char *pszFilename, const char *pszMo
*/
int rc = SUPR3HardenedVerifyPlugIn(pszFilename, NULL /*pErrInfo*/);
if (RT_SUCCESS(rc))
- rc = supLoadModule(pszFilename, pszModule, pszSrvReqHandler, ppvImageBase);
+ rc = supLoadModule(pszFilename, pszModule, pszSrvReqHandler, NULL /*pErrInfo*/, ppvImageBase);
else
LogRel(("SUPR3LoadServiceModule: Verification of \"%s\" failed, rc=%Rrc\n", rc));
return rc;
@@ -133,6 +135,15 @@ SUPR3DECL(int) SUPR3LoadServiceModule(const char *pszFilename, const char *pszMo
/**
+ * Argument package for supLoadModuleResolveImport.
+ */
+typedef struct SUPLDRRESIMPARGS
+{
+ const char *pszModule;
+ PRTERRINFO pErrInfo;
+} SUPLDRRESIMPARGS, *PSUPLDRRESIMPARGS;
+
+/**
* Resolve an external symbol during RTLdrGetBits().
*
* @returns VBox status code.
@@ -146,9 +157,10 @@ SUPR3DECL(int) SUPR3LoadServiceModule(const char *pszFilename, const char *pszMo
static DECLCALLBACK(int) supLoadModuleResolveImport(RTLDRMOD hLdrMod, const char *pszModule,
const char *pszSymbol, unsigned uSymbol, RTUINTPTR *pValue, void *pvUser)
{
- NOREF(hLdrMod); NOREF(pvUser); NOREF(uSymbol);
+ NOREF(hLdrMod); NOREF(uSymbol);
AssertPtr(pValue);
AssertPtr(pvUser);
+ PSUPLDRRESIMPARGS pArgs = (PSUPLDRRESIMPARGS)pvUser;
/*
* Only SUPR0 and VMMR0.r0
@@ -158,17 +170,19 @@ static DECLCALLBACK(int) supLoadModuleResolveImport(RTLDRMOD hLdrMod, const char
&& strcmp(pszModule, "VBoxDrv.sys")
&& strcmp(pszModule, "VMMR0.r0"))
{
- AssertMsgFailed(("%s is importing from %s! (expected 'SUPR0.dll' or 'VMMR0.r0', case-sensitive)\n", pvUser, pszModule));
- return VERR_SYMBOL_NOT_FOUND;
+ AssertMsgFailed(("%s is importing from %s! (expected 'SUPR0.dll' or 'VMMR0.r0', case-sensitive)\n", pArgs->pszModule, pszModule));
+ return RTErrInfoSetF(pArgs->pErrInfo, VERR_SYMBOL_NOT_FOUND,
+ "Unexpected import module '%s' in '%s'", pszModule, pArgs->pszModule);
}
/*
* No ordinals.
*/
- if (pszSymbol < (const char*)0x10000)
+ if (uSymbol != ~0U)
{
- AssertMsgFailed(("%s is importing by ordinal (ord=%d)\n", pvUser, (int)(uintptr_t)pszSymbol));
- return VERR_SYMBOL_NOT_FOUND;
+ AssertMsgFailed(("%s is importing by ordinal (ord=%d)\n", pArgs->pszModule, uSymbol));
+ return RTErrInfoSetF(pArgs->pErrInfo, VERR_SYMBOL_NOT_FOUND,
+ "Unexpected ordinal import (%#x) in '%s'", uSymbol, pArgs->pszModule);
}
/*
@@ -253,14 +267,19 @@ static DECLCALLBACK(int) supLoadModuleResolveImport(RTLDRMOD hLdrMod, const char
RTAssertMsg2Weak("%d: %s\n", g_pSupFunctions->u.Out.cFunctions - c, pFunc->szName);
pFunc++;
}
+ RTAssertMsg2Weak("%s is importing %s which we couldn't find\n", pArgs->pszModule, pszSymbol);
- AssertLogRelMsgFailed(("%s is importing %s which we couldn't find\n", pvUser, pszSymbol));
+ AssertLogRelMsgFailed(("%s is importing %s which we couldn't find\n", pArgs->pszModule, pszSymbol));
if (g_uSupFakeMode)
{
*pValue = 0xdeadbeef;
return VINF_SUCCESS;
}
- return VERR_SYMBOL_NOT_FOUND;
+ return RTErrInfoSetF(pArgs->pErrInfo, VERR_SYMBOL_NOT_FOUND,
+ "Unable to local imported symbol '%s%s%s' for module '%s'",
+ pszModule ? pszModule : "",
+ pszModule && *pszModule ? "." : "",
+ pArgs->pszModule);
}
@@ -330,7 +349,8 @@ static DECLCALLBACK(int) supLoadModuleCreateTabsCB(RTLDRMOD hLdrMod, const char
* @returns VBox status code.
* @param pszFilename Name of the VMMR0 image file
*/
-static int supLoadModule(const char *pszFilename, const char *pszModule, const char *pszSrvReqHandler, void **ppvImageBase)
+static int supLoadModule(const char *pszFilename, const char *pszModule, const char *pszSrvReqHandler,
+ PRTERRINFO pErrInfo, void **ppvImageBase)
{
int rc;
@@ -412,8 +432,10 @@ static int supLoadModule(const char *pszFilename, const char *pszModule, const c
/*
* Get the image bits.
*/
+
+ SUPLDRRESIMPARGS Args = { pszModule, pErrInfo };
rc = RTLdrGetBits(hLdrMod, &pLoadReq->u.In.abImage[0], (uintptr_t)OpenReq.u.Out.pvImageBase,
- supLoadModuleResolveImport, (void *)pszModule);
+ supLoadModuleResolveImport, &Args);
if (RT_SUCCESS(rc))
{
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
index a52945c..74f4f31 100644
--- a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
+++ b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
@@ -1719,6 +1719,41 @@ static void supR3HardenedMainInitRuntime(uint32_t fFlags)
/**
+ * Construct the path to the DLL/SO/DYLIB containing the actual program.
+ *
+ * @returns VBox status code.
+ * @param pszProgName The program name.
+ * @param fMainFlags The flags passed to SUPR3HardenedMain.
+ * @param pszPath The output buffer.
+ * @param cbPath The size of the output buffer, in bytes. Must be at
+ * least 128 bytes!
+ */
+static int supR3HardenedMainGetTrustedLib(const char *pszProgName, uint32_t fMainFlags, char *pszPath, size_t cbPath)
+{
+ supR3HardenedPathAppPrivateArch(pszPath, sizeof(cbPath) - 10);
+ const char *pszSubDirSlash;
+ switch (g_fSupHardenedMain & SUPSECMAIN_FLAGS_LOC_MASK)
+ {
+ case SUPSECMAIN_FLAGS_LOC_APP_BIN:
+ pszSubDirSlash = "/";
+ break;
+ case SUPSECMAIN_FLAGS_LOC_TESTCASE:
+ pszSubDirSlash = "/testcase/";
+ break;
+ default:
+ pszSubDirSlash = "/";
+ supR3HardenedFatal("supR3HardenedMainGetTrustedMain: Unknown program binary location: %#x\n", g_fSupHardenedMain);
+ }
+#ifdef RT_OS_DARWIN
+ if (fMainFlags & SUPSECMAIN_FLAGS_OSX_VM_APP)
+ pszProgName = "VirtualBox";
+#endif
+ size_t cch = suplibHardenedStrLen(pszPath);
+ return suplibHardenedStrCopyEx(&pszPath[cch], cbPath - cch, pszSubDirSlash, pszProgName, SUPLIB_DLL_SUFF, NULL);
+}
+
+
+/**
* Loads the DLL/SO/DYLIB containing the actual program and
* resolves the TrustedError symbol.
*
@@ -1742,9 +1777,7 @@ static PFNSUPTRUSTEDERROR supR3HardenedMainGetTrustedError(const char *pszProgNa
* Construct the name.
*/
char szPath[RTPATH_MAX];
- supR3HardenedPathAppPrivateArch(szPath, sizeof(szPath) - 10);
- size_t cch = suplibHardenedStrLen(szPath);
- suplibHardenedStrCopyEx(&szPath[cch], sizeof(szPath) - cch, "/", pszProgName, SUPLIB_DLL_SUFF, NULL);
+ supR3HardenedMainGetTrustedLib(pszProgName, g_fSupHardenedMain, szPath, sizeof(szPath));
/*
* Open it and resolve the symbol.
@@ -1778,30 +1811,16 @@ static PFNSUPTRUSTEDERROR supR3HardenedMainGetTrustedError(const char *pszProgNa
*
* @returns Pointer to the trusted main of the actual program.
* @param pszProgName The program name.
+ * @param fMainFlags The flags passed to SUPR3HardenedMain.
* @remarks This function will not return on failure.
*/
-static PFNSUPTRUSTEDMAIN supR3HardenedMainGetTrustedMain(const char *pszProgName)
+static PFNSUPTRUSTEDMAIN supR3HardenedMainGetTrustedMain(const char *pszProgName, uint32_t fMainFlags)
{
/*
* Construct the name.
*/
char szPath[RTPATH_MAX];
- supR3HardenedPathAppPrivateArch(szPath, sizeof(szPath) - 10);
- const char *pszSubDirSlash;
- switch (g_fSupHardenedMain & SUPSECMAIN_FLAGS_LOC_MASK)
- {
- case SUPSECMAIN_FLAGS_LOC_APP_BIN:
- pszSubDirSlash = "/";
- break;
- case SUPSECMAIN_FLAGS_LOC_TESTCASE:
- pszSubDirSlash = "/testcase/";
- break;
- default:
- pszSubDirSlash = "/";
- supR3HardenedFatal("supR3HardenedMainGetTrustedMain: Unknown program binary location: %#x\n", g_fSupHardenedMain);
- }
- size_t cch = suplibHardenedStrLen(szPath);
- suplibHardenedStrCopyEx(&szPath[cch], sizeof(szPath) - cch, pszSubDirSlash, pszProgName, SUPLIB_DLL_SUFF, NULL);
+ supR3HardenedMainGetTrustedLib(pszProgName, fMainFlags, szPath, sizeof(szPath));
/*
* Open it and resolve the symbol.
@@ -1810,11 +1829,11 @@ static PFNSUPTRUSTEDMAIN supR3HardenedMainGetTrustedMain(const char *pszProgName
HMODULE hMod = (HMODULE)supR3HardenedWinLoadLibrary(szPath, false /*fSystem32Only*/, 0 /*fMainFlags*/);
if (!hMod)
supR3HardenedFatal("supR3HardenedMainGetTrustedMain: LoadLibrary \"%s\" failed, rc=%d\n",
- szPath, RtlGetLastWin32Error());
+ szPath, RtlGetLastWin32Error());
FARPROC pfn = GetProcAddress(hMod, SUP_HARDENED_SYM("TrustedMain"));
if (!pfn)
supR3HardenedFatal("supR3HardenedMainGetTrustedMain: Entrypoint \"TrustedMain\" not found in \"%s\" (rc=%d)\n",
- szPath, RtlGetLastWin32Error());
+ szPath, RtlGetLastWin32Error());
return (PFNSUPTRUSTEDMAIN)pfn;
#else
@@ -1822,11 +1841,11 @@ static PFNSUPTRUSTEDMAIN supR3HardenedMainGetTrustedMain(const char *pszProgName
void *pvMod = dlopen(szPath, RTLD_NOW | RTLD_GLOBAL);
if (!pvMod)
supR3HardenedFatal("supR3HardenedMainGetTrustedMain: dlopen(\"%s\",) failed: %s\n",
- szPath, dlerror());
+ szPath, dlerror());
void *pvSym = dlsym(pvMod, SUP_HARDENED_SYM("TrustedMain"));
if (!pvSym)
supR3HardenedFatal("supR3HardenedMainGetTrustedMain: Entrypoint \"TrustedMain\" not found in \"%s\"!\ndlerror: %s\n",
- szPath, dlerror());
+ szPath, dlerror());
return (PFNSUPTRUSTEDMAIN)(uintptr_t)pvSym;
#endif
}
@@ -1909,7 +1928,7 @@ DECLHIDDEN(int) SUPR3HardenedMain(const char *pszProgName, uint32_t fFlags, int
{
SUP_DPRINTF(("SUPR3HardenedMain: Respawn #1\n"));
supR3HardenedWinInit(SUPSECMAIN_FLAGS_DONT_OPEN_DEV, false /*fAvastKludge*/);
- supR3HardenedVerifyAll(true /* fFatal */, pszProgName, g_szSupLibHardenedExePath);
+ supR3HardenedVerifyAll(true /* fFatal */, pszProgName, g_szSupLibHardenedExePath, fFlags);
return supR3HardenedWinReSpawn(1 /*iWhich*/);
}
@@ -1926,7 +1945,7 @@ DECLHIDDEN(int) SUPR3HardenedMain(const char *pszProgName, uint32_t fFlags, int
/*
* Validate the installation.
*/
- supR3HardenedVerifyAll(true /* fFatal */, pszProgName, g_szSupLibHardenedExePath);
+ supR3HardenedVerifyAll(true /* fFatal */, pszProgName, g_szSupLibHardenedExePath, fFlags);
/*
* The next steps are only taken if we actually need to access the support
@@ -2001,7 +2020,7 @@ DECLHIDDEN(int) SUPR3HardenedMain(const char *pszProgName, uint32_t fFlags, int
*/
SUP_DPRINTF(("SUPR3HardenedMain: Load TrustedMain...\n"));
g_enmSupR3HardenedMainState = SUPR3HARDENEDMAINSTATE_GET_TRUSTED_MAIN;
- PFNSUPTRUSTEDMAIN pfnTrustedMain = supR3HardenedMainGetTrustedMain(pszProgName);
+ PFNSUPTRUSTEDMAIN pfnTrustedMain = supR3HardenedMainGetTrustedMain(pszProgName, fFlags);
SUP_DPRINTF(("SUPR3HardenedMain: Calling TrustedMain (%p)...\n", pfnTrustedMain));
g_enmSupR3HardenedMainState = SUPR3HARDENEDMAINSTATE_CALLED_TRUSTED_MAIN;
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp
index 2de46db..5e6a738 100644
--- a/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp
+++ b/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp
@@ -188,6 +188,9 @@ static SUPINSTFILE const g_aSupInstallFiles[] =
//#ifdef VBOX_WITH_QTGUI
{ kSupIFT_Exe, kSupID_AppBin, true, "VirtualBox" SUPLIB_EXE_SUFF },
{ kSupIFT_Dll, kSupID_AppPrivArch, true, "VirtualBox" SUPLIB_DLL_SUFF },
+# ifdef RT_OS_DARWIN
+ { kSupIFT_Exe, kSupID_AppBin, true, "VirtualBoxVM" SUPLIB_EXE_SUFF },
+# endif
# if !defined(RT_OS_DARWIN) && !defined(RT_OS_WINDOWS) && !defined(RT_OS_OS2)
{ kSupIFT_Dll, kSupID_AppSharedLib, true, "VBoxKeyboard" SUPLIB_DLL_SUFF },
# endif
@@ -852,22 +855,37 @@ DECLHIDDEN(int) supR3HardenedVerifyFixedFile(const char *pszFilename, bool fFata
* @param fFatal See supR3HardenedVerifyAll.
* @param fLeaveOpen The leave open setting used by
* supR3HardenedVerifyAll.
+ * @param fMainFlags Flags supplied to SUPR3HardenedMain.
*/
-static int supR3HardenedVerifyProgram(const char *pszProgName, const char *pszExePath, bool fFatal, bool fLeaveOpen)
+static int supR3HardenedVerifyProgram(const char *pszProgName, const char *pszExePath, bool fFatal,
+ bool fLeaveOpen, uint32_t fMainFlags)
{
/*
* Search the table looking for the executable and the DLL/DYLIB/SO.
+ * Note! On darwin we have a hack in place for VirtualBoxVM helper app
+ * to share VirtualBox.dylib with the VirtualBox app. This ASSUMES
+ * that cchProgNameDll is equal or shorter to the exe name.
*/
int rc = VINF_SUCCESS;
bool fExe = false;
bool fDll = false;
- size_t const cchProgName = suplibHardenedStrLen(pszProgName);
+ size_t const cchProgNameExe = suplibHardenedStrLen(pszProgName);
+#ifndef RT_OS_DARWIN
+ size_t const cchProgNameDll = cchProgNameExe;
+#else
+ size_t const cchProgNameDll = fMainFlags & SUPSECMAIN_FLAGS_OSX_VM_APP
+ ? sizeof("VirtualBox") - 1
+ : cchProgNameExe;
+ if (cchProgNameDll > cchProgNameExe)
+ return supR3HardenedError(VERR_INTERNAL_ERROR, fFatal,
+ "supR3HardenedVerifyProgram: SUPSECMAIN_FLAGS_OSX_VM_APP + '%s'", pszProgName);
+#endif
for (unsigned iFile = 0; iFile < RT_ELEMENTS(g_aSupInstallFiles); iFile++)
- if (!suplibHardenedStrNCmp(pszProgName, g_aSupInstallFiles[iFile].pszFile, cchProgName))
+ if (!suplibHardenedStrNCmp(pszProgName, g_aSupInstallFiles[iFile].pszFile, cchProgNameDll))
{
- if ( ( g_aSupInstallFiles[iFile].enmType == kSupIFT_Dll
- || g_aSupInstallFiles[iFile].enmType == kSupIFT_TestDll)
- && !suplibHardenedStrCmp(&g_aSupInstallFiles[iFile].pszFile[cchProgName], SUPLIB_DLL_SUFF))
+ if ( ( g_aSupInstallFiles[iFile].enmType == kSupIFT_Dll
+ || g_aSupInstallFiles[iFile].enmType == kSupIFT_TestDll)
+ && !suplibHardenedStrCmp(&g_aSupInstallFiles[iFile].pszFile[cchProgNameDll], SUPLIB_DLL_SUFF))
{
/* This only has to be found (once). */
if (fDll)
@@ -880,7 +898,9 @@ static int supR3HardenedVerifyProgram(const char *pszProgName, const char *pszEx
}
else if ( ( g_aSupInstallFiles[iFile].enmType == kSupIFT_Exe
|| g_aSupInstallFiles[iFile].enmType == kSupIFT_TestExe)
- && !suplibHardenedStrCmp(&g_aSupInstallFiles[iFile].pszFile[cchProgName], SUPLIB_EXE_SUFF))
+ && ( cchProgNameExe == cchProgNameDll
+ || !suplibHardenedStrNCmp(pszProgName, g_aSupInstallFiles[iFile].pszFile, cchProgNameExe))
+ && !suplibHardenedStrCmp(&g_aSupInstallFiles[iFile].pszFile[cchProgNameExe], SUPLIB_EXE_SUFF))
{
/* Here we'll have to check that the specific program is the same as the entry. */
if (fExe)
@@ -926,8 +946,9 @@ static int supR3HardenedVerifyProgram(const char *pszProgName, const char *pszEx
* both the executable and corresponding
* DLL/DYLIB/SO are valid.
* @param pszExePath The path to the executable.
+ * @param fMainFlags Flags supplied to SUPR3HardenedMain.
*/
-DECLHIDDEN(int) supR3HardenedVerifyAll(bool fFatal, const char *pszProgName, const char *pszExePath)
+DECLHIDDEN(int) supR3HardenedVerifyAll(bool fFatal, const char *pszProgName, const char *pszExePath, uint32_t fMainFlags)
{
/*
* On windows
@@ -954,7 +975,7 @@ DECLHIDDEN(int) supR3HardenedVerifyAll(bool fFatal, const char *pszProgName, con
* (thus verified above) and verify the signature on platforms where we
* sign things.
*/
- int rc2 = supR3HardenedVerifyProgram(pszProgName, pszExePath, fFatal, fLeaveOpen);
+ int rc2 = supR3HardenedVerifyProgram(pszProgName, pszExePath, fFatal, fLeaveOpen, fMainFlags);
if (RT_FAILURE(rc2) && RT_SUCCESS(rc))
rc2 = rc;
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk b/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk
index baffd55..d621dd6 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk
+++ b/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk
@@ -60,6 +60,7 @@ if1of ($(KBUILD_TARGET), darwin win) # this ifeq must go, see @todo around elif
$(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/ntoskrnl.lib \
$(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/hal.lib \
$(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/ndis.lib \
+ $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/tdi.lib \
$(PATH_STAGE_LIB)/RuntimeR0Drv$(VBOX_SUFF_LIB)
VBoxNetFlt_LIBS = \
$(PATH_STAGE_LIB)/SUPR0IdcClient$(VBOX_SUFF_LIB)
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
index 88cb604..2272fce 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
+++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
@@ -31,6 +31,7 @@
#include <linux/in.h>
#include <linux/ip.h>
#include <linux/if_vlan.h>
+#include <net/ipv6.h>
#include <net/if_inet6.h>
#include <net/addrconf.h>
@@ -1884,6 +1885,10 @@ static int vboxNetFltLinuxNotifierCallback(struct notifier_block *self, unsigned
return rc;
}
+/*
+ * Initial enumeration of netdevs. Called with NETDEV_REGISTER by
+ * register_netdevice_notifier() under rtnl lock.
+ */
static int vboxNetFltLinuxEnumeratorCallback(struct notifier_block *self, unsigned long ulEventType, void *ptr)
{
PVBOXNETFLTINS pThis = ((PVBOXNETFLTNOTIFIER)self)->pThis;
@@ -1900,7 +1905,11 @@ static int vboxNetFltLinuxEnumeratorCallback(struct notifier_block *self, unsign
/*
* IPv4
*/
- in_dev = __in_dev_get_rcu(dev);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 14)
+ in_dev = __in_dev_get_rtnl(dev);
+#else
+ in_dev = __in_dev_get(dev);
+#endif
if (in_dev != NULL)
{
for_ifa(in_dev) {
@@ -1936,7 +1945,7 @@ static int vboxNetFltLinuxEnumeratorCallback(struct notifier_block *self, unsign
#endif
{
if ( dev != pThis->u.s.pDev
- && ipv6_addr_src_scope(&ifa->addr) <= IPV6_ADDR_SCOPE_LINKLOCAL)
+ && ipv6_addr_type(&ifa->addr) & (IPV6_ADDR_LINKLOCAL | IPV6_ADDR_LOOPBACK))
continue;
Log(("%s: %s: IPv6 addr %RTnaipv6/%u\n",
@@ -2019,7 +2028,7 @@ static int vboxNetFltLinuxNotifierIPv6Callback(struct notifier_block *self, unsi
vboxNetFltLinuxReleaseNetDev(pThis, pDev);
if ( !fMyDev
- && ipv6_addr_src_scope(&ifa->addr) <= IPV6_ADDR_SCOPE_LINKLOCAL)
+ && ipv6_addr_type(&ifa->addr) & (IPV6_ADDR_LINKLOCAL | IPV6_ADDR_LOOPBACK))
return NOTIFY_OK;
if (pThis->pSwitchPort->pfnNotifyHostAddress)
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltCmn-win.h b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltCmn-win.h
index 101ed30..e1e426d 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltCmn-win.h
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltCmn-win.h
@@ -55,6 +55,7 @@
#include <iprt/alloca.h>
#include <iprt/time.h>
#include <iprt/net.h>
+#include <iprt/list.h>
RT_C_DECLS_BEGIN
/* ntddk.h has a missing #pragma pack(), work around it
@@ -374,6 +375,12 @@ typedef struct VBOXNETFLTGLOBALS_WIN
#ifndef VBOXNETADP
/* Protocol info */
VBOXNETFLTGLOBALS_PT Pt;
+ /** lock protecting the filter list */
+ NDIS_SPIN_LOCK lockFilters;
+ /** the head of filter list */
+ RTLISTANCHOR listFilters;
+ /** IP address change notifier handle */
+ HANDLE hNotifier;
#endif
} VBOXNETFLTGLOBALS_WIN, *PVBOXNETFLTGLOBALS_WIN;
@@ -456,6 +463,8 @@ typedef struct VBOXNETFLTWIN
ULONG fSetFilterBuffer;
/** packet filter flags set by us */
ULONG fOurSetFilter;
+ /** our own list of filters, needed by notifier */
+ RTLISTNODE node;
#else
volatile ULONG cTxSuccess;
volatile ULONG cRxSuccess;
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp
index aa77afc..6860e58 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp
@@ -18,6 +18,11 @@
#include <VBox/intnetinline.h>
#include <iprt/thread.h>
+RT_C_DECLS_BEGIN
+#include <tdikrnl.h>
+RT_C_DECLS_END
+#include <mstcpip.h>
+
/** represents the job element of the job queue
* see comments for VBOXNETFLT_JOB_QUEUE */
typedef struct VBOXNETFLT_JOB
@@ -1677,6 +1682,10 @@ DECLHIDDEN(VOID) vboxNetFltWinUnload(IN PDRIVER_OBJECT DriverObject)
vboxNetFltWinMpDeregister(&g_VBoxNetFltGlobalsWin.Mp);
+#ifndef VBOXNETADP
+ NdisFreeSpinLock(&g_VBoxNetFltGlobalsWin.lockFilters);
+#endif /* VBOXNETADP */
+
LogFlow((__FUNCTION__" <== DO (0x%x)\n", DriverObject));
vboxNetFltWinFiniNetFltBase();
@@ -1728,6 +1737,11 @@ NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING Registry
g_VBoxNetFltGlobalsWin.fPacketIsLoopedBack = NDIS_FLAGS_IS_LOOPBACK_PACKET;
+#ifndef VBOXNETADP
+ RTListInit(&g_VBoxNetFltGlobalsWin.listFilters);
+ NdisAllocateSpinLock(&g_VBoxNetFltGlobalsWin.lockFilters);
+#endif
+
Status = vboxNetFltWinMpRegister(&g_VBoxNetFltGlobalsWin.Mp, DriverObject, RegistryPath);
Assert(Status == STATUS_SUCCESS);
if (Status == NDIS_STATUS_SUCCESS)
@@ -1748,6 +1762,9 @@ NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING Registry
//#endif
}
vboxNetFltWinMpDeregister(&g_VBoxNetFltGlobalsWin.Mp);
+#ifndef VBOXNETADP
+ NdisFreeSpinLock(&g_VBoxNetFltGlobalsWin.lockFilters);
+#endif /* VBOXNETADP */
}
vboxNetFltWinJobFiniQueue(&g_VBoxJobQueue);
}
@@ -3271,9 +3288,198 @@ void vboxNetFltPortOsSetActive(PVBOXNETFLTINS pThis, bool fActive)
return;
}
+#ifndef VBOXNETADP
+
+DECLINLINE(bool) vboxNetFltWinIsAddrLinkLocal4(PCRTNETADDRIPV4 pAddr)
+{
+ return (pAddr->s.Lo == 0xfea9); /* 169.254 */
+}
+
+DECLINLINE(bool) vboxNetFltWinIsAddrLinkLocal6(PCRTNETADDRIPV6 pAddr)
+{
+ return ((pAddr->au8[0] == 0xfe) && ((pAddr->au8[1] & 0xc0) == 0x80));
+}
+
+void vboxNetFltWinNotifyHostAddress(PTA_ADDRESS pAddress, bool fAdded)
+{
+ void *pvAddr = NULL;
+ INTNETADDRTYPE enmAddrType = kIntNetAddrType_Invalid;
+
+ LogFlow(("==>vboxNetFltWinNotifyHostAddress: AddrType=%d %s\n",
+ pAddress->AddressType, fAdded ? "added" : "deleted"));
+ if (pAddress->AddressType == TDI_ADDRESS_TYPE_IP)
+ {
+ PTDI_ADDRESS_IP pTdiAddrIp = (PTDI_ADDRESS_IP)pAddress->Address;
+ /*
+ * Note that we do not get loopback addresses here. If we did we should
+ * have checked and ignored them too.
+ */
+ if (!vboxNetFltWinIsAddrLinkLocal4((PCRTNETADDRIPV4)(&pTdiAddrIp->in_addr)))
+ {
+ pvAddr = &pTdiAddrIp->in_addr;
+ enmAddrType = kIntNetAddrType_IPv4;
+ }
+ else
+ Log2(("vboxNetFltWinNotifyHostAddress: ignoring link-local address %RTnaipv4\n",
+ pTdiAddrIp->in_addr));
+ }
+ else if (pAddress->AddressType == TDI_ADDRESS_TYPE_IP6)
+ {
+ PTDI_ADDRESS_IP6 pTdiAddrIp6 = (PTDI_ADDRESS_IP6)pAddress->Address;
+ if (!vboxNetFltWinIsAddrLinkLocal6((PCRTNETADDRIPV6)(pTdiAddrIp6->sin6_addr)))
+ {
+ pvAddr = pTdiAddrIp6->sin6_addr;
+ enmAddrType = kIntNetAddrType_IPv6;
+ }
+ else
+ Log2(("vboxNetFltWinNotifyHostAddress: ignoring link-local address %RTnaipv6\n",
+ pTdiAddrIp6->sin6_addr));
+ }
+ else
+ {
+ Log2(("vboxNetFltWinNotifyHostAddress: ignoring irrelevant address type %d\n",
+ pAddress->AddressType));
+ LogFlow(("<==vboxNetFltWinNotifyHostAddress\n"));
+ return;
+ }
+ if (pvAddr)
+ {
+ NdisAcquireSpinLock(&g_VBoxNetFltGlobalsWin.lockFilters);
+ /* At this point the list must contain at least one element. */
+ PVBOXNETFLTWIN pFilter = NULL;
+ PVBOXNETFLTINS pInstance = NULL;
+ RTListForEach(&g_VBoxNetFltGlobalsWin.listFilters, pFilter, VBOXNETFLTWIN, node)
+ {
+ pInstance = RT_FROM_MEMBER(pFilter, VBOXNETFLTINS, u.s.WinIf);
+ if (vboxNetFltWinReferenceWinIf(pInstance))
+ {
+ if (pInstance->pSwitchPort && pInstance->pSwitchPort->pfnNotifyHostAddress)
+ break;
+ vboxNetFltWinDereferenceWinIf(pInstance);
+ }
+ else
+ Log2(("vboxNetFltWinNotifyHostAddress: failed to retain filter instance %p\n", pInstance));
+ pInstance = NULL;
+ }
+ NdisReleaseSpinLock(&g_VBoxNetFltGlobalsWin.lockFilters);
+ if (pInstance)
+ {
+ if (enmAddrType == kIntNetAddrType_IPv4)
+ Log2(("vboxNetFltWin%sAddressHandler: %RTnaipv4\n",
+ fAdded ? "Add" : "Del", *(PCRTNETADDRIPV4)pvAddr));
+ else
+ Log2(("vboxNetFltWin%sAddressHandler: %RTnaipv6\n",
+ fAdded ? "Add" : "Del", pvAddr));
+ pInstance->pSwitchPort->pfnNotifyHostAddress(pInstance->pSwitchPort, fAdded,
+ enmAddrType, pvAddr);
+ vboxNetFltWinDereferenceWinIf(pInstance);
+ }
+ else
+ Log2(("vboxNetFltWinNotifyHostAddress: no filters require notification\n"));
+ }
+ LogFlow(("<==vboxNetFltWinNotifyHostAddress\n"));
+}
+
+void vboxNetFltWinAddAddressHandler(PTA_ADDRESS Address,
+ PUNICODE_STRING DeviceName,
+ PTDI_PNP_CONTEXT Context)
+{
+ vboxNetFltWinNotifyHostAddress(Address, true);
+}
+
+void vboxNetFltWinDelAddressHandler(PTA_ADDRESS Address,
+ PUNICODE_STRING DeviceName,
+ PTDI_PNP_CONTEXT Context)
+{
+ vboxNetFltWinNotifyHostAddress(Address, false);
+}
+
+void vboxNetFltWinRegisterIpAddrNotifier(PVBOXNETFLTINS pThis)
+{
+ LogFlow(("==>vboxNetFltWinRegisterIpAddrNotifier: instance=%p pThis->pSwitchPort=%p pThis->pSwitchPort->pfnNotifyHostAddress=%p\n",
+ pThis, pThis->pSwitchPort, pThis->pSwitchPort ? pThis->pSwitchPort->pfnNotifyHostAddress : NULL));
+ if (pThis->pSwitchPort && pThis->pSwitchPort->pfnNotifyHostAddress)
+ {
+ NdisAcquireSpinLock(&g_VBoxNetFltGlobalsWin.lockFilters);
+ bool fRegisterHandlers = RTListIsEmpty(&g_VBoxNetFltGlobalsWin.listFilters);
+ RTListPrepend(&g_VBoxNetFltGlobalsWin.listFilters, &pThis->u.s.WinIf.node);
+ NdisReleaseSpinLock(&g_VBoxNetFltGlobalsWin.lockFilters);
+
+ if (fRegisterHandlers)
+ {
+ TDI_CLIENT_INTERFACE_INFO Info;
+ UNICODE_STRING ClientName = RTL_CONSTANT_STRING(L"VBoxNetFlt");
+ memset(&Info, 0, sizeof(Info));
+ Info.MajorTdiVersion = 2;
+ Info.MinorTdiVersion = 0;
+ Info.ClientName = &ClientName;
+ Info.AddAddressHandlerV2 = vboxNetFltWinAddAddressHandler;
+ Info.DelAddressHandlerV2 = vboxNetFltWinDelAddressHandler;
+ Assert(!g_VBoxNetFltGlobalsWin.hNotifier);
+ NTSTATUS Status = TdiRegisterPnPHandlers(&Info, sizeof(Info), &g_VBoxNetFltGlobalsWin.hNotifier);
+ Log2(("vboxNetFltWinRegisterIpAddrNotifier: TdiRegisterPnPHandlers returned %d\n", Status));
+ }
+ else
+ Log2(("vboxNetFltWinRegisterIpAddrNotifier: already registed\n"));
+ }
+ else
+ Log2(("vboxNetFltWinRegisterIpAddrNotifier: this instance does not require notifications, ignoring...\n"));
+ LogFlow(("<==vboxNetFltWinRegisterIpAddrNotifier: notifier=%p\n", g_VBoxNetFltGlobalsWin.hNotifier));
+}
+
+void vboxNetFltWinUnregisterIpAddrNotifier(PVBOXNETFLTINS pThis)
+{
+ LogFlow(("==>vboxNetFltWinUnregisterIpAddrNotifier: notifier=%p\n", g_VBoxNetFltGlobalsWin.hNotifier));
+ if (pThis->pSwitchPort && pThis->pSwitchPort->pfnNotifyHostAddress)
+ {
+ NdisAcquireSpinLock(&g_VBoxNetFltGlobalsWin.lockFilters);
+ /* At this point the list must contain at least one element. */
+ Assert(!RTListIsEmpty(&g_VBoxNetFltGlobalsWin.listFilters));
+ RTListNodeRemove(&pThis->u.s.WinIf.node);
+ HANDLE hNotifier = NULL;
+ if (RTListIsEmpty(&g_VBoxNetFltGlobalsWin.listFilters))
+ {
+ /*
+ * The list has become empty, so we need to deregister handlers. We
+ * grab hNotifier and reset it while still holding the lock. This
+ * guaranties that we won't interfere with setting it in
+ * vboxNetFltWinRegisterIpAddrNotifier(). It is inconceivable that
+ * vboxNetFltWinUnregisterIpAddrNotifier() will be called for the
+ * same filter instance while it is still being processed by
+ * vboxNetFltWinRegisterIpAddrNotifier(). This would require trunk
+ * destruction in the middle of its creation. It is possible that
+ * vboxNetFltWinUnregisterIpAddrNotifier() is called for another
+ * filter instance, but in such case we won't even get here as the
+ * list won't be empty.
+ */
+ hNotifier = g_VBoxNetFltGlobalsWin.hNotifier;
+ g_VBoxNetFltGlobalsWin.hNotifier = NULL;
+ }
+ NdisReleaseSpinLock(&g_VBoxNetFltGlobalsWin.lockFilters);
+ if (hNotifier)
+ {
+ NTSTATUS Status = TdiDeregisterPnPHandlers(hNotifier);
+ Log2(("vboxNetFltWinUnregisterIpAddrNotifier: TdiDeregisterPnPHandlers(%p) returned %d\n",
+ hNotifier, Status));
+ }
+ else
+ Log2(("vboxNetFltWinUnregisterIpAddrNotifier: filters remain, do not deregister handlers yet\n"));
+ }
+ else
+ Log2(("vboxNetFltWinUnregisterIpAddrNotifier: this instance did not require notifications, ignoring...\n"));
+ LogFlow(("<==vboxNetFltWinUnregisterIpAddrNotifier\n"));
+}
+#else /* VBOXNETADP */
+#define vboxNetFltWinRegisterIpAddrNotifier(x)
+#define vboxNetFltWinUnregisterIpAddrNotifier(x)
+#endif /* VBOXNETADP */
+
int vboxNetFltOsDisconnectIt(PVBOXNETFLTINS pThis)
{
NDIS_STATUS Status = vboxNetFltWinDisconnectIt(pThis);
+ Log2(("vboxNetFltOsDisconnectIt: pThis=%p pThis->pSwitchPort=%p pThis->pSwitchPort->pfnNotifyHostAddress=%p\n",
+ pThis, pThis->pSwitchPort, pThis->pSwitchPort ? pThis->pSwitchPort->pfnNotifyHostAddress : NULL));
+ vboxNetFltWinUnregisterIpAddrNotifier(pThis);
return Status == NDIS_STATUS_SUCCESS ? VINF_SUCCESS : VERR_GENERAL_FAILURE;
}
@@ -3339,6 +3545,9 @@ static int vboxNetFltWinConnectIt(PVBOXNETFLTINS pThis)
int vboxNetFltOsConnectIt(PVBOXNETFLTINS pThis)
{
+ Log2(("vboxNetFltOsConnectIt: pThis=%p pThis->pSwitchPort=%p pThis->pSwitchPort->pfnNotifyHostAddress=%p\n",
+ pThis, pThis->pSwitchPort, pThis->pSwitchPort ? pThis->pSwitchPort->pfnNotifyHostAddress : NULL));
+ vboxNetFltWinRegisterIpAddrNotifier(pThis);
return vboxNetFltWinConnectIt(pThis);
}
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_dispatch.py b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_dispatch.py
old mode 100644
new mode 100755
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_dispatch_header.py b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_dispatch_header.py
old mode 100644
new mode 100755
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_get.py b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_get.py
old mode 100644
new mode 100755
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c
index c8f2e5f..5ff17dd 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c
@@ -5,7 +5,7 @@
*/
/*
- * Copyright (C) 2009-2012 Oracle Corporation
+ * Copyright (C) 2009-2015 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -45,6 +45,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetActiveAttrib(GLuint program, GL
crGetActive_t zero;
zero.length = 0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
/* zero out just the header to ensure it initially contains zero size values */
memset(pLocal, 0, sizeof (*pLocal));
@@ -63,6 +64,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetActiveUniform(GLuint program, G
crGetActive_t zero;
zero.length = 0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
/* zero out just the header to ensure it initially contains zero size values */
memset(pLocal, 0, sizeof (*pLocal));
@@ -80,6 +82,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedShaders(GLuint program,
{
GLsizei zero=0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
/* initial (fallback )value */
*pLocal = 0;
@@ -106,6 +109,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedObjectsARB(VBoxGLhandle
{
GLsizei zero=0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
/* initial (fallback )value */
*pLocal = 0;
@@ -135,6 +139,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetInfoLogARB(VBoxGLhandleARB obj,
{
GLsizei zero=0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
/* initial (fallback )value */
*pLocal = 0;
@@ -156,6 +161,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetShaderInfoLog(GLuint shader, GL
{
GLsizei zero=0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
/* initial (fallback )value */
*pLocal = 0;
@@ -173,6 +179,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetProgramInfoLog(GLuint program,
{
GLsizei zero=0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
/* initial (fallback )value */
*pLocal = 0;
@@ -191,6 +198,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetShaderSource(GLuint shader, GLs
{
GLsizei zero=0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
/* initial (fallback )value */
*pLocal = 0;
@@ -213,6 +221,7 @@ crServerDispatchGetUniformsLocations(GLuint program, GLsizei maxcbData, GLsizei
{
GLsizei zero=0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
/* initial (fallback )value */
@@ -236,6 +245,7 @@ crServerDispatchGetAttribsLocations(GLuint program, GLsizei maxcbData, GLsizei *
{
GLsizei zero=0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
/* initial (fallback )value */
@@ -267,6 +277,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetUniformfv(GLuint program, GLint
{
GLsizei zero=0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
cr_server.head_spu->dispatch_table.GetUniformfv(crStateGetProgramHWID(program), location, pLocal);
@@ -285,6 +296,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetUniformiv(GLuint program, GLint
{
GLsizei zero=0;
crServerReturnValue(&zero, sizeof(zero));
+ return;
}
cr_server.head_spu->dispatch_table.GetUniformiv(crStateGetProgramHWID(program), location, pLocal);
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_retval.py b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_retval.py
old mode 100644
new mode 100755
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_simpleget.py b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_simpleget.py
old mode 100644
new mode 100755
diff --git a/src/VBox/HostServices/SharedOpenGL/expando/expando.py b/src/VBox/HostServices/SharedOpenGL/expando/expando.py
old mode 100644
new mode 100755
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack.py b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack.py
old mode 100644
new mode 100755
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_extend.py b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_extend.py
old mode 100644
new mode 100755
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_header.py b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_header.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Installer/linux/Makefile.kmk b/src/VBox/Installer/linux/Makefile.kmk
index 2c8526f..b0cda3e 100644
--- a/src/VBox/Installer/linux/Makefile.kmk
+++ b/src/VBox/Installer/linux/Makefile.kmk
@@ -42,10 +42,11 @@ VBOX_LNX_PACKAGE_NAME = VirtualBox-$(VBOX_VERSION_STRING)-r$(VBOX_SVN_REV).ru
VBOX_LNX_INST_DEP_ON_MAKEFILE := $(MAKEFILE_CURRENT)
BLDDIRS += $(VBOX_LNX_INST_OUT_DIR) $(VBOX_LNX_INST_STAGE_DIR)
-PACKING += $(PATH_STAGE_BIN)/VirtualBox.tar.bz2
if !defined(VBOX_NO_LINUX_RUN_INSTALLER)
PACKING += $(PATH_STAGE_BIN)/$(VBOX_LNX_PACKAGE_NAME) \
$(PATH_STAGE_BIN)/VirtualBox-dbg.tar.bz2
+else
+ PACKING += $(PATH_STAGE_BIN)/VirtualBox.tar
endif
OTHER_CLEAN += \
@@ -85,7 +86,6 @@ linux-scripts_SOURCES = \
uninstall.sh \
vboxautostart-service.sh \
vboxballoonctrl-service.sh \
- vboxdrv-pardus.py \
vboxweb-service.sh
INSTALLS += linux-misc
@@ -438,22 +438,15 @@ endif
$(QUIET)$(CHMOD) 0644 $@
#
-# .tar.bz2 for distribution with the files under VirtualBox-<ver>/.
+# .tar for distribution with the files under VirtualBox-<ver>/.
#
-$(PATH_STAGE_BIN)/VirtualBox.tar.bz2: $(VBOX_LNX_INST_ARCH_DEPS)
+$(PATH_STAGE_BIN)/VirtualBox.tar: $(VBOX_LNX_INST_ARCH_DEPS)
$(call MSG_L1,Packing $@)
$(QUIET)$(RM) -f -- $(VBOX_LNX_INST_OUT_DIR)/VirtualBox-$(VBOX_VERSION_STRING) $@ $(patsubst %.bz2,%,$@)
$(QUIET)$(LN_SYMLINK) $(VBOX_LNX_INST_OUT_DIR)/archive/ $(VBOX_LNX_INST_OUT_DIR)/VirtualBox-$(VBOX_VERSION_STRING)
-ifdef VBOX_USE_PBZIP2
$(QUIET)tar --dereference --owner 0 --group 0 \
- -cRhf $(patsubst %.bz2,%,$@) -C $(VBOX_LNX_INST_OUT_DIR) \
+ -cRhf $@ -C $(VBOX_LNX_INST_OUT_DIR) \
$(addprefix VirtualBox-$(VBOX_VERSION_STRING)/,$(VBOX_LNX_ARCH_FILES))
- $(QUIET)pbzip2 $(patsubst %.bz2,%,$@)
-else
- $(QUIET)tar --dereference --owner 0 --group 0 \
- -cjRhf $@ -C $(VBOX_LNX_INST_OUT_DIR) \
- $(addprefix VirtualBox-$(VBOX_VERSION_STRING)/,$(VBOX_LNX_ARCH_FILES))
-endif
$(QUIET)$(RM) -f -- $(VBOX_LNX_INST_OUT_DIR)/VirtualBox-$(VBOX_VERSION_STRING)
diff --git a/src/VBox/Installer/linux/install.sh b/src/VBox/Installer/linux/install.sh
index 755d8d4..5d74351 100755
--- a/src/VBox/Installer/linux/install.sh
+++ b/src/VBox/Installer/linux/install.sh
@@ -111,8 +111,9 @@ check_previous() {
check_binary "/usr/bin/VBoxDTrace" "$install_dir" &&
check_binary "/usr/bin/VBoxBalloonCtrl" "$install_dir" &&
check_binary "/usr/bin/VBoxAutostart" "$install_dir" &&
- check_binary "/usr/bin/vboxwebsrv" "$install_dir"
- check_binary "/usr/bin/vbox-img" "$install_dir"
+ check_binary "/usr/bin/vboxwebsrv" "$install_dir" &&
+ check_binary "/usr/bin/vbox-img" "$install_dir" &&
+ check_binary "/sbin/rcvboxdrv" "$install_dir"
}
##############################################################################
@@ -284,7 +285,7 @@ if [ "$ACTION" = "install" ]; then
log "Removing previous installation of VirtualBox $INSTALL_VER$INSTALL_REV from $PREV_INSTALLATION"
log ""
- stop_init_script vboxnet
+ stop_init_script vboxnet >/dev/null 2>&1 # Do we need this?
delrunlevel vboxnet > /dev/null 2>&1
if [ "$BUILD_MODULE" = "true" ]; then
stop_init_script vboxdrv
@@ -375,14 +376,10 @@ if [ "$ACTION" = "install" ]; then
test -e $INSTALLATION_DIR/VBoxVolInfo && chmod 4511 $INSTALLATION_DIR/VBoxVolInfo
# Install runlevel scripts
- # Note: vboxdrv is also handled by setup_init_script. This function will
- # use chkconfig to adjust the sequence numbers, therefore vboxdrv
- # numbers here should match the numbers in the vboxdrv.sh check
- # header!
- install_init_script vboxdrv.sh vboxdrv
- install_init_script vboxballoonctrl-service.sh vboxballoonctrl-service
- install_init_script vboxautostart-service.sh vboxautostart-service
- install_init_script vboxweb-service.sh vboxweb-service
+ install_init_script $INSTALLATION_DIR/vboxdrv.sh vboxdrv 2>> $LOG
+ install_init_script $INSTALLATION_DIR/vboxballoonctrl-service.sh vboxballoonctrl-service 2>> $LOG
+ install_init_script $INSTALLATION_DIR/vboxautostart-service.sh vboxautostart-service 2>> $LOG
+ install_init_script $INSTALLATION_DIR/vboxweb-service.sh vboxweb-service 2>> $LOG
# Write the configuration. Do this before we call /etc/init.d/vboxdrv setup!
echo "# VirtualBox installation directory" > $CONFIG_DIR/$CONFIG
@@ -395,13 +392,13 @@ if [ "$ACTION" = "install" ]; then
echo "USERNAME='$BUILD_USERNAME'" >> $CONFIG_DIR/$CONFIG
delrunlevel vboxdrv > /dev/null 2>&1
- addrunlevel vboxdrv # This may produce useful output
+ addrunlevel vboxdrv 2>> $LOG # This may produce useful output
delrunlevel vboxballoonctrl-service > /dev/null 2>&1
- addrunlevel vboxballoonctrl-service # This may produce useful output
+ addrunlevel vboxballoonctrl-service 2>> $LOG # This may produce useful output
delrunlevel vboxautostart-service > /dev/null 2>&1
- addrunlevel vboxautostart-service # This may produce useful output
+ addrunlevel vboxautostart-service 2>> $LOG # This may produce useful output
delrunlevel vboxweb-service > /dev/null 2>&1
- addrunlevel vboxweb-service # This may produce useful output
+ addrunlevel vboxweb-service 2>> $LOG # This may produce useful output
# Create users group
groupadd -r -f $GROUPNAME 2> /dev/null
@@ -420,6 +417,7 @@ if [ "$ACTION" = "install" ]; then
if [ -f $INSTALLATION_DIR/VBoxDTrace ]; then
ln -sf $INSTALLATION_DIR/VBox.sh /usr/bin/VBoxDTrace
fi
+ ln -sf $INSTALLATION_DIR/vboxdrv.sh /sbin/rcvboxdrv
# Unity and Nautilus seem to look here for their icons
ln -sf $INSTALLATION_DIR/icons/128x128/virtualbox.png /usr/share/pixmaps/virtualbox.png
ln -sf $INSTALLATION_DIR/virtualbox.desktop /usr/share/applications/virtualbox.desktop
@@ -479,7 +477,7 @@ if [ "$ACTION" = "install" ]; then
log "Output from the module build process (the Linux kernel build system) follows:"
cur=`pwd`
log ""
- setup_init_script vboxdrv
+ ./vboxdrv.sh setup
# Start VirtualBox kernel module
if [ $RETVAL -eq 0 ] && ! start_init_script vboxdrv; then
info "Failed to load the kernel module."
diff --git a/src/VBox/Installer/linux/routines.sh b/src/VBox/Installer/linux/routines.sh
index aa004ab..850f36c 100644
--- a/src/VBox/Installer/linux/routines.sh
+++ b/src/VBox/Installer/linux/routines.sh
@@ -184,6 +184,49 @@ check_perl()
return 0
}
+## Creates a systemd wrapper in /lib for an LSB init script
+systemd_wrap_init_script()
+{
+ self="systemd_wrap_init_script"
+ ## The init script to be installed. The file may be copied or referenced.
+ script="$(readlink -f -- "${1}")"
+ ## Name for the service.
+ name="$2"
+ test -x "$script" && test ! "$name" = "" || \
+ { log "$self: invalid arguments" && return 1; }
+ test -d /usr/lib/systemd/system && unit_path=/usr/lib/systemd/system
+ test -d /lib/systemd/system && unit_path=/lib/systemd/system
+ test -n "${unit_path}" || \
+ { log "$self: systemd unit path not found" && return 1; }
+ description=`sed -n 's/# *Description: *\(.*\)/\1/p' "${script}"`
+ required=`sed -n 's/# *Required-Start: *\(.*\)/\1/p' "${script}"`
+ runlevels=`sed -n 's/# *Default-Start: *\(.*\)/\1/p' "${script}"`
+ before=`for i in ${runlevels}; do printf "runlevel${i}.target "; done`
+ after=`for i in ${required}; do printf "${i}.service "; done`
+ cat > "${unit_path}/${name}.service" << EOF
+[Unit]
+SourcePath=${script}
+Description=${description}
+Before=${before}shutdown.target
+After=${after}
+Conflicts=shutdown.target
+
+[Service]
+Type=forking
+Restart=no
+TimeoutSec=5min
+IgnoreSIGPIPE=no
+KillMode=process
+GuessMainPID=no
+RemainAfterExit=yes
+ExecStart=${script} start
+ExecStop=${script} stop
+
+[Install]
+WantedBy=multi-user.target
+EOF
+}
+
## Installs a file containing a shell script as an init script
install_init_script()
{
@@ -194,6 +237,7 @@ install_init_script()
name="$2"
test -x "$script" && test ! "$name" = "" || \
{ log "$self: invalid arguments" && return 1; }
+ test -d /lib/systemd/system || test -d /usr/lib/systemd/system && systemd_wrap_init_script "$script" "$name"
if test -d /etc/rc.d/init.d
then
cp "$script" "/etc/rc.d/init.d/$name" 2> /dev/null
@@ -202,9 +246,6 @@ install_init_script()
then
cp "$script" "/etc/init.d/$name" 2> /dev/null
chmod 755 "/etc/init.d/$name" 2> /dev/null
- else
- log "${self}: error: unknown init type"
- return 1
fi
return 0
}
@@ -217,15 +258,13 @@ remove_init_script()
name="$1"
test ! "$name" = "" || \
{ log "$self: missing argument" && return 1; }
+ rm -f /lib/systemd/system/"$name".service /usr/lib/systemd/system/"$name".service
if test -d /etc/rc.d/init.d
then
rm -f "/etc/rc.d/init.d/$name" > /dev/null 2>&1
elif test -d /etc/init.d
then
rm -f "/etc/init.d/$name" > /dev/null 2>&1
- else
- log "${self}: error: unknown init type"
- return 1
fi
return 0
}
@@ -238,37 +277,24 @@ do_sysvinit_action()
name="${1}"
## The action to perform, normally "start", "stop" or "status".
action="${2}"
- ## The optional expression to check for in the script before starting.
- expression="${3}"
test ! -z "${name}" && test ! -z "${action}" || \
{ log "${self}: missing argument" && return 1; }
- if test -x "/etc/rc.d/init.d/${name}"
+ if test -x "`which systemctl 2>/dev/null`"
+ then
+ systemctl ${action} "${name}"
+ elif test -x "`which service 2>/dev/null`"
then
- script="/etc/rc.d/init.d/${name}"
+ service "${name}" ${action}
+ elif test -x "`which invoke-rc.d 2>/dev/null`"
+ then
+ invoke-rc.d "${name}" ${action}
+ elif test -x "/etc/rc.d/init.d/${name}"
+ then
+ "/etc/rc.d/init.d/${name}" "${action}"
elif test -x "/etc/init.d/${name}"
then
- script="/etc/init.d/${name}"
- else
- log "${self}: error: unknown init type or unknown service ${name}"
- return 1
+ "/etc/init.d/${name}" "${action}"
fi
- test -n "${expression}" && ! grep -q "${expression}" "${script}" && return 0
- case "${action}" in
- start|stop|reload|restart|try-restart|force-reload|status)
- if test -x "`which service 2>/dev/null`"
- then
- service "${name}" ${action}
- elif test -x "`which invoke-rc.d 2>/dev/null`"
- then
- invoke-rc.d "${name}" ${action}
- else
- "${script}" "${action}"
- fi
- ;;
- *)
- "${script}" "${action}"
- ;;
- esac
}
## Start a service
@@ -283,18 +309,6 @@ stop_init_script()
do_sysvinit_action "${1}" stop
}
-## Do initial setup of an installed service
-setup_init_script()
-{
- do_sysvinit_action "${1}" setup '^# *setup_script *$'
-}
-
-## Do pre-removal cleanup of an installed service
-cleanup_init_script()
-{
- do_sysvinit_action "${1}" cleanup '^# *cleanup_script *$'
-}
-
## Extract chkconfig information from a sysvinit script.
get_chkconfig_info()
{
@@ -326,6 +340,10 @@ addrunlevel()
self="addrunlevel"
## Service name.
name="${1}"
+ test -n "${name}" || \
+ { log "${self}: missing argument" && return 1; }
+ test -x "`which systemctl 2>/dev/null`" && \
+ { systemctl enable "${name}"; return; }
if test -x "/etc/rc.d/init.d/${name}"
then
init_d_path=/etc/rc.d
@@ -381,10 +399,13 @@ delrunlevel()
self="delrunlevel"
## Service name.
name="${1}"
- test ! -z "${name}" || \
+ test -n "${name}" || \
{ log "${self}: missing argument" && return 1; }
+ if test -x "`which systemctl 2>/dev/null`"
+ then
+ systemctl disable "${name}"
# Redhat-based systems
- if test -x "/sbin/chkconfig"
+ elif test -x "/sbin/chkconfig"
then
/sbin/chkconfig --del "${name}" > /dev/null 2>&1
# SUSE-based sysvinit systems
diff --git a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
index 61f5bb4..dff326f 100644
--- a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
+++ b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
@@ -23,7 +23,7 @@ Name: %NAME%
Version: %BUILDVER%_%BUILDREL%
Release: 1
URL: http://www.virtualbox.org/
-Source: VirtualBox.tar.bz2
+Source: VirtualBox.tar
License: GPLv2
Group: Applications/System
Vendor: Oracle Corporation
@@ -169,9 +169,7 @@ if [ -d accessible ]; then
mv accessible $RPM_BUILD_ROOT/usr/lib/virtualbox
fi
install -D -m 755 vboxdrv.init $RPM_BUILD_ROOT%{_initrddir}/vboxdrv
-%if %{?rpm_suse:1}%{!?rpm_suse:0}
-ln -sf ../etc/init.d/vboxdrv $RPM_BUILD_ROOT/sbin/rcvboxdrv
-%endif
+ln -sf %{_initrddir}/vboxdrv $RPM_BUILD_ROOT/sbin/rcvboxdrv
install -D -m 755 vboxballoonctrl-service.init $RPM_BUILD_ROOT%{_initrddir}/vboxballoonctrl-service
install -D -m 755 vboxautostart-service.init $RPM_BUILD_ROOT%{_initrddir}/vboxautostart-service
install -D -m 755 vboxweb-service.init $RPM_BUILD_ROOT%{_initrddir}/vboxweb-service
@@ -452,7 +450,7 @@ rm -rf $RPM_BUILD_ROOT
%{_initrddir}/vboxweb-service
%{?rpm_suse: %{py_sitedir}/*}
%{!?rpm_suse: %{python_sitelib}/*}
-%{?rpm_suse: /sbin/rcvboxdrv}
+/sbin/rcvboxdrv
%{?rpm_suse: /sbin/rcvboxballoonctrl-service}
%{?rpm_suse: /sbin/rcvboxautostart-service}
%{?rpm_suse: /sbin/rcvboxweb-service}
diff --git a/src/VBox/Installer/linux/rpm/rules b/src/VBox/Installer/linux/rpm/rules
index 0c6f5a2..229795d 100755
--- a/src/VBox/Installer/linux/rpm/rules
+++ b/src/VBox/Installer/linux/rpm/rules
@@ -87,7 +87,7 @@ ifneq ($(MAKECMDGOALS),clean)
ifeq ($(filter-out el5 el6 ol5 ol6 el7 centos5 centos6 fedora17 fedora18 fedora19 fedora20 fedora21 fedora22,$(rpmrel)),)
rpmspec := rpm_redhat
endif
- ifeq ($(filter-out openSUSE110 openSUSE111 openSUSE112 openSUSE113 openSUSE114 openSUSE123 sles10.1 sles11.0,$(rpmrel)),)
+ ifeq ($(filter-out openSUSE110 openSUSE111 openSUSE112 openSUSE113 openSUSE114 openSUSE123 openSUSE131 openSUSE132 sles10.1 sles11.0,$(rpmrel)),)
rpmspec := rpm_suse
endif
ifeq ($(filter-out mdv2009.1 mdv2010.0 mdv2011.0,$(rpmrel)),)
@@ -189,6 +189,7 @@ rpm/build-stamp: rpm/configure-stamp
clean:
rm -rf $(archdir)
rm -rf $(builddir) rpm/VirtualBox-*
+ rm -f rpm/VirtualBox.tar
rm -f rpm/VirtualBox.tar.bz2
rm -f rpm/VirtualBox.spec
rm -f rpm/build-stamp rpm/configure-stamp rpm/configure.log
@@ -200,7 +201,7 @@ binary: rpm/build-stamp $(verfile)
else
binary: rpm/build-stamp
rm -rf rpm/VirtualBox-*
- tar -xjf $(builddir)/bin/VirtualBox.tar.bz2 -C rpm
+ tar -xf $(builddir)/bin/VirtualBox.tar -C rpm
sed \
-e 's|%VER%|$(ver)|g' \
-e 's|%NAME%|$(verpkg)|g' \
@@ -232,10 +233,10 @@ binary: rpm/build-stamp
cp vboxweb-service.sh $(archdir)/vboxweb-service.init
cp VBox.sh $(archdir)
mv rpm/VirtualBox-$(ver) rpm/$(rpmname)
- tar -cjf rpm/VirtualBox.tar.bz2 -C rpm $(rpmname)
+ tar -cf rpm/VirtualBox.tar -C rpm $(rpmname)
rm -f /usr/src/packages/RPMS/*/VirtualBox*rpm
rm -f /usr/src/packages/SPECS/*
- (cd rpm; rpmbuild -tb --clean VirtualBox.tar.bz2)
+ (cd rpm; rpmbuild -tb --clean VirtualBox.tar)
mv /usr/src/packages/RPMS/*/$(verpkg)-debug* $(pkgdir) || true
file=`find /usr/src/packages/RPMS -name $(verpkg)*rpm -print`; \
mv $$file $(pkgdir)
diff --git a/src/VBox/Installer/linux/run-inst.sh b/src/VBox/Installer/linux/run-inst.sh
index ed4fe15..f9def54 100755
--- a/src/VBox/Installer/linux/run-inst.sh
+++ b/src/VBox/Installer/linux/run-inst.sh
@@ -149,11 +149,13 @@ EOF
# Stop what we can in the way of services and remove them from the
# system
for i in $UNINSTALL_SCRIPTS; do
- stop_init_script "$i"
- cleanup_init_script "$i" 1>&2 2>> "$LOGFILE"
- test -x "./$i" && "./$i" cleanup 1>&2 2>> "$LOGFILE"
- delrunlevel "$i"
- remove_init_script "$i"
+ stop_init_script "$i" 2>> "${LOGFILE}"
+ test -z "$NO_CLEANUP" && test -x "./$i" && "./$i" cleanup 1>&2 2>> "$LOGFILE"
+ delrunlevel "$i" 2>> "${LOGFILE}"
+ remove_init_script "$i" 2>> "${LOGFILE}"
+ done
+ for i in "/opt/$PACKAGE-"*/init/*; do
+ test -z "$NO_CLEANUP" && grep -q '^# *cleanup_script *$' "${i}" && "${i}" cleanup 1>&2 2>> "$LOGFILE"
done
# Get rid of any remaining files
@@ -418,10 +420,10 @@ fi
# Install, set up and start init scripts
for i in "$INSTALLATION_DIR/init/"*; do
if test -r "$i"; then
- install_init_script "$i" "`basename "$i"`"
- addrunlevel "`basename "$i"`"
- test -n "$DO_SETUP" && setup_init_script "`basename "$i"`" 1>&2
- start_init_script "`basename "$i"`"
+ install_init_script "$i" "`basename "$i"`" 2>> "${LOGFILE}"
+ addrunlevel "`basename "$i"`" 2>> "${LOGFILE}"
+ test -n "$DO_SETUP" && grep -q '^# *setup_script *$' "${i}" && "${i}" setup 1>&2 2>> "${LOGFILE}"
+ start_init_script "`basename "$i"`" 2>> "${LOGFILE}"
fi
done
@@ -459,10 +461,10 @@ test -r "$CONFIG_DIR/$CONFIG_FILES" || abort "Required file $CONFIG_FILES not fo
# Stop and clean up all services
for i in "$INSTALLATION_DIR/init/"*; do
if test -r "\$i"; then
- stop_init_script "\`basename "\$i"\`"
- test -z "\$NO_CLEANUP" && cleanup_init_script "\`basename "\$i"\`" 2>> "\$LOGFILE"
- delrunlevel "\`basename "\$i"\`"
- remove_init_script "\`basename "\$i"\`"
+ stop_init_script "\`basename "\$i"\`" 2>> "${LOGFILE}"
+ test -z "\${NO_CLEANUP}" && grep -q '^# *cleanup_script *$' "\${i}" && "\${i}" cleanup 2>> "\$LOGFILE"
+ delrunlevel "\`basename "\$i"\`" 2>> "${LOGFILE}"
+ remove_init_script "\`basename "\$i"\`" 2>> "${LOGFILE}"
fi
done
diff --git a/src/VBox/Installer/linux/scripts/check_module_dependencies.sh b/src/VBox/Installer/linux/scripts/check_module_dependencies.sh
index 2b4c307..a7bbf2a 100755
--- a/src/VBox/Installer/linux/scripts/check_module_dependencies.sh
+++ b/src/VBox/Installer/linux/scripts/check_module_dependencies.sh
@@ -347,11 +347,6 @@ get_system_information()
PATTERN_GCC_MAKE=
PATTERN_HEADERS=
PATTERN_HEADERS_META=
- elif $file_exists /etc/pardus-release; then # Pardus
- GET_KERN_PACKAGE=
- PATTERN_GCC_MAKE=
- PATTERN_HEADERS=
- PATTERN_HEADERS_META=
elif $file_exists /etc/slackware-version; then # Slackware
GET_KERN_PACKAGE=
PATTERN_GCC_MAKE=
diff --git a/src/VBox/Installer/linux/vboxautostart-service.sh b/src/VBox/Installer/linux/vboxautostart-service.sh
index a0f8bf4..a119537 100755
--- a/src/VBox/Installer/linux/vboxautostart-service.sh
+++ b/src/VBox/Installer/linux/vboxautostart-service.sh
@@ -51,8 +51,6 @@ elif [ -f /etc/debian_version ]; then
system=debian
elif [ -f /etc/gentoo-release ]; then
system=gentoo
-elif [ -f /etc/arch-release ]; then
- system=arch
elif [ -f /etc/slackware-version ]; then
system=slackware
elif [ -f /etc/lfs-release ]; then
@@ -175,32 +173,6 @@ if [ "$system" = "gentoo" ]; then
fi
fi
-if [ "$system" = "arch" ]; then
- USECOLOR=yes
- . /etc/rc.d/functions
- start_daemon() {
- usr="$1"
- shift
- su - $usr -c "$*"
- test $? -eq 0 && add_daemon rc.`basename $2`
- }
- killproc() {
- killall $@
- rm_daemon `basename $@`
- }
- if [ -n "$NOLSB" ]; then
- fail_msg() {
- stat_fail
- }
- succ_msg() {
- stat_done
- }
- begin_msg() {
- stat_busy "$1"
- }
- fi
-fi
-
if [ "$system" = "slackware" ]; then
killproc() {
killall $1
diff --git a/src/VBox/Installer/linux/vboxballoonctrl-service.sh b/src/VBox/Installer/linux/vboxballoonctrl-service.sh
index 530033a..d7bd437 100755
--- a/src/VBox/Installer/linux/vboxballoonctrl-service.sh
+++ b/src/VBox/Installer/linux/vboxballoonctrl-service.sh
@@ -55,9 +55,6 @@ elif [ -f /etc/debian_version ]; then
elif [ -f /etc/gentoo-release ]; then
system=gentoo
PIDFILE="/var/run/vboxballoonctrl-service"
-elif [ -f /etc/arch-release ]; then
- system=arch
- PIDFILE="/var/run/vboxballoonctrl-service"
elif [ -f /etc/slackware-version ]; then
system=slackware
PIDFILE="/var/run/vboxballoonctrl-service"
@@ -185,32 +182,6 @@ if [ "$system" = "gentoo" ]; then
fi
fi
-if [ "$system" = "arch" ]; then
- USECOLOR=yes
- . /etc/rc.d/functions
- start_daemon() {
- usr="$1"
- shift
- su - $usr -c "$*"
- test $? -eq 0 && add_daemon rc.`basename $2`
- }
- killproc() {
- killall $@
- rm_daemon `basename $@`
- }
- if [ -n "$NOLSB" ]; then
- fail_msg() {
- stat_fail
- }
- succ_msg() {
- stat_done
- }
- begin_msg() {
- stat_busy "$1"
- }
- fi
-fi
-
if [ "$system" = "slackware" ]; then
killproc() {
killall $1
diff --git a/src/VBox/Installer/linux/vboxdrv-pardus.py b/src/VBox/Installer/linux/vboxdrv-pardus.py
deleted file mode 100644
index fe4e75d..0000000
--- a/src/VBox/Installer/linux/vboxdrv-pardus.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Todo: this could be autogenerated from the init script lsbinfo
-# Can Pardus do that now?
-
-serviceType = "local"
-serviceDesc = _({"en": "VirtualBox Driver Service"})
-serviceDefault = "on"
-
-from comar.service import *
-import time, os
-
- at synchronized
-def start():
- ret = run("/usr/sbin/vboxdrv start")
- if ret == 0:
- notify("System.Service", "Changed", (script(), "started"))
- else:
- fail("Unable to start service")
-
- at synchronized
-def stop():
- ret = run("/usr/sbin/vboxdrv stop")
- if ret == 0:
- notify("System.Service", "Changed", (script(), "stopped"))
- else:
- fail("Unable to stop service")
-
-def status():
- return run("/usr/sbin/vboxdrv status")
diff --git a/src/VBox/Installer/linux/vboxweb-service.sh b/src/VBox/Installer/linux/vboxweb-service.sh
index bbd3cdd..82eac89 100755
--- a/src/VBox/Installer/linux/vboxweb-service.sh
+++ b/src/VBox/Installer/linux/vboxweb-service.sh
@@ -57,9 +57,6 @@ elif [ -f /etc/debian_version ]; then
elif [ -f /etc/gentoo-release ]; then
system=gentoo
PIDFILE="/var/run/vboxweb-service"
-elif [ -f /etc/arch-release ]; then
- system=arch
- PIDFILE="/var/run/vboxweb-service"
elif [ -f /etc/slackware-version ]; then
system=slackware
PIDFILE="/var/run/vboxweb-service"
@@ -187,32 +184,6 @@ if [ "$system" = "gentoo" ]; then
fi
fi
-if [ "$system" = "arch" ]; then
- USECOLOR=yes
- . /etc/rc.d/functions
- start_daemon() {
- usr="$1"
- shift
- su - $usr -c "$*"
- test $? -eq 0 && add_daemon rc.`basename $2`
- }
- killproc() {
- killall $@
- rm_daemon `basename $@`
- }
- if [ -n "$NOLSB" ]; then
- fail_msg() {
- stat_fail
- }
- succ_msg() {
- stat_done
- }
- begin_msg() {
- stat_busy "$1"
- }
- fi
-fi
-
if [ "$system" = "slackware" ]; then
killproc() {
killall $1
diff --git a/src/VBox/Main/Makefile.kmk b/src/VBox/Main/Makefile.kmk
index f1546c9..c52ca58 100644
--- a/src/VBox/Main/Makefile.kmk
+++ b/src/VBox/Main/Makefile.kmk
@@ -305,7 +305,6 @@ VBoxSVC_DEFS.win += _WIN32_WINNT=0x0510
# Try to load and use libhal at runtime for probing removable media
# VBoxSVC_DEFS.linux += VBOX_USE_LIBHAL
VBoxSVC_DEFS.solaris += VBOX_USE_LIBHAL
-VBoxSVC_DEFS.freebsd += VBOX_USE_LIBHAL
VBoxSVC_CXXFLAGS = $(filter-out -Wno-unused,$(TEMPLATE_VBOXMAINEXE_CXXFLAGS))
diff --git a/src/VBox/Main/glue/vboxapi.py b/src/VBox/Main/glue/vboxapi.py
old mode 100644
new mode 100755
diff --git a/src/VBox/Main/idl/VirtualBox.xidl b/src/VBox/Main/idl/VirtualBox.xidl
index 67191c0..2848655 100644
--- a/src/VBox/Main/idl/VirtualBox.xidl
+++ b/src/VBox/Main/idl/VirtualBox.xidl
@@ -4180,7 +4180,7 @@
<interface
name="IMachine" extends="$unknown"
- uuid="703510de-8d5e-411b-a25b-378b03382bac"
+ uuid="f30138d4-e5ea-4b3a-8858-a059de4c93fd"
wsmap="managed"
wrap-hint-server-addinterfaces="IInternalMachineControl"
wrap-hint-server="manualaddinterfaces"
@@ -4517,10 +4517,11 @@
<attribute name="videoCaptureMaxTime" type="unsigned long" default="0">
<desc>
- This setting determines the maximal number of time video capture
- will work for. The capture stops as the defined time interval
- has elapsed. If this value is zero the capturing will not be limited
- by time. This setting cannot be changed while video capturing is enabled.
+ This setting determines the maximum amount of time in milliseconds
+ the video capture will work for. The capture stops as the defined time
+ interval has elapsed. If this value is zero the capturing will not be
+ limited by time. This setting cannot be changed while video capturing is
+ enabled.
</desc>
</attribute>
@@ -5006,6 +5007,23 @@
</desc>
</attribute>
+ <attribute name="VMProcessPriority" type="wstring">
+ <desc>
+ Sets the priority of the VM process. It is a VM setting which can
+ be changed both before starting the VM and at runtime. The valid
+ values are system specific, and if a value is specified which does
+ not get recognized, then it will be remembered (useful for preparing
+ VM configs for other host OSes), with a successful result.
+
+ The default value is the empty string, which selects the default
+ process priority.
+
+ <result name="E_NOTIMPL">
+ This attribute is currently not implemented.
+ </result>
+ </desc>
+ </attribute>
+
<method name="lockMachine">
<desc>
Locks the machine for the given session to enable the caller
@@ -10564,7 +10582,7 @@ and "VAR" for unsetting. -->
write access. (Was "oa".)
<note>
<!-- @todo r=bird: See iprt/file.h, RTFILE_O_APPEND - not an action/disposition!
- Moving the file pointer to the end, is almost fine, but impliying 'write' access
+ Moving the file pointer to the end, is almost fine, but implying 'write' access
isn't. That is something that is exclusively reserved for the opening mode. -->
Deprecated. Only here for historical reasons. Do not use!
</note>
diff --git a/src/VBox/Main/include/MachineImpl.h b/src/VBox/Main/include/MachineImpl.h
index ff801c6..4fa3861 100644
--- a/src/VBox/Main/include/MachineImpl.h
+++ b/src/VBox/Main/include/MachineImpl.h
@@ -593,6 +593,9 @@ public:
ComObjPtr<StorageController> &aStorageController,
bool aSetError = false);
+ HRESULT i_getMediumAttachmentsOfController(const Utf8Str &aName,
+ MediaData::AttachmentList &aAttachments);
+
HRESULT i_getUSBControllerByName(const Utf8Str &aName,
ComObjPtr<USBController> &aUSBController,
bool aSetError = false);
@@ -649,9 +652,6 @@ protected:
ComObjPtr<Snapshot> &aSnapshot,
bool aSetError = false);
- HRESULT i_getMediumAttachmentsOfController(const Utf8Str &aName,
- MediaData::AttachmentList &aAttachments);
-
ULONG i_getUSBControllerCountByType(USBControllerType_T enmType);
enum
@@ -686,7 +686,7 @@ protected:
HRESULT i_deleteImplicitDiffs(bool aOnline);
MediumAttachment* i_findAttachment(const MediaData::AttachmentList &ll,
- IN_BSTR aControllerName,
+ const Utf8Str &aControllerName,
LONG aControllerPort,
LONG aDevice);
MediumAttachment* i_findAttachment(const MediaData::AttachmentList &ll,
@@ -984,6 +984,8 @@ private:
HRESULT getDefaultFrontend(com::Utf8Str &aDefaultFrontend);
HRESULT setDefaultFrontend(const com::Utf8Str &aDefaultFrontend);
HRESULT getUSBProxyAvailable(BOOL *aUSBProxyAvailable);
+ HRESULT getVMProcessPriority(com::Utf8Str &aVMProcessPriority);
+ HRESULT setVMProcessPriority(const com::Utf8Str &aVMProcessPriority);
// wrapped IMachine methods
HRESULT lockMachine(const ComPtr<ISession> &aSession,
diff --git a/src/VBox/Main/include/MediumAttachmentImpl.h b/src/VBox/Main/include/MediumAttachmentImpl.h
index 28ab860..149f8a3 100644
--- a/src/VBox/Main/include/MediumAttachmentImpl.h
+++ b/src/VBox/Main/include/MediumAttachmentImpl.h
@@ -5,7 +5,7 @@
*/
/*
- * Copyright (C) 2006-2013 Oracle Corporation
+ * Copyright (C) 2006-2015 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -34,7 +34,7 @@ public:
// public initializer/uninitializer for internal purposes only
HRESULT init(Machine *aParent,
Medium *aMedium,
- const Bstr &aControllerName,
+ const Utf8Str &aControllerName,
LONG aPort,
LONG aDevice,
DeviceType_T aType,
@@ -58,7 +58,7 @@ public:
void i_setImplicit(bool aImplicit);
const ComObjPtr<Medium>& i_getMedium() const;
- const Bstr i_getControllerName() const;
+ const Utf8Str &i_getControllerName() const;
LONG i_getPort() const;
LONG i_getDevice() const;
DeviceType_T i_getType() const;
@@ -69,7 +69,10 @@ public:
Utf8Str& i_getBandwidthGroup() const;
bool i_getHotPluggable() const;
- bool i_matches(CBSTR aControllerName, LONG aPort, LONG aDevice);
+ bool i_matches(const Utf8Str &aControllerName, LONG aPort, LONG aDevice);
+
+ /** Must be called from under this object's write lock. */
+ void i_updateName(const Utf8Str &aName);
/** Must be called from under this object's write lock. */
void i_updateMedium(const ComObjPtr<Medium> &aMedium);
diff --git a/src/VBox/Main/src-all/Global.cpp b/src/VBox/Main/src-all/Global.cpp
index 314ae13..8f6da20 100644
--- a/src/VBox/Main/src-all/Global.cpp
+++ b/src/VBox/Main/src-all/Global.cpp
@@ -363,6 +363,18 @@ const Global::OSType Global::sOSTypes[] =
2048, 4, 20 * _1G64, NetworkAdapterType_I82545EM, 0,
StorageControllerType_IntelAhci, StorageBus_SATA, StorageControllerType_IntelAhci, StorageBus_SATA,
ChipsetType_ICH9, AudioControllerType_HDA, AudioCodecType_STAC9221 },
+ { "MacOS", "Mac OS X", "MacOS1010_64", "Mac OS X 10.10 Yosemite (64-bit)",
+ VBOXOSTYPE_MacOS1010_x64, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_64BIT
+ | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 2048, 4, 20 * _1G64, NetworkAdapterType_I82545EM, 0,
+ StorageControllerType_IntelAhci, StorageBus_SATA, StorageControllerType_IntelAhci, StorageBus_SATA,
+ ChipsetType_ICH9, AudioControllerType_HDA, AudioCodecType_STAC9221 },
+ { "MacOS", "Mac OS X", "MacOS1011_64", "Mac OS X 10.11 El Capitan (64-bit)",
+ VBOXOSTYPE_MacOS1011_x64, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_64BIT
+ | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
+ 2048, 4, 20 * _1G64, NetworkAdapterType_I82545EM, 0,
+ StorageControllerType_IntelAhci, StorageBus_SATA, StorageControllerType_IntelAhci, StorageBus_SATA,
+ ChipsetType_ICH9, AudioControllerType_HDA, AudioCodecType_STAC9221 },
{ "Other", "Other", "DOS", "DOS",
VBOXOSTYPE_DOS, VBOXOSHINT_FLOPPY | VBOXOSHINT_NOUSB,
32, 4, 500 * _1M, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
diff --git a/src/VBox/Main/src-client/ConsoleImpl2.cpp b/src/VBox/Main/src-client/ConsoleImpl2.cpp
index ad7e9cf..9f4766c 100644
--- a/src/VBox/Main/src-client/ConsoleImpl2.cpp
+++ b/src/VBox/Main/src-client/ConsoleImpl2.cpp
@@ -1088,21 +1088,21 @@ int Console::i_configConstructorInner(PUVM pUVM, PVM pVM, AutoWriteLock *pAlock)
uint32_t uMaxIntelFamilyModelStep = UINT32_MAX;
if ( osTypeId == "MacOS"
|| osTypeId == "MacOS_64")
- uMaxIntelFamilyModelStep = RT_MAKE_U32_FROM_U8(1, 23, 6, 7); /* Penryn / X5482. */
+ uMaxIntelFamilyModelStep = RT_MAKE_U32_FROM_U8(1, 23, 6, 0); /* Penryn / X5482. */
else if ( osTypeId == "MacOS106"
|| osTypeId == "MacOS106_64")
- uMaxIntelFamilyModelStep = RT_MAKE_U32_FROM_U8(1, 23, 6, 7); /* Penryn / X5482 */
+ uMaxIntelFamilyModelStep = RT_MAKE_U32_FROM_U8(1, 23, 6, 0); /* Penryn / X5482 */
else if ( osTypeId == "MacOS107"
|| osTypeId == "MacOS107_64")
- uMaxIntelFamilyModelStep = RT_MAKE_U32_FROM_U8(1, 23, 6, 7); /* Penryn / X5482 */ /** @todo figure out
+ uMaxIntelFamilyModelStep = RT_MAKE_U32_FROM_U8(1, 23, 6, 0); /* Penryn / X5482 */ /** @todo figure out
what is required here. */
else if ( osTypeId == "MacOS108"
|| osTypeId == "MacOS108_64")
- uMaxIntelFamilyModelStep = RT_MAKE_U32_FROM_U8(1, 23, 6, 7); /* Penryn / X5482 */ /** @todo figure out
+ uMaxIntelFamilyModelStep = RT_MAKE_U32_FROM_U8(1, 23, 6, 0); /* Penryn / X5482 */ /** @todo figure out
what is required here. */
else if ( osTypeId == "MacOS109"
|| osTypeId == "MacOS109_64")
- uMaxIntelFamilyModelStep = RT_MAKE_U32_FROM_U8(1, 23, 6, 7); /* Penryn / X5482 */ /** @todo figure
+ uMaxIntelFamilyModelStep = RT_MAKE_U32_FROM_U8(1, 23, 6, 0); /* Penryn / X5482 */ /** @todo figure
out what is required here. */
if (uMaxIntelFamilyModelStep != UINT32_MAX)
InsertConfigInteger(pCPUM, "MaxIntelFamilyModelStep", uMaxIntelFamilyModelStep);
diff --git a/src/VBox/Main/src-client/DisplayImpl.cpp b/src/VBox/Main/src-client/DisplayImpl.cpp
index 7946eab..ff3e4e6 100644
--- a/src/VBox/Main/src-client/DisplayImpl.cpp
+++ b/src/VBox/Main/src-client/DisplayImpl.cpp
@@ -876,9 +876,8 @@ int Display::i_notifyCroglResize(const PVBVAINFOVIEW pView, const PVBVAINFOSCREE
int Display::i_handleDisplayResize(unsigned uScreenId, uint32_t bpp, void *pvVRAM,
uint32_t cbLine, uint32_t w, uint32_t h, uint16_t flags)
{
- LogRel(("Display::handleDisplayResize(): uScreenId = %d, pvVRAM=%p "
- "w=%d h=%d bpp=%d cbLine=0x%X, flags=0x%X\n",
- uScreenId, pvVRAM, w, h, bpp, cbLine, flags));
+ LogRel(("Display::handleDisplayResize: uScreenId=%d pvVRAM=%p w=%d h=%d bpp=%d cbLine=0x%X flags=0x%X\n", uScreenId,
+ pvVRAM, w, h, bpp, cbLine, flags));
if (uScreenId >= mcMonitors)
{
@@ -1114,7 +1113,7 @@ void Display::i_handleUpdateVMMDevSupportsGraphics(bool fSupportsGraphics)
void Display::i_handleUpdateGuestVBVACapabilities(uint32_t fNewCapabilities)
{
AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
- bool fNotify = (fNewCapabilities & VBVACAPS_VIDEO_MODE_HINTS) != 0;
+ bool fNotify = (fNewCapabilities & VBVACAPS_VIDEO_MODE_HINTS) != (mfGuestVBVACapabilities & VBVACAPS_VIDEO_MODE_HINTS);
mfGuestVBVACapabilities = fNewCapabilities;
if (!fNotify)
@@ -2320,10 +2319,12 @@ int Display::i_VideoCaptureStart()
}
if (RT_SUCCESS(rc))
- LogRel(("WebM/VP8 video recording screen #%u with %ux%u @ %u kbps, %u fps to '%s' enabled.\n",
- uScreen, ulWidth, ulHeight, ulRate, ulFPS, pszName));
+ {
+ LogRel(("Display::VideoCaptureStart: WebM/VP8 video recording screen #%u with %ux%u @ %u kbps, %u fps to '%s' "
+ "enabled\n", uScreen, ulWidth, ulHeight, ulRate, ulFPS, pszName));
+ }
else
- LogRel(("Failed to initialize video recording context #%u (%Rrc)!\n", uScreen, rc));
+ LogRel(("Display::VideoCaptureStart: Failed to initialize video recording context #%u (%Rrc)!\n", uScreen, rc));
RTStrFree(pszName);
RTStrFree(pszSuff);
RTStrFree(pszAbsPath);
@@ -2341,7 +2342,7 @@ void Display::i_VideoCaptureStop()
{
#ifdef VBOX_WITH_VPX
if (VideoRecIsEnabled(mpVideoRecCtx))
- LogRel(("WebM/VP8 video recording stopped.\n"));
+ LogRel(("Display::VideoCaptureStop: WebM/VP8 video recording stopped\n"));
VideoRecContextClose(mpVideoRecCtx);
mpVideoRecCtx = NULL;
#endif
diff --git a/src/VBox/Main/src-server/ApplianceImpl.cpp b/src/VBox/Main/src-server/ApplianceImpl.cpp
index 93c4463..5e0c79e 100644
--- a/src/VBox/Main/src-server/ApplianceImpl.cpp
+++ b/src/VBox/Main/src-server/ApplianceImpl.cpp
@@ -145,6 +145,8 @@ g_osTypes[] =
{ ovf::CIMOSType_CIMOS_MACOS, VBOXOSTYPE_MacOS107_x64 },
{ ovf::CIMOSType_CIMOS_MACOS, VBOXOSTYPE_MacOS108_x64 },
{ ovf::CIMOSType_CIMOS_MACOS, VBOXOSTYPE_MacOS109_x64 },
+ { ovf::CIMOSType_CIMOS_MACOS, VBOXOSTYPE_MacOS1010_x64 },
+ { ovf::CIMOSType_CIMOS_MACOS, VBOXOSTYPE_MacOS1011_x64 },
// Linuxes
{ ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux, VBOXOSTYPE_RedHat },
diff --git a/src/VBox/Main/src-server/MachineImpl.cpp b/src/VBox/Main/src-server/MachineImpl.cpp
index ddc3c48..26c19a6 100644
--- a/src/VBox/Main/src-server/MachineImpl.cpp
+++ b/src/VBox/Main/src-server/MachineImpl.cpp
@@ -7026,6 +7026,35 @@ HRESULT Machine::getUSBProxyAvailable(BOOL *aUSBProxyAvailable)
return S_OK;
}
+HRESULT Machine::getVMProcessPriority(com::Utf8Str &aVMProcessPriority)
+{
+ AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+ aVMProcessPriority = mUserData->s.strVMPriority;
+
+ return S_OK;
+}
+
+HRESULT Machine::setVMProcessPriority(const com::Utf8Str &aVMProcessPriority)
+{
+ AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+ HRESULT hrc = i_checkStateDependency(MutableOrSavedOrRunningStateDep);
+ if (SUCCEEDED(hrc))
+ {
+ /** @todo r=klaus: currently this is marked as not implemented, as
+ * the code for setting the priority of the process is not there
+ * (neither when starting the VM nor at runtime). */
+ ReturnComNotImplemented();
+ hrc = mUserData.backupEx();
+ if (SUCCEEDED(hrc))
+ {
+ i_setModified(IsModified_MachineData);
+ mUserData->s.strVMPriority = aVMProcessPriority;
+ }
+ }
+ return hrc;
+}
+
HRESULT Machine::cloneTo(const ComPtr<IMachine> &aTarget, CloneMode_T aMode, const std::vector<CloneOptions_T> &aOptions,
ComPtr<IProgress> &aProgress)
{
@@ -9550,7 +9579,7 @@ HRESULT Machine::i_getMediumAttachmentsOfController(const Utf8Str &aName,
}
AutoReadLock attLock(pAtt COMMA_LOCKVAL_SRC_POS);
- if (pAtt->i_getControllerName() == Bstr(aName).raw())
+ if (pAtt->i_getControllerName() == aName)
atts.push_back(pAtt);
}
@@ -11037,7 +11066,7 @@ HRESULT Machine::i_deleteImplicitDiffs(bool aOnline)
* @return
*/
MediumAttachment* Machine::i_findAttachment(const MediaData::AttachmentList &ll,
- IN_BSTR aControllerName,
+ const Utf8Str &aControllerName,
LONG aControllerPort,
LONG aDevice)
{
diff --git a/src/VBox/Main/src-server/MediumAttachmentImpl.cpp b/src/VBox/Main/src-server/MediumAttachmentImpl.cpp
index 4a744ab..a3c7714 100644
--- a/src/VBox/Main/src-server/MediumAttachmentImpl.cpp
+++ b/src/VBox/Main/src-server/MediumAttachmentImpl.cpp
@@ -52,7 +52,7 @@ struct BackupableMediumAttachmentData
* controller will not work - when settings are changed it will point
* to the old, uninitialized instance. Changing this requires
* substantial changes to MediumImpl.cpp. */
- const Bstr bstrControllerName;
+ const Utf8Str strControllerName;
/* Same counts for the assigned bandwidth group */
Utf8Str strBandwidthGroup;
const LONG lPort;
@@ -117,7 +117,7 @@ void MediumAttachment::FinalRelease()
*/
HRESULT MediumAttachment::init(Machine *aParent,
Medium *aMedium,
- const Bstr &aControllerName,
+ const Utf8Str &aControllerName,
LONG aPort,
LONG aDevice,
DeviceType_T aType,
@@ -130,7 +130,7 @@ HRESULT MediumAttachment::init(Machine *aParent,
const Utf8Str &strBandwidthGroup)
{
LogFlowThisFuncEnter();
- LogFlowThisFunc(("aParent=%p aMedium=%p aControllerName=%ls aPort=%d aDevice=%d aType=%d aImplicit=%d aPassthrough=%d aTempEject=%d aNonRotational=%d aDiscard=%d aHotPluggable=%d strBandwithGroup=%s\n", aParent, aMedium, aControllerName.raw(), aPort, aDevice, aType, aImplicit, aPassthrough, aTempEject, aNonRotational, aDiscard, aHotPluggable, strBandwidthGroup.c_str()));
+ LogFlowThisFunc(("aParent=%p aMedium=%p aControllerName=%s aPort=%d aDevice=%d aType=%d aImplicit=%d aPassthrough=%d aTempEject=%d aNonRotational=%d aDiscard=%d aHotPluggable=%d strBandwithGroup=%s\n", aParent, aMedium, aControllerName.c_str(), aPort, aDevice, aType, aImplicit, aPassthrough, aTempEject, aNonRotational, aDiscard, aHotPluggable, strBandwidthGroup.c_str()));
if (aType == DeviceType_HardDisk)
AssertReturn(aMedium, E_INVALIDARG);
@@ -146,7 +146,7 @@ HRESULT MediumAttachment::init(Machine *aParent,
m->bd.allocate();
m->bd->pMedium = aMedium;
unconst(m->bd->strBandwidthGroup) = strBandwidthGroup;
- unconst(m->bd->bstrControllerName) = aControllerName;
+ unconst(m->bd->strControllerName) = aControllerName;
unconst(m->bd->lPort) = aPort;
unconst(m->bd->lDevice) = aDevice;
unconst(m->bd->type) = aType;
@@ -249,7 +249,7 @@ HRESULT MediumAttachment::getController(com::Utf8Str &aController)
LogFlowThisFuncEnter();
/* m->controller is constant during life time, no need to lock */
- aController = Utf8Str(m->bd->bstrControllerName);
+ aController = Utf8Str(m->bd->strControllerName);
LogFlowThisFuncLeave();
return S_OK;
@@ -441,9 +441,9 @@ const ComObjPtr<Medium>& MediumAttachment::i_getMedium() const
return m->bd->pMedium;
}
-const Bstr MediumAttachment::i_getControllerName() const
+const Utf8Str &MediumAttachment::i_getControllerName() const
{
- return m->bd->bstrControllerName;
+ return m->bd->strControllerName;
}
LONG MediumAttachment::i_getPort() const
@@ -496,13 +496,22 @@ Utf8Str& MediumAttachment::i_getBandwidthGroup() const
return m->bd->strBandwidthGroup;
}
-bool MediumAttachment::i_matches(CBSTR aControllerName, LONG aPort, LONG aDevice)
+bool MediumAttachment::i_matches(const Utf8Str &aControllerName, LONG aPort, LONG aDevice)
{
- return ( aControllerName == m->bd->bstrControllerName
+ return ( aControllerName == m->bd->strControllerName
&& aPort == m->bd->lPort
&& aDevice == m->bd->lDevice);
}
+/** Must be called from under this object's write lock. */
+void MediumAttachment::i_updateName(const Utf8Str &aName)
+{
+ Assert(isWriteLockOnCurrentThread());
+
+ m->bd.backup();
+ unconst(m->bd->strControllerName) = aName;
+}
+
/**
* Sets the medium of this attachment and unsets the "implicit" flag.
* @param aMedium
diff --git a/src/VBox/Main/src-server/NetworkAdapterImpl.cpp b/src/VBox/Main/src-server/NetworkAdapterImpl.cpp
index 94685bf..6f7c3ae 100644
--- a/src/VBox/Main/src-server/NetworkAdapterImpl.cpp
+++ b/src/VBox/Main/src-server/NetworkAdapterImpl.cpp
@@ -888,8 +888,8 @@ HRESULT NetworkAdapter::setTraceFile(const com::Utf8Str &aTraceFile)
mParent->i_setModified(Machine::IsModified_NetworkAdapters);
mlock.release();
- /* No change in CFGM logic => changeAdapter=FALSE. */
- mParent->i_onNetworkAdapterChange(this, FALSE);
+ /* We change the 'File' => changeAdapter=TRUE. */
+ mParent->i_onNetworkAdapterChange(this, TRUE);
}
return S_OK;
diff --git a/src/VBox/Main/src-server/SnapshotImpl.cpp b/src/VBox/Main/src-server/SnapshotImpl.cpp
index 2a643e4..4c51794 100644
--- a/src/VBox/Main/src-server/SnapshotImpl.cpp
+++ b/src/VBox/Main/src-server/SnapshotImpl.cpp
@@ -2688,7 +2688,7 @@ void SessionMachine::i_deleteSnapshotHandler(DeleteSnapshotTask &task)
// prevent online merging in general.
pOnlineMediumAttachment =
i_findAttachment(mMediaData->mAttachments,
- pAttach->i_getControllerName().raw(),
+ pAttach->i_getControllerName(),
pAttach->i_getPort(),
pAttach->i_getDevice());
if (pOnlineMediumAttachment)
diff --git a/src/VBox/Main/src-server/StorageControllerImpl.cpp b/src/VBox/Main/src-server/StorageControllerImpl.cpp
index e9526be..4cc6607 100644
--- a/src/VBox/Main/src-server/StorageControllerImpl.cpp
+++ b/src/VBox/Main/src-server/StorageControllerImpl.cpp
@@ -233,14 +233,14 @@ HRESULT StorageController::init(Machine *aParent,
AutoWriteLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
unconst(aThat->m->pPeer) = this;
- m->bd.attach (aThat->m->bd);
+ m->bd.attach(aThat->m->bd);
}
else
{
unconst(m->pPeer) = aThat;
AutoReadLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
- m->bd.share (aThat->m->bd);
+ m->bd.share(aThat->m->bd);
}
/* Confirm successful initialization */
@@ -330,6 +330,19 @@ HRESULT StorageController::setName(const com::Utf8Str &aName)
tr("Storage controller named '%s' already exists"),
aName.c_str());
+ Machine::MediaData::AttachmentList atts;
+ rc = m->pParent->i_getMediumAttachmentsOfController(m->bd->strName, atts);
+ for (Machine::MediaData::AttachmentList::const_iterator it = atts.begin();
+ it != atts.end();
+ ++it)
+ {
+ IMediumAttachment *iA = *it;
+ MediumAttachment *pAttach = static_cast<MediumAttachment *>(iA);
+ AutoWriteLock attlock(pAttach COMMA_LOCKVAL_SRC_POS);
+ pAttach->i_updateName(aName);
+ }
+
+
m->bd.backup();
m->bd->strName = aName;
@@ -418,7 +431,7 @@ HRESULT StorageController::setControllerType(StorageControllerType_T aController
if (!SUCCEEDED(rc))
return setError(rc,
- tr ("Invalid controller type %d"),
+ tr("Invalid controller type %d"),
aControllerType);
if (m->bd->mStorageControllerType != aControllerType)
@@ -729,11 +742,11 @@ void StorageController::i_commit()
{
/* sanity */
AutoCaller autoCaller(this);
- AssertComRCReturnVoid (autoCaller.rc());
+ AssertComRCReturnVoid(autoCaller.rc());
/* sanity too */
- AutoCaller peerCaller (m->pPeer);
- AssertComRCReturnVoid (peerCaller.rc());
+ AutoCaller peerCaller(m->pPeer);
+ AssertComRCReturnVoid(peerCaller.rc());
/* lock both for writing since we modify both (m->pPeer is "master" so locked
* first) */
@@ -745,7 +758,7 @@ void StorageController::i_commit()
if (m->pPeer)
{
// attach new data to the peer and reshare it
- m->pPeer->m->bd.attach (m->bd);
+ m->pPeer->m->bd.attach(m->bd);
}
}
}
@@ -761,11 +774,11 @@ void StorageController::i_unshare()
{
/* sanity */
AutoCaller autoCaller(this);
- AssertComRCReturnVoid (autoCaller.rc());
+ AssertComRCReturnVoid(autoCaller.rc());
/* sanity too */
- AutoCaller peerCaller (m->pPeer);
- AssertComRCReturnVoid (peerCaller.rc());
+ AutoCaller peerCaller(m->pPeer);
+ AssertComRCReturnVoid(peerCaller.rc());
/* peer is not modified, lock it for reading (m->pPeer is "master" so locked
* first) */
diff --git a/src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp b/src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp
index a6511b6..0e4f385 100644
--- a/src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp
+++ b/src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp
@@ -380,141 +380,3 @@ static int getDriveInfoFromEnv(const char *pcszVar, DriveInfoList *pList,
LogFlowFunc(("rc=%Rrc, success=%d\n", rc, success));
return rc;
}
-
-#if 0
-int VBoxMainUSBDeviceInfo::UpdateDevices ()
-{
- LogFlowThisFunc(("entered\n"));
- int rc = VINF_SUCCESS;
- bool success = false; /* Have we succeeded in finding anything yet? */
- try
- {
- bool halSuccess = false;
- mDeviceList.clear();
-#if defined(RT_OS_LINUX)
-#ifdef VBOX_WITH_DBUS
- if ( RT_SUCCESS(rc)
- && RT_SUCCESS(RTDBusLoadLib())
- && (!success || testing()))
- rc = getUSBDeviceInfoFromHal(&mDeviceList, &halSuccess);
- /* Try the old API if the new one *succeeded* as only one of them will
- * pick up devices anyway. */
- if (RT_SUCCESS(rc) && halSuccess && (!success || testing()))
- rc = getOldUSBDeviceInfoFromHal(&mDeviceList, &halSuccess);
- if (!success)
- success = halSuccess;
-#endif /* VBOX_WITH_DBUS defined */
-#endif /* RT_OS_LINUX */
- }
- catch(std::bad_alloc &e)
- {
- rc = VERR_NO_MEMORY;
- }
- LogFlowThisFunc(("rc=%Rrc\n", rc));
- return rc;
-}
-
-struct VBoxMainHotplugWaiter::Context
-{
-#if defined RT_OS_LINUX && defined VBOX_WITH_DBUS
- /** The connection to DBus */
- RTMemAutoPtr <DBusConnection, VBoxHalShutdownPrivate> mConnection;
- /** Semaphore which is set when a device is hotplugged and reset when
- * it is read. */
- volatile bool mTriggered;
- /** A flag to say that we wish to interrupt the current wait. */
- volatile bool mInterrupt;
- /** Constructor */
- Context() : mTriggered(false), mInterrupt(false) {}
-#endif /* defined RT_OS_LINUX && defined VBOX_WITH_DBUS */
-};
-
-/* This constructor sets up a private connection to the DBus daemon, connects
- * to the hal service and installs a filter which sets the mTriggered flag in
- * the Context structure when a device (not necessarily USB) is added or
- * removed. */
-VBoxMainHotplugWaiter::VBoxMainHotplugWaiter ()
-{
-#if defined RT_OS_LINUX && defined VBOX_WITH_DBUS
- int rc = VINF_SUCCESS;
-
- mContext = new Context;
- if (RT_SUCCESS(RTDBusLoadLib()))
- {
- for (unsigned i = 0; RT_SUCCESS(rc) && i < 5 && !mContext->mConnection; ++i)
- {
- rc = halInitPrivate (&mContext->mConnection);
- }
- if (!mContext->mConnection)
- rc = VERR_NOT_SUPPORTED;
- DBusMessage *pMessage;
- while ( RT_SUCCESS(rc)
- && (pMessage = dbus_connection_pop_message (mContext->mConnection.get())) != NULL)
- dbus_message_unref (pMessage); /* empty the message queue. */
- if ( RT_SUCCESS(rc)
- && !dbus_connection_add_filter (mContext->mConnection.get(),
- dbusFilterFunction,
- (void *) &mContext->mTriggered, NULL))
- rc = VERR_NO_MEMORY;
- if (RT_FAILURE(rc))
- mContext->mConnection.reset();
- }
-#endif /* defined RT_OS_LINUX && defined VBOX_WITH_DBUS */
-}
-
-/* Destructor */
-VBoxMainHotplugWaiter::~VBoxMainHotplugWaiter ()
-{
-#if defined RT_OS_LINUX && defined VBOX_WITH_DBUS
- if (!!mContext->mConnection)
- dbus_connection_remove_filter (mContext->mConnection.get(), dbusFilterFunction,
- (void *) &mContext->mTriggered);
- delete mContext;
-#endif /* defined RT_OS_LINUX && defined VBOX_WITH_DBUS */
-}
-
-/* Currently this is implemented using a timed out wait on our private DBus
- * connection. Because the connection is private we don't have to worry about
- * blocking other users. */
-int VBoxMainHotplugWaiter::Wait(RTMSINTERVAL cMillies)
-{
- int rc = VINF_SUCCESS;
-#if defined RT_OS_LINUX && defined VBOX_WITH_DBUS
- if (!mContext->mConnection)
- rc = VERR_NOT_SUPPORTED;
- bool connected = true;
- mContext->mTriggered = false;
- mContext->mInterrupt = false;
- unsigned cRealMillies;
- if (cMillies != RT_INDEFINITE_WAIT)
- cRealMillies = cMillies;
- else
- cRealMillies = DBUS_POLL_TIMEOUT;
- while ( RT_SUCCESS(rc) && connected && !mContext->mTriggered
- && !mContext->mInterrupt)
- {
- connected = dbus_connection_read_write_dispatch (mContext->mConnection.get(),
- cRealMillies);
- if (mContext->mInterrupt)
- LogFlowFunc(("wait loop interrupted\n"));
- if (cMillies != RT_INDEFINITE_WAIT)
- mContext->mInterrupt = true;
- }
- if (!connected)
- rc = VERR_TRY_AGAIN;
-#else /* !(defined RT_OS_LINUX && defined VBOX_WITH_DBUS) */
- rc = VERR_NOT_IMPLEMENTED;
-#endif /* !(defined RT_OS_LINUX && defined VBOX_WITH_DBUS) */
- return rc;
-}
-
-/* Set a flag to tell the Wait not to resume next time it times out. */
-void VBoxMainHotplugWaiter::Interrupt()
-{
-#if defined RT_OS_LINUX && defined VBOX_WITH_DBUS
- LogFlowFunc(("\n"));
- mContext->mInterrupt = true;
-#endif /* defined RT_OS_LINUX && defined VBOX_WITH_DBUS */
-}
-#endif
-
diff --git a/src/VBox/Main/src-server/linux/HostPowerLinux.cpp b/src/VBox/Main/src-server/linux/HostPowerLinux.cpp
index aa83021..10ad11c 100644
--- a/src/VBox/Main/src-server/linux/HostPowerLinux.cpp
+++ b/src/VBox/Main/src-server/linux/HostPowerLinux.cpp
@@ -82,7 +82,8 @@ HostPowerServiceLinux::~HostPowerServiceLinux()
{
/* Closing the connection should cause the event loop to exit. */
LogFunc((": Stopping thread\n"));
- dbus_connection_close(mpConnection);
+ if (mpConnection)
+ dbus_connection_close(mpConnection);
RTThreadWait(mThread, 5000, NULL);
mThread = NIL_RTTHREAD;
diff --git a/src/VBox/Main/testcase/Makefile.kmk b/src/VBox/Main/testcase/Makefile.kmk
index 126cd89..07301a7 100644
--- a/src/VBox/Main/testcase/Makefile.kmk
+++ b/src/VBox/Main/testcase/Makefile.kmk
@@ -121,7 +121,8 @@ tstVBoxAPIXPCOM_INCS = \
$(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
$(VBOX_PATH_SDK)/bindings/xpcom/include/ipcd
tstVBoxAPIXPCOM_LIBS = \
- $(LIB_XPCOM)
+ $(LIB_XPCOM) \
+ $(LIB_RUNTIME)
tstVBoxAPIXPCOM_CXXFLAGS = -fshort-wchar
ifdef VBOX_WITH_RUNPATH
tstVBoxAPIXPCOM_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' $(TEMPLATE_VBoxBldProg_LDFLAGS)
diff --git a/src/VBox/Main/xml/Settings.cpp b/src/VBox/Main/xml/Settings.cpp
index 2fe01e1..333a4c8 100644
--- a/src/VBox/Main/xml/Settings.cpp
+++ b/src/VBox/Main/xml/Settings.cpp
@@ -4028,6 +4028,8 @@ void MachineConfigFile::readMachine(const xml::ElementNode &elmMachine)
if (elmMachine.getAttributeValue("aborted", fAborted))
fAborted = true;
+ elmMachine.getAttributeValue("processPriority", machineUserData.strVMPriority);
+
elmMachine.getAttributeValue("icon", machineUserData.ovIcon);
// parse Hardware before the other elements because other things depend on it
@@ -5394,6 +5396,8 @@ void MachineConfigFile::buildMachineXML(xml::ElementNode &elmMachine,
elmMachine.setAttribute("lastStateChange", stringifyTimestamp(timeLastStateChange));
if (fAborted)
elmMachine.setAttribute("aborted", fAborted);
+ if (machineUserData.strVMPriority.length())
+ elmMachine.setAttribute("processPriority", machineUserData.strVMPriority);
// Please keep the icon last so that one doesn't have to check if there
// is anything in the line after this very long attribute in the XML.
if (machineUserData.ovIcon.length())
@@ -5578,13 +5582,15 @@ void MachineConfigFile::bumpSettingsVersionIfNeeded()
if (m->sv < SettingsVersion_v1_15)
{
// VirtualBox 5.0 adds paravirt providers, explicit AHCI port hotplug
- // setting, USB storage controller, xHCI and serial port TCP backend.
+ // setting, USB storage controller, xHCI, serial port TCP backend
+ // and VM process priority.
/*
* Check simple configuration bits first, loopy stuff afterwards.
*/
if ( hardwareMachine.paravirtProvider != ParavirtProvider_Legacy
- || hardwareMachine.uCpuIdPortabilityLevel != 0)
+ || hardwareMachine.uCpuIdPortabilityLevel != 0
+ || machineUserData.strVMPriority.length())
{
m->sv = SettingsVersion_v1_15;
return;
diff --git a/src/VBox/Runtime/common/checksum/manifest3.cpp b/src/VBox/Runtime/common/checksum/manifest3.cpp
index 771c7bc..3a0acf3 100644
--- a/src/VBox/Runtime/common/checksum/manifest3.cpp
+++ b/src/VBox/Runtime/common/checksum/manifest3.cpp
@@ -544,10 +544,9 @@ RTDECL(int) RTManifestEntryAddIoStream(RTMANIFEST hManifest, RTVFSIOSTREAM hVfsI
}
}
else
- {
- rtManifestHashesDestroy(pHashes);
rc = VERR_NO_TMP_MEMORY;
- }
+
+ rtManifestHashesDestroy(pHashes);
return rc;
}
diff --git a/src/VBox/Storage/QCOW.cpp b/src/VBox/Storage/QCOW.cpp
index e21aa19..ae483b4 100644
--- a/src/VBox/Storage/QCOW.cpp
+++ b/src/VBox/Storage/QCOW.cpp
@@ -1310,6 +1310,7 @@ static int qcowAsyncClusterAllocRollback(PQCOWIMAGE pImage, PVDIOCTX pIoCtx, PQC
rc = vdIfIoIntFileSetSize(pImage->pIfIo, pImage->pStorage, pClusterAlloc->offNextClusterOld);
qcowL2TblCacheEntryRelease(pClusterAlloc->pL2Entry); /* Release L2 cache entry. */
qcowL2TblCacheEntryFree(pImage, pClusterAlloc->pL2Entry); /* Free it, it is not in the cache yet. */
+ break;
}
case QCOWCLUSTERASYNCALLOCSTATE_USER_ALLOC:
case QCOWCLUSTERASYNCALLOCSTATE_USER_LINK:
diff --git a/src/VBox/VMM/Makefile.kmk b/src/VBox/VMM/Makefile.kmk
index 1bd9f94..4f16376 100644
--- a/src/VBox/VMM/Makefile.kmk
+++ b/src/VBox/VMM/Makefile.kmk
@@ -564,6 +564,7 @@ ifndef VBOX_ONLY_EXTPACKS
VMMR0/CPUMR0A.asm \
VMMR0/GIMR0.cpp \
VMMR0/GIMR0Hv.cpp \
+ VMMR0/GIMR0Kvm.cpp \
VMMR0/GMMR0.cpp \
VMMR0/GVMMR0.cpp \
VMMR0/HMR0.cpp \
diff --git a/src/VBox/VMM/VMMAll/GIMAllHv.cpp b/src/VBox/VMM/VMMAll/GIMAllHv.cpp
index c5d41c2..32106be 100644
--- a/src/VBox/VMM/VMMAll/GIMAllHv.cpp
+++ b/src/VBox/VMM/VMMAll/GIMAllHv.cpp
@@ -31,7 +31,6 @@
#include <VBox/vmm/pdmapi.h>
#include <iprt/asm-amd64-x86.h>
-#include <iprt/spinlock.h>
/**
@@ -102,7 +101,7 @@ VMM_INT_DECL(VBOXSTRICTRC) gimHvReadMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRR
{
/* Hyper-V reports the time in 100 ns units (10 MHz). */
uint64_t u64Tsc = TMCpuTickGet(pVCpu);
- uint64_t u64TscHz = TMCpuTicksPerSecond(pVM);
+ uint64_t u64TscHz = pHv->cTscTicksPerSecond;
uint64_t u64Tsc100Ns = u64TscHz / UINT64_C(10000000); /* 100 ns */
*puValue = (u64Tsc / u64Tsc100Ns);
return VINF_SUCCESS;
diff --git a/src/VBox/VMM/VMMAll/GIMAllKvm.cpp b/src/VBox/VMM/VMMAll/GIMAllKvm.cpp
index 105894d..d7a4356 100644
--- a/src/VBox/VMM/VMMAll/GIMAllKvm.cpp
+++ b/src/VBox/VMM/VMMAll/GIMAllKvm.cpp
@@ -34,6 +34,7 @@
#include <VBox/sup.h>
#include <iprt/asm-amd64-x86.h>
+#include <iprt/time.h>
/**
@@ -90,10 +91,17 @@ VMM_INT_DECL(int) gimKvmHypercall(PVMCPU pVCpu, PCPUMCTX pCtx)
PVMCPU pVCpuTarget = &pVM->aCpus[uHyperArg1]; /** ASSUMES pVCpu index == ApicId of the VCPU. */
VMCPU_FF_SET(pVCpuTarget, VMCPU_FF_UNHALT);
#ifdef IN_RING0
- GVMMR0SchedWakeUp(pVM, pVCpuTarget->idCpu);
+ /*
+ * We might be here with preemption disabled or enabled (i.e. depending on thread-context hooks
+ * being used), so don't try obtaining the GVMMR0 used lock here. See @bugref{7270} comment #148.
+ */
+ GVMMR0SchedWakeUpEx(pVM, pVCpuTarget->idCpu, false /* fTakeUsedLock */);
#elif defined(IN_RING3)
int rc2 = SUPR3CallVMMR0(pVM->pVMR0, pVCpuTarget->idCpu, VMMR0_DO_GVMM_SCHED_WAKE_UP, NULL);
AssertRC(rc2);
+#elif defined(IN_RC)
+ /* Nothing to do for raw-mode, shouldn't really be used by raw-mode guests anyway. */
+ Assert(pVM->cCpus == 1);
#endif
uHyperRet = KVM_HYPERCALL_RET_SUCCESS;
}
@@ -224,16 +232,20 @@ VMM_INT_DECL(VBOXSTRICTRC) gimKvmWriteMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMS
case MSR_GIM_KVM_SYSTEM_TIME_OLD:
{
bool fEnable = RT_BOOL(uRawValue & MSR_GIM_KVM_SYSTEM_TIME_ENABLE_BIT);
-#ifndef IN_RING3
+#ifdef IN_RING0
+ gimR0KvmUpdateSystemTime(pVM, pVCpu);
+ return VINF_CPUM_R3_MSR_WRITE;
+#elif defined(IN_RC)
+ Assert(pVM->cCpus == 1);
if (fEnable)
{
RTCCUINTREG fEFlags = ASMIntDisableFlags();
- pKvmCpu->uTsc = TMCpuTickGetNoCheck(pVCpu);
- pKvmCpu->uVirtNanoTS = TMVirtualGetNoCheck(pVM);
+ pKvmCpu->uTsc = TMCpuTickGetNoCheck(pVCpu) | UINT64_C(1);
+ pKvmCpu->uVirtNanoTS = TMVirtualGetNoCheck(pVM) | UINT64_C(1);
ASMSetFlags(fEFlags);
}
return VINF_CPUM_R3_MSR_WRITE;
-#else
+#else /* IN_RING3 */
if (!fEnable)
{
gimR3KvmDisableSystemTime(pVM);
@@ -250,28 +262,27 @@ VMM_INT_DECL(VBOXSTRICTRC) gimKvmWriteMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMS
{
int rc2 = PGMPhysSimpleReadGCPhys(pVM, &SystemTime, pKvmCpu->GCPhysSystemTime, sizeof(GIMKVMSYSTEMTIME));
if (RT_SUCCESS(rc2))
- fFlags = (SystemTime.fFlags & GIM_KVM_SYSTEM_TIME_FLAGS_GUEST_PAUSED);
+ pKvmCpu->fSystemTimeFlags = (SystemTime.fFlags & GIM_KVM_SYSTEM_TIME_FLAGS_GUEST_PAUSED);
}
/* Enable and populate the system-time struct. */
pKvmCpu->u64SystemTimeMsr = uRawValue;
pKvmCpu->GCPhysSystemTime = MSR_GIM_KVM_SYSTEM_TIME_GUEST_GPA(uRawValue);
pKvmCpu->u32SystemTimeVersion += 2;
- int rc = gimR3KvmEnableSystemTime(pVM, pVCpu, pKvmCpu, fFlags);
+ int rc = gimR3KvmEnableSystemTime(pVM, pVCpu);
if (RT_FAILURE(rc))
{
pKvmCpu->u64SystemTimeMsr = 0;
return VERR_CPUM_RAISE_GP_0;
}
return VINF_SUCCESS;
-#endif /* IN_RING3 */
+#endif
}
case MSR_GIM_KVM_WALL_CLOCK:
case MSR_GIM_KVM_WALL_CLOCK_OLD:
{
#ifndef IN_RING3
-
return VINF_CPUM_R3_MSR_WRITE;
#else
/* Enable the wall-clock struct. */
@@ -281,7 +292,7 @@ VMM_INT_DECL(VBOXSTRICTRC) gimKvmWriteMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMS
int rc = gimR3KvmEnableWallClock(pVM, GCPhysWallClock);
if (RT_SUCCESS(rc))
{
- pKvm->u64WallClockMsr = uRawValue;
+ pKvm->u64WallClockMsr = uRawValue;
return VINF_SUCCESS;
}
}
diff --git a/src/VBox/VMM/VMMR0/GIMR0.cpp b/src/VBox/VMM/VMMR0/GIMR0.cpp
index 979626b..ce35903 100644
--- a/src/VBox/VMM/VMMR0/GIMR0.cpp
+++ b/src/VBox/VMM/VMMR0/GIMR0.cpp
@@ -42,6 +42,9 @@ VMMR0_INT_DECL(int) GIMR0InitVM(PVM pVM)
case GIMPROVIDERID_HYPERV:
return gimR0HvInitVM(pVM);
+ case GIMPROVIDERID_KVM:
+ return gimR0KvmInitVM(pVM);
+
default:
break;
}
@@ -65,6 +68,9 @@ VMMR0_INT_DECL(int) GIMR0TermVM(PVM pVM)
case GIMPROVIDERID_HYPERV:
return gimR0HvTermVM(pVM);
+ case GIMPROVIDERID_KVM:
+ return gimR0KvmTermVM(pVM);
+
default:
break;
}
diff --git a/src/VBox/VMM/VMMR0/GIMR0Kvm.cpp b/src/VBox/VMM/VMMR0/GIMR0Kvm.cpp
new file mode 100644
index 0000000..9d98b08
--- /dev/null
+++ b/src/VBox/VMM/VMMR0/GIMR0Kvm.cpp
@@ -0,0 +1,117 @@
+/* $Id: GIMR0Kvm.cpp $ */
+/** @file
+ * Guest Interface Manager (GIM), KVM - Host Context Ring-0.
+ */
+
+/*
+ * Copyright (C) 2015 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/*******************************************************************************
+* Header Files *
+*******************************************************************************/
+#define LOG_GROUP LOG_GROUP_GIM
+#include "GIMInternal.h"
+#include "GIMKvmInternal.h"
+
+#include <VBox/err.h>
+#include <VBox/vmm/gim.h>
+#include <VBox/vmm/tm.h>
+#include <VBox/vmm/vm.h>
+
+#include <iprt/spinlock.h>
+
+
+/**
+ * Updates KVM's system time information globally for all VCPUs.
+ *
+ * @returns VBox status code.
+ * @param pVM Pointer to the VM.
+ * @param
+ * @thread EMT.
+ */
+VMM_INT_DECL(int) gimR0KvmUpdateSystemTime(PVM pVM, PVMCPU pVCpu)
+{
+ /*
+ * Validate.
+ */
+ Assert(GIMIsEnabled(pVM));
+ PGIMKVM pKvm = &pVM->gim.s.u.Kvm;
+ AssertReturn(pKvm->hSpinlockR0 != NIL_RTSPINLOCK, VERR_GIM_IPE_3);
+
+ /*
+ * Record the TSC and virtual NanoTS pairs.
+ */
+ uint64_t uTsc;
+ uint64_t uVirtNanoTS;
+ RTCCUINTREG fEFlags = ASMIntDisableFlags();
+ uTsc = TMCpuTickGetNoCheck(pVCpu) | UINT64_C(1);
+ uVirtNanoTS = TMVirtualGetNoCheck(pVM) | UINT64_C(1);
+ ASMSetFlags(fEFlags);
+
+ /*
+ * Update VCPUs with this information. The first VCPU's values
+ * will be applied to the remaining.
+ */
+ RTSpinlockAcquire(pKvm->hSpinlockR0);
+ for (uint32_t i = 0; i < pVM->cCpus; i++)
+ {
+ PGIMKVMCPU pKvmCpu = &pVM->aCpus[i].gim.s.u.KvmCpu;
+ if ( !pKvmCpu->uTsc
+ && !pKvmCpu->uVirtNanoTS)
+ {
+ pKvmCpu->uTsc = uTsc;
+ pKvmCpu->uVirtNanoTS = uVirtNanoTS;
+ }
+ }
+ RTSpinlockRelease(pKvm->hSpinlockR0);
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Does ring-0 per-VM GIM KVM initialization.
+ *
+ * @returns VBox status code.
+ * @param pVM Pointer to the VM.
+ */
+VMMR0_INT_DECL(int) gimR0KvmInitVM(PVM pVM)
+{
+ AssertPtr(pVM);
+ Assert(GIMIsEnabled(pVM));
+
+ PGIMKVM pKvm = &pVM->gim.s.u.Kvm;
+ Assert(pKvm->hSpinlockR0 == NIL_RTSPINLOCK);
+
+ int rc = RTSpinlockCreate(&pKvm->hSpinlockR0, RTSPINLOCK_FLAGS_INTERRUPT_UNSAFE, "KVM");
+ return rc;
+}
+
+
+/**
+ * Does ring-0 per-VM GIM KVM termination.
+ *
+ * @returns VBox status code.
+ * @param pVM Pointer to the VM.
+ */
+VMMR0_INT_DECL(int) gimR0KvmTermVM(PVM pVM)
+{
+ AssertPtr(pVM);
+ Assert(GIMIsEnabled(pVM));
+
+ PGIMKVM pKvm = &pVM->gim.s.u.Kvm;
+ RTSpinlockDestroy(pKvm->hSpinlockR0);
+ pKvm->hSpinlockR0 = NIL_RTSPINLOCK;
+
+ return VINF_SUCCESS;
+}
+
diff --git a/src/VBox/VMM/VMMR0/HMSVMR0.cpp b/src/VBox/VMM/VMMR0/HMSVMR0.cpp
index fe9205e..6846edd 100644
--- a/src/VBox/VMM/VMMR0/HMSVMR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMSVMR0.cpp
@@ -2329,8 +2329,12 @@ static void hmR0SvmUpdateTscOffsetting(PVM pVM, PVMCPU pVCpu)
* VM-entry. */
if (fParavirtTsc)
{
+ /* Currently neither Hyper-V nor KVM need to update their paravirt. TSC
+ information before every VM-entry, hence disable it for performance sake. */
+#if 0
int rc = GIMR0UpdateParavirtTsc(pVM, 0 /* u64Offset */);
AssertRC(rc);
+#endif
STAM_COUNTER_INC(&pVCpu->hm.s.StatTscParavirt);
}
}
diff --git a/src/VBox/VMM/VMMR0/HMVMXR0.cpp b/src/VBox/VMM/VMMR0/HMVMXR0.cpp
index 9fea584..8d19833 100644
--- a/src/VBox/VMM/VMMR0/HMVMXR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMVMXR0.cpp
@@ -4842,7 +4842,8 @@ static int hmR0VmxLoadGuestMsrs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
AssertRCReturn(rc, rc);
/* We need to intercept reads too, see @bugref{7386} comment #16. */
- hmR0VmxSetMsrPermission(pVCpu, MSR_K6_EFER, VMXMSREXIT_INTERCEPT_READ, VMXMSREXIT_INTERCEPT_WRITE);
+ if (pVM->hm.s.vmx.Msrs.VmxProcCtls.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC_USE_MSR_BITMAPS)
+ hmR0VmxSetMsrPermission(pVCpu, MSR_K6_EFER, VMXMSREXIT_INTERCEPT_READ, VMXMSREXIT_INTERCEPT_WRITE);
Log4(("Load[%RU32]: MSR[--]: u32Msr=%#RX32 u64Value=%#RX64 cMsrs=%u\n", pVCpu->idCpu, MSR_K6_EFER,
pMixedCtx->msrEFER, pVCpu->hm.s.vmx.cMsrs));
}
@@ -5696,8 +5697,12 @@ static void hmR0VmxUpdateTscOffsettingAndPreemptTimer(PVM pVM, PVMCPU pVCpu)
* VM-entry. */
if (fParavirtTsc)
{
+ /* Currently neither Hyper-V nor KVM need to update their paravirt. TSC
+ information before every VM-entry, hence disable it for performance sake. */
+#if 0
rc = GIMR0UpdateParavirtTsc(pVM, 0 /* u64Offset */);
AssertRC(rc);
+#endif
STAM_COUNTER_INC(&pVCpu->hm.s.StatTscParavirt);
}
@@ -8859,7 +8864,7 @@ static void hmR0VmxPostRunGuest(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXT
STAM_PROFILE_ADV_STOP_START(&pVCpu->hm.s.StatInGC, &pVCpu->hm.s.StatExit1, x);
TMNotifyEndOfExecution(pVCpu); /* Notify TM that the guest is no longer running. */
- Assert(!(ASMGetFlags() & X86_EFL_IF));
+ Assert(!ASMIntAreEnabled());
VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED_HM);
#ifdef HMVMX_ALWAYS_SWAP_FPU_STATE
diff --git a/src/VBox/VMM/VMMR3/CPUM.cpp b/src/VBox/VMM/VMMR3/CPUM.cpp
index f4359d2..6a42390 100644
--- a/src/VBox/VMM/VMMR3/CPUM.cpp
+++ b/src/VBox/VMM/VMMR3/CPUM.cpp
@@ -760,19 +760,21 @@ VMMR3DECL(int) CPUMR3Init(PVM pVM)
/*
* Figure out which XSAVE/XRSTOR features are available on the host.
*/
+ uint64_t fXcr0Host = 0;
uint64_t fXStateHostMask = 0;
if ( pVM->cpum.s.HostFeatures.fXSaveRstor
&& pVM->cpum.s.HostFeatures.fOpSysXSaveRstor)
{
- fXStateHostMask = ASMGetXcr0() & ( XSAVE_C_X87 | XSAVE_C_SSE | XSAVE_C_YMM | XSAVE_C_OPMASK
- | XSAVE_C_ZMM_HI256 | XSAVE_C_ZMM_16HI);
+ fXStateHostMask = fXcr0Host = ASMGetXcr0();
+ fXStateHostMask &= XSAVE_C_X87 | XSAVE_C_SSE | XSAVE_C_YMM | XSAVE_C_OPMASK | XSAVE_C_ZMM_HI256 | XSAVE_C_ZMM_16HI;
AssertLogRelMsgStmt((fXStateHostMask & (XSAVE_C_X87 | XSAVE_C_SSE)) == (XSAVE_C_X87 | XSAVE_C_SSE),
("%#llx\n", fXStateHostMask), fXStateHostMask = 0);
}
pVM->cpum.s.fXStateHostMask = fXStateHostMask;
if (!HMIsEnabled(pVM)) /* For raw-mode, we only use XSAVE/XRSTOR when the guest starts using it (CPUID/CR4 visibility). */
fXStateHostMask = 0;
- LogRel(("CPUM: fXStateHostMask=%#llx; initial: %#llx\n", pVM->cpum.s.fXStateHostMask, fXStateHostMask));
+ LogRel(("CPUM: fXStateHostMask=%#llx; initial: %#llx; host XCR0=%#llx\n",
+ pVM->cpum.s.fXStateHostMask, fXStateHostMask, fXcr0Host));
/*
* Allocate memory for the extended CPU state and initialize the host XSAVE/XRSTOR mask.
@@ -2438,6 +2440,8 @@ VMMR3DECL(int) CPUMR3InitCompleted(PVM pVM)
if (fSupportsLongMode)
pVCpu->cpum.s.fUseFlags |= CPUM_USE_SUPPORTS_LONGMODE;
}
+
+ cpumR3MsrRegStats(pVM);
return VINF_SUCCESS;
}
diff --git a/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp b/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
index cf30b7c..e8ccc30 100644
--- a/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
+++ b/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
@@ -3717,6 +3717,7 @@ static int cpumR3CpuIdReadConfig(PVM pVM, PCPUMCPUIDCONFIG pConfig, PCFGMNODE pC
bool const fMayHaveXSave = fNestedPagingAndFullGuestExec
&& pVM->cpum.s.HostFeatures.fXSaveRstor
&& pVM->cpum.s.HostFeatures.fOpSysXSaveRstor;
+ uint64_t const fXStateHostMask = pVM->cpum.s.fXStateHostMask;
/** @cfgm{/CPUM/IsaExts/XSAVE, boolean, depends}
* Expose XSAVE/XRSTOR to the guest if available. For the time being the
@@ -3734,7 +3735,7 @@ static int cpumR3CpuIdReadConfig(PVM pVM, PCPUMCPUIDCONFIG pConfig, PCFGMNODE pC
* to VMs with nested paging and AMD-V or unrestricted guest execution mode.
*/
rc = cpumR3CpuIdReadIsaExtCfgEx(pVM, pIsaExts, "AVX", &pConfig->enmAvx, fNestedPagingAndFullGuestExec,
- fMayHaveXSave && pConfig->enmXSave /*fAllowed*/);
+ fMayHaveXSave && pConfig->enmXSave && (fXStateHostMask & XSAVE_C_YMM) /*fAllowed*/);
AssertLogRelRCReturn(rc, rc);
/** @cfgm{/CPUM/IsaExts/AVX2, boolean, depends}
@@ -3743,7 +3744,7 @@ static int cpumR3CpuIdReadConfig(PVM pVM, PCPUMCPUIDCONFIG pConfig, PCFGMNODE pC
* to VMs with nested paging and AMD-V or unrestricted guest execution mode.
*/
rc = cpumR3CpuIdReadIsaExtCfgEx(pVM, pIsaExts, "AVX2", &pConfig->enmAvx2, fNestedPagingAndFullGuestExec,
- fMayHaveXSave && pConfig->enmXSave /*fAllowed*/);
+ fMayHaveXSave && pConfig->enmXSave && (fXStateHostMask & XSAVE_C_YMM) /*fAllowed*/);
AssertLogRelRCReturn(rc, rc);
/** @cfgm{/CPUM/IsaExts/AESNI, isaextcfg, depends}
@@ -3964,7 +3965,6 @@ int cpumR3InitCpuIdAndMsrs(PVM pVM)
pCpum->GuestInfo.paMsrRangesR0 = MMHyperR3ToR0(pVM, pCpum->GuestInfo.paMsrRangesR3);
pCpum->GuestInfo.paMsrRangesRC = MMHyperR3ToRC(pVM, pCpum->GuestInfo.paMsrRangesR3);
- cpumR3MsrRegStats(pVM);
/*
diff --git a/src/VBox/VMM/VMMR3/GIMKvm.cpp b/src/VBox/VMM/VMMR3/GIMKvm.cpp
index 15a75de..f1261b2 100644
--- a/src/VBox/VMM/VMMR3/GIMKvm.cpp
+++ b/src/VBox/VMM/VMMR3/GIMKvm.cpp
@@ -264,6 +264,11 @@ VMMR3_INT_DECL(void) gimR3KvmReset(PVM pVM)
{
PGIMKVMCPU pKvmCpu = &pVM->aCpus[iCpu].gim.s.u.KvmCpu;
pKvmCpu->u64SystemTimeMsr = 0;
+ pKvmCpu->u32SystemTimeVersion = 0;
+ pKvmCpu->fSystemTimeFlags = 0;
+ pKvmCpu->GCPhysSystemTime = 0;
+ pKvmCpu->uTsc = 0;
+ pKvmCpu->uVirtNanoTS = 0;
}
}
@@ -357,15 +362,17 @@ VMMR3_INT_DECL(int) gimR3KvmLoad(PVM pVM, PSSMHANDLE pSSM, uint32_t uSSMVersion)
SSMR3GetU64(pSSM, &pKvmCpu->uVirtNanoTS);
SSMR3GetGCPhys(pSSM, &pKvmCpu->GCPhysSystemTime);
SSMR3GetU32(pSSM, &pKvmCpu->u32SystemTimeVersion);
- rc = SSMR3GetU8(pSSM, &fSystemTimeFlags);
+ rc = SSMR3GetU8(pSSM, &pKvmCpu->fSystemTimeFlags);
AssertRCReturn(rc, rc);
/* Enable the system-time struct. if necessary. */
+ /** @todo update guest struct only if cTscTicksPerSecond doesn't match host
+ * anymore. */
if (MSR_GIM_KVM_SYSTEM_TIME_IS_ENABLED(pKvmCpu->u64SystemTimeMsr))
{
Assert(!TMVirtualIsTicking(pVM)); /* paranoia. */
Assert(!TMCpuTickIsTicking(pVCpu));
- rc = gimR3KvmEnableSystemTime(pVM, pVCpu, pKvmCpu, fSystemTimeFlags);
+ rc = gimR3KvmEnableSystemTime(pVM, pVCpu);
AssertRCReturn(rc, rc);
}
}
@@ -387,15 +394,15 @@ VMMR3_INT_DECL(int) gimR3KvmLoad(PVM pVM, PSSMHANDLE pSSM, uint32_t uSSMVersion)
* @returns VBox status code.
* @param pVM Pointer to the VM.
* @param pVCpu Pointer to the VMCPU.
- * @param pKvmCpu Pointer to the GIMKVMCPU with all fields
- * populated by the caller.
- * @param fFlags The system-time struct. flags.
*
* @remarks Don't do any release assertions here, these can be triggered by
* guest R0 code.
*/
-VMMR3_INT_DECL(int) gimR3KvmEnableSystemTime(PVM pVM, PVMCPU pVCpu, PGIMKVMCPU pKvmCpu, uint8_t fFlags)
+VMMR3_INT_DECL(int) gimR3KvmEnableSystemTime(PVM pVM, PVMCPU pVCpu)
{
+ PGIMKVM pKvm = &pVM->gim.s.u.Kvm;
+ PGIMKVMCPU pKvmCpu = &pVCpu->gim.s.u.KvmCpu;
+
/*
* Validate the mapping address first.
*/
@@ -406,12 +413,15 @@ VMMR3_INT_DECL(int) gimR3KvmEnableSystemTime(PVM pVM, PVMCPU pVCpu, PGIMKVMCPU p
return VERR_GIM_OPERATION_FAILED;
}
+ /*
+ * Construct the system-time struct.
+ */
GIMKVMSYSTEMTIME SystemTime;
RT_ZERO(SystemTime);
SystemTime.u32Version = pKvmCpu->u32SystemTimeVersion;
SystemTime.u64NanoTS = pKvmCpu->uVirtNanoTS;
SystemTime.u64Tsc = pKvmCpu->uTsc;
- SystemTime.fFlags = fFlags | GIM_KVM_SYSTEM_TIME_FLAGS_TSC_STABLE;
+ SystemTime.fFlags = pKvmCpu->fSystemTimeFlags | GIM_KVM_SYSTEM_TIME_FLAGS_TSC_STABLE;
/*
* How the guest calculates the system time (nanoseconds):
@@ -423,7 +433,6 @@ VMMR3_INT_DECL(int) gimR3KvmEnableSystemTime(PVM pVM, PVMCPU pVCpu, PGIMKVMCPU p
* tsc >>= -i8TscShift;
* time = ((tsc * SysTime.u32TscScale) >> 32) + SysTime.u64NanoTS
*/
- PGIMKVM pKvm = &pVM->gim.s.u.Kvm;
uint64_t u64TscFreq = pKvm->cTscTicksPerSecond;
SystemTime.i8TscShift = 0;
while (u64TscFreq > 2 * RT_NS_1SEC_64)
@@ -439,6 +448,9 @@ VMMR3_INT_DECL(int) gimR3KvmEnableSystemTime(PVM pVM, PVMCPU pVCpu, PGIMKVMCPU p
}
SystemTime.u32TscScale = ASMDivU64ByU32RetU32(RT_NS_1SEC_64 << 32, uTscFreqLo);
+ /*
+ * Update guest memory with the system-time struct.
+ */
Assert(!(SystemTime.u32Version & UINT32_C(1)));
int rc = PGMPhysSimpleWriteGCPhys(pVM, pKvmCpu->GCPhysSystemTime, &SystemTime, sizeof(GIMKVMSYSTEMTIME));
if (RT_SUCCESS(rc))
diff --git a/src/VBox/VMM/VMMR3/HM.cpp b/src/VBox/VMM/VMMR3/HM.cpp
index 9a3c1c1..eca0da4 100644
--- a/src/VBox/VMM/VMMR3/HM.cpp
+++ b/src/VBox/VMM/VMMR3/HM.cpp
@@ -1215,7 +1215,7 @@ static int hmR3InitFinalizeR0Intel(PVM pVM)
VERR_HM_IPE_1);
/*
- * Enable VPID of configured and supported.
+ * Enable VPID if configured and supported.
*/
if (pVM->hm.s.vmx.Msrs.VmxProcCtls2.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC2_VPID)
pVM->hm.s.vmx.fVpid = pVM->hm.s.vmx.fAllowVpid;
diff --git a/src/VBox/VMM/include/GIMKvmInternal.h b/src/VBox/VMM/include/GIMKvmInternal.h
index 8fb8764..799b8ba 100644
--- a/src/VBox/VMM/include/GIMKvmInternal.h
+++ b/src/VBox/VMM/include/GIMKvmInternal.h
@@ -187,7 +187,7 @@ AssertCompileSize(GIMKVMWALLCLOCK, 12);
/**
- * GIM KVMV VM instance data.
+ * GIM KVM VM instance data.
* Changes to this must checked against the padding of the gim union in VM!
*/
typedef struct GIMKVM
@@ -202,6 +202,9 @@ typedef struct GIMKVM
uint16_t uOpCodeNative;
/** The TSC frequency (in HZ) reported to the guest. */
uint64_t cTscTicksPerSecond;
+ /** Spinlock used for protecting GIMKVMCPU::uTsc and
+ * GIMKVMCPU::uVirtNanoTS. */
+ RTSPINLOCK hSpinlockR0;
} GIMKVM;
/** Pointer to per-VM GIM KVM instance data. */
typedef GIMKVM *PGIMKVM;
@@ -224,6 +227,8 @@ typedef struct GIMKVMCPU
uint64_t uTsc;
/** The guest virtual time while enabling the system-time MSR. */
uint64_t uVirtNanoTS;
+ /** The flags of the system-time struct. */
+ uint8_t fSystemTimeFlags;
} GIMKVMCPU;
/** Pointer to per-VCPU GIM KVM instance data. */
typedef GIMKVMCPU *PGIMKVMCPU;
@@ -234,11 +239,9 @@ typedef GIMKVMCPU const *PCGIMKVMCPU;
RT_C_DECLS_BEGIN
#ifdef IN_RING0
-#if 0
VMMR0_INT_DECL(int) gimR0KvmInitVM(PVM pVM);
VMMR0_INT_DECL(int) gimR0KvmTermVM(PVM pVM);
-VMMR0_INT_DECL(int) gimR0KvmUpdateParavirtTsc(PVM pVM, uint64_t u64Offset);
-#endif
+VMMR0_INT_DECL(int) gimR0KvmUpdateSystemTime(PVM pVM, PVMCPU pVCpu);
#endif /* IN_RING0 */
#ifdef IN_RING3
@@ -251,7 +254,7 @@ VMMR3_INT_DECL(int) gimR3KvmSave(PVM pVM, PSSMHANDLE pSSM);
VMMR3_INT_DECL(int) gimR3KvmLoad(PVM pVM, PSSMHANDLE pSSM, uint32_t uSSMVersion);
VMMR3_INT_DECL(int) gimR3KvmDisableSystemTime(PVM pVM);
-VMMR3_INT_DECL(int) gimR3KvmEnableSystemTime(PVM pVM, PVMCPU pVCpu, PGIMKVMCPU pKvmCpu, uint8_t fFlags);
+VMMR3_INT_DECL(int) gimR3KvmEnableSystemTime(PVM pVM, PVMCPU pVCpu);
VMMR3_INT_DECL(int) gimR3KvmEnableWallClock(PVM pVM, RTGCPHYS GCPhysSysTime);
#endif /* IN_RING3 */
diff --git a/src/VBox/ValidationKit/common/__init__.py b/src/VBox/ValidationKit/common/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/common/constants/__init__.py b/src/VBox/ValidationKit/common/constants/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/common/constants/result.py b/src/VBox/ValidationKit/common/constants/result.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/common/constants/rtexitcode.py b/src/VBox/ValidationKit/common/constants/rtexitcode.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/common/constants/tbreq.py b/src/VBox/ValidationKit/common/constants/tbreq.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/common/constants/tbresp.py b/src/VBox/ValidationKit/common/constants/tbresp.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/common/constants/valueunit.py b/src/VBox/ValidationKit/common/constants/valueunit.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/common/utils.py b/src/VBox/ValidationKit/common/utils.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/common/webutils.py b/src/VBox/ValidationKit/common/webutils.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testanalysis/__init__.py b/src/VBox/ValidationKit/testanalysis/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testanalysis/diff.py b/src/VBox/ValidationKit/testanalysis/diff.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testboxscript/testboxcommand.py b/src/VBox/ValidationKit/testboxscript/testboxcommand.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testboxscript/testboxcommons.py b/src/VBox/ValidationKit/testboxscript/testboxcommons.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testboxscript/testboxconnection.py b/src/VBox/ValidationKit/testboxscript/testboxconnection.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testboxscript/testboxtasks.py b/src/VBox/ValidationKit/testboxscript/testboxtasks.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testboxscript/testboxupgrade.py b/src/VBox/ValidationKit/testboxscript/testboxupgrade.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testdriver/__init__.py b/src/VBox/ValidationKit/testdriver/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testdriver/base.py b/src/VBox/ValidationKit/testdriver/base.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testdriver/reporter.py b/src/VBox/ValidationKit/testdriver/reporter.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testdriver/tst-txsclient.py b/src/VBox/ValidationKit/testdriver/tst-txsclient.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testdriver/txsclient.py b/src/VBox/ValidationKit/testdriver/txsclient.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testdriver/vbox.py b/src/VBox/ValidationKit/testdriver/vbox.py
old mode 100644
new mode 100755
index f822487..48c0b77
--- a/src/VBox/ValidationKit/testdriver/vbox.py
+++ b/src/VBox/ValidationKit/testdriver/vbox.py
@@ -27,7 +27,7 @@ CDDL are applicable instead of those of the GPL.
You may elect to license modified versions of this file under the
terms and conditions of either the GPL or the CDDL or both.
"""
-__version__ = "$Revision: 101327 $"
+__version__ = "$Revision: 101455 $"
# Standard Python imports.
@@ -2010,7 +2010,7 @@ class TestDriver(base.TestDriver):
# VM Api wrappers that logs errors, hides exceptions and other details.
#
- # pylint: disable=R0913,R0914
+ # pylint: disable=R0913,R0914,R0915
def createTestVM(self, sName, iGroup, sHd = None, cMbRam = None, cCpus = 1, fVirtEx = None, fNestedPaging = None, \
sDvdImage = None, sKind = "Other", fIoApic = None, fPae = None, fFastBootLogo = True, \
eNic0Type = None, eNic0AttachType = None, sNic0NetName = 'default', sNic0MacAddr = 'grouped', \
@@ -2039,10 +2039,11 @@ class TestDriver(base.TestDriver):
except:
raise;
except:
+ reporter.logXcpt();
if self.fpApiVer >= 4.0:
try:
if self.fpApiVer >= 4.3:
- oProgress = oVM.deleteConfig(None);
+ oProgress = oVM.deleteConfig([]);
else:
oProgress = oVM.delete(None);
self.waitOnProgress(oProgress);
@@ -2106,7 +2107,7 @@ class TestDriver(base.TestDriver):
if self.fpApiVer >= 4.0:
try:
if self.fpApiVer >= 4.3:
- oProgress = oVM.deleteConfig(None);
+ oProgress = oVM.deleteConfig([]);
else:
oProgress = oVM.delete(None);
self.waitOnProgress(oProgress);
@@ -2122,7 +2123,7 @@ class TestDriver(base.TestDriver):
self.aoVMs.append(oVM);
self.logVmInfo(oVM); # testing...
return oVM;
- # pylint: enable=R0913,R0914
+ # pylint: enable=R0913,R0914,R0915
def addTestMachine(self, sNameOrId, fQuiet = False):
"""
diff --git a/src/VBox/ValidationKit/testdriver/vboxtestvms.py b/src/VBox/ValidationKit/testdriver/vboxtestvms.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testdriver/vboxwrappers.py b/src/VBox/ValidationKit/testdriver/vboxwrappers.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testdriver/winbase.py b/src/VBox/ValidationKit/testdriver/winbase.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/__init__.py b/src/VBox/ValidationKit/testmanager/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/batch/regen_sched_queues.py b/src/VBox/ValidationKit/testmanager/batch/regen_sched_queues.py
new file mode 100755
index 0000000..fff0745
--- /dev/null
+++ b/src/VBox/ValidationKit/testmanager/batch/regen_sched_queues.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# $Id: regen_sched_queues.py $
+# pylint: disable=C0301
+
+"""
+Interface used by the admin to regenerate scheduling queues.
+"""
+
+__copyright__ = \
+"""
+Copyright (C) 2012-2015 Oracle Corporation
+
+This file is part of VirtualBox Open Source Edition (OSE), as
+available from http://www.virtualbox.org. This file is free software;
+you can redistribute it and/or modify it under the terms of the GNU
+General Public License (GPL) as published by the Free Software
+Foundation, in version 2 as it comes in the "COPYING" file of the
+VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+
+The contents of this file may alternatively be used under the terms
+of the Common Development and Distribution License Version 1.0
+(CDDL) only, as it comes in the "COPYING.CDDL" file of the
+VirtualBox OSE distribution, in which case the provisions of the
+CDDL are applicable instead of those of the GPL.
+
+You may elect to license modified versions of this file under the
+terms and conditions of either the GPL or the CDDL or both.
+"""
+__version__ = "$Revision: 101450 $"
+
+# Standard python imports
+import sys;
+import os;
+from optparse import OptionParser;
+
+# Add Test Manager's modules path
+g_ksTestManagerDir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))));
+sys.path.append(g_ksTestManagerDir);
+
+# Test Manager imports
+from testmanager.core.db import TMDatabaseConnection;
+from testmanager.core.schedulerbase import SchedulerBase;
+from testmanager.core.schedgroup import SchedGroupLogic;
+
+class RegenSchedQueues(object): # pylint: disable=R0903
+ """
+ Regenerates all the scheduling queues.
+ """
+
+ def __init__(self):
+ """
+ Parse command line.
+ """
+
+ oParser = OptionParser();
+ oParser.add_option('-q', '--quiet', dest = 'fQuiet', action = 'store_true', default = False,
+ help = 'Quiet execution');
+ oParser.add_option('-u', '--uid', dest = 'uid', action = 'store', type = 'int', default = 1,
+ help = 'User ID to accredit with this job');
+ oParser.add_option('--profile', dest = 'fProfile', action = 'store_true', default = False,
+ help = 'User ID to accredit with this job');
+
+ (self.oConfig, _) = oParser.parse_args();
+
+
+ def doIt(self):
+ """
+ Does the job.
+ """
+ oDb = TMDatabaseConnection();
+
+ aoGroups = SchedGroupLogic(oDb).getAll();
+ iRc = 0;
+ for oGroup in aoGroups:
+ if not self.oConfig.fQuiet:
+ print '%s (ID %#d):' % (oGroup.sName, oGroup.idSchedGroup,);
+ try:
+ (aoErrors, asMessages) = SchedulerBase.recreateQueue(oDb, self.oConfig.uid, oGroup.idSchedGroup, 2);
+ except Exception as oXcpt:
+ oDb.rollback();
+ print ' !!Hit exception processing "%s": %s' % (oGroup.sName, oXcpt,);
+ else:
+ if len(aoErrors) == 0:
+ if not self.oConfig.fQuiet:
+ print ' Successfully regenerated.';
+ else:
+ iRc = 1;
+ print ' %d errors:' % (len(aoErrors,));
+ for oError in aoErrors:
+ if oError[1] is None:
+ print ' !!%s' % (oError[0],);
+ else:
+ print ' !!%s (%s)' % (oError[0], oError[1]);
+ if len(asMessages) > 0 and not self.oConfig.fQuiet:
+ print ' %d messages:' % (len(asMessages),);
+ for sMsg in asMessages:
+ print ' ##%s' % (sMsg,);
+ return iRc;
+
+ @staticmethod
+ def main():
+ """ Main function. """
+ oMain = RegenSchedQueues();
+ if oMain.oConfig.fProfile is not True:
+ iRc = oMain.doIt();
+ else:
+ import cProfile;
+ oProfiler = cProfile.Profile();
+ iRc = oProfiler.runcall(oMain.doIt);
+ oProfiler.print_stats(sort = 'time');
+ oProfiler = None;
+ return iRc;
+
+if __name__ == '__main__':
+ sys.exit(RegenSchedQueues().main());
+
diff --git a/src/VBox/ValidationKit/testmanager/config.py b/src/VBox/ValidationKit/testmanager/config.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/__init__.py b/src/VBox/ValidationKit/testmanager/core/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/base.py b/src/VBox/ValidationKit/testmanager/core/base.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/build.py b/src/VBox/ValidationKit/testmanager/core/build.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/buildblacklist.py b/src/VBox/ValidationKit/testmanager/core/buildblacklist.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/buildsource.py b/src/VBox/ValidationKit/testmanager/core/buildsource.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/coreconsts.py b/src/VBox/ValidationKit/testmanager/core/coreconsts.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/db.py b/src/VBox/ValidationKit/testmanager/core/db.py
old mode 100644
new mode 100755
index 59a828c..52b91ce
--- a/src/VBox/ValidationKit/testmanager/core/db.py
+++ b/src/VBox/ValidationKit/testmanager/core/db.py
@@ -26,7 +26,7 @@ CDDL are applicable instead of those of the GPL.
You may elect to license modified versions of this file under the
terms and conditions of either the GPL or the CDDL or both.
"""
-__version__ = "$Revision: 100880 $"
+__version__ = "$Revision: 101458 $"
# Standard python imports.
@@ -93,6 +93,14 @@ def dbTimestampToZuluDatetime(oValue):
return tsValue;
+def isDbInterval(oValue):
+ """
+ Checks if oValue is a DB interval object.
+ """
+ if isinstance(oValue, datetime.timedelta):
+ return True;
+ return False;
+
class TMDatabaseIntegrityException(Exception):
"""
@@ -119,6 +127,10 @@ class TMDatabaseCursor(object):
""" See TMDatabaseConnection.callProc()"""
return self._oDb.callProcInternal(self._oCursor, sProcedure, aoArgs, utils.getCallerName());
+ def insertList(self, sInsertSql, aoList, fnEntryFmt):
+ """ See TMDatabaseConnection.insertList. """
+ return self._oDb.insertListInternal(self._oCursor, sInsertSql, aoList, fnEntryFmt, utils.getCallerName());
+
def fetchOne(self):
"""Wrapper around Psycopg2.cursor.fetchone."""
return self._oCursor.fetchone();
@@ -383,6 +395,21 @@ class TMDatabaseConnection(object):
return oRc;
+ def insertListInternal(self, oCursor, sInsertSql, aoList, fnEntryFmt, sCallerName):
+ """
+ Optimizes the insertion of a list of values.
+ """
+ oRc = None;
+ asValues = [];
+ for aoEntry in aoList:
+ asValues.append(fnEntryFmt(aoEntry));
+ if len(asValues) > 256:
+ oRc = self.executeInternal(oCursor, sInsertSql + 'VALUES' + ', '.join(asValues), None, sCallerName);
+ asValues = [];
+ if len(asValues) > 0:
+ oRc = self.executeInternal(oCursor, sInsertSql + 'VALUES' + ', '.join(asValues), None, sCallerName);
+ return oRc
+
def _fetchOne(self, oCursor):
"""Wrapper around Psycopg2.cursor.fetchone."""
oRow = oCursor.fetchone()
@@ -425,6 +452,12 @@ class TMDatabaseConnection(object):
"""
return self.callProcInternal(self._oCursor, sProcedure, aoArgs, utils.getCallerName());
+ def insertList(self, sInsertSql, aoList, fnEntryFmt):
+ """
+ Optimizes the insertion of a list of values.
+ """
+ return self.insertListInternal(self._oCursor, sInsertSql, aoList, fnEntryFmt, utils.getCallerName());
+
def fetchOne(self):
"""Wrapper around Psycopg2.cursor.fetchone."""
return self._oCursor.fetchone();
@@ -628,3 +661,13 @@ class TMDatabaseConnection(object):
self._oExplainCursor = self._oExplainConn.cursor();
return True;
+ def debugDisableExplain(self):
+ """ Disables explain. """
+ self._oExplainCursor = None;
+ self._oExplainConn = None
+ return True;
+
+ def debugIsExplainEnabled(self):
+ """ Check if explaining of SQL statements is enabled. """
+ return self._oExplainConn is not None;
+
diff --git a/src/VBox/ValidationKit/testmanager/core/dbobjcache.py b/src/VBox/ValidationKit/testmanager/core/dbobjcache.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/failurecategory.py b/src/VBox/ValidationKit/testmanager/core/failurecategory.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/failurereason.py b/src/VBox/ValidationKit/testmanager/core/failurereason.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/globalresource.py b/src/VBox/ValidationKit/testmanager/core/globalresource.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/report.py b/src/VBox/ValidationKit/testmanager/core/report.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/schedgroup.py b/src/VBox/ValidationKit/testmanager/core/schedgroup.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/schedulerbase.py b/src/VBox/ValidationKit/testmanager/core/schedulerbase.py
old mode 100644
new mode 100755
index 53c1d8c..7fafa48
--- a/src/VBox/ValidationKit/testmanager/core/schedulerbase.py
+++ b/src/VBox/ValidationKit/testmanager/core/schedulerbase.py
@@ -28,7 +28,7 @@ CDDL are applicable instead of those of the GPL.
You may elect to license modified versions of this file under the
terms and conditions of either the GPL or the CDDL or both.
"""
-__version__ = "$Revision: 100880 $"
+__version__ = "$Revision: 101452 $"
# Standard python imports.
@@ -611,8 +611,8 @@ class SchedulerBase(object):
if len(oData.aoArgsVariations) > 0:
aoItems = self._recreateQueueItems(oData);
self.msgDebug('len(aoItems)=%s' % (len(aoItems),));
- for i in range(len(aoItems)):
- self.msgDebug('aoItems[%2d]=%s' % (i, aoItems[i]));
+ #for i in range(len(aoItems)):
+ # self.msgDebug('aoItems[%2d]=%s' % (i, aoItems[i]));
if len(aoItems) > 0:
self._oDb.execute('SELECT offQueue FROM SchedQueues WHERE idSchedGroup = %s ORDER BY idItem LIMIT 1'
, (self._oSchedGrpData.idSchedGroup,));
@@ -632,26 +632,31 @@ class SchedulerBase(object):
#
self._recreateQueueCancelGatherings();
self._oDb.execute('DELETE FROM SchedQueues WHERE idSchedGroup = %s\n', (self._oSchedGrpData.idSchedGroup,));
- for oItem in aoItems:
- self._oDb.execute('INSERT INTO SchedQueues (\n'
+ self._oDb.insertList('INSERT INTO SchedQueues (\n'
' idSchedGroup,\n'
' offQueue,\n'
' idGenTestCaseArgs,\n'
' idTestGroup,\n'
' aidTestGroupPreReqs,\n'
' bmHourlySchedule,\n'
- ' cMissingGangMembers )\n'
- 'VALUES ( %s, %s, %s, %s, %s, %s, %s )\n'
- , ( oItem.idSchedGroup,
- oItem.offQueue,
- oItem.idGenTestCaseArgs,
- oItem.idTestGroup,
- oItem.aidTestGroupPreReqs if len(oItem.aidTestGroupPreReqs) > 0 else None,
- oItem.bmHourlySchedule,
- oItem.cMissingGangMembers
- ));
+ ' cMissingGangMembers )\n',
+ aoItems, self._formatItemForInsert);
return (aoErrors, self._asMessages);
+ def _formatItemForInsert(self, oItem):
+ """
+ Used by recreateQueueWorker together with TMDatabaseConnect::insertList
+ """
+ return self._oDb.formatBindArgs('(%s,%s,%s,%s,%s,%s,%s)'
+ , ( oItem.idSchedGroup,
+ oItem.offQueue,
+ oItem.idGenTestCaseArgs,
+ oItem.idTestGroup,
+ oItem.aidTestGroupPreReqs if len(oItem.aidTestGroupPreReqs) > 0 else None,
+ oItem.bmHourlySchedule,
+ oItem.cMissingGangMembers
+ ));
+
@staticmethod
def recreateQueue(oDb, uidAuthor, idSchedGroup, iVerbosity = 1):
"""
@@ -663,6 +668,12 @@ class SchedulerBase(object):
Raises exception database error.
"""
+
+ aoExtraMsgs = [];
+ if oDb.debugIsExplainEnabled():
+ aoExtraMsgs += ['Warning! Disabling SQL explain to avoid deadlocking against locked tables.'];
+ oDb.debugDisableExplain();
+
aoErrors = [];
asMessages = [];
try:
@@ -695,7 +706,7 @@ class SchedulerBase(object):
oDb.rollback();
raise;
- return (aoErrors, asMessages);
+ return (aoErrors, aoExtraMsgs + asMessages);
diff --git a/src/VBox/ValidationKit/testmanager/core/schedulerbeci.py b/src/VBox/ValidationKit/testmanager/core/schedulerbeci.py
old mode 100644
new mode 100755
index 1da3aaf..93d6624
--- a/src/VBox/ValidationKit/testmanager/core/schedulerbeci.py
+++ b/src/VBox/ValidationKit/testmanager/core/schedulerbeci.py
@@ -26,7 +26,7 @@ CDDL are applicable instead of those of the GPL.
You may elect to license modified versions of this file under the
terms and conditions of either the GPL or the CDDL or both.
"""
-__version__ = "$Revision: 100880 $"
+__version__ = "$Revision: 101453 $"
# Validation Kit imports.
@@ -86,7 +86,7 @@ class SchdulerBeci(SchedulerBase): # pylint: disable=R0903
for oTestGroup in oData.aoTestGroups:
#self.msgDebug('testgroup loop: %s' % (oTestGroup,));
for oTestCase in oTestGroup.aoTestCases:
- self.msgDebug('testcase loop: idTestCase=%s' % (oTestCase.idTestCase,));
+ #self.msgDebug('testcase loop: idTestCase=%s' % (oTestCase.idTestCase,));
if iPrio <= oTestCase.iBeciPrio and len(oTestCase.aoArgsVariations) > 0:
# Get variation.
iNext = oTestCase.iNextVariation;
diff --git a/src/VBox/ValidationKit/testmanager/core/systemlog.py b/src/VBox/ValidationKit/testmanager/core/systemlog.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/testbox.py b/src/VBox/ValidationKit/testmanager/core/testbox.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/testboxcontroller.py b/src/VBox/ValidationKit/testmanager/core/testboxcontroller.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/testboxstatus.py b/src/VBox/ValidationKit/testmanager/core/testboxstatus.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/testcase.py b/src/VBox/ValidationKit/testmanager/core/testcase.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/testcaseargs.py b/src/VBox/ValidationKit/testmanager/core/testcaseargs.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/testgroup.py b/src/VBox/ValidationKit/testmanager/core/testgroup.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/testresults.py b/src/VBox/ValidationKit/testmanager/core/testresults.py
old mode 100644
new mode 100755
index 5a6cc41..9a4a35d
--- a/src/VBox/ValidationKit/testmanager/core/testresults.py
+++ b/src/VBox/ValidationKit/testmanager/core/testresults.py
@@ -29,7 +29,7 @@ CDDL are applicable instead of those of the GPL.
You may elect to license modified versions of this file under the
terms and conditions of either the GPL or the CDDL or both.
"""
-__version__ = "$Revision: 101413 $"
+__version__ = "$Revision: 101460 $"
# Standard python imports.
import unittest;
@@ -512,25 +512,173 @@ class TestResultLogic(ModelLogicBase): # pylint: disable=R0903
# Result grinding for displaying in the WUI.
#
- ksResultsGroupingTypeNone = 'ResultsGroupingTypeNone'
- ksResultsGroupingTypeTestGroup = 'ResultsGroupingTypeTestGroup'
- ksResultsGroupingTypeBuildRev = 'ResultsGroupingTypeBuild'
- ksResultsGroupingTypeTestBox = 'ResultsGroupingTypeTestBox'
- ksResultsGroupingTypeTestCase = 'ResultsGroupingTypeTestCase'
- ksResultsGroupingTypeSchedGroup = 'ResultsGroupingTypeSchedGroup'
+ ksResultsGroupingTypeNone = 'ResultsGroupingTypeNone';
+ ksResultsGroupingTypeTestGroup = 'ResultsGroupingTypeTestGroup';
+ ksResultsGroupingTypeBuildRev = 'ResultsGroupingTypeBuild';
+ ksResultsGroupingTypeTestBox = 'ResultsGroupingTypeTestBox';
+ ksResultsGroupingTypeTestCase = 'ResultsGroupingTypeTestCase';
+ ksResultsGroupingTypeSchedGroup = 'ResultsGroupingTypeSchedGroup';
+
+ #kdResultGroupingMapOld = {
+ # ksResultsGroupingTypeNone: ('TestSets', None, None),
+ # ksResultsGroupingTypeTestGroup: ('TestSets', 'TestSets.idTestGroup', None),
+ # ksResultsGroupingTypeTestBox: ('TestSets', 'TestSets.idTestBox', None),
+ # ksResultsGroupingTypeTestCase: ('TestSets', 'TestSets.idTestCase', None),
+ # ksResultsGroupingTypeBuildRev: ('TestSets, Builds', 'Builds.iRevision',
+ # ' AND Builds.idBuild = TestSets.idBuild'
+ # ' AND Builds.tsExpire > TestSets.tsCreated'
+ # ' AND Builds.tsEffective <= TestSets.tsCreated' ),
+ # ksResultsGroupingTypeSchedGroup: ('TestSets, TestBoxes', 'TestBoxes.idSchedGroup',
+ # ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox'),
+ #};
+
+ ## @name Result sorting options.
+ ## @{
+ ksResultsSortByRunningAndStart = 'ResultsSortByRunningAndStart'; ##< Default
+ ksResultsSortByBuildRevision = 'ResultsSortByBuildRevision';
+ ksResultsSortByTestBoxName = 'ResultsSortByTestBoxName';
+ ksResultsSortByTestBoxOs = 'ResultsSortByTestBoxOs';
+ ksResultsSortByTestBoxOsVersion = 'ResultsSortByTestBoxOsVersion';
+ ksResultsSortByTestBoxOsArch = 'ResultsSortByTestBoxOsArch';
+ ksResultsSortByTestBoxArch = 'ResultsSortByTestBoxArch';
+ ksResultsSortByTestBoxCpuVendor = 'ResultsSortByTestBoxCpuVendor';
+ ksResultsSortByTestBoxCpuName = 'ResultsSortByTestBoxCpuName';
+ ksResultsSortByTestBoxCpuRev = 'ResultsSortByTestBoxCpuRev';
+ ksResultsSortByTestBoxCpuFeatures = 'ResultsSortByTestBoxCpuFeatures';
+ ksResultsSortByTestCaseName = 'ResultsSortByTestCaseName';
+ kasResultsSortBy = {
+ ksResultsSortByRunningAndStart,
+ ksResultsSortByBuildRevision,
+ ksResultsSortByTestBoxName,
+ ksResultsSortByTestBoxOs,
+ ksResultsSortByTestBoxOsVersion,
+ ksResultsSortByTestBoxOsArch,
+ ksResultsSortByTestBoxArch,
+ ksResultsSortByTestBoxCpuVendor,
+ ksResultsSortByTestBoxCpuName,
+ ksResultsSortByTestBoxCpuRev,
+ ksResultsSortByTestBoxCpuFeatures,
+ ksResultsSortByTestCaseName,
+ };
+ ## Used by the WUI for generating the drop down.
+ kaasResultsSortByTitles = (
+ ( ksResultsSortByRunningAndStart, 'Running & Start TS' ),
+ ( ksResultsSortByBuildRevision, 'Build Revision' ),
+ ( ksResultsSortByTestBoxName, 'TestBox Name' ),
+ ( ksResultsSortByTestBoxOs, 'O/S' ),
+ ( ksResultsSortByTestBoxOsVersion, 'O/S Version' ),
+ ( ksResultsSortByTestBoxOsArch, 'O/S & Architecture' ),
+ ( ksResultsSortByTestBoxArch, 'Architecture' ),
+ ( ksResultsSortByTestBoxCpuVendor, 'CPU Vendor' ),
+ ( ksResultsSortByTestBoxCpuName, 'CPU Vendor & Name' ),
+ ( ksResultsSortByTestBoxCpuRev, 'CPU Vendor & Revision' ),
+ ( ksResultsSortByTestBoxCpuFeatures, 'CPU Features' ),
+ ( ksResultsSortByTestCaseName, 'Test Case Name' ),
+ );
+ ## @}
+
+ ## Default sort by map.
+ kdResultSortByMap = {
+ ksResultsSortByRunningAndStart: ('', None, None, ''),
+ ksResultsSortByBuildRevision: (
+ # Sorting tables.
+ ', Builds',
+ # Sorting table join(s).
+ ' AND TestSets.idBuild = Builds.idBuild'
+ ' AND Builds.tsExpire >= TestSets.tsCreated'
+ ' AND Builds.tsEffective <= TestSets.tsCreated',
+ # Start of ORDER BY statement.
+ ' Builds.iRevision DESC',
+ # Extra columns to fetch for the above ORDER BY to work in a SELECT DISTINCT statement.
+ '' ),
+ ksResultsSortByTestBoxName: (
+ ', TestBoxes',
+ ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
+ ' TestBoxes.sName DESC',
+ '' ),
+ ksResultsSortByTestBoxOsArch: (
+ ', TestBoxes',
+ ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
+ ' TestBoxes.sOs, TestBoxes.sCpuArch',
+ '' ),
+ ksResultsSortByTestBoxOs: (
+ ', TestBoxes',
+ ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
+ ' TestBoxes.sOs',
+ '' ),
+ ksResultsSortByTestBoxOsVersion: (
+ ', TestBoxes',
+ ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
+ ' TestBoxes.sOs, TestBoxes.sOsVersion DESC',
+ '' ),
+ ksResultsSortByTestBoxArch: (
+ ', TestBoxes',
+ ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
+ ' TestBoxes.sCpuArch',
+ '' ),
+ ksResultsSortByTestBoxCpuVendor: (
+ ', TestBoxes',
+ ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
+ ' TestBoxes.sCpuVendor',
+ '' ),
+ ksResultsSortByTestBoxCpuName: (
+ ', TestBoxes',
+ ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
+ ' TestBoxes.sCpuVendor, TestBoxes.sCpuName',
+ '' ),
+ ksResultsSortByTestBoxCpuRev: (
+ ', TestBoxes',
+ ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
+ ' TestBoxes.sCpuVendor, TestBoxes.lCpuRevision DESC',
+ ', TestBoxes.lCpuRevision' ),
+ ksResultsSortByTestBoxCpuFeatures: (
+ ', TestBoxes',
+ ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
+ ' TestBoxes.fCpuHwVirt DESC, TestBoxes.fCpuNestedPaging DESC, TestBoxes.fCpu64BitGuest DESC, TestBoxes.cCpus DESC',
+ ', TestBoxes.cCpus' ),
+ ksResultsSortByTestCaseName: (
+ ', TestCases',
+ ' AND TestSets.idGenTestCase = TestCases.idGenTestCase',
+ ' TestCases.sName',
+ '' ),
+ };
kdResultGroupingMap = {
- ksResultsGroupingTypeNone: ('TestSets', None, None),
- ksResultsGroupingTypeTestGroup: ('TestSets', 'TestSets.idTestGroup', None),
- ksResultsGroupingTypeTestBox: ('TestSets', 'TestSets.idTestBox', None),
- ksResultsGroupingTypeTestCase: ('TestSets', 'TestSets.idTestCase', None),
- ksResultsGroupingTypeBuildRev: ('TestSets, Builds', 'Builds.iRevision',
- ' AND Builds.idBuild = TestSets.idBuild'
- ' AND Builds.tsExpire > TestSets.tsCreated'
- ' AND Builds.tsEffective <= TestSets.tsCreated' ),
- ksResultsGroupingTypeSchedGroup: ('TestSets, TestBoxes', 'TestBoxes.idSchedGroup',
- ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox'),
- }
+ ksResultsGroupingTypeNone: (
+ # Grouping tables; # Grouping field; # Grouping where addition. # Sort by overrides.
+ 'TestSets', None, None, {}
+ ),
+ ksResultsGroupingTypeTestGroup: ('TestSets', 'TestSets.idTestGroup', None, {}),
+ ksResultsGroupingTypeTestBox: ('TestSets', 'TestSets.idTestBox', None, {}),
+ ksResultsGroupingTypeTestCase: ('TestSets', 'TestSets.idTestCase', None, {}),
+ ksResultsGroupingTypeBuildRev: (
+ 'TestSets, Builds',
+ 'Builds.iRevision',
+ ' AND Builds.idBuild = TestSets.idBuild'
+ ' AND Builds.tsExpire > TestSets.tsCreated'
+ ' AND Builds.tsEffective <= TestSets.tsCreated',
+ { ksResultsSortByBuildRevision: ( '', None, ' Builds.iRevision DESC' ), }
+ ),
+ ksResultsGroupingTypeSchedGroup: (
+ 'TestSets, TestBoxes',
+ 'TestBoxes.idSchedGroup',
+ ' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox',
+ { ksResultsSortByTestBoxName: ( '', None, ' TestBoxes.sName DESC', '' ),
+ ksResultsSortByTestBoxOsArch: ( '', None, ' TestBoxes.sOs, TestBoxes.sCpuArch', '' ),
+ ksResultsSortByTestBoxOs: ( '', None, ' TestBoxes.sOs', '' ),
+ ksResultsSortByTestBoxOsVersion: ( '', None, ' TestBoxes.sOs, TestBoxes.sOsVersion DESC', '' ),
+ ksResultsSortByTestBoxArch: ( '', None, ' TestBoxes.sCpuArch', '' ),
+ ksResultsSortByTestBoxCpuVendor: ( '', None, ' TestBoxes.sCpuVendor', '' ),
+ ksResultsSortByTestBoxCpuName: ( '', None, ' TestBoxes.sCpuVendor, TestBoxes.sCpuName', '' ),
+ ksResultsSortByTestBoxCpuRev: (
+ '', None, ' TestBoxes.sCpuVendor, TestBoxes.lCpuRevision DESC', ', TestBoxes.lCpuRevision' ),
+ ksResultsSortByTestBoxCpuFeatures: (
+ ' TestBoxes.fCpuHwVirt DESC, TestBoxes.fCpuNestedPaging DESC, TestBoxes.fCpu64BitGuest DESC, '
+ + 'TestBoxes.cCpus DESC',
+ ', TestBoxes.cCpus' ), }
+ ),
+ };
+
def _getTimePeriodQueryPart(self, tsNow, sInterval):
"""
@@ -554,8 +702,8 @@ class TestResultLogic(ModelLogicBase): # pylint: disable=R0903
sTsNow, sInterval );
return sRet
- def fetchResultsForListing(self, iStart, cMaxRows, tsNow, sInterval, enmResultsGroupingType, iResultsGroupingValue,
- fOnlyFailures):
+ def fetchResultsForListing(self, iStart, cMaxRows, tsNow, sInterval, enmResultSortBy,
+ enmResultsGroupingType, iResultsGroupingValue, fOnlyFailures):
"""
Fetches TestResults table content.
@@ -573,11 +721,15 @@ class TestResultLogic(ModelLogicBase): # pylint: disable=R0903
#
# Get SQL query parameters
#
- if enmResultsGroupingType is None:
- raise TMExceptionBase('Unknown grouping type')
- if enmResultsGroupingType not in self.kdResultGroupingMap:
- raise TMExceptionBase('Unknown grouping type')
- sTables, sGroupingField, sGroupingCondition = self.kdResultGroupingMap[enmResultsGroupingType]
+ if enmResultsGroupingType is None or enmResultsGroupingType not in self.kdResultGroupingMap:
+ raise TMExceptionBase('Unknown grouping type');
+ if enmResultSortBy is None or enmResultSortBy not in self.kasResultsSortBy:
+ raise TMExceptionBase('Unknown sorting');
+ sGroupingTables, sGroupingField, sGroupingCondition, dSortingOverrides = self.kdResultGroupingMap[enmResultsGroupingType];
+ if enmResultSortBy in dSortingOverrides:
+ sSortingTables, sSortingWhere, sSortingOrderBy, sSortingColumns = dSortingOverrides[enmResultSortBy];
+ else:
+ sSortingTables, sSortingWhere, sSortingOrderBy, sSortingColumns = self.kdResultSortByMap[enmResultSortBy];
#
# Construct the query.
@@ -612,7 +764,7 @@ class TestResultLogic(ModelLogicBase): # pylint: disable=R0903
' TestCaseArgs.sArgs,\n' \
' TestSuiteBits.idBuild AS idBuildTestSuite,\n' \
' TestSuiteBits.iRevision AS iRevisionTestSuite,\n' \
- ' (TestSets.tsDone IS NULL) SortRunningFirst\n' \
+ ' (TestSets.tsDone IS NULL) SortRunningFirst' + sSortingColumns + '\n' \
'FROM BuildCategories,\n' \
' Builds,\n' \
' TestBoxes,\n' \
@@ -628,7 +780,7 @@ class TestResultLogic(ModelLogicBase): # pylint: disable=R0903
' TestSets.idGenTestBox AS idGenTestBox,\n' \
' TestSets.idGenTestCase AS idGenTestCase,\n' \
' TestSets.idGenTestCaseArgs AS idGenTestCaseArgs\n' \
- ' FROM ' + sTables + '\n' \
+ ' FROM ' + sGroupingTables + sSortingTables + '\n' \
' WHERE ' + self._getTimePeriodQueryPart(tsNow, sInterval);
if fOnlyFailures:
sQuery += ' AND TestSets.enmStatus != \'success\'::TestStatus_T' \
@@ -637,7 +789,12 @@ class TestResultLogic(ModelLogicBase): # pylint: disable=R0903
sQuery += ' AND %s = %d\n' % (sGroupingField, iResultsGroupingValue,);
if sGroupingCondition is not None:
sQuery += sGroupingCondition.replace(' AND ', ' AND ');
- sQuery += ' ORDER BY (TestSets.tsDone IS NULL) DESC, TestSets.idTestSet DESC\n' \
+ if sSortingWhere is not None:
+ sQuery += sSortingWhere.replace(' AND ', ' AND ');
+ sQuery += ' ORDER BY ';
+ if sSortingOrderBy is not None:
+ sQuery += sSortingOrderBy + ',\n ';
+ sQuery += '(TestSets.tsDone IS NULL) DESC, TestSets.idTestSet DESC\n' \
' LIMIT %s OFFSET %s\n' % (cMaxRows, iStart,);
sQuery += ' ) AS TestSets\n' \
@@ -652,7 +809,10 @@ class TestResultLogic(ModelLogicBase): # pylint: disable=R0903
' AND TestSets.idGenTestBox = TestBoxes.idGenTestBox\n' \
' AND TestSets.idGenTestCase = TestCases.idGenTestCase\n' \
' AND TestSets.idGenTestCaseArgs = TestCaseArgs.idGenTestCaseArgs\n' \
- 'ORDER BY (TestSets.tsDone IS NULL) DESC, TestSets.idTestSet DESC\n'
+ 'ORDER BY ';
+ if sSortingOrderBy is not None:
+ sQuery += sSortingOrderBy + ',\n ';
+ sQuery += '(TestSets.tsDone IS NULL) DESC, TestSets.idTestSet DESC\n';
#
# Execute the query and return the wrapped results.
@@ -685,13 +845,13 @@ class TestResultLogic(ModelLogicBase): # pylint: disable=R0903
if enmResultsGroupingType not in self.kdResultGroupingMap:
raise TMExceptionBase('Unknown grouping type')
- sTables, sGroupingField, sGroupingCondition = self.kdResultGroupingMap[enmResultsGroupingType]
+ sGroupingTables, sGroupingField, sGroupingCondition, _ = self.kdResultGroupingMap[enmResultsGroupingType];
#
# Construct the query.
#
sQuery = 'SELECT COUNT(idTestSet)\n' \
- 'FROM ' + sTables + '\n' \
+ 'FROM ' + sGroupingTables + '\n' \
'WHERE ' + self._getTimePeriodQueryPart(tsNow, sInterval);
if fOnlyFailures:
sQuery += ' AND TestSets.enmStatus != \'success\'::TestStatus_T' \
diff --git a/src/VBox/ValidationKit/testmanager/core/testset.py b/src/VBox/ValidationKit/testmanager/core/testset.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/useraccount.py b/src/VBox/ValidationKit/testmanager/core/useraccount.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/vcsrevisions.py b/src/VBox/ValidationKit/testmanager/core/vcsrevisions.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/webservergluebase.py b/src/VBox/ValidationKit/testmanager/core/webservergluebase.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/core/webservergluecgi.py b/src/VBox/ValidationKit/testmanager/core/webservergluecgi.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseInit.pgsql b/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseInit.pgsql
index aa22a08..fa33eeb 100644
--- a/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseInit.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseInit.pgsql
@@ -127,7 +127,7 @@ CREATE TABLE Users (
PRIMARY KEY (uid, tsExpire)
);
-CREATE INDEX UsersLoginNameIdx ON Users (tsExpire, sLoginName);
+CREATE INDEX UsersLoginNameIdx ON Users (sLoginName, tsExpire DESC);
--- @table GlobalResources
@@ -409,7 +409,7 @@ CREATE TABLE TestCaseArgs (
-- reconfigured with more/less permutations.
PRIMARY KEY (idTestCase, tsExpire, sArgs)
);
-CREATE INDEX TestCaseArgsLookupIdx ON TestCaseArgs (idTestCase, tsExpire, tsEffective);
+CREATE INDEX TestCaseArgsLookupIdx ON TestCaseArgs (idTestCase, tsExpire DESC, tsEffective ASC);
--- @table TestCaseDeps
@@ -514,7 +514,7 @@ CREATE TABLE TestGroups (
PRIMARY KEY (idTestGroup, tsExpire)
);
-CREATE INDEX TestGroups_id_index ON TestGroups (idTestGroup, tsExpire, tsEffective);
+CREATE INDEX TestGroups_id_index ON TestGroups (idTestGroup, tsExpire DESC, tsEffective ASC);
--- @table TestGroupMembers
@@ -833,7 +833,8 @@ CREATE TABLE TestBoxes (
--- Nested paging requires hardware virtualization.
CHECK (fCpuNestedPaging IS NULL OR (fCpuNestedPaging <> TRUE OR fCpuHwVirt = TRUE))
);
-CREATE UNIQUE INDEX TestBoxesUuidIdx ON TestBoxes (uuidSystem, tsExpire);
+CREATE UNIQUE INDEX TestBoxesUuidIdx ON TestBoxes (uuidSystem, tsExpire DESC);
+CREATE INDEX TestBoxesExpireEffectiveIdx ON TestBoxes (tsExpire DESC, tsEffective ASC);
@@ -1045,6 +1046,8 @@ CREATE TABLE BuildBlacklist (
PRIMARY KEY (idBlacklisting, tsExpire)
);
+CREATE INDEX BuildBlacklistIdx ON BuildBlacklist (iLastRevision DESC, iFirstRevision ASC, sProduct, sBranch,
+ tsExpire DESC, tsEffective ASC);
--- @table BuildCategories
-- Build categories.
@@ -1310,8 +1313,9 @@ CREATE TABLE TestResults (
CREATE INDEX TestResultsSetIdx ON TestResults (idTestSet, idStrName, idTestResult);
CREATE INDEX TestResultsParentIdx ON TestResults (idTestResultParent);
--- The TestResultsNameIdx is for speeding up the result graph & reporting code.
-CREATE INDEX TestResultsNameIdx ON TestResults (idStrName, idTestResult, tsCreated);
+-- The TestResultsNameIdx and TestResultsNameIdx2 are for speeding up the result graph & reporting code.
+CREATE INDEX TestResultsNameIdx ON TestResults (idStrName, tsCreated DESC);
+CREATE INDEX TestResultsNameIdx2 ON TestResults (idTestResult, idStrName);
ALTER TABLE TestResultFailures
ADD CONSTRAINT idTestResultFk FOREIGN KEY (idTestResult) REFERENCES TestResults(idTestResult) MATCH FULL;
@@ -1545,10 +1549,10 @@ CREATE INDEX TestSetsBoxIdx ON TestSets (idTestBox, idTestResult);
CREATE INDEX TestSetsBuildIdx ON TestSets (idBuild, idTestResult);
CREATE INDEX TestSetsTestCaseIdx ON TestSets (idTestCase, idTestResult);
CREATE INDEX TestSetsTestVarIdx ON TestSets (idTestCaseArgs, idTestResult);
---- The TestSetCreatedDone is for testbox results, graph options and such.
-CREATE INDEX TestSetsCreatedDoneIdx ON TestSets (tsCreated, tsDone);
+--- The TestSetsDoneCreatedBuildCatIdx is for testbox results, graph options and such.
+CREATE INDEX TestSetsDoneCreatedBuildCatIdx ON TestSets (tsDone DESC NULLS FIRST, tsCreated ASC, idBuildCategory);
--- For graphs.
-CREATE INDEX TestSetsGraphBoxIdx ON TestSets (idTestBox, tsCreated, tsDone, idBuildCategory, idTestCase);
+CREATE INDEX TestSetsGraphBoxIdx ON TestSets (idTestBox, tsCreated DESC, tsDone ASC NULLS LAST, idBuildCategory, idTestCase);
ALTER TABLE TestResults ADD FOREIGN KEY (idTestSet) REFERENCES TestSets(idTestSet) MATCH FULL;
ALTER TABLE TestResultValues ADD FOREIGN KEY (idTestSet) REFERENCES TestSets(idTestSet) MATCH FULL;
@@ -1755,4 +1759,6 @@ CREATE TABLE SchedQueues (
PRIMARY KEY (idSchedGroup, idItem)
);
+CREATE INDEX SchedQueuesItemIdx ON SchedQueues(idItem);
+CREATE INDEX SchedQueuesSchedGroupIdx ON SchedQueues(idSchedGroup);
diff --git a/src/VBox/ValidationKit/testmanager/db/tmdb-r15-index-sorting.pgsql b/src/VBox/ValidationKit/testmanager/db/tmdb-r15-index-sorting.pgsql
new file mode 100644
index 0000000..2d04e89
--- /dev/null
+++ b/src/VBox/ValidationKit/testmanager/db/tmdb-r15-index-sorting.pgsql
@@ -0,0 +1,98 @@
+-- $Id: tmdb-r15-index-sorting.pgsql $
+--- @file
+-- VBox Test Manager Database - Index tuning effort.
+--
+
+--
+-- Copyright (C) 2015 Oracle Corporation
+--
+-- This file is part of VirtualBox Open Source Edition (OSE), as
+-- available from http://www.virtualbox.org. This file is free software;
+-- you can redistribute it and/or modify it under the terms of the GNU
+-- General Public License (GPL) as published by the Free Software
+-- Foundation, in version 2 as it comes in the "COPYING" file of the
+-- VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+-- hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+--
+-- The contents of this file may alternatively be used under the terms
+-- of the Common Development and Distribution License Version 1.0
+-- (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+-- VirtualBox OSE distribution, in which case the provisions of the
+-- CDDL are applicable instead of those of the GPL.
+--
+-- You may elect to license modified versions of this file under the
+-- terms and conditions of either the GPL or the CDDL or both.
+--
+
+
+--
+-- Reordered, modified and new indexes.
+--
+\d UsersLoginNameIdx;
+DROP INDEX UsersLoginNameIdx;
+CREATE INDEX UsersLoginNameIdx ON Users (sLoginName, tsExpire DESC);
+\d UsersLoginNameIdx;
+ANALYZE VERBOSE Users;
+
+
+\d TestCaseArgsLookupIdx;
+DROP INDEX TestCaseArgsLookupIdx;
+CREATE INDEX TestCaseArgsLookupIdx ON TestCaseArgs (idTestCase, tsExpire DESC, tsEffective ASC);
+\d TestCaseArgsLookupIdx;
+ANALYZE VERBOSE TestCaseArgs;
+
+
+\d TestGroups_id_index;
+DROP INDEX TestGroups_id_index;
+CREATE INDEX TestGroups_id_index ON TestGroups (idTestGroup, tsExpire DESC, tsEffective ASC);
+\d TestGroups_id_index;
+ANALYZE VERBOSE TestGroups;
+
+
+\d TestBoxesUuidIdx;
+DROP INDEX TestBoxesUuidIdx;
+CREATE UNIQUE INDEX TestBoxesUuidIdx ON TestBoxes (uuidSystem, tsExpire DESC);
+\d TestBoxesUuidIdx;
+DROP INDEX IF EXISTS TestBoxesExpireEffectiveIdx;
+CREATE INDEX TestBoxesExpireEffectiveIdx ON TestBoxes (tsExpire DESC, tsEffective ASC);
+\d TestBoxesExpireEffectiveIdx;
+ANALYZE VERBOSE TestBoxes;
+
+
+DROP INDEX IF EXISTS BuildBlacklistIdx;
+CREATE INDEX BuildBlacklistIdx ON BuildBlacklist (iLastRevision DESC, iFirstRevision ASC, sProduct, sBranch,
+ tsExpire DESC, tsEffective ASC);
+\d BuildBlacklist;
+ANALYZE VERBOSE BuildBlacklist;
+
+
+\d TestResultsNameIdx;
+DROP INDEX TestResultsNameIdx;
+CREATE INDEX TestResultsNameIdx ON TestResults (idStrName, tsCreated DESC);
+\d TestResultsNameIdx;
+DROP INDEX IF EXISTS TestResultsNameIdx2;
+CREATE INDEX TestResultsNameIdx2 ON TestResults (idTestResult, idStrName);
+\d TestResultsNameIdx2;
+ANALYZE VERBOSE TestResults;
+
+
+\d TestSetsCreatedDoneIdx;
+DROP INDEX TestSetsCreatedDoneIdx;
+DROP INDEX IF EXISTS TestSetsDoneCreatedBuildCatIdx;
+CREATE INDEX TestSetsDoneCreatedBuildCatIdx ON TestSets (tsDone DESC NULLS FIRST, tsCreated ASC, idBuildCategory);
+\d TestSetsDoneCreatedBuildCatIdx;
+\d TestSetsGraphBoxIdx;
+DROP INDEX TestSetsGraphBoxIdx;
+CREATE INDEX TestSetsGraphBoxIdx ON TestSets (idTestBox, tsCreated DESC, tsDone ASC NULLS LAST, idBuildCategory, idTestCase);
+\d TestSetsGraphBoxIdx;
+ANALYZE VERBOSE TestSets;
+
+
+DROP INDEX IF EXISTS SchedQueuesItemIdx;
+CREATE INDEX SchedQueuesItemIdx ON SchedQueues(idItem);
+\d SchedQueuesItemIdx;
+DROP INDEX IF EXISTS SchedQueuesSchedGroupIdx;
+CREATE INDEX SchedQueuesSchedGroupIdx ON SchedQueues(idSchedGroup);
+\d SchedQueuesSchedGroupIdx;
+ANALYZE VERBOSE SchedQueues;
+
diff --git a/src/VBox/ValidationKit/testmanager/debug/__init__.py b/src/VBox/ValidationKit/testmanager/debug/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/__init__.py b/src/VBox/ValidationKit/testmanager/webui/__init__.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadmin.py b/src/VBox/ValidationKit/testmanager/webui/wuiadmin.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadminbuild.py b/src/VBox/ValidationKit/testmanager/webui/wuiadminbuild.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadminbuildblacklist.py b/src/VBox/ValidationKit/testmanager/webui/wuiadminbuildblacklist.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadminbuildcategory.py b/src/VBox/ValidationKit/testmanager/webui/wuiadminbuildcategory.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadminbuildsource.py b/src/VBox/ValidationKit/testmanager/webui/wuiadminbuildsource.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadminfailurereason.py b/src/VBox/ValidationKit/testmanager/webui/wuiadminfailurereason.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadminglobalrsrc.py b/src/VBox/ValidationKit/testmanager/webui/wuiadminglobalrsrc.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadminschedgroup.py b/src/VBox/ValidationKit/testmanager/webui/wuiadminschedgroup.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadminsystemlog.py b/src/VBox/ValidationKit/testmanager/webui/wuiadminsystemlog.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadmintestbox.py b/src/VBox/ValidationKit/testmanager/webui/wuiadmintestbox.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadmintestcase.py b/src/VBox/ValidationKit/testmanager/webui/wuiadmintestcase.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadmintestgroup.py b/src/VBox/ValidationKit/testmanager/webui/wuiadmintestgroup.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuiadminuseraccount.py b/src/VBox/ValidationKit/testmanager/webui/wuiadminuseraccount.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuibase.py b/src/VBox/ValidationKit/testmanager/webui/wuibase.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuicontentbase.py b/src/VBox/ValidationKit/testmanager/webui/wuicontentbase.py
old mode 100644
new mode 100755
index c59e38e..0f37615
--- a/src/VBox/ValidationKit/testmanager/webui/wuicontentbase.py
+++ b/src/VBox/ValidationKit/testmanager/webui/wuicontentbase.py
@@ -26,7 +26,7 @@ CDDL are applicable instead of those of the GPL.
You may elect to license modified versions of this file under the
terms and conditions of either the GPL or the CDDL or both.
"""
-__version__ = "$Revision: 100880 $"
+__version__ = "$Revision: 101457 $"
# Standard python imports.
@@ -213,6 +213,32 @@ class WuiContentBase(object): # pylint: disable=R0903
sTs = oTsZulu.strftime('%Y-%m-%d %H:%M:%SZ');
return unicode(sTs).replace('-', u'\u2011').replace(' ', u'\u00a0');
+ def formatIntervalShort(self, oInterval):
+ """
+ Formats an interval (db rep) into a short form.
+ """
+ # default formatting for negative intervals.
+ if oInterval.days < 0:
+ return str(oInterval);
+
+ # Figure the hour, min and sec counts.
+ cHours = oInterval.seconds / 3600;
+ cMinutes = (oInterval.seconds % 3600) / 60;
+ cSeconds = oInterval.seconds - cHours * 3600 - cMinutes * 60;
+
+ # Tailor formatting to the interval length.
+ if oInterval.days > 0:
+ if oInterval.days > 1:
+ return '%d days, %d:%02d:%02d' % (oInterval.days, cHours, cMinutes, cSeconds);
+ return '1 day, %d:%02d:%02d' % (cHours, cMinutes, cSeconds);
+ if cMinutes > 0 or cSeconds >= 30 or cHours > 0:
+ return '%d:%02d:%02d' % (cHours, cMinutes, cSeconds);
+ if cSeconds >= 10:
+ return '%d.%ds' % (cSeconds, oInterval.microseconds / 100000);
+ if cSeconds > 0:
+ return '%d.%02ds' % (cSeconds, oInterval.microseconds / 10000);
+ return '%d ms' % (oInterval.microseconds / 1000,);
+
@staticmethod
def genericPageWalker(iCurItem, cItems, sHrefFmt, cWidth = 11, iBase = 1, sItemName = 'page'):
"""
@@ -622,6 +648,8 @@ class WuiListContentBase(WuiContentBase):
sRow += ' ';
elif db.isDbTimestamp(aoValues[i]):
sRow += webutils.escapeElem(self.formatTsShort(aoValues[i]));
+ elif db.isDbInterval(aoValues[i]):
+ sRow += webutils.escapeElem(self.formatIntervalShort(aoValues[i]));
elif aoValues[i] is not None:
sRow += webutils.escapeElem(unicode(aoValues[i]));
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuifailurecategory.py b/src/VBox/ValidationKit/testmanager/webui/wuifailurecategory.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuigraphwiz.py b/src/VBox/ValidationKit/testmanager/webui/wuigraphwiz.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuihlpform.py b/src/VBox/ValidationKit/testmanager/webui/wuihlpform.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuihlpgraphgooglechart.py b/src/VBox/ValidationKit/testmanager/webui/wuihlpgraphgooglechart.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuihlpgraphmatplotlib.py b/src/VBox/ValidationKit/testmanager/webui/wuihlpgraphmatplotlib.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuihlpgraphsimple.py b/src/VBox/ValidationKit/testmanager/webui/wuihlpgraphsimple.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuilogviewer.py b/src/VBox/ValidationKit/testmanager/webui/wuilogviewer.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuimain.py b/src/VBox/ValidationKit/testmanager/webui/wuimain.py
old mode 100644
new mode 100755
index 26af471..8a95c81
--- a/src/VBox/ValidationKit/testmanager/webui/wuimain.py
+++ b/src/VBox/ValidationKit/testmanager/webui/wuimain.py
@@ -26,7 +26,7 @@ CDDL are applicable instead of those of the GPL.
You may elect to license modified versions of this file under the
terms and conditions of either the GPL or the CDDL or both.
"""
-__version__ = "$Revision: 101414 $"
+__version__ = "$Revision: 101459 $"
# Standard Python imports.
@@ -141,14 +141,18 @@ class WuiMain(WuiDispatcherBase):
ksParamVcsHistoryEntries = 'cEntries';
## @}
- ## Effective time period. one of the first column values in kaoResultPeriods.
- ksParamEffectivePeriod = 'sEffectivePeriod'
-
+ ## @name Test result listing parameters.
+ ## @{
## If this param is specified, then show only results for this member when results grouped by some parameter.
ksParamGroupMemberId = 'GroupMemberId'
-
## Optional parameter for indicating whether to restrict the listing to failures only.
ksParamOnlyFailures = 'OnlyFailures'
+ ## Result listing sorting.
+ ksParamTestResultsSortBy = 'enmSortBy'
+ ## @}
+
+ ## Effective time period. one of the first column values in kaoResultPeriods.
+ ksParamEffectivePeriod = 'sEffectivePeriod'
## Test result period values.
kaoResultPeriods = [
@@ -295,6 +299,34 @@ class WuiMain(WuiDispatcherBase):
# Navigation bar stuff
#
+ def _generateSortBySelector(self, dParams, sPreamble, sPostamble):
+ """
+ Generate HTML code for the sort by selector.
+ """
+ if self.ksParamTestResultsSortBy in dParams:
+ enmResultSortBy = dParams[self.ksParamTestResultsSortBy];
+ del dParams[self.ksParamTestResultsSortBy];
+ else:
+ enmResultSortBy = TestResultLogic.ksResultsSortByRunningAndStart;
+
+ sHtmlSortBy = '<form name="TimeForm" method="GET"> Sort by\n';
+ sHtmlSortBy += sPreamble;
+ sHtmlSortBy += '\n <select name="%s" onchange="window.location=' % (self.ksParamTestResultsSortBy,);
+ sHtmlSortBy += '\'?%s&%s=\' + ' % (webutils.encodeUrlParams(dParams), self.ksParamTestResultsSortBy)
+ sHtmlSortBy += 'this.options[this.selectedIndex].value;" title="Sorting by">\n'
+
+ fSelected = False;
+ for enmCode, sTitle in TestResultLogic.kaasResultsSortByTitles:
+ if enmCode == enmResultSortBy:
+ fSelected = True;
+ sHtmlSortBy += ' <option value="%s"%s>%s</option>\n' \
+ % (enmCode, ' selected="selected"' if enmCode == enmResultSortBy else '', sTitle,);
+ assert fSelected;
+ sHtmlSortBy += ' </select>\n';
+ sHtmlSortBy += sPostamble;
+ sHtmlSortBy += '\n</form>\n'
+ return sHtmlSortBy;
+
def _generateStatusSelector(self, dParams, fOnlyFailures):
"""
Generate HTML code for the status code selector. Currently very simple.
@@ -318,7 +350,6 @@ class WuiMain(WuiDispatcherBase):
if WuiDispatcherBase.ksParamPageNo in dParams:
del dParams[WuiDispatcherBase.ksParamPageNo]
-
sHtmlTimeSelector = '<form name="TimeForm" method="GET">\n'
sHtmlTimeSelector += sPreamble;
sHtmlTimeSelector += '\n <select name="%s" onchange="window.location=' % WuiDispatcherBase.ksParamEffectiveDate
@@ -545,6 +576,7 @@ class WuiMain(WuiDispatcherBase):
# Generate the elements.
sHtmlStatusSelector = self._generateStatusSelector(self.getParameters(), fOnlyFailures);
+ sHtmlSortBySelector = self._generateSortBySelector(self.getParameters(), '', sHtmlStatusSelector);
sHtmlPeriodSelector = self._generateResultPeriodSelector(self.getParameters(), sCurPeriod)
sHtmlTimeWalker = self._generateTimeWalker(self.getParameters(), tsEffective, sCurPeriod);
@@ -563,7 +595,7 @@ class WuiMain(WuiDispatcherBase):
' <td width=30% align=right>\n' + sHtmlPeriodSelector + '</td>\n' \
'</tr>\n' \
'<tr>\n' \
- ' <td width=30%>' + sHtmlStatusSelector + '</td>\n' \
+ ' <td width=30%>' + sHtmlSortBySelector + '</td>\n' \
' <td width=40% align=center>\n' + sHtmlPager + '</td>\n' \
' <td width=30% align=right>\n' + sHtmlItemsPerPageSelector + '</td>\n'\
'</tr>\n' \
@@ -637,14 +669,17 @@ class WuiMain(WuiDispatcherBase):
oLogicType implements fetchForListing.
oListContentType is a child of WuiListContentBase.
"""
- cItemsPerPage = self.getIntParam(self.ksParamItemsPerPage, iMin = 2, iMax = 9999, iDefault = 128)
- iPage = self.getIntParam(self.ksParamPageNo, iMin = 0, iMax = 999999, iDefault = 0)
- tsEffective = self.getEffectiveDateParam()
- iGroupMemberId = self.getIntParam(self.ksParamGroupMemberId, iMin = -1, iMax = 999999, iDefault = -1)
+ cItemsPerPage = self.getIntParam(self.ksParamItemsPerPage, iMin = 2, iMax = 9999, iDefault = 128);
+ iPage = self.getIntParam(self.ksParamPageNo, iMin = 0, iMax = 999999, iDefault = 0);
+ tsEffective = self.getEffectiveDateParam();
+ iGroupMemberId = self.getIntParam(self.ksParamGroupMemberId, iMin = -1, iMax = 999999, iDefault = -1);
fOnlyFailures = self.getBoolParam(self.ksParamOnlyFailures, fDefault = False);
+ enmResultSortBy = self.getStringParam(self.ksParamTestResultsSortBy,
+ asValidValues = TestResultLogic.kasResultsSortBy,
+ sDefault = TestResultLogic.ksResultsSortByRunningAndStart);
# Get testing results period and validate it
- asValidValues = [x for (x, _, _) in self.kaoResultPeriods]
+ asValidValues = [x for (x, _, _) in self.kaoResultPeriods]
sCurPeriod = self.getStringParam(self.ksParamEffectivePeriod, asValidValues = asValidValues,
sDefault = self.ksResultPeriodDefault)
assert sCurPeriod != ''; # Impossible!
@@ -726,10 +761,10 @@ class WuiMain(WuiDispatcherBase):
cItemsPerPage,
tsNow = tsEffective,
sInterval = sCurPeriod,
+ enmResultSortBy = enmResultSortBy,
enmResultsGroupingType = enmResultsGroupingType,
iResultsGroupingValue = idMember,
- fOnlyFailures = fOnlyFailures)
-
+ fOnlyFailures = fOnlyFailures);
cEntriesMax = max(cEntriesMax, cEntries)
#
@@ -792,7 +827,7 @@ class WuiMain(WuiDispatcherBase):
(oTestResultTree, _) = TestResultLogic(self._oDb).fetchResultTree(idTestSet, 2);
oBuildDataEx = BuildDataEx().initFromDbWithId(self._oDb, oTestSetData.idBuild, oTestSetData.tsCreated);
try: oBuildValidationKitDataEx = BuildDataEx().initFromDbWithId(self._oDb, oTestSetData.idBuildTestSuite,
- oTestSetData.tsCreated);
+ oTestSetData.tsCreated);
except: oBuildValidationKitDataEx = None;
oTestBoxData = TestBoxData().initFromDbWithGenId(self._oDb, oTestSetData.idGenTestBox);
oTestGroupData = TestGroupData().initFromDbWithId(self._oDb, ## @todo This bogus time wise. Bad DB design?
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuireport.py b/src/VBox/ValidationKit/testmanager/webui/wuireport.py
old mode 100644
new mode 100755
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuitestresult.py b/src/VBox/ValidationKit/testmanager/webui/wuitestresult.py
old mode 100644
new mode 100755
index cfe63b2..cd1031c
--- a/src/VBox/ValidationKit/testmanager/webui/wuitestresult.py
+++ b/src/VBox/ValidationKit/testmanager/webui/wuitestresult.py
@@ -26,7 +26,7 @@ CDDL are applicable instead of those of the GPL.
You may elect to license modified versions of this file under the
terms and conditions of either the GPL or the CDDL or both.
"""
-__version__ = "$Revision: 100880 $"
+__version__ = "$Revision: 101456 $"
# Python imports.
@@ -61,6 +61,8 @@ class WuiTestResult(WuiContentBase):
return oObject.toHtml();
if db.isDbTimestamp(oObject):
return webutils.escapeElem(self.formatTsShort(oObject));
+ if db.isDbInterval(oObject):
+ return webutils.escapeElem(self.formatIntervalShort(oObject));
if utils.isString(oObject):
return webutils.escapeElem(oObject);
return webutils.escapeElem(str(oObject));
@@ -163,7 +165,8 @@ class WuiTestResult(WuiContentBase):
% ( 'tmodd' if iRow & 1 else 'tmeven', iDepth, oTestResult.enmStatus,
webutils.escapeElem(self.formatTsShort(tsEvent)),
sElapsedGraph,
- webutils.escapeElem(str(oTestResult.tsElapsed)) if oTestResult.tsElapsed is not None else '',
+ webutils.escapeElem(self.formatIntervalShort(oTestResult.tsElapsed)) if oTestResult.tsElapsed is not None
+ else '',
sDisplayName,
' id="failure-%u"' % (iFailure,) if oTestResult.isFailure() else '',
webutils.escapeElem(oTestResult.enmStatus), webutils.escapeElem(sErrCnt),
@@ -285,7 +288,7 @@ class WuiTestResult(WuiContentBase):
% ( 'tmodd' if iRow & 1 else 'tmeven', iDepth, oTestResult.enmStatus,
webutils.escapeElem(self.formatTsShort(oTestResult.tsCreated + oTestResult.tsElapsed)),
sElapsedGraph,
- webutils.escapeElem(str(oTestResult.tsElapsed)),
+ webutils.escapeElem(self.formatIntervalShort(oTestResult.tsElapsed)),
sDisplayName,
' id="failure-%u"' % (iFailure,) if oTestResult.isFailure() else '',
webutils.escapeElem(oTestResult.enmStatus), webutils.escapeElem(sErrCnt),
diff --git a/src/VBox/ValidationKit/testmanager/webui/wuivcshistory.py b/src/VBox/ValidationKit/testmanager/webui/wuivcshistory.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/nsprpub/Makefile.in b/src/libs/xpcom18a4/nsprpub/Makefile.in
old mode 100755
new mode 100644
diff --git a/src/libs/xpcom18a4/nsprpub/config/config.mk b/src/libs/xpcom18a4/nsprpub/config/config.mk
old mode 100755
new mode 100644
diff --git a/src/libs/xpcom18a4/nsprpub/config/rules.mk b/src/libs/xpcom18a4/nsprpub/config/rules.mk
old mode 100755
new mode 100644
diff --git a/src/libs/xpcom18a4/python/client/__init__.py b/src/libs/xpcom18a4/python/client/__init__.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/file.py b/src/libs/xpcom18a4/python/file.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/primitives.py b/src/libs/xpcom18a4/python/primitives.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/server/__init__.py b/src/libs/xpcom18a4/python/server/__init__.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/server/enumerator.py b/src/libs/xpcom18a4/python/server/enumerator.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/server/factory.py b/src/libs/xpcom18a4/python/server/factory.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/server/loader.py b/src/libs/xpcom18a4/python/server/loader.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/server/module.py b/src/libs/xpcom18a4/python/server/module.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/server/policy.py b/src/libs/xpcom18a4/python/server/policy.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/test/pyxpcom_test_tools.py b/src/libs/xpcom18a4/python/test/pyxpcom_test_tools.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/test/test_com_exceptions.py b/src/libs/xpcom18a4/python/test/test_com_exceptions.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/test/test_comfile.py b/src/libs/xpcom18a4/python/test/test_comfile.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/test/test_component/py_test_component.py b/src/libs/xpcom18a4/python/test/test_component/py_test_component.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/test/test_components.py b/src/libs/xpcom18a4/python/test/test_components.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/test/test_isupports_primitives.py b/src/libs/xpcom18a4/python/test/test_isupports_primitives.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/test/test_misc.py b/src/libs/xpcom18a4/python/test/test_misc.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/test/test_streams.py b/src/libs/xpcom18a4/python/test/test_streams.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/test/test_test_component.py b/src/libs/xpcom18a4/python/test/test_test_component.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/test/test_weakreferences.py b/src/libs/xpcom18a4/python/test/test_weakreferences.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/tools/regxpcom.py b/src/libs/xpcom18a4/python/tools/regxpcom.py
old mode 100644
new mode 100755
diff --git a/src/libs/xpcom18a4/python/xpt.py b/src/libs/xpcom18a4/python/xpt.py
old mode 100644
new mode 100755
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-virtualbox/virtualbox.git
More information about the Pkg-virtualbox-commits
mailing list