Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Tankut Baris Aktemur via Gdb-patches <gdb-patches@sourceware.org>
To: gdb-patches@sourceware.org
Subject: [PATCH v4 2/2] gdb/mi: add a '--force' flag to the '-break-condition' command
Date: Thu, 22 Apr 2021 16:35:50 +0200	[thread overview]
Message-ID: <ca87fdd9af5c7b3f2f33010a31e688e4dbfc0c6a.1619101936.git.tankut.baris.aktemur@intel.com> (raw)
In-Reply-To: <cover.1619101936.git.tankut.baris.aktemur@intel.com>
In-Reply-To: <cover.1619101936.git.tankut.baris.aktemur@intel.com>

Add a '--force' flag to the '-break-condition' command to be
able to force conditions.

gdb/ChangeLog:
2021-04-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* mi/mi-cmd-break.c (mi_cmd_break_condition): New function.
	* mi/mi-cmds.c: Change the binding of "-break-condition" to
	mi_cmd_break_condition.
	* mi/mi-cmds.h (mi_cmd_break_condition): Declare.
	* breakpoint.h (set_breakpoint_condition): Declare a new
	overload.
	* breakpoint.c (set_breakpoint_condition): New overloaded function
	extracted out from ...
	(condition_command): ... this.
	* NEWS: Mention the change.

gdb/testsuite/ChangeLog:
2021-04-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* gdb.mi/mi-break.exp (test_forced_conditions): Add a test
	for the -break-condition command's "--force" flag.

gdb/doc/ChangeLog:
2021-04-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* gdb.texinfo (GDB/MI Breakpoint Commands): Mention the
	'--force' flag of the '-break-condition' command.
---
 gdb/NEWS                          |  7 ++++
 gdb/breakpoint.c                  | 59 ++++++++++++++++++-------------
 gdb/breakpoint.h                  |  8 +++++
 gdb/doc/gdb.texinfo               |  6 ++--
 gdb/mi/mi-cmd-break.c             | 56 +++++++++++++++++++++++++++++
 gdb/mi/mi-cmds.c                  |  4 +--
 gdb/mi/mi-cmds.h                  |  1 +
 gdb/testsuite/gdb.mi/mi-break.exp | 11 ++++++
 8 files changed, 123 insertions(+), 29 deletions(-)

diff --git a/gdb/NEWS b/gdb/NEWS
index 72bceb7266f..27429280aa5 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -39,6 +39,13 @@
     is equivalent to the '-force-condition' flag of the CLI's "break"
     command.
 
+ ** '-break-condition --force'
+
+    The MI -break-condition command now supports a '--force' flag to
+    forcibly define a condition even when the condition is invalid at
+    all locations of the selected breakpoint.  This is equivalent to
+    the '-force' flag of the CLI's "cond" command.
+
 * GDB now supports core file debugging for x86_64 Cygwin programs.
 
 * GDB will now look for the .gdbinit file in a config directory before
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index c2d0ffba974..22899ca9117 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -973,6 +973,39 @@ set_breakpoint_condition (struct breakpoint *b, const char *exp,
   gdb::observers::breakpoint_modified.notify (b);
 }
 
+/* See breakpoint.h.  */
+
+void
+set_breakpoint_condition (int bpnum, const char *exp, int from_tty,
+			  bool force)
+{
+  struct breakpoint *b;
+  ALL_BREAKPOINTS (b)
+    if (b->number == bpnum)
+      {
+	/* Check if this breakpoint has a "stop" method implemented in an
+	   extension language.  This method and conditions entered into GDB
+	   from the CLI are mutually exclusive.  */
+	const struct extension_language_defn *extlang
+	  = get_breakpoint_cond_ext_lang (b, EXT_LANG_NONE);
+
+	if (extlang != NULL)
+	  {
+	    error (_("Only one stop condition allowed.  There is currently"
+		     " a %s stop condition defined for this breakpoint."),
+		   ext_lang_capitalized_name (extlang));
+	  }
+	set_breakpoint_condition (b, exp, from_tty, force);
+
+	if (is_breakpoint (b))
+	  update_global_location_list (UGLL_MAY_INSERT);
+
+	return;
+      }
+
+  error (_("No breakpoint number %d."), bpnum);
+}
+
 /* The options for the "condition" command.  */
 
 struct condition_command_opts
