public inbox for archer-commits@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master:  * infcmd.c (construct_inferior_arguments): Handle newlines
@ 2008-10-30 18:34 tromey
  0 siblings, 0 replies; only message in thread
From: tromey @ 2008-10-30 18:34 UTC (permalink / raw)
  To: archer-commits

The branch, master has been updated
       via  fd28abdac605dbd3d0a84fc448da779df436a54d (commit)
       via  5b3c672102219576a43d572eba46d25ee9486411 (commit)
       via  6a4612eb0ac71b42080b90441856adfb68a1536f (commit)
       via  b7f4bf387d81be789ed289994dd1cbbc6a819047 (commit)
       via  9b7d6c018ec7368b9434a2e54cc80430827b1f81 (commit)
       via  ff05c27dbe7c685aa5aadffa177e5ede334a3696 (commit)
       via  640bd554b6b2d33bc1c7395e900472b0d44fc269 (commit)
      from  34264c2204bc4b44c036297cb94d08885f9a33c2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit fd28abdac605dbd3d0a84fc448da779df436a54d
Author: Andreas Schwab <schwab@suse.de>
Date:   Thu Oct 30 10:07:14 2008 +0000

    	* infcmd.c (construct_inferior_arguments): Handle newlines
    	specially.
    
    testsuite/:
    	* gdb.base/args.exp: Add tests for newlines.

commit 5b3c672102219576a43d572eba46d25ee9486411
Author: Nick Clifton <nickc@redhat.com>
Date:   Thu Oct 30 09:05:31 2008 +0000

     * cache.c (cache_bread): Cast void * pointer before performing
     arithmetic on it.

commit 6a4612eb0ac71b42080b90441856adfb68a1536f
Author: Joel Brobecker <brobecker@gnat.com>
Date:   Thu Oct 30 05:17:58 2008 +0000

            gdb.base/foll-exec.exp: Update the expected output of a couple
            of "info breakpoints" tests.

commit b7f4bf387d81be789ed289994dd1cbbc6a819047
Author: Joel Brobecker <brobecker@gnat.com>
Date:   Thu Oct 30 05:16:23 2008 +0000

            * breakpoint.h (enum bptype): Delete bp_catch_exec.
            * breakpoint.c (insert_catchpoint): Remove handling for
            bp_catch_exec breakpoint kinds.
            (insert_bp_location, update_breakpoints_after_exec, remove_breakpoint)
            (ep_is_catchpoint, print_it_typical, bpstat_check_location),
            (bpstat_check_location, bpstat_what, print_one_breakpoint_location)
            (print_one_breakpoint_location, user_settable_breakpoint)
            (breakpoint_address_is_meaningful, adjust_breakpoint_address)
            (allocate_bp_location, mention, breakpoint_re_set_one)
            (disable_command, enable_command): Likewise.
            (create_exec_event_catchpoint): Delete.
            (insert_catch_exec, remove_catch_exec, breakpoint_hit_catch_exec)
            (print_it_catch_exec, print_one_catch_exec, print_mention_catch_exec):
            New functions.
            (catch_exec_breakpoint_ops): New static global.
            (catch_exec_command_1): Use create_catchpoint instead of
            create_exec_event_catchpoint to create the exec catchpoint.

commit 9b7d6c018ec7368b9434a2e54cc80430827b1f81
Author: gdbadmin <gdbadmin@sourceware.org>
Date:   Thu Oct 30 00:00:33 2008 +0000

    *** empty log message ***

commit ff05c27dbe7c685aa5aadffa177e5ede334a3696
Author: Alan Modra <amodra@bigpond.net.au>
Date:   Thu Oct 30 00:00:08 2008 +0000

    daily update

