OSDN Git Service

ch:
[pf3gnuchains/gcc-fork.git] / gcc / sdbout.c
index de16c0f..c75aa84 100644 (file)
@@ -123,40 +123,6 @@ static void sdbout_one_type                PARAMS ((tree));
 static void sdbout_parms               PARAMS ((tree));
 static void sdbout_reg_parms           PARAMS ((tree));
 \f
-/* Define the default sizes for various types.  */
-
-#ifndef CHAR_TYPE_SIZE
-#define CHAR_TYPE_SIZE BITS_PER_UNIT
-#endif
-
-#ifndef SHORT_TYPE_SIZE
-#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
-#endif
-
-#ifndef INT_TYPE_SIZE
-#define INT_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef LONG_TYPE_SIZE
-#define LONG_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef LONG_LONG_TYPE_SIZE
-#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
-#endif
-
-#ifndef FLOAT_TYPE_SIZE
-#define FLOAT_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef DOUBLE_TYPE_SIZE
-#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
-#endif
-
-#ifndef LONG_DOUBLE_TYPE_SIZE
-#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
-#endif
-\f
 /* Random macros describing parts of SDB data.  */
 
 /* Put something here if lines get too long */
@@ -195,9 +161,14 @@ static void sdbout_reg_parms               PARAMS ((tree));
 
 #ifndef PUT_SDB_DEF
 #define PUT_SDB_DEF(a)                         \
+
+#undef PUT_SDB_DEF
+PUT_SDB_DEF(a)                         \
+char *a; {
 do { fprintf (asm_out_file, "\t.def\t");       \
-     ASM_OUTPUT_LABELREF (asm_out_file, a);    \
+     assemble_name (asm_out_file, a);  \
      fprintf (asm_out_file, SDB_DELIM); } while (0)
+; }
 #endif
 
 #ifndef PUT_SDB_PLAIN_DEF
@@ -236,7 +207,7 @@ do { fprintf (asm_out_file, "\t.def\t");    \
 #ifndef PUT_SDB_TAG
 #define PUT_SDB_TAG(a)                         \
 do { fprintf (asm_out_file, "\t.tag\t");       \
-     ASM_OUTPUT_LABELREF (asm_out_file, a);    \
+     assemble_name (asm_out_file, a);  \
      fprintf (asm_out_file, SDB_DELIM); } while (0)
 #endif
 
@@ -271,7 +242,7 @@ do { fprintf (asm_out_file, "\t.tag\t");    \
 #ifndef PUT_SDB_EPILOGUE_END
 #define PUT_SDB_EPILOGUE_END(NAME)                     \
 do { fprintf (asm_out_file, "\t.def\t");               \
-     ASM_OUTPUT_LABELREF (asm_out_file, NAME);         \
+     assemble_name (asm_out_file, NAME);               \
      fprintf (asm_out_file,                            \
              "%s\t.val\t.%s\t.scl\t-1%s\t.endef\n",    \
              SDB_DELIM, SDB_DELIM, SDB_DELIM); } while (0)
@@ -327,7 +298,7 @@ output_file_directive (asm_out_file, (FILENAME))
 struct sdb_file
 {
   struct sdb_file *next;
-  char *name;
+  const char *name;
 };
 
 /* This is the top of the stack.  */
@@ -341,7 +312,7 @@ static struct sdb_file *current_file;
 void
 sdbout_init (asm_file, input_file_name, syms)
      FILE *asm_file ATTRIBUTE_UNUSED;
-     char *input_file_name ATTRIBUTE_UNUSED;
+     const char *input_file_name ATTRIBUTE_UNUSED;
      tree syms ATTRIBUTE_UNUSED;
 {
 #ifdef MIPS_DEBUGGING_INFO
@@ -607,12 +578,14 @@ plain_type_1 (type, level)
        if (sdb_n_dims < SDB_MAX_DIM)
          sdb_dims[sdb_n_dims++]
            = (TYPE_DOMAIN (type)
-              && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
-              && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-              && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-              ? (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
-                 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1)
+              && TYPE_MIN_VALUE (TYPE_DOMAIN (type)) != 0
+              && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != 0
+              && host_integerp (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), 0)
+              && host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0)
+              ? (tree_low_cst (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), 0)
+                 - tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0) + 1)
               : 0);
