c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * VMM Fork Test.
f7e6b78ab5390f576b42ba0648a4b82aef89731cvboxsync * Copyright (C) 2006-2014 Oracle Corporation
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * available from http://www.virtualbox.org. This file is free software;
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync/*******************************************************************************
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync* Header Files *
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync*******************************************************************************/
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync/*******************************************************************************
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync* Defined Constants And Macros *
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync*******************************************************************************/
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * Initialize the runtime.
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync "command Command to run under child process in fork.\n"
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * Create empty VM.
021c939a9e3f688c0c3bbd759354be906bb2dcabvboxsync int rc = VMR3Create(1, NULL, NULL, NULL, NULL, NULL, &pVM, &pUVM);
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * Do testing.
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync RTPrintf(TESTCASE ": forking current process...\n");
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync /* Bad. fork() failed! */
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync else if (pid == 0)
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * The child process.
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * Write to some local variables to trigger copy-on-write if it's used.
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync RTPrintf(TESTCASE ": writing local variables...\n");
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync RTPrintf(TESTCASE ": calling execv() with command-line:\n");
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync for (int i = 0; i < cArgs; i++)
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync RTPrintf(TESTCASE ": ppszArgs[%d]=%s\n", i, ppszArgs[i]);
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync RTPrintf(TESTCASE ": error: execv() returned to caller. errno=%d.\n", errno);
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * The parent process.
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync * Wait for child & run VMM test to ensure things are fine.
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync if (!WIFEXITED(result) || WEXITSTATUS(result) != 0)
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync RTPrintf(TESTCASE ": error: failed to run child process. errno=%d\n", errno);
021c939a9e3f688c0c3bbd759354be906bb2dcabvboxsync VMR3ReqCallWaitU(pUVM, VMCPUID_ANY, (PFNRT)VMMDoTest, 1, pVM);
f7e6b78ab5390f576b42ba0648a4b82aef89731cvboxsync RTPrintf(TESTCASE ": error: %d error(s) during fork(). Cannot proceed to test the VM.\n", rcErrors);
c189e41dcbb9bbda9b5bc41e07ef0fce82bbff7avboxsync RTPrintf(TESTCASE ": fork() and VM test, SUCCESS.\n");
a50f2b5d48e2f3f8bae70aa49f76f225352b67cdvboxsync RTPrintf(TESTCASE ": error: failed to power off vm! rc=%Rrc\n", rc);
a50f2b5d48e2f3f8bae70aa49f76f225352b67cdvboxsync RTPrintf(TESTCASE ": error: failed to destroy vm! rc=%Rrc\n", rc);
a50f2b5d48e2f3f8bae70aa49f76f225352b67cdvboxsync RTPrintf(TESTCASE ": fatal error: failed to create vm! rc=%Rrc\n", rc);