public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: gdb-patches@sourceware.org
Subject: [PATCH v4 05/14] add dummy frame destructor
Date: Sun, 23 Nov 2014 19:28:00 -0000	[thread overview]
Message-ID: <20141123192756.32193.89045.stgit@host1.jankratochvil.net> (raw)
In-Reply-To: <20141123192713.32193.57150.stgit@host1.jankratochvil.net>

The compiler code needed a hook into dummy frame destruction, so that
some state could be kept while the inferior call is made and then
destroyed when the inferior call finishes.

This patch adds an optional destructor to dummy frames and a new API
to access it.

2014-10-07  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dummy-frame.c (struct dummy_frame) <dtor, dtor_data>: New
	fields.
	(pop_dummy_frame): Call the destructor if it exists.
	(register_dummy_frame_dtor, find_dummy_frame_dtor): New
	functions.
	* dummy-frame.h (dummy_frame_dtor_ftype): New typedef.
	(register_dummy_frame_dtor, find_dummy_frame_dtor): Declare.
---
 gdb/ChangeLog     |   10 ++++++++++
 gdb/dummy-frame.c |   41 +++++++++++++++++++++++++++++++++++++++++
 gdb/dummy-frame.h |   13 +++++++++++++
 3 files changed, 64 insertions(+)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 15753eb..951b7b5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,13 @@
+2014-10-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* dummy-frame.c (struct dummy_frame) <dtor, dtor_data>: New
+	fields.
+	(pop_dummy_frame): Call the destructor if it exists.
+	(register_dummy_frame_dtor, find_dummy_frame_dtor): New
+	functions.
+	* dummy-frame.h (dummy_frame_dtor_ftype): New typedef.
+	(register_dummy_frame_dtor, find_dummy_frame_dtor): Declare.
+
 2014-10-07  Tom Tromey  <tromey@redhat.com>
 
 	* gdbtypes.h (make_unqualified_type): Declare.
diff --git a/gdb/dummy-frame.c b/gdb/dummy-frame.c
index a13601b..6ca8b19 100644
--- a/gdb/dummy-frame.c
+++ b/gdb/dummy-frame.c
@@ -61,6 +61,13 @@ struct dummy_frame
 
   /* The caller's state prior to the call.  */
   struct infcall_suspend_state *caller_state;
+
+  /* If non-NULL, a destructor that is run when this dummy frame is
+     popped.  */
+  void (*dtor) (void *data);
+
+  /* Arbitrary data that is passed to DTOR.  */
+  void *dtor_data;
 };
 
 static struct dummy_frame *dummy_frame_stack = NULL;
@@ -127,6 +134,10 @@ pop_dummy_frame (struct dummy_frame **dummy_ptr)
   struct dummy_frame *dummy = *dummy_ptr;
 
   gdb_assert (ptid_equal (dummy->id.ptid, inferior_ptid));
+
+  if (dummy->dtor != NULL)
+    dummy->dtor (dummy->dtor_data);
+
   restore_infcall_suspend_state (dummy->caller_state);
 
   iterate_over_breakpoints (pop_dummy_frame_bpt, dummy);
@@ -190,6 +201,36 @@ dummy_frame_discard (struct frame_id dummy_id, ptid_t ptid)
     remove_dummy_frame (dp);
 }
 
+/* See dummy-frame.h.  */
+
+void
+register_dummy_frame_dtor (struct frame_id dummy_id, ptid_t ptid,
+			   dummy_frame_dtor_ftype *dtor, void *dtor_data)
+{
+  struct dummy_frame_id id = { dummy_id, ptid };
+  struct dummy_frame **dp, *d;
+
+  dp = lookup_dummy_frame (&id);
+  gdb_assert (dp != NULL);
+  d = *dp;
+  gdb_assert (d->dtor == NULL);
+  d->dtor = dtor;
+  d->dtor_data = dtor_data;
+}
+
+/* See dummy-frame.h.  */
+
+int
+find_dummy_frame_dtor (dummy_frame_dtor_ftype *dtor, void *dtor_data)
+{
+  struct dummy_frame *d;
+
+  for (d = dummy_frame_stack; d != NULL; d = d->next)
+    if (d->dtor == dtor && d->dtor_data == dtor_data)
+      return 1;
+  return 0;
+}
+
 /* There may be stale dummy frames, perhaps left over from when an uncaught
    longjmp took us out of a function that was called by the debugger.  Clean
    them up at least once whenever we start a new inferior.  */