+
        return PUSH_DERIVED_LEVEL (DT_ARY, m);
       }
 
@@ -679,15 +652,12 @@ plain_type_1 (type, level)
 }
 \f
 /* Output the symbols defined in block number DO_BLOCK.
-   Set NEXT_BLOCK_NUMBER to 0 before calling.
 
    This function works by walking the tree structure of blocks,
    counting blocks until it finds the desired block.  */
 
 static int do_block = 0;
 
-static int next_block_number;
-
 static void
 sdbout_block (block)
      register tree block;
@@ -698,17 +668,13 @@ sdbout_block (block)
       if (TREE_USED (block))
        {
          /* When we reach the specified block, output its symbols.  */
-         if (next_block_number == do_block)
-           {
-             sdbout_syms (BLOCK_VARS (block));
-           }
+         if (BLOCK_NUMBER (block) == do_block)
+           sdbout_syms (BLOCK_VARS (block));
 
          /* If we are past the specified block, stop the scan.  */
-         if (next_block_number > do_block)
+         if (BLOCK_NUMBER (block) > do_block)
            return;
 
-         next_block_number++;
-
          /* Scan the blocks within this block.  */
          sdbout_block (BLOCK_SUBBLOCKS (block));
        }
@@ -865,7 +831,7 @@ sdbout_symbol (decl, local)
          || TREE_CODE (type) == UNION_TYPE
          || TREE_CODE (type) == QUAL_UNION_TYPE)
        {
-         if (TYPE_SIZE (type) != 0             /* not a forward reference */
+         if (COMPLETE_TYPE_P (type)            /* not a forward reference */
              && KNOWN_TYPE_TAG (type) == 0)    /* not yet declared */
            sdbout_one_type (type);
        }
@@ -1096,8 +1062,8 @@ sdbout_field_types (type)
        below.  */
     if (TREE_CODE (tail) == FIELD_DECL
        && DECL_NAME (tail) != 0
-       && TREE_CODE (DECL_SIZE (tail)) == INTEGER_CST
-       && TREE_CODE (DECL_FIELD_BITPOS (tail)) == INTEGER_CST)
+       && ! host_integerp (DECL_SIZE (tail), 1)
+       && ! host_integerp (bit_position (tail), 0))
       {
        if (POINTER_TYPE_P (TREE_TYPE (tail)))
          sdbout_one_type (TREE_TYPE (TREE_TYPE (tail)));
@@ -1136,7 +1102,7 @@ sdbout_one_type (type)
        return;
 
       /* Output nothing if type is not yet defined.  */
-      if (TYPE_SIZE (type) == 0)
+      if (!COMPLETE_TYPE_P (type))
        return;
 
       TREE_ASM_WRITTEN (type) = 1;
@@ -1246,7 +1212,7 @@ sdbout_one_type (type)
 
                CONTIN;
                PUT_SDB_DEF (IDENTIFIER_POINTER (child_type_name));
-               PUT_SDB_INT_VAL (TREE_INT_CST_LOW (BINFO_OFFSET (child)));
+               PUT_SDB_INT_VAL (tree_low_cst (BINFO_OFFSET (child), 0));
                PUT_SDB_SCL (member_scl);
                sdbout_type (BINFO_TYPE (child));
                PUT_SDB_ENDEF;
@@ -1256,15 +1222,17 @@ sdbout_one_type (type)
        /* output the individual fields */
 
        if (TREE_CODE (type) == ENUMERAL_TYPE)
-         for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
-           {
-             PUT_SDB_DEF (IDENTIFIER_POINTER (TREE_PURPOSE (tem)));
-             PUT_SDB_INT_VAL (TREE_INT_CST_LOW (TREE_VALUE (tem)));
-             PUT_SDB_SCL (C_MOE);
-             PUT_SDB_TYPE (T_MOE);
-             PUT_SDB_ENDEF;
-           }
-
+         {
+           for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
+             if (host_integerp (TREE_VALUE (tem), 0))
+               {
+                 PUT_SDB_DEF (IDENTIFIER_POINTER (TREE_PURPOSE (tem)));
+                 PUT_SDB_INT_VAL (tree_low_cst (TREE_VALUE (tem), 0));
+                 PUT_SDB_SCL (C_MOE);
+                 PUT_SDB_TYPE (T_MOE);
+                 PUT_SDB_ENDEF;
+               }
+         }
        else                    /* record or union type */
          for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
            /* Output the name, type, position (in bits), size (in bits)
@@ -1275,8 +1243,8 @@ sdbout_one_type (type)
               Also omit non FIELD_DECL nodes that GNU C++ may put here.  */
            if (TREE_CODE (tem) == FIELD_DECL
                && DECL_NAME (tem) != 0
-               && TREE_CODE (DECL_SIZE (tem)) == INTEGER_CST
-               && TREE_CODE (DECL_FIELD_BITPOS (tem)) == INTEGER_CST)
+               && host_integerp (DECL_SIZE (tem), 1)
+               && host_integerp (bit_position (tem), 0))
              {
                char *name;
 
@@ -1285,15 +1253,14 @@ sdbout_one_type (type)
                PUT_SDB_DEF (name);
                if (DECL_BIT_FIELD_TYPE (tem))
                  {
-                   PUT_SDB_INT_VAL (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (tem)));
+                   PUT_SDB_INT_VAL (int_bit_position (tem));
                    PUT_SDB_SCL (C_FIELD);
                    sdbout_type (DECL_BIT_FIELD_TYPE (tem));
-                   PUT_SDB_SIZE (TREE_INT_CST_LOW (DECL_SIZE (tem)));
+                   PUT_SDB_SIZE (tree_low_cst (DECL_SIZE (tem), 1));
                  }
                else
                  {
-                   PUT_SDB_INT_VAL (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (tem))
-                                    / BITS_PER_UNIT);
+                   PUT_SDB_INT_VAL (int_bit_position (tem) / BITS_PER_UNIT);
                    PUT_SDB_SCL (member_scl);
                    sdbout_type (TREE_TYPE (tem));
                  }
