]> gcc.gnu.org Git - gcc.git/blobdiff - gcc/config/mips/elf64.h
chorus.h: Consistently define *_DEBUGGING_INFO with the value 1.
[gcc.git] / gcc / config / mips / elf64.h
index f0b003722307e1195710aea87f2cf44fe2c99044..414d16f4ef85c7f7582ed1134ee60188e98ec587 100644 (file)
@@ -1,6 +1,7 @@
 /* Definitions of target machine for GNU compiler.  MIPS R4000 version with
    GOFAST floating point library.
-   Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2002
+   Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -19,75 +20,43 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
+#undef  OBJECT_FORMAT_COFF
+#undef  EXTENDED_COFF
 #define OBJECT_FORMAT_ELF
 
-/* Default to -mips3.  */
-#define TARGET_DEFAULT MASK_FLOAT64|MASK_64BIT
-#define MIPS_ISA_DEFAULT 3
+#undef  SDB_DEBUGGING_INFO
+#define DBX_DEBUGGING_INFO 1
+#define DWARF2_DEBUGGING_INFO 1
 
-/* Until we figure out what MIPS ELF targets normally use, just do
-   stabs in ELF.  */
-#ifndef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-#endif
-
-/* US Software GOFAST library support.  */
-#include "gofast.h"
-#define INIT_SUBTARGET_OPTABS INIT_GOFAST_OPTABS
-
-#include "mips/mips.h"
-
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Dmips -DMIPSEB -DR4000 -D_mips -D_MIPSEB -D_R4000"
+#undef  PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
 
-/* I would rather put this in CPP_PREDEFINES, but the gcc driver
-   doesn't handle -U options in CPP_PREDEFINES.  */
-#undef SUBTARGET_CPP_SPEC
-#define SUBTARGET_CPP_SPEC "\
-%{!mips1:%{!mips2:-U__mips -D__mips=3 -D__mips64}}"
-
-/* Use memcpy, et. al., rather than bcopy.  */
-#define TARGET_MEM_FUNCTIONS
+#undef  SUBTARGET_ASM_DEBUGGING_SPEC
+#define SUBTARGET_ASM_DEBUGGING_SPEC "-g0"
 
 /* Biggest alignment supported by the object file format of this
    machine.  Use this macro to limit the alignment which can be
    specified using the `__attribute__ ((aligned (N)))' construct.  If
    not defined, the default value is `BIGGEST_ALIGNMENT'.  */
 
+#undef MAX_OFILE_ALIGNMENT
 #define MAX_OFILE_ALIGNMENT (32768*8)
 
