/* Output xcoff-format symbol table information from GNU compiler.
- Copyright (C) 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2002, 2003, 2004
- 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
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
+<http://www.gnu.org/licenses/>. */
/* Output xcoff-format symbol table data. The main functionality is contained
in dbxout.c. This file implements the sdbout-like parts of the xcoff
#include "output.h"
#include "ggc.h"
#include "target.h"
+#include "debug.h"
#ifdef XCOFF_DEBUGGING_INFO
#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) \
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));
/* 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. */
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;
}
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;
}
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.
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
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).