commit 640bd554b6b2d33bc1c7395e900472b0d44fc269
Author: Ulrich Weigand <uweigand@de.ibm.com>
Date:   Wed Oct 29 19:39:13 2008 +0000

    2008-10-29  Stefan Schulze Frielinghaus  <xxschulz@de.ibm.com>
    
    	* configure.ac [spu-*-*]: Do not set skipdirs.
    	* configure: Re-generate.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                            |    5 +
 bfd/ChangeLog                        |    5 +
 bfd/cache.c                          |    8 +-
 bfd/version.h                        |    2 +-
 configure                            |    1 -
 configure.ac                         |    1 -
 gdb/ChangeLog                        |   25 +++++
 gdb/breakpoint.c                     |  181 ++++++++++++++--------------------
 gdb/breakpoint.h                     |    8 --
 gdb/infcmd.c                         |   20 +++-
 gdb/testsuite/ChangeLog              |    9 ++
 gdb/testsuite/gdb.base/args.exp      |    8 ++
 gdb/testsuite/gdb.base/foll-exec.exp |   24 ++---
 gdb/version.in                       |    2 +-
 14 files changed, 158 insertions(+), 141 deletions(-)

First 500 lines of diff:
diff --git a/ChangeLog b/ChangeLog
index 141b7aa..ef8a40a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-10-29  Stefan Schulze Frielinghaus  <xxschulz@de.ibm.com>
+
+	* configure.ac [spu-*-*]: Do not set skipdirs.
+	* configure: Re-generate.
+
 2008-10-24  Daniel Jacobowitz  <dan@codesourcery.com>
 
 	* Makefile.tpl (HOST_EXPORTS): Correct CPPFLAGS typo.
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index a9e5923..9a70d7d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2008-10-30  Jay Krell  <jay.krell@cornell.edu>
+
+	* cache.c (cache_bread): Cast void * pointer before performing
+	arithmetic on it.
+
 2008-10-20  Alan Modra  <amodra@bigpond.net.au>
 
 	* elf64-ppc.c (ppc64_elf_process_dot_syms): Renamed from
diff --git a/bfd/cache.c b/bfd/cache.c
index 3906335..50674e8 100644
--- a/bfd/cache.c
+++ b/bfd/cache.c
@@ -317,7 +317,7 @@ cache_bread (struct bfd *abfd, void *buf, file_ptr nbytes)
       if (chunk_size > max_chunk_size)
         chunk_size = max_chunk_size;
 