-/* We need to use .esize and .etype instead of .size and .type to
-   avoid conflicting with ELF directives.  */
-#undef PUT_SDB_SIZE
-#define PUT_SDB_SIZE(a)                                        \
-do {                                                   \
-  extern FILE *asm_out_text_file;                      \
-  fprintf (asm_out_text_file, "\t.esize\t%d;", (a));   \
-} while (0)
-
-#undef PUT_SDB_TYPE
-#define PUT_SDB_TYPE(a)                                        \
-do {                                                   \
-  extern FILE *asm_out_text_file;                      \
-  fprintf (asm_out_text_file, "\t.etype\t0x%x;", (a)); \
-} while (0)
-
-/* A C statement to output something to the assembler file to switch to section
-   NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or
-   NULL_TREE.  Some target formats do not support arbitrary sections.  Do not
-   define this macro in such cases.  */
-
-#define ASM_OUTPUT_SECTION_NAME(F, DECL, NAME, RELOC) \
-do {                                                           \
-  extern FILE *asm_out_text_file;                              \
-  if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL)             \
-    fprintf (asm_out_text_file, "\t.section %s,\"ax\",@progbits\n", (NAME)); \
-  else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC))      \
-    fprintf (F, "\t.section %s,\"a\",@progbits\n", (NAME));    \
-  else if (! strcmp (NAME, ".bss"))                            \
-    fprintf (F, "\t.section %s,\"aw\",@nobits\n", (NAME));     \
-  else                                                         \
-    fprintf (F, "\t.section %s,\"aw\",@progbits\n", (NAME));   \
+/* Switch into a generic section.  */
+#undef TARGET_ASM_NAMED_SECTION
+#define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
+
+/* Given that Irix has it's own headers, not having TARGET_GAS here
+   seems a mistake.  If we actually need to be prepared for file
+   switching, then we need a custom TARGET_ASM_NAMED_SECTION too.  */
+
+#undef TEXT_SECTION
+#define TEXT_SECTION()                         \
+do {                                           \
+  if (TARGET_FILE_SWITCHING)                   \
+    abort ();                                  \
+  fputs (TEXT_SECTION_ASM_OP, asm_out_file);   \
+  fputc ('\n', asm_out_file);                  \
 } while (0)
 
 /* The following macro defines the format used to output the second
@@ -119,18 +88,14 @@ do {                                                               \
 #undef ASM_DECLARE_OBJECT_NAME
 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                      \
   do {                                                                 \
-    fprintf (FILE, "%s", TYPE_ASM_OP);                                 \
-    assemble_name (FILE, NAME);                                                \
-    putc (',', FILE);                                                  \
-    fprintf (FILE, TYPE_OPERAND_FMT, "object");                                \
-    putc ('\n', FILE);                                                 \
+    HOST_WIDE_INT size;                                                        \
+    ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                  \
     size_directive_output = 0;                                         \
     if (!flag_inhibit_size_directive && DECL_SIZE (DECL))              \
       {                                                                        \
        size_directive_output = 1;                                      \
-       fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-       assemble_name (FILE, NAME);                                     \
-       fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
+       size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+       ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);                   \
       }                                                                        \
     mips_declare_object (FILE, NAME, "", ":\n", 0);                    \
   } while (0)
@@ -145,15 +110,15 @@ do {                                                              \
 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)        \
 do {                                                                    \
      const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);            \
+     HOST_WIDE_INT size;                                                \
      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)               \
          && ! AT_END && TOP_LEVEL                                       \
         && DECL_INITIAL (DECL) == error_mark_node                       \
         && !size_directive_output)                                      \
        {                                                                \
         size_directive_output = 1;                                      \
-        fprintf (FILE, "%s", SIZE_ASM_OP);                              \
-        assemble_name (FILE, name);                                     \
-        fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL)));  \
+        size = int_size_in_bytes (TREE_TYPE (DECL));                    \
+        ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);                   \
        }                                                                \
    } while (0)
 
@@ -170,8 +135,9 @@ do {                                                                         \
    mips-elf gas supports .weak, but not .weakext.
    mips-elf gas has been changed to support both .weak and .weakext,
    but until that support is generally available, the 'if' below
-   should serve. */
+   should serve.  */
 