@@ -1362,7 +1329,6 @@ sdbout_parms (parms)
              current_sym_value = 0;
 
            if (GET_CODE (DECL_RTL (parms)) == REG
-               && REGNO (DECL_RTL (parms)) >= 0
                && REGNO (DECL_RTL (parms)) < FIRST_PSEUDO_REGISTER)
              type = DECL_ARG_TYPE (parms);
            else
@@ -1410,8 +1376,7 @@ sdbout_parms (parms)
               pretend the parm was passed there.  It would be more consistent
               to describe the register where the parm was passed,
               but in practice that register usually holds something else.  */
-           if (REGNO (DECL_RTL (parms)) >= 0
-               && REGNO (DECL_RTL (parms)) < FIRST_PSEUDO_REGISTER)
+           if (REGNO (DECL_RTL (parms)) < FIRST_PSEUDO_REGISTER)
              best_rtl = DECL_RTL (parms);
            /* If the parm lives nowhere,
               use the register where it was passed.  */
@@ -1473,7 +1438,6 @@ sdbout_reg_parms (parms)
        /* Report parms that live in registers during the function
           but were passed in memory.  */
        if (GET_CODE (DECL_RTL (parms)) == REG
-           && REGNO (DECL_RTL (parms)) >= 0
            && REGNO (DECL_RTL (parms)) < FIRST_PSEUDO_REGISTER
            && PARM_PASSED_IN_MEMORY (parms))
          {
@@ -1546,15 +1510,13 @@ sdbout_begin_block (file, line, n)
   if (n == 1)
     {
       /* Include the outermost BLOCK's variables in block 1.  */
-      next_block_number = 0;
-      do_block = 0;
+      do_block = BLOCK_NUMBER (DECL_INITIAL (decl));
       sdbout_block (DECL_INITIAL (decl));
     }
   /* If -g1, suppress all the internal symbols of functions
      except for arguments.  */
   if (debug_info_level != DINFO_LEVEL_TERSE)
     {
-      next_block_number = 0;
       do_block = n;
       sdbout_block (DECL_INITIAL (decl));
     }
@@ -1654,7 +1616,7 @@ sdbout_label (insn)
 
 void
 sdbout_start_new_source_file (filename)
-     char *filename ATTRIBUTE_UNUSED;
+     const char *filename ATTRIBUTE_UNUSED;
 {
 #ifdef MIPS_DEBUGGING_INFO
   struct sdb_file *n = (struct sdb_file *) xmalloc (sizeof *n);