public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Un-obsolete Interix
@ 2011-06-09 17:35 Douglas B Rupp
  2011-06-09 19:13 ` Joseph S. Myers
  2011-06-12 13:50 ` Gerald Pfeifer
  0 siblings, 2 replies; 6+ messages in thread
From: Douglas B Rupp @ 2011-06-09 17:35 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 211 bytes --]

This patch restores interix v3 and above to working condition, combines 
the multitude of config/*interix*.h files into one file, removes unused 
bits, and fixes PR 47096.

Comments welcome.

--Douglas B Rupp



[-- Attachment #2: interix32-c.dif.txt --]
[-- Type: text/plain, Size: 34252 bytes --]

2011-06-09  Douglas B Rupp  <rupp@gnat.com>

	* <toplevel>/config/mh-interix: Remove.
	* <toplevel>/configure.ac (host_makefile_frag): Remove above.
	* <toplevel>/configure: Regenerate

	* config/i386/i386-interix3.h: Incorporate this file ...
	* config/interix3.h: Likewise
	* config/interix.h: Likewise
	* config/i386/i386-interix.h: ... into here and remove pre-Interix3
	bits.

	* config/interix.opt: Incorporate this file ...
	* config/i386/interix.opt: ... into here.

	* config/i386/t-interix (winnt-cxx.o,winnt-stubs.o,msformat-c.o): Add
	rules to build.

	* config.gcc: Rename interix3* to interix[3-9]*. Fix macros to reflect
	config file changes. Remove interix3 from obsolete configurations.
	* configure.ac (HAVE_GAS_ALIGNED_COMM): Allow on Interix.
	* configure: Regenerate.

	* testsuite/gcc.dg/builtins-config.h: (__INTERIX): Not C99.

	* libgcc/config.host: Rename interix3* to interix[3-9]*.

	* doc/install.texi: Note that gcc supports Interix version 3 and above.

diff -rupN gcc.orig/config/mh-interix gcc/config/mh-interix
--- gcc.orig/config/mh-interix	2011-04-06 16:54:04.000000000 -0700
+++ gcc/config/mh-interix	1969-12-31 16:00:00.000000000 -0800
@@ -1,7 +0,0 @@
-# The shell may not be in /bin. 
-SHELL = sh
-
-# We also need to override LIBGCC2_DEBUG_CFLAGS so libgcc2 will be
-# built without debugging information
-
-LIBGCC2_DEBUG_CFLAGS=
diff -rupN gcc.orig/configure.ac gcc/configure.ac
--- gcc.orig/configure.ac	2011-06-01 13:35:36.000000000 -0700
+++ gcc/configure.ac	2011-06-01 15:46:59.000000000 -0700
@@ -1083,9 +1085,6 @@ case "${host}" in
   *-mingw*)
     host_makefile_frag="config/mh-mingw"
     ;;
-  *-interix*)
-    host_makefile_frag="config/mh-interix"
-    ;;
   hppa*-hp-hpux10*)
     host_makefile_frag="config/mh-pa-hpux10"
     ;;
diff -rupN gcc.orig/gcc/config/i386/i386-interix3.h gcc/gcc/config/i386/i386-interix3.h
--- gcc.orig/gcc/config/i386/i386-interix3.h	2011-04-06 16:49:50.000000000 -0700
+++ gcc/gcc/config/i386/i386-interix3.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,23 +0,0 @@
-/* Target definitions for GCC for Intel 80386 running Interix V3.
-   Copyright (C) 2001, 2007 Free Software Foundation, Inc.
-   Contributed by Douglas B. Rupp (rupp@gnat.com)
-
-This file is part of GCC.
-
-GCC 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, or (at your option)
-any later version.
-
-GCC 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 GCC; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-#undef CPP_SPEC
-#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
-
diff -rupN gcc.orig/gcc/config/interix3.h gcc/gcc/config/interix3.h
--- gcc.orig/gcc/config/interix3.h	2011-04-06 16:50:26.000000000 -0700
+++ gcc/gcc/config/interix3.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,34 +0,0 @@
-/* Operating system specific defines to be used when targeting GCC for
-   Interix version 3.
-   Copyright (C) 2001, 2007 Free Software Foundation, Inc.
-   Contributed by Douglas B. Rupp (rupp@gnat.com)
-
-This file is part of GCC.
-
-GCC 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, or (at your option)
-any later version.
-
-GCC 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 GCC; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-/* Interix 3.x has a single rooted file system and properly named
-   libraries, so LIB_SPEC can be simplified */
-
-#undef LIB_SPEC
-#define LIB_SPEC "\
- %{!shared:%{!dynamic:-lc -lpsxdll \
- }} \
- %{!G:%{!dynamic:-lc -lpsxdll \
- }} \
- %{dynamic:-lc -lpsxdll \
- } \
- %{v}"
-
diff -rupN gcc.orig/gcc/config/interix.h gcc/gcc/config/interix.h
--- gcc.orig/gcc/config/interix.h	2011-04-06 16:50:26.000000000 -0700
+++ gcc/gcc/config/interix.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,110 +0,0 @@
-/* Operating system specific defines to be used when targeting GCC for
-   Interix
-   Copyright (C) 1994, 1995, 1999, 2002, 2004, 2007, 2010
-   Free Software Foundation, Inc.
-   Donn Terry, Softway Systems, Inc. (donn@softway.com)
-   Modified from code
-      Contributed by Douglas B. Rupp (drupp@cs.washington.edu).
-
-This file is part of GCC.
-
-GCC 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, or (at your option)
-any later version.
-
-GCC 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 GCC; see the file COPYING3.  If not see
-<http://www.gnu.org/licenses/>.  */
-
-/* POSIX/Uni-thread only for now.  Look at the winnt version
-for windows/multi thread */
-
-/* We need multiple -lc -lcpsx because they mutually refer;
-   that should go away someday */
-
-#undef LIB_SPEC
-#define LIB_SPEC "\
- %{!shared:%{!dynamic:-lc -lcpsx -lc -lcpsx %$INTERIX_ROOT/usr/lib/psxdll.a \
- %$INTERIX_ROOT/usr/lib/psxdll2.a \
- }} \
- %{!G:%{!dynamic:-lc -lcpsx -lc -lcpsx %$INTERIX_ROOT/usr/lib/psxdll.a \
- %$INTERIX_ROOT/usr/lib/psxdll2.a \
- }} \
- %{dynamic:-lc %$INTERIX_ROOT/usr/lib/psxdll.a \
- %$INTERIX_ROOT/usr/lib/psxdll2.a \
- } \
- %{v}"
-
-#undef LINK_SPEC
-#define LINK_SPEC "%{!shared:-stack 0x400000,0x10000} \
- 		   -subsystem posix \
-		   %{g} \
-		   %{dynamic:-Bdynamic} \
-		   %{static:-Bstatic} \
-		   %{shared:--shared -Bdynamic} \
-		   %{G:--shared -Bdynamic} \
-		   %{symbolic:--shared -Bsymbolic -Bdynamic} \
-   		   %{rpath*:--rpath %*} \
-		   "
-
-#undef STARTFILE_SPEC
-#define STARTFILE_SPEC  \
-  "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}}} %{shared:crti%O%s}"
-
-
-#define STDC_0_IN_SYSTEM_HEADERS 1
-
-/* Names to predefine in the preprocessor for this target machine.  */
-
-#define DBX_DEBUGGING_INFO 1
-#define SDB_DEBUGGING_INFO 1
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-
-
-/* TARGET_DEFAULT from configure */
-
-#undef WCHAR_TYPE
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE "short unsigned int"
-#define WCHAR_TYPE_SIZE 16
-
-/* Our strategy for finding global constructors is a bit different, although
-   not a lot.  */
-#define DO_GLOBAL_CTORS_BODY						\
-do {									\
-  int i;								\
-  unsigned long nptrs;							\
-  func_ptr *p;								\
-  asm(									\
-       "     .section .ctor_head, \"rw\"\n"				\
-       "1:\n"								\
-       "     .text \n"							\
-       ASM_LOAD_ADDR(1b,%0)						\
-       : "=r" (p) : : "cc");						\
-  for (nptrs = 0; p[nptrs] != 0; nptrs++);				\
-  for (i = nptrs-1; i >= 0; i--)					\
-    p[i] ();								\
-} while (0) 
-
-#define DO_GLOBAL_DTORS_BODY						\
-do {									\
-  func_ptr *p;								\
-  asm(									\
-       "     .section .dtor_head, \"rw\"\n"				\
-       "1:\n"								\
-       "     .text \n"							\
-       ASM_LOAD_ADDR(1b,%0)						\
-       : "=r" (p) : : "cc");						\
-  while (*p)								\
-    {									\
-      p++;								\
-      (*(p-1)) ();							\
-    }									\
-} while (0) 
diff -rupN gcc.orig/gcc/config/i386/i386-interix.h gcc/gcc/config/i386/i386-interix.h
--- gcc.orig/gcc/config/i386/i386-interix.h	2011-04-06 16:49:50.000000000 -0700
+++ gcc/gcc/config/i386/i386-interix.h	2011-06-02 20:17:29.000000000 -0700
@@ -24,31 +24,77 @@ You should have received a copy of the G
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
-/* The rest must follow.  */
+/* Note: Interix doesn't support user-written DLLs (use conventional
+   shared libs (.so) instead).  Thus a lot of the stuff that might apply
+   about dllimport/dllexport and the like does not apply here. */
+
+#include <stdio.h>
+
+#undef LIB_SPEC
+#define LIB_SPEC "\
+ %{!shared:%{!dynamic:-lc -lpsxdll \
+ }} \
+ %{!G:%{!dynamic:-lc -lpsxdll \
+ }} \
+ %{dynamic:-lc -lpsxdll \
+ } \
+ %{v}"
+
+#undef LINK_SPEC
+#define LINK_SPEC "%{!shared:-stack 0x4000000,0x10000} \
+		   %{g} \
+		   %{dynamic:-Bdynamic} \
+		   %{static:-Bstatic} \
+		   %{shared:--shared -Bdynamic} \
+		   %{G:--shared -Bdynamic} \
+		   %{symbolic:--shared -Bsymbolic -Bdynamic} \
+   		   %{rpath*:--rpath %*} \
+		   "
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC  \
+  "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}}} %{shared:crti%O%s}"
+
+/* Names to predefine in the preprocessor for this target machine.  */
 
 #define DBX_DEBUGGING_INFO 1
 #define SDB_DEBUGGING_INFO 1
