mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-01-02 17:58:22 +00:00
PR c++/13653:
* thread.c (struct current_thread_cleanup) <was_removable>: New field. (do_restore_current_thread_cleanup): Restore 'removable' field. (restore_current_thread_cleanup_dtor): Likewise. (make_cleanup_restore_current_thread): Initialize new field. testsuite/gdb * gdb.base/inferior-died.c: New file. * gdb.base/inferior-died.exp: New file.
This commit is contained in:
parent
bf4c19f73e
commit
9addecb9fb
@ -1,3 +1,11 @@
|
||||
2012-02-16 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
PR c++/13653:
|
||||
* thread.c (struct current_thread_cleanup) <was_removable>: New
|
||||
field.
|
||||
(restore_current_thread_cleanup_dtor): Restore 'removable' field.
|
||||
(make_cleanup_restore_current_thread): Initialize new field.
|
||||
|
||||
2012-02-15 Kevin Buettner <kevinb@redhat.com>
|
||||
|
||||
* MAINTAINERS: Add rl78 to target ISA section.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-02-16 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* gdb.base/inferior-died.c: New file.
|
||||
* gdb.base/inferior-died.exp: New file.
|
||||
|
||||
2012-02-15 Aleksandar Ristovski <aristovski@qnx.com>
|
||||
|
||||
* gdb.base/break-inline.exp: New file.
|
||||
|
37
gdb/testsuite/gdb.base/inferior-died.c
Normal file
37
gdb/testsuite/gdb.base/inferior-died.c
Normal file
@ -0,0 +1,37 @@
|
||||
/* Test for fork-related gdb bug
|
||||
|
||||
Copyright 2012 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/>.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void function(void)
|
||||
{
|
||||
exit (0); /* Break here */
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
pid_t child = fork ();
|
||||
|
||||
if (child == 0)
|
||||
function ();
|
||||
else
|
||||
waitpid (child, NULL, 0);
|
||||
}
|
56
gdb/testsuite/gdb.base/inferior-died.exp
Normal file
56
gdb/testsuite/gdb.base/inferior-died.exp
Normal file
@ -0,0 +1,56 @@
|
||||
# Copyright 2012 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/>.
|
||||
|
||||
if { [is_remote target] || ![isnative] } then {
|
||||
unsupported "inferior-died.exp"
|
||||
continue
|
||||
}
|
||||
|
||||
# Until "set follow-fork-mode" and "catch fork" are implemented on
|
||||
# other targets...
|
||||
#
|
||||
if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-*-linux*"]} then {
|
||||
unsupported "inferior-died.exp"
|
||||
continue
|
||||
}
|
||||
|
||||
if { ![support_displaced_stepping] } {
|
||||
unsupported "inferior-died.exp"
|
||||
return -1
|
||||
}
|
||||
|
||||
set testfile "inferior-died"
|
||||
set srcfile ${testfile}.c
|
||||
set binfile ${objdir}/${subdir}/${testfile}
|
||||
|
||||
if { [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c] } {
|
||||
return -1
|
||||
}
|
||||
|
||||
gdb_test_no_output "set detach-on-fork off"
|
||||
gdb_test_no_output "set target-async on"
|
||||
gdb_test_no_output "set non-stop on"
|
||||
|
||||
if ![runto_main] {
|
||||
return
|
||||
}
|
||||
|
||||
set line [gdb_get_line_number "Break here"]
|
||||
gdb_breakpoint $srcfile:$line
|
||||
|
||||
gdb_continue_to_breakpoint "breakpoint"
|
||||
|
||||
gdb_test "inferior 2" "Switching to inferior 2.*"
|
||||
gdb_test "continue" "exited normally.*"
|
@ -1072,6 +1072,7 @@ struct current_thread_cleanup
|
||||
int selected_frame_level;
|
||||
int was_stopped;
|
||||
int inf_id;
|
||||
int was_removable;
|
||||
};
|
||||
|
||||
static void
|
||||
@ -1112,10 +1113,14 @@ restore_current_thread_cleanup_dtor (void *arg)
|
||||
{
|
||||
struct current_thread_cleanup *old = arg;
|
||||
struct thread_info *tp;
|
||||
struct inferior *inf;
|
||||
|
||||
tp = find_thread_ptid (old->inferior_ptid);
|
||||
if (tp)
|
||||
tp->refcount--;
|
||||
inf = find_inferior_id (old->inf_id);
|
||||
if (inf != NULL)
|
||||
inf->removable = old->was_removable;
|
||||
xfree (old);
|
||||
}
|
||||
|
||||
@ -1129,6 +1134,7 @@ make_cleanup_restore_current_thread (void)
|
||||
old = xmalloc (sizeof (struct current_thread_cleanup));
|
||||
old->inferior_ptid = inferior_ptid;
|
||||
old->inf_id = current_inferior ()->num;
|
||||
old->was_removable = current_inferior ()->removable;
|
||||
|
||||
if (!ptid_equal (inferior_ptid, null_ptid))
|
||||
{
|
||||
@ -1156,6 +1162,8 @@ make_cleanup_restore_current_thread (void)
|
||||
tp->refcount++;
|
||||
}
|
||||
|
||||
current_inferior ()->removable = 0;
|
||||
|
||||
return make_cleanup_dtor (do_restore_current_thread_cleanup, old,
|
||||
restore_current_thread_cleanup_dtor);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user