-      chunk_nread = cache_bread_1 (abfd, buf + nread, chunk_size);
+      chunk_nread = cache_bread_1 (abfd, (char *) buf + nread, chunk_size);
 
       /* Update the nread count.
 
@@ -342,6 +342,7 @@ cache_bwrite (struct bfd *abfd, const void *where, file_ptr nbytes)
 {
   file_ptr nwrite;
   FILE *f = bfd_cache_lookup (abfd, 0);
+
   if (f == NULL)
     return 0;
   nwrite = fwrite (where, 1, nbytes, f);
@@ -364,6 +365,7 @@ cache_bflush (struct bfd *abfd)
 {
   int sts;
   FILE *f = bfd_cache_lookup (abfd, CACHE_NO_OPEN);
+
   if (f == NULL)
     return 0;
   sts = fflush (f);
@@ -377,6 +379,7 @@ cache_bstat (struct bfd *abfd, struct stat *sb)
 {
   int sts;
   FILE *f = bfd_cache_lookup (abfd, CACHE_NO_SEEK_ERROR);
+
   if (f == NULL)
     return -1;
   sts = fstat (fileno (f), sb);
@@ -385,7 +388,8 @@ cache_bstat (struct bfd *abfd, struct stat *sb)
   return sts;
 }
 
-static const struct bfd_iovec cache_iovec = {
+static const struct bfd_iovec cache_iovec =
+{
   &cache_bread, &cache_bwrite, &cache_btell, &cache_bseek,
   &cache_bclose, &cache_bflush, &cache_bstat
 };
diff --git a/bfd/version.h b/bfd/version.h
index 459e45a..b754e7d 100644
--- a/bfd/version.h
+++ b/bfd/version.h
@@ -1,4 +1,4 @@
-#define BFD_VERSION_DATE 20081029
+#define BFD_VERSION_DATE 20081030
 #define BFD_VERSION @bfd_version@
 #define BFD_VERSION_STRING  @bfd_version_package@ @bfd_version_string@
 #define REPORT_BUGS_TO @report_bugs_to@
diff --git a/configure b/configure
index dfeb45e..0000ea8 100755
--- a/configure
+++ b/configure
@@ -2643,7 +2643,6 @@ case "${target}" in
   sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
     ;;
   spu-*-*)
-    skipdirs="target-libssp"
     ;;
   v810-*-*)
     noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libstdc++-v3 opcodes target-libgloss ${libgcj}"
diff --git a/configure.ac b/configure.ac
index 1915877..726a58f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -892,7 +892,6 @@ case "${target}" in
   sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
     ;;
   spu-*-*)
-    skipdirs="target-libssp"
     ;;
   v810-*-*)
     noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libstdc++-v3 opcodes target-libgloss ${libgcj}"
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index d104a96..0ee7904 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,28 @@
+2008-10-30  Andreas Schwab  <schwab@suse.de>
+
+	* infcmd.c (construct_inferior_arguments): Handle newlines
+	specially.
+
+2008-10-30  Joel Brobecker  <brobecker@adacore.com>
+
+	* breakpoint.h (enum bptype): Delete bp_catch_exec.
+	* breakpoint.c (insert_catchpoint): Remove handling for
+	bp_catch_exec breakpoint kinds.
+	(insert_bp_location, update_breakpoints_after_exec, remove_breakpoint)
+	(ep_is_catchpoint, print_it_typical, bpstat_check_location),
+	(bpstat_check_location, bpstat_what, print_one_breakpoint_location)
+	(print_one_breakpoint_location, user_settable_breakpoint)
+	(breakpoint_address_is_meaningful, adjust_breakpoint_address)
+	(allocate_bp_location, mention, breakpoint_re_set_one)
+	(disable_command, enable_command): Likewise.
+	(create_exec_event_catchpoint): Delete.
+	(insert_catch_exec, remove_catch_exec, breakpoint_hit_catch_exec)
+	(print_it_catch_exec, print_one_catch_exec, print_mention_catch_exec):
+	New functions.
+	(catch_exec_breakpoint_ops): New static global.
+	(catch_exec_command_1): Use create_catchpoint instead of
+	create_exec_event_catchpoint to create the exec catchpoint.
+
 2008-10-28  Tom Tromey  <tromey@redhat.com>
 
 	* Makefile.in (SUBDIR_CLI_OBS): Don't mention cli-utils.o.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 01b2990..0076ff8 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -790,19 +790,10 @@ insert_catchpoint (struct ui_out *uo, void *args)
   struct breakpoint *b = (struct breakpoint *) args;
   int val = -1;
 
-  switch (b->type)
-    {
-    case bp_catchpoint:
-      gdb_assert (b->ops != NULL && b->ops->insert != NULL);
-      b->ops->insert (b);
-      break;
-    case bp_catch_exec:
-      target_insert_exec_catchpoint (PIDGET (inferior_ptid));
-      break;
-    default:
-      internal_error (__FILE__, __LINE__, _("unknown breakpoint type"));
-      break;
-    }
+  gdb_assert (b->type == bp_catchpoint);
+  gdb_assert (b->ops != NULL && b->ops->insert != NULL);
+
+  b->ops->insert (b);
 }
 
 static int
@@ -1237,8 +1228,7 @@ Note: automatically using hardware breakpoints for read-only addresses.\n"));
       bpt->inserted = (val != -1);
     }
 
-  else if (bpt->owner->type == bp_catchpoint
-	   || bpt->owner->type == bp_catch_exec)
+  else if (bpt->owner->type == bp_catchpoint)
     {
       struct gdb_exception e = catch_exception (uiout, insert_catchpoint,
 						bpt->owner, RETURN_MASK_ERROR);
@@ -1502,13 +1492,6 @@ update_breakpoints_after_exec (void)
         continue;
       }
 
-    /* Don't delete an exec catchpoint, because else the inferior
-       won't stop when it ought!  */
-    if (b->type == bp_catch_exec)
-      {
-	continue;
-      }
-
     /* bp_finish is a special case.  The only way we ought to be able
        to see one of these when an exec() has happened, is if the user
        caught a vfork, and then said "finish".  Ordinarily a finish just
@@ -1690,24 +1673,6 @@ remove_breakpoint (struct bp_location *b, insertion_state_t is)
 	return val;
       b->inserted = (is == mark_inserted);
     }
-  else if (b->owner->type == bp_catch_exec
-	   && breakpoint_enabled (b->owner)
-	   && !b->duplicate)
-    {
-      val = -1;
-      switch (b->owner->type)
-	{
-	case bp_catch_exec:
-	  val = target_remove_exec_catchpoint (PIDGET (inferior_ptid));
-	  break;
-	default:
-	  warning (_("Internal error, %s line %d."), __FILE__, __LINE__);
-	  break;
-	}
-      if (val)
-	return val;
-      b->inserted = (is == mark_inserted);
-    }
 
   return 0;
 }
@@ -1966,8 +1931,7 @@ ep_is_catchpoint (struct breakpoint *ep)
 {
   return (ep->type == bp_catchpoint)
     || (ep->type == bp_catch_load)
-    || (ep->type == bp_catch_unload)
-    || (ep->type == bp_catch_exec);
+    || (ep->type == bp_catch_unload);
 
   /* ??rehrauer: Add more kinds here, as are implemented... */
 }
