/* 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, 2008 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
/* ??? Should also handle built-in C++ and Obj-C types. There perhaps
aren't any that C doesn't already have. */
-};
+};
/* Returns an XCOFF fundamental type number for DECL (assumed to be a
TYPE_DECL), or 0 if dbxout.c should assign a type number normally. */
/* 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;
}
/* Output a line number symbol entry for location (FILENAME, LINE). */
void
-xcoffout_source_line (unsigned int line, const char *filename)
+xcoffout_source_line (unsigned int line, const char *filename,
+ int discriminator ATTRIBUTE_UNUSED,
+ bool is_stmt ATTRIBUTE_UNUSED)
{
bool inline_p = (strcmp (xcoff_current_function_file, filename) != 0
|| (int) line < xcoff_begin_function_line);
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 = XALLOCAVEC (char, 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