diff --git a/gdb/dummy-frame.h b/gdb/dummy-frame.h
index bac1aac..8c1a1d0 100644
--- a/gdb/dummy-frame.h
+++ b/gdb/dummy-frame.h
@@ -54,4 +54,17 @@ extern void dummy_frame_discard (struct frame_id dummy_id, ptid_t ptid);
 
 extern const struct frame_unwind dummy_frame_unwind;
 
+/* Call DTOR with DTOR_DATA when DUMMY_ID frame of thread PTID gets discarded.
+   Dummy frame with DUMMY_ID must exist.  There must be no other call of
+   register_dummy_frame_dtor for that dummy frame.  */
+typedef void (dummy_frame_dtor_ftype) (void *data);
+extern void register_dummy_frame_dtor (struct frame_id dummy_id, ptid_t ptid,
+				       dummy_frame_dtor_ftype *dtor,
+				       void *dtor_data);
+
+/* Return 1 if there exists dummy frame with registered DTOR and DTOR_DATA.
+   Return 0 otherwise.  */
+extern int find_dummy_frame_dtor (dummy_frame_dtor_ftype *dtor,
+				  void *dtor_data);
+
 #endif /* !defined (DUMMY_FRAME_H)  */

  parent reply	other threads:[~2014-11-23 19:28 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-23 19:27 [PATCH v4 00/14] let gdb reuse gcc's C compiler Jan Kratochvil
2014-11-23 19:27 ` [PATCH v4 02/14] add gcc/gdb interface files Jan Kratochvil
2014-11-23 19:27 ` [PATCH v4 03/14] add some missing ops to DWARF assembler Jan Kratochvil
2014-11-23 19:27 ` [PATCH v4 04/14] add make_unqualified_type Jan Kratochvil
2014-11-23 19:27 ` [PATCH v4 01/14] introduce ui_file_write_for_put Jan Kratochvil
2014-11-23 19:28 ` [PATCH v4 06/14] add infcall_mmap and gcc_target_options gdbarch methods Jan Kratochvil
2014-11-23 19:28 ` [PATCH v4 09/14] split dwarf2_fetch_cfa_info from dwarf2_compile_expr_to_ax Jan Kratochvil
2014-11-23 19:28 ` Jan Kratochvil [this message]
2014-11-23 19:28 ` [PATCH v4 13/14] add s390_gcc_target_options Jan Kratochvil
2014-11-23 19:28 ` [PATCH v4 12/14] add linux_infcall_mmap Jan Kratochvil
2014-12-15 12:41   ` Ulrich Weigand
2014-12-15 13:49     ` Yao Qi
2014-12-15 16:48       ` Jan Kratochvil
2014-12-16  5:27         ` Yao Qi
2014-11-23 19:28 ` [PATCH v4 11/14] export dwarf2_reg_to_regnum_or_error Jan Kratochvil
2014-11-23 19:28 ` [PATCH v4 08/14] introduce call_function_by_hand_dummy Jan Kratochvil
2014-11-23 19:28 ` [PATCH v4 10/14] make dwarf_expr_frame_base_1 public Jan Kratochvil
2014-11-23 19:28 ` [PATCH v4 07/14] add gnu_triplet_regexp gdbarch method Jan Kratochvil
2014-11-23 19:29 ` [PATCH v4 14/14] the "compile" command Jan Kratochvil
2014-12-14  6:05   ` Yao Qi
2014-12-14  7:53     ` Jan Kratochvil
2014-12-14  8:54       ` Yao Qi
2014-12-14 18:24         ` [mingw rfc] Add mkdtemp to gdb/gnulib/ [Re: [PATCH v4 14/14] the "compile" command] Jan Kratochvil
2014-12-15  3:16           ` Yao Qi
2014-12-15 12:44             ` Joel Brobecker
2014-12-15 13:11               ` Kai Tietz
2014-12-15 13:24               ` Yao Qi
2014-12-15 17:12               ` Jan Kratochvil
2014-12-15 17:48                 ` Eli Zaretskii
2014-12-15 18:14                 ` Joel Brobecker
2014-12-15 18:21                   ` Jan Kratochvil
2014-12-15 18:35                     ` Joel Brobecker
2014-12-15 18:40                       ` Jan Kratochvil
2014-12-15 18:57                         ` Eli Zaretskii
2014-12-15 22:28                           ` [patch] compile: Fix MinGW build [Re: [mingw rfc] Add mkdtemp to gdb/gnulib/] Jan Kratochvil
2014-12-15 22:56                             ` Jan Kratochvil
2014-12-16  3:40                               ` Eli Zaretskii
2014-12-16  9:04                                 ` Kai Tietz
2014-12-17 21:02                                   ` [patch] compile: rm -rf -> ftw()+rmdir()+unlink() [Re: [patch] compile: Fix MinGW build] Jan Kratochvil
2014-12-17 22:07                                     ` Steve Ellcey
2014-12-17 22:42                                     ` Pedro Alves
2014-12-18 18:14                                       ` Jan Kratochvil
2014-12-18 18:24                                         ` Pedro Alves
2014-12-18 18:41                                           ` Jan Kratochvil
2014-12-18 19:07                                             ` Pedro Alves
2014-12-18 21:05                                               ` Jan Kratochvil
2014-12-18 21:11                                                 ` Eli Zaretskii
2014-12-18 21:24                                                   ` Jan Kratochvil
2014-12-18 22:18                                                     ` Sergio Durigan Junior
2014-12-18 23:06                                                     ` Pedro Alves
2014-12-19  0:12                                                       ` Jan Kratochvil
2014-12-19 10:48                                                         ` Pedro Alves
2014-12-19  8:24                                                     ` Eli Zaretskii
2014-12-19 12:59                                             ` Joel Brobecker
2014-12-18 20:26                                         ` Eli Zaretskii
2014-12-18  5:38                                     ` Yao Qi
2014-12-18 17:23                                     ` Eli Zaretskii
2014-12-18 17:31                                       ` Jan Kratochvil
2014-12-18 17:40                                         ` Eli Zaretskii
2014-12-18 20:15                                           ` Kai Tietz
2014-12-18 20:47                                             ` Eli Zaretskii
2014-12-18 20:55                                               ` Kai Tietz
2014-12-18 23:47                                             ` Pedro Alves
2014-12-19  9:28                                               ` Kai Tietz
2014-12-19 19:25                                               ` Jan Kratochvil
2014-12-19 20:55                                                 ` Jan Kratochvil
2014-12-20 12:26                                                 ` Joel Brobecker
2014-12-18 20:56                                     ` Sergio Durigan Junior
2014-12-17 17:30                                 ` [patch] compile: Fix MinGW build [Re: [mingw rfc] Add mkdtemp to gdb/gnulib/] Steve Ellcey
2014-12-16  3:37                             ` Eli Zaretskii
2014-12-16  9:06                               ` Kai Tietz
2014-12-17 19:18                               ` Jan Kratochvil
2014-12-17 19:31                                 ` Eli Zaretskii
2014-12-17 19:37                                   ` Jan Kratochvil
2014-12-17 20:34                                   ` Pedro Alves
2014-12-18 17:22                                     ` Eli Zaretskii
2014-12-18 18:00                                       ` Pedro Alves
2014-12-16 12:40                             ` Pierre Muller
2014-12-17 18:21                               ` Jan Kratochvil
2014-12-17  1:22                             ` Yao Qi
2014-12-17 10:57                               ` Pedro Alves
2014-12-17 11:40                                 ` Yao Qi
2014-12-17 11:43                                   ` Pedro Alves
2014-12-17 11:56                                     ` Yao Qi
2014-12-17 19:15                                     ` Jan Kratochvil
2014-12-17 11:16                             ` Pedro Alves
2014-12-17 18:17                               ` [patchv2] " Jan Kratochvil
2014-12-17 18:33                                 ` Pedro Alves
2014-12-17 19:12                                   ` [commit] " Jan Kratochvil
2014-12-05 18:29 ` [patch 15/14] GDB/GCC compile function pointers [Re: [PATCH v4 00/14] let gdb reuse gcc's C compiler] Jan Kratochvil
2014-12-12 21:51   ` obsolete: " Jan Kratochvil
2014-12-12 14:40 ` [PATCH v4 00/14] let gdb reuse gcc's C compiler Pedro Alves
2014-12-12 21:46   ` [commit all 14 parts] " Jan Kratochvil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141123192756.32193.89045.stgit@host1.jankratochvil.net \
    --to=jan.kratochvil@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).