+#undef PREFERRED_DEBUGGING_TYPE
 #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
 
-/* By default, target has a 80387, uses IEEE compatible arithmetic,
-   and returns float values in the 387 and needs stack probes
-   We also align doubles to 64-bits for MSVC default compatibility
-   We do bitfields MSVC-compatibly by default, too.  */
-#undef TARGET_SUBTARGET_DEFAULT
-#define TARGET_SUBTARGET_DEFAULT \
-   (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE | \
-    MASK_ALIGN_DOUBLE | MASK_MS_BITFIELD_LAYOUT)
-
-#undef TARGET_CPU_DEFAULT
-#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_i486
-
-#define WCHAR_TYPE_SIZE 16
-#define WCHAR_TYPE "short unsigned int"
-
-/* WinNT (and thus Interix) use unsigned int */
-#define SIZE_TYPE "unsigned int"
+/* Our strategy for finding global constructors is a bit different, although
+   not a lot.  */
+#define DO_GLOBAL_CTORS_BODY						\
+do {									\
+  int i;								\
+  unsigned long nptrs;							\
+  func_ptr *p;								\
+  asm(									\
+       "     .section .ctor_head, \"rw\"\n"				\
+       "1:\n"								\
+       "     .text \n"							\
+       ASM_LOAD_ADDR(1b,%0)						\
+       : "=r" (p) : : "cc");						\
+  for (nptrs = 0; p[nptrs] != 0; nptrs++);				\
+  for (i = nptrs-1; i >= 0; i--)					\
+    p[i] ();								\
+} while (0) 
 