+#undef ASM_WEAKEN_LABEL
 #define ASM_WEAKEN_LABEL(FILE,NAME) ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,0)
 #define ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,VALUE) \
  do {                                          \
@@ -189,114 +155,17 @@ do {                                                                      \
  } while (0)
 
 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
-#undef UNIQUE_SECTION_P
-#define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL))
-#define UNIQUE_SECTION(DECL,RELOC)                                        \
-do {                                                                      \
-  int len, size, sec;                                                     \
-  char *name, *string, *prefix;                                                   \
-  static char *prefixes[4][2] = {                                         \
-    { ".text.", ".gnu.linkonce.t." },                                     \
-    { ".rodata.", ".gnu.linkonce.r." },                                           \
-    { ".data.", ".gnu.linkonce.d." },                                     \
-    { ".sdata.", ".gnu.linkonce.s." }                                     \
-  };                                                                      \
-                                                                          \
-  name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL));                 \
-  size = int_size_in_bytes (TREE_TYPE (decl));                            \
-                                                                          \
-  /* Determine the base section we are interested in:                     \
-     0=text, 1=rodata, 2=data, 3=sdata, [4=bss].  */                      \
-  if (TREE_CODE (DECL) == FUNCTION_DECL)                                  \
-    sec = 0;                                                              \
-  else if (DECL_INITIAL (DECL) == 0                                       \
-           || DECL_INITIAL (DECL) == error_mark_node)                     \
-    sec = 2;                                                              \
-  else if ((TARGET_EMBEDDED_PIC || TARGET_MIPS16)                         \
-      && TREE_CODE (decl) == STRING_CST                                           \
-      && !flag_writable_strings)                                          \
-    {                                                                     \
-      /* For embedded position independent code, put constant strings     \
-        in the text section, because the data section is limited to       \
-        64K in size.  For mips16 code, put strings in the text            \
-        section so that a PC relative load instruction can be used to     \
-        get their address.  */                                            \
-      sec = 0;                                                            \
-    }                                                                     \
-  else if (TARGET_EMBEDDED_DATA)                                          \
-    {                                                                     \
-      /* For embedded applications, always put an object in read-only data \
-        if possible, in order to reduce RAM usage.  */                    \
-                                                                          \
-      if (DECL_READONLY_SECTION (DECL, RELOC))                            \
-       sec = 1;                                                           \
-      else if (size > 0 && size <= mips_section_threshold)                \
-       sec = 3;                                                           \
-      else                                                                \
-       sec = 2;                                                           \
-    }                                                                     \
-  else                                                                    \
-    {                                                                     \
-      /* For hosted applications, always put an object in small data if           \
-        possible, as this gives the best performance.  */                 \
-                                                                          \
-      if (size > 0 && size <= mips_section_threshold)                     \
-       sec = 3;                                                           \
-      else if (DECL_READONLY_SECTION (DECL, RELOC))                       \
-       sec = 1;                                                           \
-      else                                                                \
-       sec = 2;                                                           \
-    }                                                                     \
-                                                                          \
-  prefix = prefixes[sec][DECL_ONE_ONLY (DECL)];                                   \
-  len = strlen (name) + strlen (prefix);                                  \
-  string = alloca (len + 1);                                              \
-  sprintf (string, "%s%s", prefix, name);                                 \
-                                                                          \
-  DECL_SECTION_NAME (DECL) = build_string (len, string);                  \
-} while (0)
 
-/* Support the ctors/dtors and other sections.  */
-/* Define the names of and pseudo-ops used to switch to the .ctors and
-   .dtors sections.
-   Note that we want to give these sections the SHF_WRITE attribute
-   because these sections will actually contain data (i.e. tables of
-   addresses of functions in the current root executable or shared library
-   file) and, in the case of a shared library, the relocatable addresses
-   will have to be properly resolved/relocated (and then written into) by
-   the dynamic linker when it actually attaches the given shared library
-   to the executing process.  (Note that on SVR4, you may wish to use the
-   `-z text' option to the ELF linker, when building a shared library, as
-   an additional check that you are doing everything right.  But if you do
-   use the `-z text' option when building a shared library, you will get
-   errors unless the .ctors and .dtors sections are marked as writable
-   via the SHF_WRITE attribute.)  */
-
-#define CTORS_SECTION_NAME      ".ctors"
-#define CTORS_SECTION_ASM_OP    "\t.section\t.ctors,\"aw\""
-#define DTORS_SECTION_NAME      ".dtors"
-#define DTORS_SECTION_ASM_OP    "\t.section\t.dtors,\"aw\""
-/* There's no point providing a default definition of __CTOR_LIST__
-   since people are expected either to use crtbegin.o, or an equivalent,
-   or provide their own definition.  */
-#define CTOR_LISTS_DEFINED_EXTERNALLY
+#define TARGET_ASM_UNIQUE_SECTION mips_unique_section
 
 /* A list of other sections which the compiler might be "in" at any
    given time.  */
 #undef EXTRA_SECTIONS
