public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: "Joseph S. Myers" <joseph@codesourcery.com>
To: Richard Guenther <richard.guenther@gmail.com>
Cc: gcc-patches@gcc.gnu.org, bernds@codesourcery.com,
	nickc@redhat.com,     cgf@gcc.gnu.org, ktietz@redhat.com,
	dave.korn.cygwin@gmail.com,     law@redhat.com,
	aoliva@redhat.com
Subject: Re: Ping^2 Re: Target header etc. cleanup patch
Date: Thu, 21 Apr 2011 11:37:00 -0000	[thread overview]
Message-ID: <Pine.LNX.4.64.1104211001570.9614@digraph.polyomino.org.uk> (raw)
In-Reply-To: <BANLkTik8Dw5cR0o+UPKt0KzpYUo6JZibTw@mail.gmail.com>

[-- Attachment #1: Type: TEXT/PLAIN, Size: 17986 bytes --]

On Thu, 21 Apr 2011, Richard Guenther wrote:

> On Wed, Apr 20, 2011 at 11:09 PM, Joseph S. Myers
> <joseph@codesourcery.com> wrote:
> > Ping^2.  This patch
> > <http://gcc.gnu.org/ml/gcc-patches/2011-04/msg00130.html> is still pending
> > review.  This version applies cleanly to current trunk.
> 
> The s/struct rtx_def */rtx/ changes are all ok (in fact I'd say they are
> obvious).

I have committed the approved parts (those, plus the cris and m32c 
changes) as r172818.  The following remains pending review (target 
maintainers CC:ed).

2011-04-21  Joseph Myers  <joseph@codesourcery.com>

	* config/bfin/bfin-protos.h (Mmode): Don't define.  Expand
	definition where used.
	* config/fr30/fr30-protos.h (Mmode): Don't define.
	* config/fr30/fr30.h (inhibit_libc): Don't define.
	* config/i386/cygming.h (union tree_node, TREE): Don't define or
	undefine.
	(FILE): Don't undefine.
	* config/m32r/m32r-protos.h (Mmode): Don't define.  Expand
	definition where used.
	* config/mn10300/mn10300-protos.h (Mmode, Cstar, Rclas): Don't
	define.  Expand definitions where used.
	* config/rx/rx-protos.h (Mmode, Fargs, Rcode): Don't define.
	Expand definitions where used.
	* config/rx/rx.c (rx_is_legitimate_address, rx_function_arg_size,
	rx_function_arg, rx_function_arg_advance,
	rx_function_arg_boundary): Expand definitions of those macros.
	* config/v850/v850-protos.h (Mmode): Don't define.  Expand
	definition where used.
	* config/v850/v850.h (GHS_default_section_names,
	GHS_current_section_names): Use tree, not union tree_node *.

Index: gcc/config/m32r/m32r-protos.h
===================================================================
--- gcc/config/m32r/m32r-protos.h	(revision 172818)
+++ gcc/config/m32r/m32r-protos.h	(working copy)
@@ -1,5 +1,6 @@
 /* Prototypes for m32r.c functions used in the md file & elsewhere.
-   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010
+   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010,
+   2011
    Free Software Foundation, Inc.
 
    This file is part of GCC.
@@ -18,9 +19,8 @@
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
-/* Function prototypes that cannot exist in v850.h due to dependency
+/* Function prototypes that cannot exist in m32r.h due to dependency
    complications.  */
-#define Mmode enum machine_mode
 
 extern void   m32r_init (void);
 extern void   m32r_init_expanders (void);
@@ -51,16 +51,14 @@ extern rtx    m32r_return_addr (int);
 extern rtx    m32r_function_symbol (const char *);
 
 #ifdef HAVE_MACHINE_MODES
-extern int    call_operand (rtx, Mmode);
-extern int    small_data_operand (rtx, Mmode);
-extern int    addr24_operand (rtx, Mmode);
-extern int    addr32_operand (rtx, Mmode);
-extern int    call26_operand (rtx, Mmode);
-extern int    memreg_operand (rtx, Mmode);
-extern int    small_insn_p (rtx, Mmode);
+extern int    call_operand (rtx, enum machine_mode);
+extern int    small_data_operand (rtx, enum machine_mode);
+extern int    addr24_operand (rtx, enum machine_mode);
+extern int    addr32_operand (rtx, enum machine_mode);
+extern int    call26_operand (rtx, enum machine_mode);
+extern int    memreg_operand (rtx, enum machine_mode);
+extern int    small_insn_p (rtx, enum machine_mode);
 
 #endif /* HAVE_MACHINE_MODES */
 
 #endif /* RTX_CODE */
-
-#undef  Mmode
Index: gcc/config/i386/cygming.h
===================================================================
--- gcc/config/i386/cygming.h	(revision 172818)
+++ gcc/config/i386/cygming.h	(working copy)
@@ -1,7 +1,7 @@
 /* Operating system specific defines to be used when targeting GCC for
    hosting on Windows32, using a Unix style C library and tools.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2007, 2008, 2009, 2010
+   2004, 2005, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -176,9 +176,6 @@ along with GCC; see the file COPYING3.
 #undef LONG_TYPE_SIZE
 #define LONG_TYPE_SIZE 32
 \f
-union tree_node;
-#define TREE union tree_node *
-\f
 #define drectve_section() \
   (fprintf (asm_out_file, "\t.section .drectve\n"), \
    in_section = NULL)
@@ -472,9 +469,3 @@ do {						\
 
 /* Static stack checking is supported by means of probes.  */
 #define STACK_CHECK_STATIC_BUILTIN 1
-
-#undef TREE
-
-#ifndef BUFSIZ
-# undef FILE
-#endif
Index: gcc/config/rx/rx-protos.h
===================================================================
--- gcc/config/rx/rx-protos.h	(revision 172818)
+++ gcc/config/rx/rx-protos.h	(working copy)
@@ -21,11 +21,6 @@
 #ifndef GCC_RX_PROTOS_H
 #define GCC_RX_PROTOS_H
 
-/* A few abbreviations to make the prototypes shorter.  */
-#define Mmode 	enum machine_mode
-#define Fargs	CUMULATIVE_ARGS
-#define Rcode	enum rtx_code
-\f
 extern int		rx_align_for_label (void);
 extern void		rx_expand_prologue (void);
 extern int		rx_initial_elimination_offset (int, int);
@@ -37,11 +32,13 @@ extern void             rx_emit_stack_pu
 extern void		rx_expand_epilogue (bool);
 extern char *		rx_gen_move_template (rtx *, bool);
 extern bool		rx_legitimate_constant_p (enum machine_mode, rtx);
-extern bool		rx_is_restricted_memory_address (rtx, Mmode);
-extern bool		rx_match_ccmode (rtx, Mmode);
+extern bool		rx_is_restricted_memory_address (rtx,
+							 enum machine_mode);
+extern bool		rx_match_ccmode (rtx, enum machine_mode);
 extern void		rx_notice_update_cc (rtx body, rtx insn);
-extern void		rx_split_cbranch (Mmode, Rcode, rtx, rtx, rtx);
-extern Mmode		rx_select_cc_mode (Rcode, rtx, rtx);
+extern void		rx_split_cbranch (enum machine_mode, enum rtx_code,
+					  rtx, rtx, rtx);
+extern enum machine_mode	rx_select_cc_mode (enum rtx_code, rtx, rtx);
 #endif
 
 #endif /* GCC_RX_PROTOS_H */
Index: gcc/config/rx/rx.c
===================================================================
--- gcc/config/rx/rx.c	(revision 172818)
+++ gcc/config/rx/rx.c	(working copy)
@@ -78,7 +78,8 @@ rx_small_data_operand (rtx op)
 }
 
 static bool