-#define ASM_LOAD_ADDR(loc, reg)   "     leal " #loc "," #reg "\n"
+#define DO_GLOBAL_DTORS_BODY						\
+do {									\
+  func_ptr *p;								\
+  asm(									\
+       "     .section .dtor_head, \"rw\"\n"				\
+       "1:\n"								\
+       "     .text \n"							\
+       ASM_LOAD_ADDR(1b,%0)						\
+       : "=r" (p) : : "cc");						\
+  while (*p)								\
+    {									\
+      p++;								\
+      (*(p-1)) ();							\
+    }									\
+} while (0) 
 
 #define TARGET_DECLSPEC 1
 
@@ -62,6 +108,7 @@ along with GCC; see the file COPYING3.  
 	builtin_define ("_X86_=1");					\
 	builtin_define ("__stdcall=__attribute__((__stdcall__))");	\
 	builtin_define ("__cdecl=__attribute__((__cdecl__))");		\
+	builtin_define ("__declspec(x)=__attribute__((x))");		\
 	builtin_assert ("system=unix");					\
 	builtin_assert ("system=interix");				\
 	if (preprocessing_asm_p ())					\
@@ -78,153 +125,21 @@ along with GCC; see the file COPYING3.  
   while (0)
 
 #undef CPP_SPEC
-/* Write out the correct language type definition for the header files.  
-   Unless we have assembler language, write out the symbols for C.
-   mieee is an Alpha specific variant.  Cross pollination a bad idea.
-   */
-#define CPP_SPEC "-remap %{posix:-D_POSIX_SOURCE} \
--isystem %$INTERIX_ROOT/usr/include"
-
-/* The global __fltused is necessary to cause the printf/scanf routines
-   for outputting/inputting floating point numbers to be loaded.  Since this
-   is kind of hard to detect, we just do it all the time.  */
-#undef X86_FILE_START_FLTUSED
-#define X86_FILE_START_FLTUSED 1
-
-/* A table of bytes codes used by the ASM_OUTPUT_ASCII and
-   ASM_OUTPUT_LIMITED_STRING macros.  Each byte in the table
-   corresponds to a particular byte value [0..255].  For any
-   given byte value, if the value in the corresponding table
-   position is zero, the given character can be output directly.
-   If the table value is 1, the byte must be output as a \ooo
-   octal escape.  If the tables value is anything else, then the
-   byte value should be output as a \ followed by the value
-   in the table.  Note that we can use standard UN*X escape
-   sequences for many control characters, but we don't use
-   \a to represent BEL because some svr4 assemblers (e.g. on
-   the i386) don't know about that.  Also, we don't use \v
-   since some versions of gas, such as 2.2 did not accept it.  */
-
-#define ESCAPES \
-"\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\
-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\
-\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
-
-/* Some svr4 assemblers have a limit on the number of characters which
-   can appear in the operand of a .string directive.  If your assembler
-   has such a limitation, you should define STRING_LIMIT to reflect that
-   limit.  Note that at least some svr4 assemblers have a limit on the
-   actual number of bytes in the double-quoted string, and that they
-   count each character in an escape sequence as one byte.  Thus, an
-   escape sequence like \377 would count as four bytes.
-
-   If your target assembler doesn't support the .string directive, you
-   should define this to zero.
-*/
-
-#define STRING_LIMIT	((unsigned) 256)
-
-#define STRING_ASM_OP	"\t.string\t"
-
-/* The routine used to output NUL terminated strings.  We use a special
-   version of this for most svr4 targets because doing so makes the
-   generated assembly code more compact (and thus faster to assemble)
-   as well as more readable, especially for targets like the i386
-   (where the only alternative is to output character sequences as
-   comma separated lists of numbers).  */
-
-#define ASM_OUTPUT_LIMITED_STRING(FILE, STR)				\
-  do									\
-    {									\
-      const unsigned char *_limited_str =				\
-        (const unsigned char *) (STR);					\
-      unsigned ch;							\
-      fprintf ((FILE), "%s\"", STRING_ASM_OP);				\
-      for (; (ch = *_limited_str); _limited_str++)			\
-        {								\
-	  int escape = ESCAPES[ch];					\
-	  switch (escape)						\
-	    {								\
-	    case 0:							\
-	      putc (ch, (FILE));					\
-	      break;							\
-	    case 1:							\
-	      fprintf ((FILE), "\\%03o", ch);				\
-	      break;							\
-	    default:							\
-	      putc ('\\', (FILE));					\
-	      putc (escape, (FILE));					\
-	      break;							\
-	    }								\
-        }								\
-      fprintf ((FILE), "\"\n");						\
-    }									\
-  while (0)
-
-/* The routine used to output sequences of byte values.  We use a special
-   version of this for most svr4 targets because doing so makes the
-   generated assembly code more compact (and thus faster to assemble)
-   as well as more readable.  Note that if we find subparts of the
-   character sequence which end with NUL (and which are shorter than
-   STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING.  */
+#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
 