@@ -1066,7 +1099,6 @@ condition_completer (struct cmd_list_element *cmd,
 static void
 condition_command (const char *arg, int from_tty)
 {
-  struct breakpoint *b;
   const char *p;
   int bnum;
 
@@ -1085,30 +1117,7 @@ condition_command (const char *arg, int from_tty)
   if (bnum == 0)
     error (_("Bad breakpoint argument: '%s'"), arg);
 
-  ALL_BREAKPOINTS (b)
-    if (b->number == bnum)
-      {
-	/* Check if this breakpoint has a "stop" method implemented in an
-	   extension language.  This method and conditions entered into GDB
-	   from the CLI are mutually exclusive.  */
-	const struct extension_language_defn *extlang
-	  = get_breakpoint_cond_ext_lang (b, EXT_LANG_NONE);
-
-	if (extlang != NULL)
-	  {
-	    error (_("Only one stop condition allowed.  There is currently"
-		     " a %s stop condition defined for this breakpoint."),
-		   ext_lang_capitalized_name (extlang));
-	  }
-	set_breakpoint_condition (b, p, from_tty, cc_opts.force_condition);
-
-	if (is_breakpoint (b))
-	  update_global_location_list (UGLL_MAY_INSERT);
-
-	return;
-      }
-
-  error (_("No breakpoint number %d."), bnum);
+  set_breakpoint_condition (bnum, p, from_tty, cc_opts.force_condition);
 }
 
 /* Check that COMMAND do not contain commands that are suitable
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index ded498f5562..2925f77df56 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -1657,6 +1657,14 @@ extern void breakpoint_retire_moribund (void);
 extern void set_breakpoint_condition (struct breakpoint *b, const char *exp,
 				      int from_tty, bool force);
 
+/* Set break condition for the breakpoint with number BPNUM to EXP.
+   Raise an error if no breakpoint with the given number is found.
+   Also raise an error if the breakpoint already has stop conditions.
+   If FORCE, define the condition even if it is invalid in
+   all of the breakpoint locations.  */
+extern void set_breakpoint_condition (int bpnum, const char *exp,
+				      int from_tty, bool force);
+
 /* Checks if we are catching syscalls or not.
    Returns 0 if not, greater than 0 if we are.  */
 extern int catch_syscall_enabled (void);
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index cac7ceb4665..a7e045b0544 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -30509,13 +30509,15 @@ times="0"@}
 @subsubheading Synopsis
 
 @smallexample
- -break-condition @var{number} @var{expr}
+ -break-condition [ --force ] @var{number} @var{expr}
 @end smallexample
 
 Breakpoint @var{number} will stop the program only if the condition in
 @var{expr} is true.  The condition becomes part of the
 @samp{-break-list} output (see the description of the @samp{-break-list}
-command below).
+command below).  If the @samp{--force} flag is passed, the condition
+is forcibly defined even when it is invalid for all locations of
+breakpoint @var{number}.
 
 @subsubheading @value{GDBN} Command
 
diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c
index fec75a8da5a..1a217ecab03 100644
--- a/gdb/mi/mi-cmd-break.c
+++ b/gdb/mi/mi-cmd-break.c
@@ -385,6 +385,62 @@ mi_cmd_dprintf_insert (const char *command, char **argv, int argc)
   mi_cmd_break_insert_1 (1, command, argv, argc);
 }
 