-#define EXTRA_SECTIONS in_sdata, in_rdata, in_ctors, in_dtors
-#define INVOKE__main
+#define EXTRA_SECTIONS in_sdata
 
 #undef EXTRA_SECTION_FUNCTIONS
 #define EXTRA_SECTION_FUNCTIONS                                         \
-  SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP) \
-  SECTION_FUNCTION_TEMPLATE(rdata_section, in_rdata, RDATA_SECTION_ASM_OP) \
-  SECTION_FUNCTION_TEMPLATE(ctors_section, in_ctors, CTORS_SECTION_ASM_OP) \
-  SECTION_FUNCTION_TEMPLATE(dtors_section, in_dtors, DTORS_SECTION_ASM_OP)
+  SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP)
 
 #define SECTION_FUNCTION_TEMPLATE(FN, ENUM, OP)                               \
 void FN ()                                                            \
@@ -308,50 +177,28 @@ void FN ()                                                            \
     }                                                                 \
 }
 
+/* On elf, we *do* have support for the .init and .fini sections, and we
+   can put stuff in there to be executed before and after `main'.  We let
+   crtstuff.c and other files know this by defining the following symbols.
+   The definitions say how to change sections to the .init and .fini
+   sections.  This is the same for all known elf assemblers.  */
 
-/* A C statement (sans semicolon) to output an element in the table of
-   global constructors.  */
-#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME)                             \
-  do {                                                                \
-    ctors_section ();                                                 \
-    fprintf (FILE, "\t%s\t", (Pmode == SImode) ? ".word" : ".dword"); \
-    assemble_name (FILE, NAME);                                       \
-    fprintf (FILE, "\n");                                             \
-  } while (0)
-
-
-/* A C statement (sans semicolon) to output an element in the table of
-   global destructors.  */
-#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME)                              \
-  do {                                                                \
-    dtors_section ();                                                 \
-    fprintf (FILE, "\t%s\t", (Pmode == SImode) ? ".word" : ".dword"); \
-    assemble_name (FILE, NAME);                                       \
-    fprintf (FILE, "\n");                                             \
-  } while (0)
-
-#define CTOR_LIST_BEGIN                                               \
-func_ptr __CTOR_LIST__ __attribute__((section(CTORS_SECTION_NAME))) = \
-  (func_ptr) (-1)
-#define CTOR_LIST_END                                                 \
-func_ptr __CTOR_END__ __attribute__((section(CTORS_SECTION_NAME))) =  \
-  (func_ptr) 0
-#define DTOR_LIST_BEGIN                                               \
-func_ptr __DTOR_LIST__ __attribute__((section(DTORS_SECTION_NAME))) = \
-  (func_ptr) (-1)
-
-#define DTOR_LIST_END                                                 \
-func_ptr __DTOR_END__ __attribute__((section(DTORS_SECTION_NAME))) =  \
-  (func_ptr) 0
+#undef  INIT_SECTION_ASM_OP
+#define INIT_SECTION_ASM_OP     "\t.section\t.init"
+#undef  FINI_SECTION_ASM_OP
+#define FINI_SECTION_ASM_OP     "\t.section\t.fini"
 
 /* Don't set the target flags, this is done by the linker script */
 #undef LIB_SPEC
 #define LIB_SPEC ""
 
 #undef  STARTFILE_SPEC
-#define STARTFILE_SPEC "crtbegin%O%s %{!mno-crt0:crt0%O%s}"
+#if defined(HAVE_MIPS_LIBGLOSS_STARTUP_DIRECTIVES) \
+    || (MIPS_ABI_DEFAULT == ABI_MEABI)
+#define STARTFILE_SPEC "crti%O%s crtbegin%O%s"
+#else
+#define STARTFILE_SPEC "crti%O%s crtbegin%O%s %{!mno-crt0:crt0%O%s}"
+#endif
 
 #undef  ENDFILE_SPEC
-#define ENDFILE_SPEC "crtend%O%s"
+#define ENDFILE_SPEC "crtend%O%s crtn%O%s"
This page took 0.040723 seconds and 5 git commands to generate.