@@ -2365,14 +2329,6 @@ print_it_typical (bpstat bs)
       return PRINT_SRC_AND_LOC;
       break;
 
-    case bp_catch_exec:
-      annotate_catchpoint (b->number);
-      printf_filtered (_("\nCatchpoint %d (exec'd %s), "),
-		       b->number,
-		       b->exec_pathname);
-      return PRINT_SRC_AND_LOC;
-      break;
-
     case bp_watchpoint:
     case bp_hardware_watchpoint:
       annotate_watchpoint (b->number);
@@ -2791,8 +2747,7 @@ bpstat_check_location (const struct bp_location *bl, CORE_ADDR bp_addr)
       && b->type != bp_read_watchpoint
       && b->type != bp_access_watchpoint
       && b->type != bp_hardware_breakpoint
-      && b->type != bp_catchpoint
-      && b->type != bp_catch_exec)	/* a non-watchpoint bp */
+      && b->type != bp_catchpoint)	/* a non-watchpoint bp */
     {
       if (bl->address != bp_addr) 	/* address doesn't match */
 	return 0;
@@ -2859,10 +2814,6 @@ bpstat_check_location (const struct bp_location *bl, CORE_ADDR bp_addr)
         return 0;
     }
      
-  if ((b->type == bp_catch_exec)
-      && !inferior_has_execd (inferior_ptid, &b->exec_pathname))
-    return 0;
-
   return 1;
 }
 
@@ -3388,7 +3339,6 @@ bpstat_what (bpstat bs)
 	    bs_class = no_effect;
 	  break;
 	case bp_catchpoint:
-	case bp_catch_exec:
 	  if (bs->stop)
 	    {
 	      if (bs->print)
@@ -3568,8 +3518,7 @@ print_one_breakpoint_location (struct breakpoint *b,
     {bp_overlay_event, "overlay events"},
     {bp_catchpoint, "catchpoint"},
     {bp_catch_load, "catch load"},
-    {bp_catch_unload, "catch unload"},
-    {bp_catch_exec, "catch exec"}
+    {bp_catch_unload, "catch unload"}
   };
   
   static char bpenables[] = "nynny";
@@ -3706,21 +3655,6 @@ print_one_breakpoint_location (struct breakpoint *b,
 	  }
 	break;
 
-      case bp_catch_exec:
-	/* Field 4, the address, is omitted (which makes the columns
-	   not line up too nicely with the headers, but the effect
-	   is relatively readable).  */
-	if (opts.addressprint)
-	  ui_out_field_skip (uiout, "addr");
-	annotate_field (5);
-	if (b->exec_pathname != NULL)
-	  {
-	    ui_out_text (uiout, "program \"");
-	    ui_out_field_string (uiout, "what", b->exec_pathname);
-	    ui_out_text (uiout, "\" ");
-	  }
-	break;
-
       case bp_breakpoint:
       case bp_hardware_breakpoint:
       case bp_until:
@@ -3920,7 +3854,6 @@ user_settable_breakpoint (const struct breakpoint *b)
 	  || b->type == bp_catchpoint
 	  || b->type == bp_catch_load
 	  || b->type == bp_catch_unload
-	  || b->type == bp_catch_exec
 	  || b->type == bp_hardware_breakpoint
 	  || b->type == bp_watchpoint
 	  || b->type == bp_read_watchpoint
@@ -4130,8 +4063,7 @@ set_default_breakpoint (int valid, CORE_ADDR addr, struct symtab *symtab,
       bp_hardware_watchpoint
       bp_read_watchpoint
       bp_access_watchpoint
-      bp_catchpoint
-      bp_catch_exec */
+      bp_catchpoint */
 
 static int
 breakpoint_address_is_meaningful (struct breakpoint *bpt)
@@ -4142,8 +4074,7 @@ breakpoint_address_is_meaningful (struct breakpoint *bpt)
 	  && type != bp_hardware_watchpoint
 	  && type != bp_read_watchpoint
 	  && type != bp_access_watchpoint
-	  && type != bp_catchpoint
-	  && type != bp_catch_exec);
+	  && type != bp_catchpoint);
 }
 
 /* Rescan breakpoints at the same address and section as BPT,
@@ -4258,8 +4189,7 @@ adjust_breakpoint_address (CORE_ADDR bpaddr, enum bptype bptype)
            || bptype == bp_hardware_watchpoint
            || bptype == bp_read_watchpoint
            || bptype == bp_access_watchpoint
-           || bptype == bp_catchpoint
-           || bptype == bp_catch_exec)
+           || bptype == bp_catchpoint)
     {
       /* Watchpoints and the various bp_catch_* eventpoints should not
          have their addresses modified.  */
@@ -4326,7 +4256,6 @@ allocate_bp_location (struct breakpoint *bpt, enum bptype bp_type)
       break;
     case bp_watchpoint:
     case bp_catchpoint:
-    case bp_catch_exec:
       loc->loc_type = bp_loc_other;
       break;
     default:
@@ -4939,32 +4868,73 @@ create_fork_vfork_event_catchpoint (int tempflag, char *cond_string,
   b->forked_inferior_pid = null_ptid;
 }
 
+/* Exec catchpoints.  */
+
 static void
-create_exec_event_catchpoint (int tempflag, char *cond_string)
+insert_catch_exec (struct breakpoint *b)
 {
-  struct symtab_and_line sal;
-  struct breakpoint *b;
-  int thread = -1;		/* All threads. */
+  target_insert_exec_catchpoint (PIDGET (inferior_ptid));
+}
 
-  init_sal (&sal);
-  sal.pc = 0;
-  sal.symtab = NULL;
-  sal.line = 0;
+static int
+remove_catch_exec (struct breakpoint *b)
+{
+  return target_remove_exec_catchpoint (PIDGET (inferior_ptid));
+}
 
-  b = set_raw_breakpoint (sal, bp_catch_exec);
-  set_breakpoint_count (breakpoint_count + 1);
-  b->number = breakpoint_count;
-  b->cond_string = (cond_string == NULL) ?
-    NULL : savestring (cond_string, strlen (cond_string));
-  b->thread = thread;
-  b->addr_string = NULL;
-  b->enable_state = bp_enabled;
-  b->disposition = tempflag ? disp_del : disp_donttouch;
-  update_global_location_list (1);
+static int
+breakpoint_hit_catch_exec (struct breakpoint *b)
+{
+  return inferior_has_execd (inferior_ptid, &b->exec_pathname);
+}
 