-#undef ASM_OUTPUT_ASCII
-#define ASM_OUTPUT_ASCII(FILE, STR, LENGTH)				\
-  do									\
-    {									\
-      const unsigned char *_ascii_bytes =				\
-        (const unsigned char *) (STR);					\
-      const unsigned char *limit = _ascii_bytes + (LENGTH);		\
-      unsigned bytes_in_chunk = 0;					\
-      for (; _ascii_bytes < limit; _ascii_bytes++)			\
-        {								\
-	  const unsigned char *p;					\
-	  if (bytes_in_chunk >= 64)					\
-	    {								\
-	      fputc ('\n', (FILE));					\
-	      bytes_in_chunk = 0;					\
-	    }								\
-	  for (p = _ascii_bytes; p < limit && *p != '\0'; p++)		\
-	    continue;							\
-	  if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT)	\
-	    {								\
-	      if (bytes_in_chunk > 0)					\
-		{							\
-		  fputc ('\n', (FILE));					\
-		  bytes_in_chunk = 0;					\
-		}							\
-	      ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes);		\
-	      _ascii_bytes = p;						\
-	    }								\
-	  else								\
-	    {								\
-	      if (bytes_in_chunk == 0)					\
-		fputs (ASM_BYTE, (FILE));				\
-	      else							\
-		fputc (',', (FILE));					\
-	      fprintf ((FILE), "0x%02x", *_ascii_bytes);		\
-	      bytes_in_chunk += 5;					\
-	    }								\
-	}								\
-      if (bytes_in_chunk > 0)						\
-        fputc ('\n', (FILE));						\
-    }									\
-  while (0)
-
-/* Emit code to check the stack when allocating more that 4000
-   bytes in one go.  */
+#undef WCHAR_TYPE
+#define WCHAR_TYPE "short unsigned int"
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE 16
 
-#define CHECK_STACK_LIMIT 0x1000
+#define SIZE_TYPE "unsigned int"
+#define PTRDIFF_TYPE "int"
 
-/* the following are OSF linker (not gld) specific... we don't want them */
-#undef HAS_INIT_SECTION
-#undef LD_INIT_SWITCH
-#undef LD_FINI_SWITCH
+/* Turn off long double being 96 bits.  */
+#undef LONG_DOUBLE_TYPE_SIZE
+#define LONG_DOUBLE_TYPE_SIZE 64
+#undef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
+#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
 
 /* The following are needed for us to be able to use winnt.c, but are not
    otherwise meaningful to Interix.  (The functions that use these are
@@ -232,42 +147,127 @@ along with GCC; see the file COPYING3.  
 #define TARGET_NOP_FUN_DLLIMPORT 1
 #define drectve_section()  /* nothing */
 
-/* Objective-C has its own packing rules...
-   Objc tries to parallel the code in stor-layout.c at runtime	
-   (see libobjc/encoding.c).  This (compile-time) packing info isn't 
-   available at runtime, so it's hopeless to try.
-
-   And if the user tries to set the flag for objc, give an error
-   so he has some clue.  */
-
-#undef  SUBTARGET_OVERRIDE_OPTIONS
-#define SUBTARGET_OVERRIDE_OPTIONS					\
-do {									\
-  if (strcmp (lang_hooks.name, "GNU Objective-C") == 0)			\
-    {									\
-      if ((target_flags & MASK_MS_BITFIELD_LAYOUT) != 0			\
-	  && (target_flags_explicit & MASK_MS_BITFIELD_LAYOUT) != 0)	\
-	{								\
-	   error ("ms-bitfields not supported for objc");		\
-	}								\
-      target_flags &= ~MASK_MS_BITFIELD_LAYOUT;				\
-    }									\
-} while (0)
 
 #define EH_FRAME_IN_DATA_SECTION
 
 #define READONLY_DATA_SECTION_ASM_OP	"\t.section\t.rdata,\"r\""
 
