118334Speter/* XCOFF definitions. These are needed in dbxout.c, final.c, 2117395Skan and xcoffout.h. 3169689Skan Copyright (C) 1998, 2000, 2002, 2003, 2004 4132718Skan Free Software Foundation, Inc. 518334Speter 690075SobrienThis file is part of GCC. 752284Sobrien 890075SobrienGCC is free software; you can redistribute it and/or modify it under 990075Sobrienthe terms of the GNU General Public License as published by the Free 1090075SobrienSoftware Foundation; either version 2, or (at your option) any later 1190075Sobrienversion. 1252284Sobrien 1390075SobrienGCC is distributed in the hope that it will be useful, but WITHOUT ANY 1490075SobrienWARRANTY; without even the implied warranty of MERCHANTABILITY or 1590075SobrienFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1690075Sobrienfor more details. 1752284Sobrien 1852284SobrienYou should have received a copy of the GNU General Public License 1990075Sobrienalong with GCC; see the file COPYING. If not, write to the Free 20169689SkanSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 21169689Skan02110-1301, USA. */ 2252284Sobrien 2352284Sobrien 2418334Speter/* Tags and typedefs are C_DECL in XCOFF, not C_LSYM. */ 2518334Speter 2618334Speter#define DBX_TYPE_DECL_STABS_CODE N_DECL 2718334Speter 2818334Speter/* Use the XCOFF predefined type numbers. */ 2918334Speter 30169689Skan#define DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER(TYPE) \ 31169689Skan xcoff_assign_fundamental_type_number (TYPE) 3218334Speter 3318334Speter/* Any type with a negative type index has already been output. */ 3418334Speter 3518334Speter#define DBX_TYPE_DEFINED(TYPE) (TYPE_SYMTAB_ADDRESS (TYPE) < 0) 3618334Speter 3718334Speter/* Must use N_STSYM for static const variables (those in the text section) 3818334Speter instead of N_FUN. */ 3918334Speter 4018334Speter#define DBX_STATIC_CONST_VAR_CODE N_STSYM 4118334Speter 42117395Skan/* For static variables, output code to define the start of a static block. */ 4318334Speter 4418334Speter#define DBX_STATIC_BLOCK_START(ASMFILE,CODE) \ 4518334Speter{ \ 4618334Speter if ((CODE) == N_STSYM) \ 4718334Speter fprintf ((ASMFILE), "\t.bs\t%s[RW]\n", xcoff_private_data_section_name);\ 4818334Speter else if ((CODE) == N_LCSYM) \ 49117395Skan fprintf ((ASMFILE), "\t.bs\t%s\n", xcoff_bss_section_name); \ 5018334Speter} 5118334Speter 5218334Speter/* For static variables, output code to define the end of a static block. */ 5318334Speter 5418334Speter#define DBX_STATIC_BLOCK_END(ASMFILE,CODE) \ 5518334Speter{ \ 5650397Sobrien if ((CODE) == N_STSYM || (CODE) == N_LCSYM) \ 5750397Sobrien fputs ("\t.es\n", (ASMFILE)); \ 5818334Speter} 5918334Speter 6018334Speter/* We must use N_RPYSM instead of N_RSYM for register parameters. */ 6118334Speter 6218334Speter#define DBX_REGPARM_STABS_CODE N_RPSYM 6318334Speter 6418334Speter/* We must use 'R' instead of 'P' for register parameters. */ 6518334Speter 6618334Speter#define DBX_REGPARM_STABS_LETTER 'R' 6718334Speter 6818334Speter/* Define our own finish symbol function, since xcoff stabs have their 6918334Speter own different format. */ 7018334Speter 71169689Skan#define DBX_FINISH_STABS(SYM, CODE, LINE, ADDR, LABEL, NUMBER) do { \ 72169689Skan if (ADDR) \ 73169689Skan { \ 74169689Skan /* If we are writing a function name, we must emit a dot in \ 75169689Skan order to refer to the function code, not its descriptor. */ \ 76169689Skan if (CODE == N_FUN) \ 77169689Skan putc ('.', asm_out_file); \ 78169689Skan \ 79169689Skan /* If we are writing a function name, we must ensure that \ 80169689Skan there is no storage-class suffix on the name. */ \ 81169689Skan if (CODE == N_FUN && GET_CODE (ADDR) == SYMBOL_REF) \ 82169689Skan { \ 83169689Skan const char *_p = XSTR (ADDR, 0); \ 84169689Skan if (*_p == '*') \ 85169689Skan fputs (_p+1, asm_out_file); \ 86169689Skan else \ 87169689Skan for (; *_p != '[' && *_p; _p++) \ 88169689Skan putc (*_p, asm_out_file); \ 89169689Skan } \ 90169689Skan else \ 91169689Skan output_addr_const (asm_out_file, ADDR); \ 92169689Skan } \ 93169689Skan /* Another special case: N_GSYM always gets the symbol name, \ 94169689Skan whether or not LABEL or NUMBER are set. */ \ 95169689Skan else if (CODE == N_GSYM) \ 96169689Skan assemble_name (asm_out_file, XSTR (XEXP (DECL_RTL (SYM), 0), 0)); \ 97169689Skan else if (LABEL) \ 98169689Skan assemble_name (asm_out_file, LABEL); \ 99169689Skan else \ 100169689Skan dbxout_int (NUMBER); \ 101169689Skan putc (',', asm_out_file); \ 102169689Skan dbxout_int (stab_to_sclass (CODE)); \ 103169689Skan fputs (",0\n", asm_out_file); \ 104169689Skan} while (0) 10518334Speter 10618334Speter/* These are IBM XCOFF extensions we need to reference in dbxout.c 10718334Speter and xcoffout.c. */ 10818334Speter 10918334Speter/* AIX XCOFF uses this for typedefs. This can have any value, since it is 11018334Speter only used for translation into a C_DECL storage class. */ 11118334Speter#ifndef N_DECL 11218334Speter#define N_DECL 0x8c 11318334Speter#endif 11418334Speter/* AIX XCOFF uses this for parameters passed in registers. This can have 11518334Speter any value, since it is only used for translation into a C_RPSYM storage 11618334Speter class. */ 11718334Speter#ifndef N_RPSYM 11818334Speter#define N_RPSYM 0x8e 11918334Speter#endif 12018334Speter 12118334Speter/* Name of the current include file. */ 12218334Speter 12390075Sobrienextern const char *xcoff_current_include_file; 12418334Speter 12518334Speter/* Names of bss and data sections. These should be unique names for each 12618334Speter compilation unit. */ 12718334Speter 12818334Speterextern char *xcoff_bss_section_name; 12918334Speterextern char *xcoff_private_data_section_name; 13018334Speterextern char *xcoff_read_only_section_name; 13118334Speter 13218334Speter/* Last source file name mentioned in a NOTE insn. */ 13318334Speter 13490075Sobrienextern const char *xcoff_lastfile; 13518334Speter 13618334Speter/* Don't write out path name for main source file. */ 137169689Skan#define NO_DBX_MAIN_SOURCE_DIRECTORY 1 13818334Speter 13918334Speter/* Write out main source file name using ".file" rather than ".stabs". 14018334Speter We don't actually do this here, because the assembler gets confused if there 141132718Skan is more than one .file directive. rs6000_xcoff_file_start is already 142132718Skan emitting a .file directory, so we don't output one here also. 14318334Speter Initialize xcoff_lastfile. */ 14418334Speter#define DBX_OUTPUT_MAIN_SOURCE_FILENAME(FILE,FILENAME) \ 14550397Sobrien xcoff_lastfile = (FILENAME) 14618334Speter 14718334Speter/* If we are still in an include file, its end must be marked. */ 14818334Speter#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ 149169689Skando { \ 15018334Speter if (xcoff_current_include_file) \ 15118334Speter { \ 15250397Sobrien fputs ("\t.ei\t", (FILE)); \ 15350397Sobrien output_quoted_string ((FILE), xcoff_current_include_file); \ 15450397Sobrien putc ('\n', (FILE)); \ 15518334Speter xcoff_current_include_file = NULL; \ 15618334Speter } \ 157169689Skan} while (0) 15818334Speter 159169689Skan/* Do not emit any marker for XCOFF until assembler allows XFT_CV. */ 160169689Skan#define NO_DBX_GCC_MARKER 16190075Sobrien 16218334Speter/* Do not break .stabs pseudos into continuations. */ 16318334Speter#define DBX_CONTIN_LENGTH 0 16418334Speter 16518334Speter/* Don't try to use the `x' type-cross-reference character in DBX data. 16618334Speter Also has the consequence of putting each struct, union or enum 16718334Speter into a separate .stabs, containing only cross-refs to the others. */ 16818334Speter#define DBX_NO_XREFS 16918334Speter 17018334Speter/* We must put stabs in the text section. If we don't the assembler 17118334Speter won't handle them correctly; it will sometimes put stabs where gdb 17218334Speter can't find them. */ 17318334Speter 17418334Speter#define DEBUG_SYMS_TEXT 17550397Sobrien 17690075Sobrien/* Prototype functions in xcoffout.c. */ 17750397Sobrien 178132718Skanextern int stab_to_sclass (int); 179132718Skanextern void xcoffout_begin_prologue (unsigned int, const char *); 180132718Skanextern void xcoffout_begin_block (unsigned, unsigned); 181132718Skanextern void xcoffout_end_epilogue (unsigned int, const char *); 182132718Skanextern void xcoffout_end_function (unsigned int); 183132718Skanextern void xcoffout_end_block (unsigned, unsigned); 184169689Skanextern int xcoff_assign_fundamental_type_number (tree); 185132718Skanextern void xcoffout_declare_function (FILE *, tree, const char *); 186132718Skanextern void xcoffout_source_line (unsigned int, const char *); 187