/* XCOFF definitions. These are needed in dbxout.c, final.c,
and xcoffout.h.
- Copyright (C) 1998, 2000, 2002, 2003, 2004
+ Copyright (C) 1998, 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/>. */
-#define ASM_STABS_OP "\t.stabx\t"
-
/* Tags and typedefs are C_DECL in XCOFF, not C_LSYM. */
#define DBX_TYPE_DECL_STABS_CODE N_DECL
/* Define our own finish symbol function, since xcoff stabs have their
own different format. */
-#define DBX_FINISH_SYMBOL(SYM) \
-{ \
- if (current_sym_addr && current_sym_code == N_FUN) \
- fprintf (asmfile, "\",."); \
- else \
- fprintf (asmfile, "\","); \
- /* If we are writing a function name, we must ensure that \
- there is no storage-class suffix on the name. */ \
- if (current_sym_addr && current_sym_code == N_FUN \
- && GET_CODE (current_sym_addr) == SYMBOL_REF) \
- { \
- const char *_p = XSTR (current_sym_addr, 0); \
- if (*_p == '*') \
- fprintf (asmfile, "%s", _p+1); \
- else \
- for (; *_p != '[' && *_p; _p++) \
- fprintf (asmfile, "%c", *_p); \
- } \
- else if (current_sym_addr) \
- output_addr_const (asmfile, current_sym_addr); \
- else if (current_sym_code == N_GSYM) \
- assemble_name (asmfile, XSTR (XEXP (DECL_RTL (sym), 0), 0)); \
- else \
- fprintf (asmfile, "%d", current_sym_value); \
- fprintf (asmfile, ",%d,0\n", stab_to_sclass (current_sym_code)); \
-}
+#define DBX_FINISH_STABS(SYM, CODE, LINE, ADDR, LABEL, NUMBER) do { \
+ if (ADDR) \
+ { \
+ /* If we are writing a function name, we must emit a dot in \
+ order to refer to the function code, not its descriptor. */ \
+ if (CODE == N_FUN) \
+ putc ('.', asm_out_file); \
+ \
+ /* If we are writing a function name, we must ensure that \
+ there is no storage-class suffix on the name. */ \
+ if (CODE == N_FUN && GET_CODE (ADDR) == SYMBOL_REF) \
+ { \
+ const char *_p = XSTR (ADDR, 0); \
+ if (*_p == '*') \
+ fputs (_p+1, asm_out_file); \
+ else \
+ for (; *_p != '[' && *_p; _p++) \
+ putc (*_p, asm_out_file); \
+ } \
+ else \
+ output_addr_const (asm_out_file, ADDR); \
+ } \
+ /* Another special case: N_GSYM always gets the symbol name, \
+ whether or not LABEL or NUMBER are set. */ \
+ else if (CODE == N_GSYM) \
+ assemble_name (asm_out_file, XSTR (XEXP (DECL_RTL (SYM), 0), 0)); \
+ else if (LABEL) \
+ assemble_name (asm_out_file, LABEL); \
+ else \
+ dbxout_int (NUMBER); \
+ putc (',', asm_out_file); \
+ dbxout_int (stab_to_sclass (CODE)); \
+ fputs (",0\n", asm_out_file); \
+} while (0)
/* These are IBM XCOFF extensions we need to reference in dbxout.c
and xcoffout.c. */
extern const char *xcoff_lastfile;
/* Don't write out path name for main source file. */
-#define DBX_OUTPUT_MAIN_SOURCE_DIRECTORY(FILE,FILENAME)
+#define NO_DBX_MAIN_SOURCE_DIRECTORY 1
/* Write out main source file name using ".file" rather than ".stabs".
We don't actually do this here, because the assembler gets confused if there
/* If we are still in an include file, its end must be marked. */
#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \
-{ \
+do { \
if (xcoff_current_include_file) \
{ \
fputs ("\t.ei\t", (FILE)); \
putc ('\n', (FILE)); \
xcoff_current_include_file = NULL; \
} \
-}
+} while (0)
-/* .stabx has the type in a different place. */
-#if 0 /* Do not emit any marker for XCOFF until assembler allows XFT_CV. */
-#define DBX_OUTPUT_GCC_MARKER(FILE) \
- fprintf ((FILE), "%s\"%s\",0,%d,0\n", ASM_STABS_OP, STABS_GCC_MARKER, \
- stab_to_sclass (N_GSYM))
-#else
-#define DBX_OUTPUT_GCC_MARKER(FILE)
-#endif
+/* Do not emit any marker for XCOFF until assembler allows XFT_CV. */
+#define NO_DBX_GCC_MARKER
/* Do not break .stabs pseudos into continuations. */
#define DBX_CONTIN_LENGTH 0