| checkExecRedirect(ThreadContext, Ruby, IRubyObject, IRubyObject, PopenExecutor.ExecArg) |   | 8% |   | 3% | 20 | 21 | 50 | 56 | 0 | 1 |
| pipeOpen(ThreadContext, PopenExecutor.ExecArg, String, int, IOEncodable) |   | 59% |   | 48% | 26 | 33 | 32 | 90 | 0 | 1 |
| checkExecFds(ThreadContext, Ruby, PopenExecutor.ExecArg) |   | 26% |   | 6% | 8 | 9 | 23 | 32 | 0 | 1 |
| execargAddopt(ThreadContext, Ruby, PopenExecutor.ExecArg, IRubyObject, IRubyObject) |   | 42% |   | 32% | 21 | 25 | 39 | 61 | 0 | 1 |
| execargRunOptions(ThreadContext, Ruby, PopenExecutor.ExecArg, PopenExecutor.ExecArg, String[]) |   | 48% |   | 42% | 17 | 21 | 17 | 41 | 0 | 1 |
| run_exec_dup2(Ruby, RubyArray, PopenExecutor.ExecArg, PopenExecutor.ExecArg, String[]) |   | 67% |   | 45% | 15 | 21 | 14 | 44 | 0 | 1 |
| checkExecEnv(ThreadContext, Ruby, RubyHash) |  | 0% |  | 0% | 5 | 5 | 14 | 14 | 1 | 1 |
| procSpawnCmdInternal(Ruby, String[], String, PopenExecutor.ExecArg) |   | 35% |   | 33% | 9 | 10 | 15 | 24 | 0 | 1 |
| checkExecRedirectFd(Ruby, IRubyObject, boolean) |   | 40% |   | 32% | 10 | 12 | 13 | 24 | 0 | 1 |
| run_exec_open(Ruby, RubyArray, PopenExecutor.ExecArg, PopenExecutor.ExecArg, String[]) |  | 0% |  | 0% | 2 | 2 | 12 | 12 | 1 | 1 |
| checkExecFds1(ThreadContext, Ruby, PopenExecutor.ExecArg, RubyHash, int, IRubyObject) |   | 63% |   | 60% | 6 | 11 | 4 | 18 | 0 | 1 |
| run_exec_close(Ruby, RubyArray, PopenExecutor.ExecArg, String[]) |  | 0% |  | 0% | 4 | 4 | 8 | 8 | 1 | 1 |
| execFillarg(ThreadContext, RubyString, IRubyObject[], IRubyObject, IRubyObject, PopenExecutor.ExecArg) |   | 91% |   | 78% | 20 | 49 | 7 | 84 | 0 | 1 |
| checkExecRedirect1(Ruby, IRubyObject, IRubyObject, IRubyObject) |   | 43% |   | 40% | 4 | 6 | 6 | 13 | 0 | 1 |
| popen(ThreadContext, IRubyObject[], RubyClass, Block) |   | 83% |   | 70% | 6 | 13 | 6 | 38 | 0 | 1 |
| run_exec_dup2_child(Ruby, RubyArray, PopenExecutor.ExecArg, PopenExecutor.ExecArg, String[]) |  | 0% |  | 0% | 2 | 2 | 6 | 6 | 1 | 1 |
| checkArgv(ThreadContext, IRubyObject[]) |   | 61% |   | 50% | 2 | 4 | 7 | 17 | 0 | 1 |
| ARGVSTR2ARGV(byte[][]) |  | 0% |  | 0% | 3 | 3 | 5 | 5 | 1 | 1 |
| run_exec_pgroup(Ruby, PopenExecutor.ExecArg, PopenExecutor.ExecArg, String[]) |  | 0% |  | 0% | 3 | 3 | 8 | 8 | 1 | 1 |
| spawn(ThreadContext, IRubyObject[]) |   | 68% |   | 33% | 3 | 4 | 3 | 13 | 0 | 1 |
| handleOptionsCommon(ThreadContext, Ruby, PopenExecutor.ExecArg, RubyHash, boolean) |   | 72% |   | 71% | 3 | 8 | 4 | 15 | 0 | 1 |
| spawnProcess(ThreadContext, Ruby, PopenExecutor.ExecArg, String[]) |   | 84% |   | 75% | 4 | 9 | 3 | 21 | 0 | 1 |
| procSpawnSh(Ruby, PopenExecutor.ExecArg, String, String[]) |   | 78% |   | 50% | 8 | 9 | 5 | 15 | 0 | 1 |
| execargFixup(ThreadContext, Ruby, PopenExecutor.ExecArg) |   | 88% |   | 65% | 6 | 11 | 4 | 30 | 0 | 1 |
| DO_SPAWN(Ruby, PopenExecutor.ExecArg, String, String[], String[]) |   | 70% |   | 58% | 5 | 7 | 3 | 11 | 0 | 1 |
| redirectClose(Ruby, PopenExecutor.ExecArg, int, boolean) |  | 0% |  | 0% | 2 | 2 | 4 | 4 | 1 | 1 |
| execargSetenv(ThreadContext, Ruby, PopenExecutor.ExecArg, IRubyObject) |  | 0% |  | 0% | 2 | 2 | 2 | 2 | 1 | 1 |
| procSpawnSh(Ruby, String, PopenExecutor.ExecArg) |   | 81% |   | 50% | 3 | 4 | 0 | 6 | 0 | 1 |
| isPopenFork(Ruby, RubyString) |   | 38% |   | 25% | 2 | 3 | 1 | 3 | 0 | 1 |
| redirectOpen(PopenExecutor.ExecArg, int, String, int, int) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| redirectDup(Ruby, int) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| dlnFindExeR(Ruby, String, String) |   | 67% |   | 50% | 2 | 3 | 0 | 3 | 0 | 1 |
| run_exec_rlimit(Ruby, RubyArray, PopenExecutor.ExecArg, String[]) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| saveEnv(ThreadContext, Ruby, PopenExecutor.ExecArg) | | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| static {...} |  | 100% | | n/a | 0 | 1 | 0 | 4 | 0 | 1 |
| execGetargs(ThreadContext, IRubyObject[][], boolean, IRubyObject[]) |  | 100% |   | 79% | 3 | 8 | 0 | 20 | 0 | 1 |
| prepareStdioRedirects(Ruby, Channel[], Channel[], PopenExecutor.ExecArg) |  | 100% |   | 75% | 1 | 3 | 0 | 11 | 0 | 1 |
| buildEnvp(Ruby, PopenExecutor.ExecArg, IRubyObject) |  | 100% |  | 100% | 0 | 2 | 0 | 12 | 0 | 1 |
| execargInit(ThreadContext, IRubyObject[], boolean, PopenExecutor.ExecArg) |  | 100% |  | 100% | 0 | 2 | 0 | 6 | 0 | 1 |
| checkPipeCommand(ThreadContext, IRubyObject) |  | 100% |  | 100% | 0 | 2 | 0 | 10 | 0 | 1 |
| pipeOpen(ThreadContext, IRubyObject, String, int, IOEncodable) |  | 100% |   | 50% | 1 | 2 | 0 | 5 | 0 | 1 |
| spawnInternal(ThreadContext, IRubyObject[], String[]) |  | 100% | | n/a | 0 | 1 | 0 | 4 | 0 | 1 |
| procSpawnCmd(Ruby, String[], String, PopenExecutor.ExecArg) |  | 100% |   | 50% | 2 | 3 | 0 | 4 | 0 | 1 |
| execargNew(ThreadContext, IRubyObject[], boolean) |  | 100% | | n/a | 0 | 1 | 0 | 3 | 0 | 1 |
| checkExecOptions(ThreadContext, Ruby, RubyHash, PopenExecutor.ExecArg) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| redirectDup2(PopenExecutor.ExecArg, int, int) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| execargExtractOptions(ThreadContext, Ruby, PopenExecutor.ExecArg, RubyHash) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| PopenExecutor() |  | 100% | | n/a | 0 | 1 | 0 | 3 | 0 | 1 |
| saveRedirectFd(Ruby, int, PopenExecutor.ExecArg, String[]) | | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| runExecDup2TmpbufSize(int) | | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |