X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fxcoffout.c;h=fb99903b76d5f6a64f86d033b85638c8d1d6091f;hb=88c5930813da1b875a27bd64b1cd3209d57eebe2;hp=de7528fbb4fbb522c7acfd150fabb4fadbd7f773;hpb=709e5e548b3481d9c2f51f600d7bd50a62e0083e;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/xcoffout.c b/gcc/xcoffout.c index de7528fbb4f..fb99903b76d 100644 --- a/gcc/xcoffout.c +++ b/gcc/xcoffout.c @@ -1,12 +1,12 @@ /* Output xcoff-format symbol table information from GNU compiler. - Copyright (C) 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2002, 2003 - Free Software Foundation, Inc. + Copyright (C) 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2002, 2003, 2004, + 2007 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 2, or (at your option) any later +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 @@ -15,9 +15,8 @@ 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 COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ +along with GCC; see the file COPYING3. If not see +. */ /* Output xcoff-format symbol table data. The main functionality is contained in dbxout.c. This file implements the sdbout-like parts of the xcoff @@ -35,6 +34,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "output.h" #include "ggc.h" #include "target.h" +#include "debug.h" #ifdef XCOFF_DEBUGGING_INFO @@ -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) \ @@ -156,7 +156,7 @@ xcoff_assign_fundamental_type_number (tree decl) size_t i; /* Do not waste time searching the list for non-intrinsic types. */ - if (DECL_NAME (decl) == 0 || DECL_SOURCE_LINE (decl) > 0) + if (DECL_NAME (decl) == 0 || ! DECL_IS_BUILTIN (decl)) return 0; name = IDENTIFIER_POINTER (DECL_NAME (decl)); @@ -184,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. */ @@ -301,7 +301,8 @@ xcoffout_source_file (FILE *file, const char *filename, int inline_p) if (xcoff_current_include_file) { fprintf (file, "\t.ei\t"); - output_quoted_string (file, xcoff_current_include_file); + output_quoted_string (file, + remap_debug_filename (xcoff_current_include_file)); fprintf (file, "\n"); xcoff_current_include_file = NULL; } @@ -309,7 +310,7 @@ xcoffout_source_file (FILE *file, const char *filename, int inline_p) if (strcmp (main_input_filename, filename) || inline_p) { fprintf (file, "\t.bi\t"); - output_quoted_string (file, filename); + output_quoted_string (file, remap_debug_filename (filename)); fprintf (file, "\n"); xcoff_current_include_file = filename; } @@ -327,7 +328,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); } /* Output the symbols defined in block number DO_BLOCK. @@ -405,22 +406,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 @@ -454,7 +451,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).