OSDN Git Service

* objc.dg/objc-fast-4.m: Skip for ppc64.
[pf3gnuchains/gcc-fork.git] / gcc / xcoffout.c
index 447da74..24abe6d 100644 (file)
@@ -1,5 +1,5 @@
 /* Output xcoff-format symbol table information from GNU compiler.
-   Copyright (C) 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2002, 2003
+   Copyright (C) 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2002, 2003, 2004
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -16,8 +16,8 @@ for more details.
 
 You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING.  If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.  */
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA.  */
 
 /* Output xcoff-format symbol table data.  The main functionality is contained
    in dbxout.c.  This file implements the sdbout-like parts of the xcoff
@@ -77,8 +77,8 @@ const char *xcoff_lastfile;
 #define ABS_OR_RELATIVE_LINENO(LINENO)         \
 ((xcoff_inlining) ? (LINENO) : (LINENO) - xcoff_begin_function_line)
 
-/* Output source line numbers via ".line" rather than ".stabd".  */
-#define ASM_OUTPUT_SOURCE_LINE(FILE,LINENUM,COUNTER)                      \
+/* Output source line numbers via ".line".  */
+#define ASM_OUTPUT_LINE(FILE,LINENUM)                                     \
   do                                                                      \
     {                                                                     \
       if (xcoff_begin_function_line >= 0)                                 \
@@ -152,13 +152,15 @@ static const struct xcoff_type_number xcoff_type_numbers[] = {
 int
 xcoff_assign_fundamental_type_number (tree decl)
 {
-  const char *name = IDENTIFIER_POINTER (DECL_NAME (decl));
+  const char *name;
   size_t i;
 
   /* Do not waste time searching the list for non-intrinsic types.  */
-  if (DECL_SOURCE_LINE (decl) > 0)
+  if (DECL_NAME (decl) == 0 || ! DECL_IS_BUILTIN (decl))
     return 0;
 
+  name = IDENTIFIER_POINTER (DECL_NAME (decl));
+
   /* Linear search, blech, but the list is too small to bother
      doing anything else.  */
   for (i = 0; i < ARRAY_SIZE (xcoff_type_numbers); i++)
@@ -182,7 +184,7 @@ xcoff_assign_fundamental_type_number (tree decl)
 /* Print an error message for unrecognized stab codes.  */
 
 #define UNKNOWN_STAB(STR)      \
-  internal_error ("no sclass for %s stab (0x%x)\n", STR, stab)
+  internal_error ("no sclass for %s stab (0x%x)", STR, stab)
 
 /* Conversion routine from BSD stabs to AIX storage classes.  */
 
@@ -325,7 +327,7 @@ xcoffout_source_line (unsigned int line, const char *filename)
 
   xcoffout_source_file (asm_out_file, filename, inline_p);
 
-  ASM_OUTPUT_SOURCE_LINE (asm_out_file, line, 0);
+  ASM_OUTPUT_LINE (asm_out_file, line);
 }
 \f
 /* Output the symbols defined in block number DO_BLOCK.
@@ -403,22 +405,18 @@ xcoffout_end_block (unsigned int line, unsigned int n)
 void
 xcoffout_declare_function (FILE *file, tree decl, const char *name)
 {
-  int i;
+  size_t len;
 
   if (*name == '*')
     name++;
-  else
-    for (i = 0; name[i]; ++i)
-      {
-       if (name[i] == '[')
-         {
-           char *n = alloca (i + 1);
-           strncpy (n, name, i);
-           n[i] = '\0';
-           name = n;
-           break;
-         }
-      }
+  len = strlen (name);
+  if (name[len - 1] == ']')
+    {
+      char *n = alloca (len - 3);
+      memcpy (n, name, len - 4);
+      n[len - 4] = '\0';
+      name = n;
+    }
 
   /* Any pending .bi or .ei must occur before the .function pseudo op.
      Otherwise debuggers will think that the function is in the previous
@@ -452,7 +450,7 @@ xcoffout_begin_prologue (unsigned int line,
   xcoffout_block (DECL_INITIAL (current_function_decl), 0,
                  DECL_ARGUMENTS (current_function_decl));
 
-  ASM_OUTPUT_SOURCE_LINE (asm_out_file, line, 0);
+  ASM_OUTPUT_LINE (asm_out_file, line);
 }
 
 /* Called at end of function (before epilogue).