+/* Define this macro if references to a symbol must be treated
+   differently depending on something about the variale or
+   function named by the symbol (such as what section it is in).  */
+
+#undef TARGET_ENCODE_SECTION_INFO
+#define TARGET_ENCODE_SECTION_INFO i386_pe_encode_section_info
+#undef  TARGET_STRIP_NAME_ENCODING
+#define TARGET_STRIP_NAME_ENCODING  i386_pe_strip_name_encoding_full
+
+/* Emit code to check the stack when allocating more that 4000
+   bytes in one go.  */
+
+#define CHECK_STACK_LIMIT 4000
+
+/* By default, target has a 80387, uses IEEE compatible arithmetic,
+   and returns float values in the 387 and needs stack probes
+   We also align doubles to 64-bits forMSVC default compatibility
+   Ditto for bitfields. */
+#undef TARGET_SUBTARGET_DEFAULT
+#define TARGET_SUBTARGET_DEFAULT \
+   (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE | \
+    MASK_ALIGN_DOUBLE | MASK_MS_BITFIELD_LAYOUT)
+
 /* The MS compilers take alignment as a number of bytes, so we do as well */
 #undef ASM_OUTPUT_ALIGN
 #define ASM_OUTPUT_ALIGN(FILE,LOG) \
   if ((LOG)!=0) fprintf ((FILE), "\t.balign %d\n", 1<<(LOG))
 
+/* Define this macro if in some cases global symbols from one translation
+   unit may not be bound to undefined symbols in another translation unit
+   without user intervention.  For instance, under Microsoft Windows
+   symbols must be explicitly imported from shared libraries (DLLs).  */
+/*
+ * Old gcc(3.3) did not have 1 here
+ */
+#define MULTIPLE_SYMBOL_SPACES	1
+
+extern void i386_pe_unique_section PARAMS ((tree, int));
+#define TARGET_ASM_UNIQUE_SECTION i386_pe_unique_section
+
+/* Switch into a generic section.  */
+#define TARGET_ASM_NAMED_SECTION  default_pe_asm_named_section
+
+/* Select attributes for named sections.  */
+#define TARGET_SECTION_TYPE_FLAGS  i386_pe_section_type_flags
+
+/* Write the extra assembler code needed to declare a function
+   properly.  If we are generating SDB debugging information, this
+   will happen automatically, so we only need to handle other cases.  */
+#undef ASM_DECLARE_FUNCTION_NAME
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)			\
+  do									\
+    {									\
+      if (write_symbols != SDB_DEBUG)					\
+       i386_pe_declare_function_type (FILE, NAME, TREE_PUBLIC (DECL));	\
+      ASM_OUTPUT_LABEL (FILE, NAME);       				\
+    }									\
+  while (0)
+
+/* Add an external function to the list of functions to be declared at
+   the end of the file.  */
+#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME)				\
+  do									\
+    {									\
+      if (TREE_CODE (DECL) == FUNCTION_DECL)				\
+        i386_pe_record_external_function (DECL, NAME);			\
+    }									\
+  while (0)
+
+/* Declare the type properly for any external libcall.  */
+#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
+  i386_pe_declare_function_type (FILE, XSTR (FUN, 0), 1)
+
+/* This says out to put a global symbol in the BSS section.  */
+#undef ASM_OUTPUT_ALIGNED_BSS
+#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
+  asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN))
+
+#undef ASM_COMMENT_START
+#define ASM_COMMENT_START " #"
+
+/* Don't assume anything about the header files.  */
+#define NO_IMPLICIT_EXTERN_C
+
+/* External function declarations.  */
+extern void i386_pe_record_external_function (tree, const char *);
+extern void i386_pe_declare_function_type (FILE *, const char *, int);
+extern void i386_pe_record_exported_symbol (const char *, int);
+extern void i386_pe_asm_file_end (FILE *);
+
+/* For Win32 ABI compatibility */
+#undef DEFAULT_PCC_STRUCT_RETURN
+#define DEFAULT_PCC_STRUCT_RETURN 0
+
+/* A bitfield declared as `int' forces `int' alignment for the struct.  */
+#undef PCC_BITFIELD_TYPE_MATTERS
+#define PCC_BITFIELD_TYPE_MATTERS 1
+
+/* Enable alias attribute support.  */
+#ifndef SET_ASM_OP
+#define SET_ASM_OP "\t.set\t"
+#endif
+
+/* Note that there appears to be two different ways to support const
+   sections at the moment.  You can either #define the symbol
+   READONLY_DATA_SECTION (giving it some code which switches to the
+   readonly data section) or else you can #define the symbols
+   EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
+   SELECT_RTX_SECTION.  We do both here just to be on the safe side.  */
+
+#define USE_CONST_SECTION 1
+
 /* The linker will take care of this, and having them causes problems with
    ld -r (specifically -rU).  */
 #define CTOR_LISTS_DEFINED_EXTERNALLY 1
 
-#define SET_ASM_OP	"\t.set\t"
 /* Output a definition (implements alias) */
 #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2)				\
 do									\
@@ -288,68 +288,33 @@ while (0)
 
 /* Forward references to tags are allowed.  */
 #define SDB_ALLOW_FORWARD_REFERENCES
-
 /* Unknown tags are also allowed.  */
 #define SDB_ALLOW_UNKNOWN_REFERENCES