+/* Implements the -break-condition command.
+   See the MI manual for the list of options.  */
+
+void
+mi_cmd_break_condition (const char *command, char **argv, int argc)
+{
+  enum option
+    {
+      FORCE_CONDITION_OPT,
+    };
+
+  static const struct mi_opt opts[] =
+  {
+    {"-force", FORCE_CONDITION_OPT, 0},
+    { 0, 0, 0 }
+  };
+
+  /* Parse arguments.  */
+  int oind = 0;
+  char *oarg;
+  bool force_condition = false;
+
+  while (true)
+    {
+      int opt = mi_getopt ("-break-condition", argc, argv,
+			   opts, &oind, &oarg);
+      if (opt < 0)
+	break;
+
+      switch (opt)
+	{
+	case FORCE_CONDITION_OPT:
+	  force_condition = true;
+	  break;
+	}
+    }
+
+  /* There must be at least two more args: a bpnum and a condition
+     expression.  */
+  if (oind + 1 >= argc)
+    error (_("-break-condition: Missing arguments"));
+
+  int bpnum = atoi (argv[oind]);
+
+  /* The rest form the condition expr.  */
+  std::string expr (argv[oind + 1]);
+  for (int i = oind + 2; i < argc; ++i)
+    {
+      expr += " ";
+      expr += argv[i];
+    }
+
+  set_breakpoint_condition (bpnum, expr.c_str (), 0 /* from_tty */,
+			    force_condition);
+}
+
 enum wp_type
 {
   REG_WP,
diff --git a/gdb/mi/mi-cmds.c b/gdb/mi/mi-cmds.c
index df4290ae5dc..1ed8b6f9126 100644
--- a/gdb/mi/mi-cmds.c
+++ b/gdb/mi/mi-cmds.c
@@ -45,8 +45,8 @@ static struct mi_cmd mi_cmds[] =
   DEF_MI_CMD_MI ("add-inferior", mi_cmd_add_inferior),
   DEF_MI_CMD_CLI_1 ("break-after", "ignore", 1,
 		    &mi_suppress_notification.breakpoint),
-  DEF_MI_CMD_CLI_1 ("break-condition","cond", 1,
-		  &mi_suppress_notification.breakpoint),
+  DEF_MI_CMD_MI_1 ("break-condition", mi_cmd_break_condition,
+		   &mi_suppress_notification.breakpoint),
   DEF_MI_CMD_MI_1 ("break-commands", mi_cmd_break_commands,
 		   &mi_suppress_notification.breakpoint),
   DEF_MI_CMD_CLI_1 ("break-delete", "delete breakpoint", 1,
diff --git a/gdb/mi/mi-cmds.h b/gdb/mi/mi-cmds.h
index 4c05a4734a8..8da2e393919 100644
--- a/gdb/mi/mi-cmds.h
+++ b/gdb/mi/mi-cmds.h
@@ -36,6 +36,7 @@ extern mi_cmd_argv_ftype mi_cmd_ada_task_info;
 extern mi_cmd_argv_ftype mi_cmd_add_inferior;
 extern mi_cmd_argv_ftype mi_cmd_break_insert;
 extern mi_cmd_argv_ftype mi_cmd_dprintf_insert;
+extern mi_cmd_argv_ftype mi_cmd_break_condition;
 extern mi_cmd_argv_ftype mi_cmd_break_commands;
 extern mi_cmd_argv_ftype mi_cmd_break_passcount;
 extern mi_cmd_argv_ftype mi_cmd_break_watch;
diff --git a/gdb/testsuite/gdb.mi/mi-break.exp b/gdb/testsuite/gdb.mi/mi-break.exp
index 3b264ecdebd..b6ef3483004 100644
--- a/gdb/testsuite/gdb.mi/mi-break.exp
+++ b/gdb/testsuite/gdb.mi/mi-break.exp
@@ -424,6 +424,17 @@ proc_with_prefix test_forced_conditions {} {
     mi_gdb_test "-dprintf-insert -c bad --force-condition callme \"Hello\"" \
         "${warning}\\^done,$bp" \
         "dprintf with forced condition"
+
+    # Define a plain breakpoint first, and a condition later.
+    mi_create_breakpoint "callme" "define a bp" ""
+    mi_gdb_test "-break-condition --force 16 bad == 42" \
+        "${warning}\\^done" \
+        "invalid condition is forced"
+    set args [list -cond "bad == 42" -locations "\\\[$loc\\\]"]
+    set bp [eval mi_make_breakpoint_multi $args]
+    mi_gdb_test "-break-info 16" \
+	"\\^done,[mi_make_breakpoint_table [list $bp]]" \
+        "invalid condition is defined"
 }
 
 proc test_break {mi_mode} {
-- 
2.17.1


  parent reply	other threads:[~2021-04-22 14:36 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-31 15:42 [PATCH 0/2] Breakpoint conditions at locations with differing contexts Tankut Baris Aktemur
     [not found] ` <cover.1596209606.git.tankut.baris.aktemur@intel.com>
2020-07-31 15:42   ` [PATCH 1/2] gdb/breakpoint: disable a bp location if condition is invalid at that location Tankut Baris Aktemur
2020-07-31 15:42   ` [RFC][PATCH 2/2] gdb/breakpoint: add a '-force' flag to the 'condition' command Tankut Baris Aktemur
2020-08-03 10:28     ` Andrew Burgess
2020-08-20 21:24 ` [PATCH v2 0/2] Breakpoint conditions at locations with differing contexts Tankut Baris Aktemur
2020-08-20 21:24   ` [PATCH v2 1/2] gdb/breakpoint: disable a bp location if condition is invalid at that location Tankut Baris Aktemur
2020-09-19  3:05     ` Simon Marchi
2020-09-25 15:49       ` Aktemur, Tankut Baris via Gdb-patches
2020-09-25 16:10         ` Simon Marchi
2020-09-25 18:15           ` Aktemur, Tankut Baris via Gdb-patches
2020-10-13 12:24             ` Aktemur, Tankut Baris via Gdb-patches
2020-08-20 21:24   ` [PATCH v2 2/2] gdb/breakpoint: add flags to 'condition' and 'break' commands to force condition Tankut Baris Aktemur
2020-09-04 11:02   ` [PATCH v2 0/2] Breakpoint conditions at locations with differing contexts Tankut Baris Aktemur
2020-09-11 11:56   ` Tankut Baris Aktemur
2020-09-18 20:36   ` [PING][PATCH " Tankut Baris Aktemur
2020-09-25 15:51 ` [PATCH v3 " Tankut Baris Aktemur via Gdb-patches
2020-09-25 15:51   ` [PATCH v3 1/2] gdb/breakpoint: disable a bp location if condition is invalid at that location Tankut Baris Aktemur via Gdb-patches
2020-09-25 15:51   ` [PATCH v3 2/2] gdb/breakpoint: add flags to 'condition' and 'break' commands to force condition Tankut Baris Aktemur via Gdb-patches
2020-10-13 12:25 ` [PATCH v4 0/2] Breakpoint conditions at locations with differing contexts Tankut Baris Aktemur via Gdb-patches
2020-10-13 12:25   ` [PATCH v4 1/2] gdb/breakpoint: disable a bp location if condition is invalid at that location Tankut Baris Aktemur via Gdb-patches
2020-10-13 15:06     ` Eli Zaretskii via Gdb-patches
2020-10-13 15:17       ` Aktemur, Tankut Baris via Gdb-patches
2020-10-16 22:20     ` Simon Marchi
2020-10-13 12:25   ` [PATCH v4 2/2] gdb/breakpoint: add flags to 'condition' and 'break' commands to force condition Tankut Baris Aktemur via Gdb-patches
2020-10-13 15:08     ` Eli Zaretskii via Gdb-patches
2020-10-13 15:46       ` Aktemur, Tankut Baris via Gdb-patches
2020-10-13 16:12         ` Eli Zaretskii via Gdb-patches
2020-10-16 22:45     ` Simon Marchi
2020-10-19 13:58       ` Aktemur, Tankut Baris via Gdb-patches
2020-10-19 14:07         ` Simon Marchi
2020-10-27 10:13         ` Aktemur, Tankut Baris via Gdb-patches
2020-10-29 10:10           ` Tom de Vries
2020-10-29 10:30             ` Aktemur, Tankut Baris via Gdb-patches
2020-10-29 17:30     ` Pedro Alves
2020-11-10 19:33       ` Aktemur, Tankut Baris via Gdb-patches
2020-12-05 17:30         ` Pedro Alves
2020-12-10 20:30           ` Tom Tromey
2020-12-15 11:20             ` Aktemur, Tankut Baris via Gdb-patches
2020-11-10 19:51       ` Aktemur, Tankut Baris via Gdb-patches
2020-10-28 16:57   ` [PATCH v4 0/2] Breakpoint conditions at locations with differing contexts Gary Benson via Gdb-patches
2020-10-29  7:43     ` Aktemur, Tankut Baris via Gdb-patches
2021-04-05 17:45 ` [PATCH " Jonah Graham
2021-04-06 14:11   ` Aktemur, Tankut Baris via Gdb-patches
2021-04-06 14:37     ` Jonah Graham
2021-04-07  7:09       ` Aktemur, Tankut Baris via Gdb-patches
2021-04-07 11:26         ` Jonah Graham
2021-04-07 14:55   ` [PATCH 0/4] Multi-context invalid breakpoint conditions and MI Tankut Baris Aktemur via Gdb-patches
2021-04-07 14:55     ` [PATCH 1/4] gdb/doc: update the 'enabled' field's description for BP locations in MI Tankut Baris Aktemur via Gdb-patches
2021-04-07 15:15       ` Eli Zaretskii via Gdb-patches
2021-04-07 21:42       ` Simon Marchi via Gdb-patches
2021-04-07 14:55     ` [PATCH 2/4] testsuite, gdb.mi: fix duplicate test names in mi-break.exp Tankut Baris Aktemur via Gdb-patches
2021-04-07 21:49       ` Simon Marchi via Gdb-patches
2021-04-07 14:55     ` [PATCH 3/4] gdb/breakpoint: add a 'force_condition' parameter to 'create_breakpoint' Tankut Baris Aktemur via Gdb-patches
2021-04-07 22:08       ` Simon Marchi via Gdb-patches
2021-04-08  7:44         ` Aktemur, Tankut Baris via Gdb-patches
2021-04-08 13:59           ` Simon Marchi via Gdb-patches
2021-04-08 14:19             ` Aktemur, Tankut Baris via Gdb-patches
2021-04-07 14:55     ` [PATCH 4/4] gdb/mi: add a '-b' flag to the '-break-insert' cmd to force the condition Tankut Baris Aktemur via Gdb-patches
2021-04-07 15:18       ` Eli Zaretskii via Gdb-patches
2021-04-07 15:27         ` Aktemur, Tankut Baris via Gdb-patches
2021-04-07 15:53           ` Eli Zaretskii via Gdb-patches
2021-04-07 16:05             ` Aktemur, Tankut Baris via Gdb-patches
2021-04-07 16:50               ` Eli Zaretskii via Gdb-patches
2021-04-07 22:26       ` Simon Marchi via Gdb-patches
2021-04-08 14:22     ` [PATCH v2 0/4] Multi-context invalid breakpoint conditions and MI Tankut Baris Aktemur via Gdb-patches
2021-04-08 14:22       ` [PATCH v2 1/4] gdb/breakpoint: display "N" on MI for disabled-by-condition locations Tankut Baris Aktemur via Gdb-patches
2021-04-08 15:04         ` Eli Zaretskii via Gdb-patches
2021-04-08 14:22       ` [PATCH v2 2/4] testsuite, gdb.mi: fix duplicate test names in mi-break.exp Tankut Baris Aktemur via Gdb-patches
2021-04-08 14:22       ` [PATCH v2 3/4] gdb/breakpoint: add a 'force_condition' parameter to 'create_breakpoint' Tankut Baris Aktemur via Gdb-patches
2021-04-08 14:22       ` [PATCH v2 4/4] gdb/mi: add a '--force-condition' flag to the '-break-insert' cmd Tankut Baris Aktemur via Gdb-patches
2021-04-08 15:06         ` Eli Zaretskii via Gdb-patches
2021-04-08 15:12           ` Aktemur, Tankut Baris via Gdb-patches
2021-04-11  1:06         ` Jonah Graham
2021-04-11  1:12           ` Simon Marchi via Gdb-patches
2021-04-21 12:06             ` Aktemur, Tankut Baris via Gdb-patches
2021-04-21 12:36               ` Simon Marchi via Gdb-patches
2021-04-11  1:13       ` [PATCH v2 0/4] Multi-context invalid breakpoint conditions and MI Jonah Graham
2021-04-21 12:17       ` [PATCH v3 " Tankut Baris Aktemur via Gdb-patches
2021-04-21 12:17         ` [PATCH v3 1/4] gdb/breakpoint: display "N" on MI for disabled-by-condition locations Tankut Baris Aktemur via Gdb-patches
2021-04-21 12:48           ` Eli Zaretskii via Gdb-patches
2021-04-21 12:17         ` [PATCH v3 2/4] testsuite, gdb.mi: fix duplicate test names in mi-break.exp Tankut Baris Aktemur via Gdb-patches
2021-04-21 12:17         ` [PATCH v3 3/4] gdb/breakpoint: add a 'force_condition' parameter to 'create_breakpoint' Tankut Baris Aktemur via Gdb-patches
2021-04-21 13:18           ` Simon Marchi via Gdb-patches
2021-04-21 13:29             ` Aktemur, Tankut Baris via Gdb-patches
2021-04-21 14:28               ` Simon Marchi via Gdb-patches
2021-04-21 12:17         ` [PATCH v3 4/4] gdb/mi: add a '--force-condition' flag to the '-break-insert' cmd Tankut Baris Aktemur via Gdb-patches
2021-04-21 12:50           ` Eli Zaretskii via Gdb-patches
2021-04-21 13:37           ` Simon Marchi via Gdb-patches
2021-04-21 13:49             ` Aktemur, Tankut Baris via Gdb-patches
2021-04-21 14:26               ` Simon Marchi via Gdb-patches
2021-04-22 14:35         ` [PATCH v4 0/2] Multi-context invalid breakpoint conditions and MI Tankut Baris Aktemur via Gdb-patches
2021-04-22 14:35           ` [PATCH v4 1/2] gdb/mi: add a '--force-condition' flag to the '-break-insert' cmd Tankut Baris Aktemur via Gdb-patches
2021-05-06  2:40             ` Simon Marchi via Gdb-patches
2021-04-22 14:35           ` Tankut Baris Aktemur via Gdb-patches [this message]
2021-04-22 14:47             ` [PATCH v4 2/2] gdb/mi: add a '--force' flag to the '-break-condition' command Aktemur, Tankut Baris via Gdb-patches
2021-05-06  2:46             ` Simon Marchi via Gdb-patches
2021-05-06  8:50               ` Aktemur, Tankut Baris via Gdb-patches
2021-07-11 18:51               ` Jonah Graham
2021-07-12  0:25                 ` Jonah Graham
2021-07-12  8:33                 ` Aktemur, Tankut Baris via Gdb-patches
2021-05-05 15:57           ` [PATCH v4 0/2] Multi-context invalid breakpoint conditions and MI Aktemur, Tankut Baris via Gdb-patches
2021-04-07 21:24   ` [PATCH 0/2] Breakpoint conditions at locations with differing contexts Simon Marchi via Gdb-patches
2021-04-07 21:36     ` Jonah Graham

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=ca87fdd9af5c7b3f2f33010a31e688e4dbfc0c6a.1619101936.git.tankut.baris.aktemur@intel.com \
    --to=gdb-patches@sourceware.org \
    --cc=tankut.baris.aktemur@intel.com \
    /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