xcoffout.h revision 117395
118334Speter/* XCOFF definitions. These are needed in dbxout.c, final.c, 2117395Skan and xcoffout.h. 3117395Skan Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc. 418334Speter 590075SobrienThis file is part of GCC. 652284Sobrien 790075SobrienGCC is free software; you can redistribute it and/or modify it under 890075Sobrienthe terms of the GNU General Public License as published by the Free 990075SobrienSoftware Foundation; either version 2, or (at your option) any later 1090075Sobrienversion. 1152284Sobrien 1290075SobrienGCC is distributed in the hope that it will be useful, but WITHOUT ANY 1390075SobrienWARRANTY; without even the implied warranty of MERCHANTABILITY or 1490075SobrienFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1590075Sobrienfor more details. 1652284Sobrien 1752284SobrienYou should have received a copy of the GNU General Public License 1890075Sobrienalong with GCC; see the file COPYING. If not, write to the Free 1990075SobrienSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA 2090075Sobrien02111-1307, USA. */ 2152284Sobrien 2252284Sobrien 2390075Sobrien#define ASM_STABS_OP "\t.stabx\t" 2418334Speter 2518334Speter/* Tags and typedefs are C_DECL in XCOFF, not C_LSYM. */ 2618334Speter 2718334Speter#define DBX_TYPE_DECL_STABS_CODE N_DECL 2818334Speter 2918334Speter/* Use the XCOFF predefined type numbers. */ 3018334Speter 3118334Speter/* ??? According to metin, typedef stabx must go in text control section, 3218334Speter but he did not make this changes everywhere where such typedef stabx 3318334Speter can be emitted, so it is really needed or not? */ 3418334Speter 3518334Speter#define DBX_OUTPUT_STANDARD_TYPES(SYMS) \ 3618334Speter{ \ 3718334Speter text_section (); \ 3818334Speter xcoff_output_standard_types (SYMS); \ 3918334Speter} 4018334Speter 4118334Speter/* Any type with a negative type index has already been output. */ 4218334Speter 4318334Speter#define DBX_TYPE_DEFINED(TYPE) (TYPE_SYMTAB_ADDRESS (TYPE) < 0) 4418334Speter 4518334Speter/* Must use N_STSYM for static const variables (those in the text section) 4618334Speter instead of N_FUN. */ 4718334Speter 4818334Speter#define DBX_STATIC_CONST_VAR_CODE N_STSYM 4918334Speter 50117395Skan/* For static variables, output code to define the start of a static block. */ 5118334Speter 5218334Speter#define DBX_STATIC_BLOCK_START(ASMFILE,CODE) \ 5318334Speter{ \ 5418334Speter if ((CODE) == N_STSYM) \ 5518334Speter fprintf ((ASMFILE), "\t.bs\t%s[RW]\n", xcoff_private_data_section_name);\ 5618334Speter else if ((CODE) == N_LCSYM) \ 57117395Skan fprintf ((ASMFILE), "\t.bs\t%s\n", xcoff_bss_section_name); \ 5818334Speter} 5918334Speter 6018334Speter/* For static variables, output code to define the end of a static block. */ 6118334Speter 6218334Speter#define DBX_STATIC_BLOCK_END(ASMFILE,CODE) \ 6318334Speter{ \ 6450397Sobrien if ((CODE) == N_STSYM || (CODE) == N_LCSYM) \ 6550397Sobrien fputs ("\t.es\n", (ASMFILE)); \ 6618334Speter} 6718334Speter 6818334Speter/* We must use N_RPYSM instead of N_RSYM for register parameters. */ 6918334Speter 7018334Speter#define DBX_REGPARM_STABS_CODE N_RPSYM 7118334Speter 7218334Speter/* We must use 'R' instead of 'P' for register parameters. */ 7318334Speter 7418334Speter#define DBX_REGPARM_STABS_LETTER 'R' 7518334Speter 7618334Speter/* Define our own finish symbol function, since xcoff stabs have their 7718334Speter own different format. */ 7818334Speter 7918334Speter#define DBX_FINISH_SYMBOL(SYM) \ 8018334Speter{ \ 8118334Speter if (current_sym_addr && current_sym_code == N_FUN) \ 8218334Speter fprintf (asmfile, "\",."); \ 8318334Speter else \ 8418334Speter fprintf (asmfile, "\","); \ 8518334Speter /* If we are writing a function name, we must ensure that \ 8618334Speter there is no storage-class suffix on the name. */ \ 8718334Speter if (current_sym_addr && current_sym_code == N_FUN \ 8818334Speter && GET_CODE (current_sym_addr) == SYMBOL_REF) \ 8918334Speter { \ 9090075Sobrien const char *_p = XSTR (current_sym_addr, 0); \ 9118334Speter if (*_p == '*') \ 9218334Speter fprintf (asmfile, "%s", _p+1); \ 9318334Speter else \ 94117395Skan for (; *_p != '[' && *_p; _p++) \ 9518334Speter fprintf (asmfile, "%c", *_p); \ 9618334Speter } \ 9718334Speter else if (current_sym_addr) \ 9818334Speter output_addr_const (asmfile, current_sym_addr); \ 9918334Speter else if (current_sym_code == N_GSYM) \ 10018334Speter assemble_name (asmfile, XSTR (XEXP (DECL_RTL (sym), 0), 0)); \ 10118334Speter else \ 10218334Speter fprintf (asmfile, "%d", current_sym_value); \ 10318334Speter fprintf (asmfile, ",%d,0\n", stab_to_sclass (current_sym_code)); \ 10418334Speter} 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. */ 13718334Speter#define DBX_OUTPUT_MAIN_SOURCE_DIRECTORY(FILE,FILENAME) 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 14118334Speter is more than one .file directive. ASM_FILE_START in config/rs6000/rs6000.h 14218334Speter is already 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) \ 14918334Speter{ \ 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 } \ 15718334Speter} 15818334Speter 15990075Sobrien/* .stabx has the type in a different place. */ 16090075Sobrien#if 0 /* Do not emit any marker for XCOFF until assembler allows XFT_CV. */ 16190075Sobrien#define DBX_OUTPUT_GCC_MARKER(FILE) \ 16290075Sobrien fprintf ((FILE), "%s\"%s\",0,%d,0\n", ASM_STABS_OP, STABS_GCC_MARKER, \ 16390075Sobrien stab_to_sclass (N_GSYM)) 16490075Sobrien#else 16590075Sobrien#define DBX_OUTPUT_GCC_MARKER(FILE) 16690075Sobrien#endif 16790075Sobrien 16818334Speter/* Do not break .stabs pseudos into continuations. */ 16918334Speter#define DBX_CONTIN_LENGTH 0 17018334Speter 17118334Speter/* Don't try to use the `x' type-cross-reference character in DBX data. 17218334Speter Also has the consequence of putting each struct, union or enum 17318334Speter into a separate .stabs, containing only cross-refs to the others. */ 17418334Speter#define DBX_NO_XREFS 17518334Speter 17618334Speter/* We must put stabs in the text section. If we don't the assembler 17718334Speter won't handle them correctly; it will sometimes put stabs where gdb 17818334Speter can't find them. */ 17918334Speter 18018334Speter#define DEBUG_SYMS_TEXT 18150397Sobrien 18290075Sobrien/* Prototype functions in xcoffout.c. */ 18350397Sobrien 18490075Sobrienextern int stab_to_sclass PARAMS ((int)); 18550397Sobrien#ifdef BUFSIZ 18690075Sobrienextern void xcoffout_begin_prologue PARAMS ((unsigned int, 18790075Sobrien const char *)); 18890075Sobrienextern void xcoffout_begin_block PARAMS ((unsigned, unsigned)); 189117395Skanextern void xcoffout_end_epilogue PARAMS ((unsigned int, 190117395Skan const char *)); 19190075Sobrienextern void xcoffout_end_function PARAMS ((unsigned int)); 19290075Sobrienextern void xcoffout_end_block PARAMS ((unsigned, unsigned)); 19350397Sobrien#endif /* BUFSIZ */ 19450397Sobrien 19550397Sobrien#ifdef TREE_CODE 19690075Sobrienextern void xcoff_output_standard_types PARAMS ((tree)); 19750397Sobrien#ifdef BUFSIZ 19890075Sobrienextern void xcoffout_declare_function PARAMS ((FILE *, tree, const char *)); 19950397Sobrien#endif /* BUFSIZ */ 20050397Sobrien#endif /* TREE_CODE */ 20150397Sobrien 20250397Sobrien#ifdef RTX_CODE 20350397Sobrien#ifdef BUFSIZ 20490075Sobrienextern void xcoffout_source_line PARAMS ((unsigned int, 20590075Sobrien const char *)); 20650397Sobrien#endif /* BUFSIZ */ 20750397Sobrien#endif /* RTX_CODE */ 208