-
-/* The integer half of this list needs to be constant.  However, there's
-   a lot of disagreement about what the floating point adjustments should
-   be.  We pick one that works with gdb.  (The underlying problem is
-   what to do about the segment registers.  Since we have access to them
-   from /proc, we'll allow them to be accessed in gdb, even tho the
-   gcc compiler can't generate them.  (There's some evidence that 
-   MSVC does, but possibly only for certain special "canned" sequences.) */
-
-#undef DBX_REGISTER_NUMBER
-#define DBX_REGISTER_NUMBER(n) \
-(TARGET_64BIT ? dbx64_register_map[n] \
- : (n) == 0 ? 0 \
- : (n) == 1 ? 2 \
- : (n) == 2 ? 1 \
- : (n) == 3 ? 3 \
- : (n) == 4 ? 6 \
- : (n) == 5 ? 7 \
- : (n) == 6 ? 5 \
- : (n) == 7 ? 4 \
- : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+8 \
- : (-1))
-
-/* Define this macro if references to a symbol must be treated
-   differently depending on something about the variable or
-   function named by the symbol (such as what section it is in).  */
-
-#define SUBTARGET_ENCODE_SECTION_INFO i386_pe_encode_section_info
-#undef  TARGET_STRIP_NAME_ENCODING
-#define TARGET_STRIP_NAME_ENCODING  i386_pe_strip_name_encoding_full
-
-#if 0	
-/* Turn this back on when the linker is updated to handle grouped
-   .data$ sections correctly. See corresponding note in i386/interix.c. 
-   MK.  */
-
-/* Interix uses explicit import from shared libraries.  */
-#define MULTIPLE_SYMBOL_SPACES 1
-
-extern void i386_pe_unique_section (tree, int);
-#define TARGET_ASM_UNIQUE_SECTION i386_pe_unique_section
-#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
-
-#define SUPPORTS_ONE_ONLY 1
-#endif /* 0 */
-
-/* Switch into a generic section.  */
-#define TARGET_ASM_NAMED_SECTION  default_pe_asm_named_section
-
 /* DWARF2 Unwinding doesn't work with exception handling yet.  */
 #define DWARF2_UNWIND_INFO 0
+/* MSVC returns structs of up to 8 bytes via registers. */
 
-/* Don't assume anything about the header files.  */
-#define NO_IMPLICIT_EXTERN_C
+#undef SUBTARGET_RETURN_IN_MEMORY
+#define SUBTARGET_RETURN_IN_MEMORY(TYPE, FNTYPE) \
+  (TYPE_MODE (TYPE) == BLKmode || \
+     (AGGREGATE_TYPE_P (TYPE) && int_size_in_bytes(TYPE) > 8 ))
 
-/* MSVC returns structs of up to 8 bytes via registers.  */
+#define ASM_LOAD_ADDR(loc, reg)   "     leal " #loc "," #reg "\n"
 
-#define DEFAULT_PCC_STRUCT_RETURN 0
+#define EH_FRAME_IN_DATA_SECTION
 
-#define SUBTARGET_RETURN_IN_MEMORY(TYPE, FNTYPE) \
-	(TYPE_MODE (TYPE) == BLKmode \
-	 || (AGGREGATE_TYPE_P (TYPE) && int_size_in_bytes (TYPE) > 8 ))
+/* the following are OSF linker (not gld) specific... we don't want them */
+#undef HAS_INIT_SECTION
+#undef LD_INIT_SWITCH
+#undef LD_FINI_SWITCH
+
+/* The following are needed for us to be able to use winnt.c, but are not
+   otherwise meaningful to Interix.  (The functions that use these are
+   never called because we don't do DLLs.) */
+#define TARGET_NOP_FUN_DLLIMPORT 1
+#define I386_PE_STRIP_ENCODING(SYM_NAME) \
+  ((SYM_NAME) + ((SYM_NAME)[0] == '@' \
+                 ? ((SYM_NAME)[3] == '*' ? 4 : 3) : 0) \
+             + ((SYM_NAME)[0] == '*' ? 1 : 0))
+
+#define drectve_section()  /* nothing */
diff -rupN gcc.orig/gcc/config/interix.opt gcc/gcc/config/interix.opt
--- gcc.orig/gcc/config/interix.opt	2011-04-06 16:50:26.000000000 -0700
+++ gcc/gcc/config/interix.opt	1969-12-31 16:00:00.000000000 -0800
@@ -1,36 +0,0 @@
-; Interix options.
-
-; Copyright (C) 2010, 2011
-; Free Software Foundation, Inc.
-;
-; This file is part of GCC.
-;
-; GCC 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, or (at your option) any later
-; version.
-;
-; GCC 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 GCC; see the file COPYING3.  If not see
-; <http://www.gnu.org/licenses/>.
-
-; See the GCC internals manual (options.texi) for a description of
-; this file's format.
-
-; Please try to keep this file in ASCII collating order.
-
-dynamic
-Driver
-
-G
-Driver
-
-posix
-Driver
-
-; This comment is to ensure we retain the blank line above.
diff -rupN gcc.orig/gcc/config/i386/interix.opt gcc/gcc/config/i386/interix.opt
--- gcc.orig/gcc/config/i386/interix.opt	1969-12-31 16:00:00.000000000 -0800
+++ gcc/gcc/config/i386/interix.opt	2011-06-01 23:07:58.000000000 -0700
@@ -0,0 +1,34 @@
+; Interix-specific options.
+
+; Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc.
+;
+; This file is part of GCC.
+;
+; GCC 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, or (at your option) any later
+; version.
+;
+; GCC 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 GCC; see the file COPYING3.  If not see
+; <http://www.gnu.org/licenses/>.
+
+mpe-aligned-commons
+Target Var(use_pe_aligned_common) Init(HAVE_GAS_ALIGNED_COMM)
+Use the GNU extension to the PE format for aligned common data
+
+dynamic
+Driver
+
+G
+Driver
+
+posix
+Driver
+
+; This comment is to ensure we retain the blank line above.
diff -rupN gcc.orig/gcc/config/i386/t-interix gcc/gcc/config/i386/t-interix
--- gcc.orig/gcc/config/i386/t-interix	2011-04-06 16:49:50.000000000 -0700
+++ gcc/gcc/config/i386/t-interix	2011-06-01 15:41:57.000000000 -0700
@@ -6,3 +6,22 @@ winnt.o: $(srcdir)/config/i386/winnt.c $
   $(TM_P_H) $(HASHTAB_H) $(GGC_H)
 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
 		$(srcdir)/config/i386/winnt.c
