diff options
author | Josh Stone <jistone@redhat.com> | 2015-12-04 13:28:07 -0800 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2015-12-04 18:25:26 -0800 |
commit | ece66d651004eac0210217c4d48babf4e80d1f2e (patch) | |
tree | 4033870f99986038ba2eaa491d2d4b4e31dcfc52 /gdb/testsuite | |
parent | cc51fd4ccfdca1559efb0351b498bd8c0f3d1eed (diff) | |
download | gdb-ece66d651004eac0210217c4d48babf4e80d1f2e.zip gdb-ece66d651004eac0210217c4d48babf4e80d1f2e.tar.gz gdb-ece66d651004eac0210217c4d48babf4e80d1f2e.tar.bz2 |
gdbserver: set ptrace flags after creating inferiors
Rename target_ops.arch_setup to .post_create_inferior. In the Linux
hook, continue calling the low arch setup, then also set ptrace flags.
This corrects the possibility of running without flags, demonstrated by
a new test that would fail to catch a fork before.
gdb/gdbserver/ChangeLog:
2015-12-04 Josh Stone <jistone@redhat.com>
* target.h (struct target_ops) <arch_setup>: Rename to ...
(struct target_ops) <post_create_inferior>: ... this.
(target_arch_setup): Rename to ...
(target_post_create_inferior): ... this, calling post_create_inferior.
* server.c (start_inferior): Update target_arch_setup calls to
target_post_create_inferior.
* linux-low.c (linux_low_ptrace_options): Forward declare.
(linux_arch_setup): Update its comment for general use.
(linux_post_create_inferior): New, run arch_setup and setup ptrace.
(struct linux_target_ops): Use linux_post_create_inferior.
* lynx-low.c (struct lynx_target_ops): Update arch_setup stub comment
to post_create_inferior.
* nto-low.c (struct nto_target_ops): Likewise.
* spu-low.c (struct spu_target_ops): Likewise.
* win32-low.c (struct win32_target_ops): Likewise.
gdb/testsuite/ChangeLog:
2015-12-04 Josh Stone <jistone@redhat.com>
* gdb.base/catch-fork-static.exp: New.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/catch-fork-static.exp | 48 |
2 files changed, 52 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 97df17a..99bfed8 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-12-04 Josh Stone <jistone@redhat.com> + + * gdb.base/catch-fork-static.exp: New. + 2015-12-03 Yao Qi <yao.qi@linaro.org> * gdb.base/sizeof.c: Don't include stdio.h and diff --git a/gdb/testsuite/gdb.base/catch-fork-static.exp b/gdb/testsuite/gdb.base/catch-fork-static.exp new file mode 100644 index 0000000..96570eb --- /dev/null +++ b/gdb/testsuite/gdb.base/catch-fork-static.exp @@ -0,0 +1,48 @@ +# Copyright (C) 2015 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 <http://www.gnu.org/licenses/>. + +# Test that "catch fork" works on static executables. + +# For instance, on Linux we need PTRACE_O_TRACEFORK set before the program +# reaches the fork. GDBserver was only setting flags when it reached the first +# stop *after* arch_setup. In a dynamic executable there is often a swbreak in +# ld.so probes before reaching main, and ptrace flags were set then. But a +# static executable would just keep running and never catch the fork. + +if { [is_remote target] || ![isnative] } then { + continue +} + +# Until "catch fork" is implemented on other targets... +# +if { ![istarget "hppa*-hp-hpux*"] && ![istarget "*-*-linux*"] + && ![istarget "*-*-openbsd*"] } then { + continue +} + +# Reusing foll-fork.c since it's a simple forking program. +standard_testfile foll-fork.c + +if { [prepare_for_testing ${testfile}.exp ${testfile} $srcfile \ + {additional_flags=-static}] } { + return -1 +} + +gdb_test "catch fork" "Catchpoint \[0-9\]* \\(fork\\)" + +gdb_run_cmd +gdb_test "" \ + "Catchpoint \[0-9\]* \\(forked process \[0-9\]*\\),.*" \ + "run to fork" |