-  mention (b);
+static enum print_stop_action
+print_it_catch_exec (struct breakpoint *b)
+{
+  annotate_catchpoint (b->number);
+  printf_filtered (_("\nCatchpoint %d (exec'd %s), "), b->number,
+		   b->exec_pathname);
+  return PRINT_SRC_AND_LOC;
 }
 
+static void
+print_one_catch_exec (struct breakpoint *b, CORE_ADDR *last_addr)
+{
+  struct value_print_options opts;
+
+  get_user_print_options (&opts);
+
+  /* Field 4, the address, is omitted (which makes the columns
+     not line up too nicely with the headers, but the effect
+     is relatively readable).  */
+  if (opts.addressprint)
+    ui_out_field_skip (uiout, "addr");
+  annotate_field (5);
+  ui_out_text (uiout, "exec");
+  if (b->exec_pathname != NULL)
+    {
+      ui_out_text (uiout, ", program \"");
+      ui_out_field_string (uiout, "what", b->exec_pathname);
+      ui_out_text (uiout, "\" ");
+    }
+}
+
+static void
+print_mention_catch_exec (struct breakpoint *b)
+{
+  printf_filtered (_("Catchpoint %d (exec)"), b->number);
+}
+
+static struct breakpoint_ops catch_exec_breakpoint_ops =
+{
+  insert_catch_exec,
+  remove_catch_exec,
+  breakpoint_hit_catch_exec,
+  print_it_catch_exec,
+  print_one_catch_exec,
+  print_mention_catch_exec
+};
+
 static int
 hw_breakpoint_used_count (void)
 {
@@ -5175,10 +5145,6 @@ mention (struct breakpoint *b)
 			 (b->dll_pathname != NULL) ? 
 			 b->dll_pathname : "<any library>");
 	break;
-      case bp_catch_exec:
-	printf_filtered (_("Catchpoint %d (exec)"),
-			 b->number);
-	break;
 
       case bp_until:
       case bp_finish:
@@ -6633,7 +6599,7 @@ catch_exec_command_1 (char *arg, int from_tty, struct cmd_list_element *command)
 
   /* If this target supports it, create an exec catchpoint
      and enable reporting of such events. */
-  create_exec_event_catchpoint (tempflag, cond_string);
+  create_catchpoint (tempflag, cond_string, &catch_exec_breakpoint_ops);
 }
 
 static void
@@ -7772,7 +7738,6 @@ breakpoint_re_set_one (void *bint)
          that requests them is unaffected by e.g., new libraries being
          loaded. */
     case bp_catchpoint:
-    case bp_catch_exec:
       break;
 
     default:
@@ -8041,7 +8006,6 @@ disable_command (char *args, int from_tty)
       case bp_catchpoint:
       case bp_catch_load:
       case bp_catch_unload:
-      case bp_catch_exec:
       case bp_hardware_breakpoint:
       case bp_watchpoint:
       case bp_hardware_watchpoint:
@@ -8174,7 +8138,6 @@ enable_command (char *args, int from_tty)
       case bp_catchpoint:
       case bp_catch_load:
       case bp_catch_unload:
-      case bp_catch_exec:
       case bp_hardware_breakpoint:
       case bp_watchpoint:
       case bp_hardware_watchpoint:
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index 5c05aa9..a77b1b4 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -119,14 +119,6 @@ enum bptype
     /* These breakpoints are used to implement the "catch unload" command
        on platforms whose dynamic linkers support such functionality.  */
     bp_catch_unload,
-
-    /* These are not really breakpoints, but are catchpoints that
-       implement the "catch fork", "catch vfork" and "catch exec" commands
-       on platforms whose kernel support such functionality.  (I.e.,
-       kernels which can raise an event when a fork or exec occurs, as
-       opposed to the debugger setting breakpoints on functions named


hooks/post-receive
--
Repository for Project Archer.


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-10-30 18:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-10-30 18:34 [SCM] master: * infcmd.c (construct_inferior_arguments): Handle newlines tromey

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).