-rx_is_legitimate_address (Mmode mode, rtx x, bool strict ATTRIBUTE_UNUSED)
+rx_is_legitimate_address (enum machine_mode mode, rtx x,
+			  bool strict ATTRIBUTE_UNUSED)
 {
   if (RTX_OK_FOR_BASE (x, strict))
     /* Register Indirect.  */
@@ -809,7 +810,7 @@ rx_round_up (unsigned int value, unsigne
    occupied by an argument of type TYPE and mode MODE.  */
 
 static unsigned int
-rx_function_arg_size (Mmode mode, const_tree type)
+rx_function_arg_size (enum machine_mode mode, const_tree type)
 {
   unsigned int num_bytes;
 
@@ -829,7 +830,8 @@ rx_function_arg_size (Mmode mode, const_
    variable parameter list.  */
 
 static rtx
-rx_function_arg (Fargs * cum, Mmode mode, const_tree type, bool named)
+rx_function_arg (CUMULATIVE_ARGS * cum, enum machine_mode mode,
+		 const_tree type, bool named)
 {
   unsigned int next_reg;
   unsigned int bytes_so_far = *cum;
@@ -866,14 +868,14 @@ rx_function_arg (Fargs * cum, Mmode mode
 }
 
 static void
-rx_function_arg_advance (Fargs * cum, Mmode mode, const_tree type,
-			 bool named ATTRIBUTE_UNUSED)
+rx_function_arg_advance (CUMULATIVE_ARGS * cum, enum machine_mode mode,
+			 const_tree type, bool named ATTRIBUTE_UNUSED)
 {
   *cum += rx_function_arg_size (mode, type);
 }
 
 static unsigned int
-rx_function_arg_boundary (Mmode mode ATTRIBUTE_UNUSED,
+rx_function_arg_boundary (enum machine_mode mode ATTRIBUTE_UNUSED,
 			  const_tree type ATTRIBUTE_UNUSED)
 {
   return 32;
Index: gcc/config/fr30/fr30.h
===================================================================
--- gcc/config/fr30/fr30.h	(revision 172818)
+++ gcc/config/fr30/fr30.h	(working copy)
@@ -839,11 +839,6 @@ fprintf (STREAM, "\t.word .L%d\n", VALUE
    `QImode'.  */
 #define FUNCTION_MODE QImode
 
-/* If cross-compiling, don't require stdio.h etc to build libgcc.a.  */
-#if defined CROSS_DIRECTORY_STRUCTURE && ! defined inhibit_libc
-#define inhibit_libc
-#endif
-
 /*}}}*/ \f
 
 /* Local Variables: */
Index: gcc/config/fr30/fr30-protos.h
===================================================================
--- gcc/config/fr30/fr30-protos.h	(revision 172818)
+++ gcc/config/fr30/fr30-protos.h	(working copy)
@@ -1,5 +1,5 @@
 /* Prototypes for fr30.c functions used in the md file & elsewhere.
-   Copyright (C) 1999, 2000, 2002, 2004, 2007, 2010
+   Copyright (C) 1999, 2000, 2002, 2004, 2007, 2010, 2011
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -28,8 +28,6 @@ extern void  fr30_print_operand (FILE *,
 extern void  fr30_print_operand_address (FILE *, rtx);
 extern rtx   fr30_move_double (rtx *);
 #ifdef HAVE_MACHINE_MODES
-#define Mmode enum machine_mode
 extern int   fr30_const_double_is_zero (rtx);
-#undef Mmode
 #endif /* HAVE_MACHINE_MODES */
 #endif /* RTX_CODE */
Index: gcc/config/mn10300/mn10300-protos.h
===================================================================
--- gcc/config/mn10300/mn10300-protos.h	(revision 172818)
+++ gcc/config/mn10300/mn10300-protos.h	(working copy)
@@ -1,5 +1,5 @@
 /* Definitions of target machine for GNU compiler. Matsushita MN10300 series
-   Copyright (C) 2000, 2003, 2004, 2005, 2007, 2009, 2010
+   Copyright (C) 2000, 2003, 2004, 2005, 2007, 2009, 2010, 2011
    Free Software Foundation, Inc.
    Contributed by Jeff Law (law@cygnus.com).
 
@@ -19,28 +19,25 @@
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
-#define Mmode enum machine_mode
-#define Cstar const char *
-#define Rclas enum reg_class
-
 #ifdef RTX_CODE
 extern rtx   mn10300_legitimize_pic_address (rtx, rtx);
 extern int   mn10300_legitimate_pic_operand_p (rtx);
-extern rtx   mn10300_legitimize_reload_address (rtx, Mmode, int, int, int);
+extern rtx   mn10300_legitimize_reload_address (rtx, enum machine_mode,
+						int, int, int);
 extern bool  mn10300_function_value_regno_p (const unsigned int);
 extern int   mn10300_get_live_callee_saved_regs (void);
-extern bool  mn10300_hard_regno_mode_ok (unsigned int, Mmode);
-extern bool  mn10300_modes_tieable (Mmode, Mmode);
-extern Cstar mn10300_output_add (rtx[3], bool);
+extern bool  mn10300_hard_regno_mode_ok (unsigned int, enum machine_mode);
+extern bool  mn10300_modes_tieable (enum machine_mode, enum machine_mode);
+extern const char *mn10300_output_add (rtx[3], bool);
 extern void  mn10300_print_operand (FILE *, rtx, int);
 extern void  mn10300_print_operand_address (FILE *, rtx);
 extern void  mn10300_print_reg_list (FILE *, int);
-extern Mmode mn10300_select_cc_mode (enum rtx_code, rtx, rtx);
-extern int   mn10300_store_multiple_operation (rtx, Mmode);
-extern int   mn10300_symbolic_operand (rtx, Mmode);
-extern void  mn10300_split_cbranch (Mmode, rtx, rtx);
+extern enum machine_mode mn10300_select_cc_mode (enum rtx_code, rtx, rtx);
+extern int   mn10300_store_multiple_operation (rtx, enum machine_mode);
+extern int   mn10300_symbolic_operand (rtx, enum machine_mode);
+extern void  mn10300_split_cbranch (enum machine_mode, rtx, rtx);
 extern int   mn10300_split_and_operand_count (rtx);
-extern bool  mn10300_match_ccmode (rtx, Mmode);
+extern bool  mn10300_match_ccmode (rtx, enum machine_mode);
 #endif /* RTX_CODE */
 
 extern bool  mn10300_regno_in_class_p (unsigned, int, bool);
@@ -50,7 +47,3 @@ extern void  mn10300_expand_prologue (vo
 extern void  mn10300_expand_epilogue (void);
 extern int   mn10300_initial_offset (int, int);
 extern int   mn10300_frame_size (void);
-
-#undef Mmode
-#undef Cstar
-#undef Rclas
Index: gcc/config/v850/v850.h
===================================================================
--- gcc/config/v850/v850.h	(revision 172818)
+++ gcc/config/v850/v850.h	(working copy)
@@ -906,8 +906,8 @@ typedef struct data_area_stack_element
 extern data_area_stack_element * data_area_stack;
 
 /* Names of the various data areas used on the v850.  */
-extern union tree_node * GHS_default_section_names [(int) COUNT_OF_GHS_SECTION_KINDS];
-extern union tree_node * GHS_current_section_names [(int) COUNT_OF_GHS_SECTION_KINDS];
+extern tree GHS_default_section_names [(int) COUNT_OF_GHS_SECTION_KINDS];
+extern tree GHS_current_section_names [(int) COUNT_OF_GHS_SECTION_KINDS];
 
 /* The assembler op to start the file.  */
 
Index: gcc/config/v850/v850-protos.h
===================================================================
--- gcc/config/v850/v850-protos.h	(revision 172818)
+++ gcc/config/v850/v850-protos.h	(working copy)
@@ -23,8 +23,6 @@
 #ifndef GCC_V850_PROTOS_H
 #define GCC_V850_PROTOS_H
 
-#define Mmode enum machine_mode
-
 extern void   expand_prologue               (void);
 extern void   expand_epilogue               (void);
 extern int    v850_handle_pragma            (int (*)(void), void (*)(int), char *);
@@ -41,12 +39,14 @@ extern char * construct_restore_jr
 #ifdef HAVE_MACHINE_MODES
 extern char * construct_dispose_instruction (rtx);
 extern char * construct_prepare_instruction (rtx);
-extern int    ep_memory_operand             (rtx, Mmode, int);
-extern int    v850_float_z_comparison_operator (rtx, Mmode);
-extern int    v850_float_nz_comparison_operator (rtx, Mmode);
-extern rtx    v850_gen_compare              (enum rtx_code, Mmode, rtx, rtx);
-extern Mmode  v850_gen_float_compare (enum rtx_code, Mmode, rtx, rtx);
-extern Mmode  v850_select_cc_mode (RTX_CODE, rtx, rtx);
+extern int    ep_memory_operand             (rtx, enum machine_mode, int);
+extern int    v850_float_z_comparison_operator (rtx, enum machine_mode);
+extern int    v850_float_nz_comparison_operator (rtx, enum machine_mode);
+extern rtx    v850_gen_compare              (enum rtx_code, enum machine_mode,
+					     rtx, rtx);
+extern enum machine_mode  v850_gen_float_compare (enum rtx_code,
+						  enum machine_mode, rtx, rtx);
+extern enum machine_mode  v850_select_cc_mode (RTX_CODE, rtx, rtx);
 #endif
 #endif /* RTX_CODE */
 
@@ -67,6 +67,4 @@ extern void ghs_pragma_endtda		    (stru
 extern void ghs_pragma_endsda		    (struct cpp_reader *);
 extern void ghs_pragma_endzda		    (struct cpp_reader *);
 
-#undef  Mmode
-
 #endif /* ! GCC_V850_PROTOS_H */
Index: gcc/config/bfin/bfin-protos.h
===================================================================
--- gcc/config/bfin/bfin-protos.h	(revision 172818)
+++ gcc/config/bfin/bfin-protos.h	(working copy)
@@ -1,5 +1,6 @@
 /* Prototypes for Blackfin functions used in the md file & elsewhere.
-   Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2008, 2009, 2010, 2011
+   Free Software Foundation, Inc.
 
    This file is part of GNU CC.
 
@@ -63,8 +64,6 @@
 #define ENABLE_WA_05000074 \
   (bfin_workarounds & WA_05000074)
 
-#define Mmode enum machine_mode
-
 extern bool function_arg_regno_p (int);
 
 extern const char *output_load_immediate (rtx *);
@@ -73,14 +72,14 @@ extern char *bfin_asm_long (void);
 extern char *bfin_asm_short (void);
 extern int log2constp (unsigned HOST_WIDE_INT);
 
-extern int hard_regno_mode_ok (int, Mmode);
+extern int hard_regno_mode_ok (int, enum machine_mode);
 extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx);	  
 extern HOST_WIDE_INT bfin_initial_elimination_offset (int, int);
 
-extern int effective_address_32bit_p (rtx, Mmode);
+extern int effective_address_32bit_p (rtx, enum machine_mode);
 extern int symbolic_reference_mentioned_p (rtx);
-extern rtx bfin_gen_compare (rtx, Mmode);
-extern bool expand_move (rtx *, Mmode);
+extern rtx bfin_gen_compare (rtx, enum machine_mode);
+extern bool expand_move (rtx *, enum machine_mode);
 extern void bfin_expand_call (rtx, rtx, rtx, rtx, int);
 extern bool bfin_longcall_p (rtx, int);
 extern bool bfin_dsp_memref_p (rtx);
@@ -89,9 +88,11 @@ extern bool bfin_expand_movmem (rtx, rtx
 extern int bfin_register_move_cost (enum machine_mode, enum reg_class,
 				    enum reg_class);
 extern int bfin_memory_move_cost (enum machine_mode, enum reg_class, int in);
-extern enum reg_class secondary_input_reload_class (enum reg_class, Mmode,
+extern enum reg_class secondary_input_reload_class (enum reg_class,
+						    enum machine_mode,
 						    rtx);
-extern enum reg_class secondary_output_reload_class (enum reg_class, Mmode,
+extern enum reg_class secondary_output_reload_class (enum reg_class,
+						     enum machine_mode,
 						     rtx);
 extern char *section_asm_op_1 (SECT_ENUM_T);
 extern char *section_asm_op (SECT_ENUM_T);
@@ -99,23 +100,22 @@ extern void print_operand (FILE *,  rtx,
 extern void print_address_operand (FILE *, rtx);
 extern void split_di (rtx [], int, rtx [], rtx []);
 extern int split_load_immediate (rtx []);
-extern void emit_pic_move (rtx *, Mmode);
+extern void emit_pic_move (rtx *, enum machine_mode);
 extern void asm_conditional_branch (rtx, rtx *, int, int);
-extern rtx bfin_gen_compare (rtx, Mmode);
+extern rtx bfin_gen_compare (rtx, enum machine_mode);
 
 extern unsigned bfin_local_alignment (tree, unsigned);
 extern rtx bfin_va_arg (tree, tree);
 
 extern void bfin_expand_prologue (void);
 extern void bfin_expand_epilogue (int, int, bool);
-extern int push_multiple_operation (rtx, Mmode);
-extern int pop_multiple_operation (rtx, Mmode);
+extern int push_multiple_operation (rtx, enum machine_mode);
+extern int pop_multiple_operation (rtx, enum machine_mode);
 extern void output_push_multiple (rtx, rtx *);
 extern void output_pop_multiple (rtx, rtx *);
 extern int bfin_hard_regno_rename_ok (unsigned int, unsigned int);
 extern rtx bfin_return_addr_rtx (int);
 extern void bfin_hardware_loop (void);
-#undef  Mmode 
 
 #endif
 

-- 
Joseph S. Myers
joseph@codesourcery.com

  reply	other threads:[~2011-04-21 10:07 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-02 17:06 Joseph S. Myers
2011-04-02 17:16 ` Paul Koning
2011-04-04 10:33 ` Joseph S. Myers
2011-04-08 18:46 ` Ping " Joseph S. Myers
2011-04-08 19:14   ` Mike Stump
2011-04-20 21:26   ` Ping^2 " Joseph S. Myers
2011-04-20 22:05     ` DJ Delorie
2011-04-21  4:27     ` Paul Koning
2011-04-21  9:31     ` Richard Guenther
2011-04-21 11:37       ` Joseph S. Myers [this message]
2011-04-21 11:50         ` Kai Tietz
2011-04-22  4:59         ` Jie Zhang
2011-04-26 17:40           ` Christopher Faylor
2011-05-04  3:15         ` Alexandre Oliva
2011-04-26 15:48     ` Ping^3 " Joseph S. Myers
2011-04-26 16:32       ` Nick Clifton
2011-04-26 16:48         ` Joseph S. Myers
2011-05-02 15:22       ` Ping^4 " Joseph S. Myers
2011-05-02 15:27         ` Richard Guenther
2011-05-02 18:22           ` Bernd Schmidt
2011-05-03  8:16         ` Nick Clifton
2011-04-12  1:08 ` Hans-Peter Nilsson
2011-04-12 12:08   ` Joseph S. Myers
2011-04-12 12:14     ` Andreas Schwab

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=Pine.LNX.4.64.1104211001570.9614@digraph.polyomino.org.uk \
    --to=joseph@codesourcery.com \
    --cc=aoliva@redhat.com \
    --cc=bernds@codesourcery.com \
    --cc=cgf@gcc.gnu.org \
    --cc=dave.korn.cygwin@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=ktietz@redhat.com \
    --cc=law@redhat.com \
    --cc=nickc@redhat.com \
    --cc=richard.guenther@gmail.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).