+
+winnt-cxx.o: $(srcdir)/config/i386/winnt-cxx.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
+  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
+	$(COMPILER) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+	$(srcdir)/config/i386/winnt-cxx.c
+
+winnt-stubs.o: $(srcdir)/config/i386/winnt-stubs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
+  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
+	$(COMPILER) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+	$(srcdir)/config/i386/winnt-stubs.c
+
+msformat-c.o: $(srcdir)/config/i386/msformat-c.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
+  $(TM_P_H) $(HASHTAB_H) $(GGC_H)
+	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+	$(srcdir)/config/i386/msformat-c.c
+
diff -rupN gcc.orig/gcc/config.gcc gcc/gcc/config.gcc
--- gcc.orig/gcc/config.gcc	2011-06-01 13:35:12.000000000 -0700
+++ gcc/gcc/config.gcc	2011-06-01 23:19:00.000000000 -0700
@@ -237,8 +237,7 @@
 
 # Obsolete configurations.
 case ${target} in
-   i[34567]86-*-interix3*		\
- | mips*-*-openbsd*			\
+   mips*-*-openbsd*			\
  | score-*				\
  | *-*-solaris2.8*			\
  )
@@ -1539,11 +1539,12 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
 			;;
 	esac
 	;;
-i[34567]86-*-interix3*)
-	tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/i386-interix.h i386/i386-interix3.h interix.h interix3.h"
+i[34567]86-*-interix[3-9]*)
+	tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/i386-interix.h"
 	tmake_file="${tmake_file} i386/t-interix"
-	extra_options="${extra_options} rpath.opt interix.opt"
-	extra_objs=winnt.o
+	extra_options="${extra_options} rpath.opt i386/interix.opt"
+	extra_objs="winnt.o winnt-stubs.o"
+	cxx_target_objs="${cxx_target_objs} winnt-cxx.o msformat-c.o"
 	target_gtfiles="\$(srcdir)/config/i386/winnt.c"
 	if test x$enable_threads = xyes ; then
 		thread_file='posix'
diff -rupN gcc.orig/gcc/configure.ac gcc/gcc/configure.ac
--- gcc.orig/gcc/configure.ac	2011-06-01 13:35:12.000000000 -0700
+++ gcc/gcc/configure.ac	2011-06-01 15:41:57.000000000 -0700
@@ -3460,7 +3460,7 @@ changequote([,])dnl
 	   Cygwin DLL exports wrappers to support libstdc++ function replacement.])
     esac
     case $target_os in
-      cygwin* | pe | mingw32*)
+      cygwin* | pe | mingw32* | interix[[3-9]]*)
 	# Recent binutils allows the three-operand form of ".comm" on PE.  This
 	# definition is used unconditionally to initialise the default state of
 	# the target option variable that governs usage of the feature.
diff -rupN gcc.orig/gcc/testsuite/gcc.dg/builtins-config.h gcc/gcc/testsuite/gcc.dg/builtins-config.h
--- gcc.orig/gcc/testsuite/gcc.dg/builtins-config.h	2011-04-06 16:43:19.000000000 -0700
+++ gcc/gcc/testsuite/gcc.dg/builtins-config.h	2011-06-01 18:13:09.000000000 -0700
@@ -11,6 +11,8 @@
 
 #if defined(__hppa) && defined(__hpux)
 /* PA HP-UX doesn't have the entire C99 runtime.  */
+#elif defined(__INTERIX)
+/* Interix doesn't have the entire C99 runtime.  */
 #elif defined(__AVR__)
 /* AVR doesn't have the entire C99 runtime.  */
 #elif defined(__FreeBSD__) && (__FreeBSD__ < 9)
diff -rupN gcc.orig/libgcc/config.host gcc/libgcc/config.host
--- gcc.orig/libgcc/config.host	2011-06-01 13:34:29.000000000 -0700
+++ gcc/libgcc/config.host	2011-06-01 15:41:57.000000000 -0700
@@ -349,7 +349,7 @@ i[34567]86-*-cygwin* | i[34567]86-*-ming
 	;;
 x86_64-*-mingw*)
 	;;
-i[34567]86-*-interix3*)
+i[34567]86-*-interix[3-9]*)
 	;;
 ia64*-*-elf*)
 	extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
