From patchwork Fri Feb 19 14:36:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 10930 Received: (qmail 114062 invoked by alias); 19 Feb 2016 14:37:07 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 113478 invoked by uid 89); 19 Feb 2016 14:37:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=Hit, line*, 1, 43, sk:stepov X-HELO: mail-pf0-f177.google.com Received: from mail-pf0-f177.google.com (HELO mail-pf0-f177.google.com) (209.85.192.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 19 Feb 2016 14:36:52 +0000 Received: by mail-pf0-f177.google.com with SMTP id c10so53731838pfc.2 for ; Fri, 19 Feb 2016 06:36:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=Gn6senJUZXDTEsp9S40pInbwHNfOS28huaC6YUx9F78=; b=DniyCMYkK7gVTVucUO1v0wPV+WkPcvXLPPaNsHXBF7gj9uw23eVsb4Qebki/gnaSRS fYLFyUm7bQAjc/GBwb+Qq9xymtK2ks42Rvrs57mJz46jzHFqBKwMwEjJ/2po5t6N2kHl xE9PqCxEw+zBn8+xQhPOLqZjJVZnbyFQdHq+mwGLsD74OnJ8c4U3BM+2zNUZKWeAn6Rv heMeRtzSf3EVMWMKhC2D4gAsaoC9PV7igR+GK9Gvkyl184amUp1I5moJhFODZVjCUr0d BfpqYhX+4WwLYfoIHHNvKyTuJjyFpDUOUkKKGqcJ+xk+KqaXmfzFiEvxabfDNWGlwEmp jGwg== X-Gm-Message-State: AG10YOSpL9aPr0nJRkMwYTOJ0mGfsoBS9RP+GFRQO0sc9RtnAGSu9gyakNpnmBVS7GVuUA== X-Received: by 10.98.79.156 with SMTP id f28mr18548217pfj.55.1455892609627; Fri, 19 Feb 2016 06:36:49 -0800 (PST) Received: from E107787-LIN.cambridge.arm.com (gcc1-power7.osuosl.org. [140.211.15.137]) by smtp.gmail.com with ESMTPSA id kq3sm18452546pab.24.2016.02.19.06.36.47 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 19 Feb 2016 06:36:49 -0800 (PST) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [PATCH 7/8] Rename disp-step-syscall.exp to step-over-syscall.exp Date: Fri, 19 Feb 2016 14:36:33 +0000 Message-Id: <1455892594-2294-8-git-send-email-yao.qi@linaro.org> In-Reply-To: <1455892594-2294-1-git-send-email-yao.qi@linaro.org> References: <1455892594-2294-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes disp-step-syscall.exp is extended for stepping over syscall instruction in different cases, with or without displaced stepping, and stepping over by GDBserver. This patch rename disp-step-syscall.exp to step-over-syscall.exp to reflect this. gdb/testsuite: 2016-02-19 Yao Qi * gdb.base/disp-step-fork.c: Rename to ... * gdb.base/step-over-fork.c: ... it. New file. * gdb.base/disp-step-vfork.c: Rename to ... * gdb.base/step-over-vfork.c: ... it. New file. * gdb.base/disp-step-syscall.exp: Rename to ... * gdb.base/step-over-syscall.exp: ... it. New file. (disp_step_cross_syscall): Rename to ... (step_over_syscall): ... it. --- gdb/testsuite/gdb.base/disp-step-fork.c | 43 ------ gdb/testsuite/gdb.base/disp-step-syscall.exp | 208 --------------------------- gdb/testsuite/gdb.base/disp-step-vfork.c | 47 ------ gdb/testsuite/gdb.base/step-over-fork.c | 43 ++++++ gdb/testsuite/gdb.base/step-over-syscall.exp | 208 +++++++++++++++++++++++++++ gdb/testsuite/gdb.base/step-over-vfork.c | 47 ++++++ 6 files changed, 298 insertions(+), 298 deletions(-) delete mode 100644 gdb/testsuite/gdb.base/disp-step-fork.c delete mode 100644 gdb/testsuite/gdb.base/disp-step-syscall.exp delete mode 100644 gdb/testsuite/gdb.base/disp-step-vfork.c create mode 100644 gdb/testsuite/gdb.base/step-over-fork.c create mode 100644 gdb/testsuite/gdb.base/step-over-syscall.exp create mode 100644 gdb/testsuite/gdb.base/step-over-vfork.c diff --git a/gdb/testsuite/gdb.base/disp-step-fork.c b/gdb/testsuite/gdb.base/disp-step-fork.c deleted file mode 100644 index 6d477ea..0000000 --- a/gdb/testsuite/gdb.base/disp-step-fork.c +++ /dev/null @@ -1,43 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include -#include - -static void -marker () {} - -int -main (void) -{ - int i, pid; - - for (i = 0; i < 6; i++) - { - pid = fork (); - if (pid == 0) /* child */ - { - exit (0); /* at exit */ - } - else - { - } - } - - marker (); - -} diff --git a/gdb/testsuite/gdb.base/disp-step-syscall.exp b/gdb/testsuite/gdb.base/disp-step-syscall.exp deleted file mode 100644 index 128bb78..0000000 --- a/gdb/testsuite/gdb.base/disp-step-syscall.exp +++ /dev/null @@ -1,208 +0,0 @@ -# This testcase is part of GDB, the GNU debugger. - -# Copyright 2011-2016 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -set syscall_insn "" - -# Define the syscall instruction for each target. - -if { [istarget "i\[34567\]86-*-linux*"] || [istarget "x86_64-*-linux*"] } { - set syscall_insn "\[ \t\](int|syscall|sysenter)\[ \t\]" -} elseif { [istarget "aarch64*-*-linux*"] || [istarget "arm*-*-linux*"] } { - set syscall_insn "\[ \t\](swi|svc)\[ \t\]" -} else { - return -1 -} - -proc check_pc_after_cross_syscall { syscall syscall_insn_next_addr } { - set syscall_insn_next_addr_found [get_hexadecimal_valueof "\$pc" "0"] - - set test "single step over $syscall final pc" - if {$syscall_insn_next_addr != 0 - && $syscall_insn_next_addr == $syscall_insn_next_addr_found} { - pass $test - } else { - fail $test - } -} - -proc disp_step_cross_syscall { syscall } { - with_test_prefix "$syscall" { - global syscall_insn - global gdb_prompt - - set testfile "disp-step-$syscall" - - if [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c {debug}] { - untested ${testfile}.exp - return -1 - } - - if { ![runto main] } then { - fail "run to main ($syscall)" - return - } - - # Delete the breakpoint on main. - gdb_test_no_output "delete break 1" - - gdb_test "break marker" "Breakpoint.*at.* file .*${testfile}.c, line.*" - gdb_test_no_output "set displaced-stepping off" - - set syscall_bp 0 - gdb_test_multiple "break $syscall" "break $syscall" { - -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { - set syscall_bp $expect_out(1,string) - pass "break $syscall" - } - } - - gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ - "continue to $syscall (1st time)" - # Hit the breakpoint on $syscall for the first time. In this time, we will let PLT - # resolution done, and the number single steps we will do later will be - # reduced. - - gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ - "continue to $syscall (2nd time)" - # Hit the breakpoint on $syscall for the second time. In this time, the address - # of syscall insn and next insn of syscall are recorded. - - gdb_test "display/i \$pc" ".*" - - - # Single step until we see a syscall insn or we reach the - # upper bound of loop iterations. - set msg "find syscall insn in $syscall" - set steps 0 - set max_steps 1000 - gdb_test_multiple "stepi" $msg { - -re ".*$syscall_insn.*$gdb_prompt $" { - pass $msg - } - -re "x/i .*=>.*\r\n$gdb_prompt $" { - incr steps - if {$steps == $max_steps} { - fail $msg - } else { - send_gdb "stepi\n" - exp_continue - } - } - } - - if {$steps == $max_steps} { - return -1 - } - - set syscall_insn_addr [get_hexadecimal_valueof "\$pc" "0"] - if {[gdb_test "stepi" "x/i .*=>.*" "stepi $syscall insn"] != 0} { - return -1 - } - set syscall_insn_next_addr [get_hexadecimal_valueof "\$pc" "0"] - - set disp_step_opts { "off" } - if { [support_displaced_stepping] } { - lappend disp_step_opts "on" - } - - foreach displaced $disp_step_opts { - with_test_prefix "displaced $displaced" { - - gdb_test "continue" \ - "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ - "continue to $syscall (3rd time)" - - # Hit the breakpoint on $syscall for the third time. - # In this time, we'll set breakpoint on the syscall insn - # we recorded previously, and single step over it. - - set syscall_insn_bp 0 - gdb_test_multiple "break \*$syscall_insn_addr" \ - "break on syscall insn" { - -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { - set syscall_insn_bp $expect_out(1,string) - pass "break on syscall insns" - } - } - - gdb_test "continue" \ - "Continuing\\..*Breakpoint \[0-9\]+, .*" \ - "continue to syscall insn $syscall" - - gdb_test_no_output "set displaced-stepping $displaced" - - # Check the address of next instruction of syscall. - if {[gdb_test "stepi" "x/i .*=>.*" "single step over $syscall"] != 0} { - return -1 - } - - check_pc_after_cross_syscall $syscall $syscall_insn_next_addr - - # Delete breakpoint syscall insns to avoid interference - # to other syscalls. - gdb_test_no_output "delete $syscall_insn_bp" \ - "delete break $syscall insn" - } - } - - with_test_prefix "break cond on target" { - set cond_bp_target 1 - - set test "set breakpoint condition-evaluation target" - gdb_test_multiple $test $test { - -re "warning: Target does not support breakpoint condition evaluation.\r\nUsing host evaluation mode instead.\r\n$gdb_prompt $" { - # Target doesn't support breakpoint condition - # evaluation on its side. - set cond_bp_target 0 - } - -re "^$test\r\n$gdb_prompt $" { - } - } - - if { $cond_bp_target } { - gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ - "continue to $syscall" - - # Create a breakpoint with the condition which is false. - set syscall_insn_bp 0 - gdb_test_multiple "break \*$syscall_insn_addr if main == 0" \ - "break on syscall insns" { - -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { - set syscall_insn_bp $expect_out(1,string) - pass "break on syscall insns" - } - } - - gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ - "continue to $syscall again" - - # Delete breakpoint syscall insns to avoid interference to - # other syscalls. - gdb_test_no_output "delete $syscall_insn_bp" \ - "delete break $syscall insn" - } - } - - gdb_test_no_output "delete $syscall_bp" "delete break $syscall" - - gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \ - "continue to marker ($syscall)" - } -} - -disp_step_cross_syscall "fork" -disp_step_cross_syscall "vfork" diff --git a/gdb/testsuite/gdb.base/disp-step-vfork.c b/gdb/testsuite/gdb.base/disp-step-vfork.c deleted file mode 100644 index 35665ab..0000000 --- a/gdb/testsuite/gdb.base/disp-step-vfork.c +++ /dev/null @@ -1,47 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -static void -marker () {} - -int -main (void) -{ - int i, pid; - - for (i = 0; i < 6; i++) - { - pid = vfork (); - if (pid == -1) - { - return 1; - } - else if (pid != 0) - { - } - else - { - _exit (0); - } - } - - marker (); - return 0; - -} diff --git a/gdb/testsuite/gdb.base/step-over-fork.c b/gdb/testsuite/gdb.base/step-over-fork.c new file mode 100644 index 0000000..6d477ea --- /dev/null +++ b/gdb/testsuite/gdb.base/step-over-fork.c @@ -0,0 +1,43 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2011-2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include +#include + +static void +marker () {} + +int +main (void) +{ + int i, pid; + + for (i = 0; i < 6; i++) + { + pid = fork (); + if (pid == 0) /* child */ + { + exit (0); /* at exit */ + } + else + { + } + } + + marker (); + +} diff --git a/gdb/testsuite/gdb.base/step-over-syscall.exp b/gdb/testsuite/gdb.base/step-over-syscall.exp new file mode 100644 index 0000000..863194b --- /dev/null +++ b/gdb/testsuite/gdb.base/step-over-syscall.exp @@ -0,0 +1,208 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2011-2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +set syscall_insn "" + +# Define the syscall instruction for each target. + +if { [istarget "i\[34567\]86-*-linux*"] || [istarget "x86_64-*-linux*"] } { + set syscall_insn "\[ \t\](int|syscall|sysenter)\[ \t\]" +} elseif { [istarget "aarch64*-*-linux*"] || [istarget "arm*-*-linux*"] } { + set syscall_insn "\[ \t\](swi|svc)\[ \t\]" +} else { + return -1 +} + +proc check_pc_after_cross_syscall { syscall syscall_insn_next_addr } { + set syscall_insn_next_addr_found [get_hexadecimal_valueof "\$pc" "0"] + + set test "single step over $syscall final pc" + if {$syscall_insn_next_addr != 0 + && $syscall_insn_next_addr == $syscall_insn_next_addr_found} { + pass $test + } else { + fail $test + } +} + +proc step_over_syscall { syscall } { + with_test_prefix "$syscall" { + global syscall_insn + global gdb_prompt + + set testfile "step-over-$syscall" + + if [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c {debug}] { + untested ${testfile}.exp + return -1 + } + + if { ![runto main] } then { + fail "run to main ($syscall)" + return + } + + # Delete the breakpoint on main. + gdb_test_no_output "delete break 1" + + gdb_test "break marker" "Breakpoint.*at.* file .*${testfile}.c, line.*" + gdb_test_no_output "set displaced-stepping off" + + set syscall_bp 0 + gdb_test_multiple "break $syscall" "break $syscall" { + -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { + set syscall_bp $expect_out(1,string) + pass "break $syscall" + } + } + + gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ + "continue to $syscall (1st time)" + # Hit the breakpoint on $syscall for the first time. In this time, we will let PLT + # resolution done, and the number single steps we will do later will be + # reduced. + + gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ + "continue to $syscall (2nd time)" + # Hit the breakpoint on $syscall for the second time. In this time, the address + # of syscall insn and next insn of syscall are recorded. + + gdb_test "display/i \$pc" ".*" + + + # Single step until we see a syscall insn or we reach the + # upper bound of loop iterations. + set msg "find syscall insn in $syscall" + set steps 0 + set max_steps 1000 + gdb_test_multiple "stepi" $msg { + -re ".*$syscall_insn.*$gdb_prompt $" { + pass $msg + } + -re "x/i .*=>.*\r\n$gdb_prompt $" { + incr steps + if {$steps == $max_steps} { + fail $msg + } else { + send_gdb "stepi\n" + exp_continue + } + } + } + + if {$steps == $max_steps} { + return -1 + } + + set syscall_insn_addr [get_hexadecimal_valueof "\$pc" "0"] + if {[gdb_test "stepi" "x/i .*=>.*" "stepi $syscall insn"] != 0} { + return -1 + } + set syscall_insn_next_addr [get_hexadecimal_valueof "\$pc" "0"] + + set disp_step_opts { "off" } + if { [support_displaced_stepping] } { + lappend disp_step_opts "on" + } + + foreach displaced $disp_step_opts { + with_test_prefix "displaced $displaced" { + + gdb_test "continue" \ + "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ + "continue to $syscall (3rd time)" + + # Hit the breakpoint on $syscall for the third time. + # In this time, we'll set breakpoint on the syscall insn + # we recorded previously, and single step over it. + + set syscall_insn_bp 0 + gdb_test_multiple "break \*$syscall_insn_addr" \ + "break on syscall insn" { + -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { + set syscall_insn_bp $expect_out(1,string) + pass "break on syscall insns" + } + } + + gdb_test "continue" \ + "Continuing\\..*Breakpoint \[0-9\]+, .*" \ + "continue to syscall insn $syscall" + + gdb_test_no_output "set displaced-stepping $displaced" + + # Check the address of next instruction of syscall. + if {[gdb_test "stepi" "x/i .*=>.*" "single step over $syscall"] != 0} { + return -1 + } + + check_pc_after_cross_syscall $syscall $syscall_insn_next_addr + + # Delete breakpoint syscall insns to avoid interference + # to other syscalls. + gdb_test_no_output "delete $syscall_insn_bp" \ + "delete break $syscall insn" + } + } + + with_test_prefix "break cond on target" { + set cond_bp_target 1 + + set test "set breakpoint condition-evaluation target" + gdb_test_multiple $test $test { + -re "warning: Target does not support breakpoint condition evaluation.\r\nUsing host evaluation mode instead.\r\n$gdb_prompt $" { + # Target doesn't support breakpoint condition + # evaluation on its side. + set cond_bp_target 0 + } + -re "^$test\r\n$gdb_prompt $" { + } + } + + if { $cond_bp_target } { + gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ + "continue to $syscall" + + # Create a breakpoint with the condition which is false. + set syscall_insn_bp 0 + gdb_test_multiple "break \*$syscall_insn_addr if main == 0" \ + "break on syscall insns" { + -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { + set syscall_insn_bp $expect_out(1,string) + pass "break on syscall insns" + } + } + + gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ + "continue to $syscall again" + + # Delete breakpoint syscall insns to avoid interference to + # other syscalls. + gdb_test_no_output "delete $syscall_insn_bp" \ + "delete break $syscall insn" + } + } + + gdb_test_no_output "delete $syscall_bp" "delete break $syscall" + + gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \ + "continue to marker ($syscall)" + } +} + +step_over_syscall "fork" +step_over_syscall "vfork" diff --git a/gdb/testsuite/gdb.base/step-over-vfork.c b/gdb/testsuite/gdb.base/step-over-vfork.c new file mode 100644 index 0000000..35665ab --- /dev/null +++ b/gdb/testsuite/gdb.base/step-over-vfork.c @@ -0,0 +1,47 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2011-2016 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +static void +marker () {} + +int +main (void) +{ + int i, pid; + + for (i = 0; i < 6; i++) + { + pid = vfork (); + if (pid == -1) + { + return 1; + } + else if (pid != 0) + { + } + else + { + _exit (0); + } + } + + marker (); + return 0; + +}