--- gcc.orig/gcc/doc/install.texi	2011-06-08 14:05:22.000000000 -0700
+++ gcc/gcc/doc/install.texi	2011-06-09 10:04:38.000000000 -0700
@@ -4499,7 +4499,7 @@
 The Interix target is used by OpenNT, Interix, Services For UNIX (SFU),
 and Subsystem for UNIX-based Applications (SUA).  Applications compiled
 with this target run in the Interix subsystem, which is separate from
-the Win32 subsystem.  This target was last known to work in GCC 3.3.
+the Win32 subsystem.  Gcc supports Interix version 3 and above.
 
 @html
 <hr />

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Un-obsolete Interix
  2011-06-09 17:35 [PATCH] Un-obsolete Interix Douglas B Rupp
@ 2011-06-09 19:13 ` Joseph S. Myers
  2011-06-09 19:32   ` Douglas B Rupp
  2011-06-12 13:50 ` Gerald Pfeifer
  1 sibling, 1 reply; 6+ messages in thread
From: Joseph S. Myers @ 2011-06-09 19:13 UTC (permalink / raw)
  To: Douglas B Rupp; +Cc: gcc-patches

Why are you adding an include of <stdio.h> to i386-interix.h?  This header 
(and most common system headers) should generally be included via system.h 
on the host, or tsystem.h on the target, not directly.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Un-obsolete Interix
  2011-06-09 19:13 ` Joseph S. Myers
@ 2011-06-09 19:32   ` Douglas B Rupp
  0 siblings, 0 replies; 6+ messages in thread
From: Douglas B Rupp @ 2011-06-09 19:32 UTC (permalink / raw)
  To: Joseph S. Myers, gcc-patches

Unneeded and removed.
Also found some trailing spaces in i386-interix.h, now removed.

On 6/9/2011 12:02 PM, Joseph S. Myers wrote:
> Why are you adding an include of<stdio.h>  to i386-interix.h?  This header
> (and most common system headers) should generally be included via system.h
> on the host, or tsystem.h on the target, not directly.
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Un-obsolete Interix
  2011-06-09 17:35 [PATCH] Un-obsolete Interix Douglas B Rupp
  2011-06-09 19:13 ` Joseph S. Myers
@ 2011-06-12 13:50 ` Gerald Pfeifer
  1 sibling, 0 replies; 6+ messages in thread
From: Gerald Pfeifer @ 2011-06-12 13:50 UTC (permalink / raw)
  To: Douglas B Rupp; +Cc: gcc-patches

On Thu, 9 Jun 2011, Douglas B Rupp wrote:
> Comments welcome.

--- gcc.orig/gcc/doc/install.texi	2011-06-08 14:05:22.000000000 -0700
+++ gcc/gcc/doc/install.texi	2011-06-09 10:04:38.000000000 -0700
@@ -4499,7 +4499,7 @@
 The Interix target is used by OpenNT, Interix, Services For UNIX (SFU),
 and Subsystem for UNIX-based Applications (SUA).  Applications compiled
 with this target run in the Interix subsystem, which is separate from
-the Win32 subsystem.  This target was last known to work in GCC 3.3.
+the Win32 subsystem.  Gcc supports Interix version 3 and above.

GCC (not Gcc).

And I assume you'll also be updating the release notes at
http://gcc.gnu.org/gcc-4.7/changes.html . ;-)

Gerald

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Un-obsolete Interix
  2011-06-29 16:06 Douglas Rupp
@ 2011-07-08 11:25 ` Gerald Pfeifer
  0 siblings, 0 replies; 6+ messages in thread
From: Gerald Pfeifer @ 2011-07-08 11:25 UTC (permalink / raw)
  To: Douglas Rupp; +Cc: gcc-patches

Hi Doug,

On Wed, 29 Jun 2011, Douglas Rupp wrote:
> An update to the IA-32/x86-64 section seems the right place. I confess 
> to being ignorant about how to update this html page. Please advise.

at http://gcc.gnu.org/cvs.html I tried to summarize things a bit.
If you have any questions, don't hesitate to let me know!

If things turn out to be tricky, you're also very welcome to download
the current page using a browser, just send me a diff, and I'll take
care of the rest.

Gerald

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Un-obsolete Interix
@ 2011-06-29 16:06 Douglas Rupp
  2011-07-08 11:25 ` Gerald Pfeifer
  0 siblings, 1 reply; 6+ messages in thread
From: Douglas Rupp @ 2011-06-29 16:06 UTC (permalink / raw)
  To: gerald; +Cc: gcc-patches

An update to the IA-32/x86-64 section seems the right place.
I confess to being ignorant about how to update this html page. Please 
advise.
--Doug

On 12 Jun 2011, Gerald Pfeifer wrote:
And I assume you'll be updating the release notes at
http://gcc.gnu.org/gcc-4.7/changes.html . ;-)

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-07-08 11:24 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-09 17:35 [PATCH] Un-obsolete Interix Douglas B Rupp
2011-06-09 19:13 ` Joseph S. Myers
2011-06-09 19:32   ` Douglas B Rupp
2011-06-12 13:50 ` Gerald Pfeifer
2011-06-29 16:06 Douglas Rupp
2011-07-08 11:25 ` Gerald Pfeifer

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