1*e4b17023SJohn Marino /* Declarations for insn-output.c. These functions are defined in recog.c, 2*e4b17023SJohn Marino final.c, and varasm.c. 3*e4b17023SJohn Marino Copyright (C) 1987, 1991, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 4*e4b17023SJohn Marino 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 5*e4b17023SJohn Marino Free Software Foundation, Inc. 6*e4b17023SJohn Marino 7*e4b17023SJohn Marino This file is part of GCC. 8*e4b17023SJohn Marino 9*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify it under 10*e4b17023SJohn Marino the terms of the GNU General Public License as published by the Free 11*e4b17023SJohn Marino Software Foundation; either version 3, or (at your option) any later 12*e4b17023SJohn Marino version. 13*e4b17023SJohn Marino 14*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful, but WITHOUT ANY 15*e4b17023SJohn Marino WARRANTY; without even the implied warranty of MERCHANTABILITY or 16*e4b17023SJohn Marino FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 17*e4b17023SJohn Marino for more details. 18*e4b17023SJohn Marino 19*e4b17023SJohn Marino You should have received a copy of the GNU General Public License 20*e4b17023SJohn Marino along with GCC; see the file COPYING3. If not see 21*e4b17023SJohn Marino <http://www.gnu.org/licenses/>. */ 22*e4b17023SJohn Marino 23*e4b17023SJohn Marino #ifndef GCC_OUTPUT_H 24*e4b17023SJohn Marino #define GCC_OUTPUT_H 25*e4b17023SJohn Marino 26*e4b17023SJohn Marino /* Initialize data in final at the beginning of a compilation. */ 27*e4b17023SJohn Marino extern void init_final (const char *); 28*e4b17023SJohn Marino 29*e4b17023SJohn Marino /* Enable APP processing of subsequent output. 30*e4b17023SJohn Marino Used before the output from an `asm' statement. */ 31*e4b17023SJohn Marino extern void app_enable (void); 32*e4b17023SJohn Marino 33*e4b17023SJohn Marino /* Disable APP processing of subsequent output. 34*e4b17023SJohn Marino Called from varasm.c before most kinds of output. */ 35*e4b17023SJohn Marino extern void app_disable (void); 36*e4b17023SJohn Marino 37*e4b17023SJohn Marino /* Return the number of slots filled in the current 38*e4b17023SJohn Marino delayed branch sequence (we don't count the insn needing the 39*e4b17023SJohn Marino delay slot). Zero if not in a delayed branch sequence. */ 40*e4b17023SJohn Marino extern int dbr_sequence_length (void); 41*e4b17023SJohn Marino 42*e4b17023SJohn Marino /* Indicate that branch shortening hasn't yet been done. */ 43*e4b17023SJohn Marino extern void init_insn_lengths (void); 44*e4b17023SJohn Marino 45*e4b17023SJohn Marino /* Obtain the current length of an insn. If branch shortening has been done, 46*e4b17023SJohn Marino get its actual length. Otherwise, get its maximum length. */ 47*e4b17023SJohn Marino extern int get_attr_length (rtx); 48*e4b17023SJohn Marino 49*e4b17023SJohn Marino /* Obtain the current length of an insn. If branch shortening has been done, 50*e4b17023SJohn Marino get its actual length. Otherwise, get its minimum length. */ 51*e4b17023SJohn Marino extern int get_attr_min_length (rtx); 52*e4b17023SJohn Marino 53*e4b17023SJohn Marino /* Make a pass over all insns and compute their actual lengths by shortening 54*e4b17023SJohn Marino any branches of variable length if possible. */ 55*e4b17023SJohn Marino extern void shorten_branches (rtx); 56*e4b17023SJohn Marino 57*e4b17023SJohn Marino /* Output assembler code for the start of a function, 58*e4b17023SJohn Marino and initialize some of the variables in this file 59*e4b17023SJohn Marino for the new function. The label for the function and associated 60*e4b17023SJohn Marino assembler pseudo-ops have already been output in 61*e4b17023SJohn Marino `assemble_start_function'. */ 62*e4b17023SJohn Marino extern void final_start_function (rtx, FILE *, int); 63*e4b17023SJohn Marino 64*e4b17023SJohn Marino /* Output assembler code for the end of a function. 65*e4b17023SJohn Marino For clarity, args are same as those of `final_start_function' 66*e4b17023SJohn Marino even though not all of them are needed. */ 67*e4b17023SJohn Marino extern void final_end_function (void); 68*e4b17023SJohn Marino 69*e4b17023SJohn Marino /* Output assembler code for some insns: all or part of a function. */ 70*e4b17023SJohn Marino extern void final (rtx, FILE *, int); 71*e4b17023SJohn Marino 72*e4b17023SJohn Marino /* The final scan for one insn, INSN. Args are same as in `final', except 73*e4b17023SJohn Marino that INSN is the insn being scanned. Value returned is the next insn to 74*e4b17023SJohn Marino be scanned. */ 75*e4b17023SJohn Marino extern rtx final_scan_insn (rtx, FILE *, int, int, int *); 76*e4b17023SJohn Marino 77*e4b17023SJohn Marino /* Replace a SUBREG with a REG or a MEM, based on the thing it is a 78*e4b17023SJohn Marino subreg of. */ 79*e4b17023SJohn Marino extern rtx alter_subreg (rtx *); 80*e4b17023SJohn Marino 81*e4b17023SJohn Marino /* Print an operand using machine-dependent assembler syntax. */ 82*e4b17023SJohn Marino extern void output_operand (rtx, int); 83*e4b17023SJohn Marino 84*e4b17023SJohn Marino /* Report inconsistency between the assembler template and the operands. 85*e4b17023SJohn Marino In an `asm', it's the user's fault; otherwise, the compiler's fault. */ 86*e4b17023SJohn Marino extern void output_operand_lossage (const char *, ...) ATTRIBUTE_PRINTF_1; 87*e4b17023SJohn Marino 88*e4b17023SJohn Marino /* Output a string of assembler code, substituting insn operands. 89*e4b17023SJohn Marino Defined in final.c. */ 90*e4b17023SJohn Marino extern void output_asm_insn (const char *, rtx *); 91*e4b17023SJohn Marino 92*e4b17023SJohn Marino /* Compute a worst-case reference address of a branch so that it 93*e4b17023SJohn Marino can be safely used in the presence of aligned labels. 94*e4b17023SJohn Marino Defined in final.c. */ 95*e4b17023SJohn Marino extern int insn_current_reference_address (rtx); 96*e4b17023SJohn Marino 97*e4b17023SJohn Marino /* Find the alignment associated with a CODE_LABEL. 98*e4b17023SJohn Marino Defined in final.c. */ 99*e4b17023SJohn Marino extern int label_to_alignment (rtx); 100*e4b17023SJohn Marino 101*e4b17023SJohn Marino /* Find the alignment maximum skip associated with a CODE_LABEL. 102*e4b17023SJohn Marino Defined in final.c. */ 103*e4b17023SJohn Marino extern int label_to_max_skip (rtx); 104*e4b17023SJohn Marino 105*e4b17023SJohn Marino /* Output a LABEL_REF, or a bare CODE_LABEL, as an assembler symbol. */ 106*e4b17023SJohn Marino extern void output_asm_label (rtx); 107*e4b17023SJohn Marino 108*e4b17023SJohn Marino /* Marks SYMBOL_REFs in x as referenced through use of assemble_external. */ 109*e4b17023SJohn Marino extern void mark_symbol_refs_as_used (rtx); 110*e4b17023SJohn Marino 111*e4b17023SJohn Marino /* Print a memory reference operand for address X 112*e4b17023SJohn Marino using machine-dependent assembler syntax. */ 113*e4b17023SJohn Marino extern void output_address (rtx); 114*e4b17023SJohn Marino 115*e4b17023SJohn Marino /* Print an integer constant expression in assembler syntax. 116*e4b17023SJohn Marino Addition and subtraction are the only arithmetic 117*e4b17023SJohn Marino that may appear in these expressions. */ 118*e4b17023SJohn Marino extern void output_addr_const (FILE *, rtx); 119*e4b17023SJohn Marino 120*e4b17023SJohn Marino /* Output a string of assembler code, substituting numbers, strings 121*e4b17023SJohn Marino and fixed syntactic prefixes. */ 122*e4b17023SJohn Marino #if GCC_VERSION >= 3004 123*e4b17023SJohn Marino #define ATTRIBUTE_ASM_FPRINTF(m, n) __attribute__ ((__format__ (__asm_fprintf__, m, n))) ATTRIBUTE_NONNULL(m) 124*e4b17023SJohn Marino /* This is a magic identifier which allows GCC to figure out the type 125*e4b17023SJohn Marino of HOST_WIDE_INT for %wd specifier checks. You must issue this 126*e4b17023SJohn Marino typedef before using the __asm_fprintf__ format attribute. */ 127*e4b17023SJohn Marino typedef HOST_WIDE_INT __gcc_host_wide_int__; 128*e4b17023SJohn Marino #else 129*e4b17023SJohn Marino #define ATTRIBUTE_ASM_FPRINTF(m, n) ATTRIBUTE_NONNULL(m) 130*e4b17023SJohn Marino #endif 131*e4b17023SJohn Marino 132*e4b17023SJohn Marino extern void fprint_whex (FILE *, unsigned HOST_WIDE_INT); 133*e4b17023SJohn Marino extern void fprint_ul (FILE *, unsigned long); 134*e4b17023SJohn Marino extern int sprint_ul (char *, unsigned long); 135*e4b17023SJohn Marino 136*e4b17023SJohn Marino extern void asm_fprintf (FILE *file, const char *p, ...) 137*e4b17023SJohn Marino ATTRIBUTE_ASM_FPRINTF(2, 3); 138*e4b17023SJohn Marino 139*e4b17023SJohn Marino /* Split up a CONST_DOUBLE or integer constant rtx into two rtx's for single 140*e4b17023SJohn Marino words. */ 141*e4b17023SJohn Marino extern void split_double (rtx, rtx *, rtx *); 142*e4b17023SJohn Marino 143*e4b17023SJohn Marino /* Return nonzero if this function has no function calls. */ 144*e4b17023SJohn Marino extern int leaf_function_p (void); 145*e4b17023SJohn Marino 146*e4b17023SJohn Marino /* Return 1 if branch is a forward branch. 147*e4b17023SJohn Marino Uses insn_shuid array, so it works only in the final pass. May be used by 148*e4b17023SJohn Marino output templates to add branch prediction hints, for example. */ 149*e4b17023SJohn Marino extern int final_forward_branch_p (rtx); 150*e4b17023SJohn Marino 151*e4b17023SJohn Marino /* Return 1 if this function uses only the registers that can be 152*e4b17023SJohn Marino safely renumbered. */ 153*e4b17023SJohn Marino extern int only_leaf_regs_used (void); 154*e4b17023SJohn Marino 155*e4b17023SJohn Marino /* Scan IN_RTX and its subexpressions, and renumber all regs into those 156*e4b17023SJohn Marino available in leaf functions. */ 157*e4b17023SJohn Marino extern void leaf_renumber_regs_insn (rtx); 158*e4b17023SJohn Marino 159*e4b17023SJohn Marino /* Locate the proper template for the given insn-code. */ 160*e4b17023SJohn Marino extern const char *get_insn_template (int, rtx); 161*e4b17023SJohn Marino 162*e4b17023SJohn Marino /* Functions in varasm.c. */ 163*e4b17023SJohn Marino 164*e4b17023SJohn Marino /* Declare DECL to be a weak symbol. */ 165*e4b17023SJohn Marino extern void declare_weak (tree); 166*e4b17023SJohn Marino /* Merge weak status. */ 167*e4b17023SJohn Marino extern void merge_weak (tree, tree); 168*e4b17023SJohn Marino 169*e4b17023SJohn Marino /* Emit any pending weak declarations. */ 170*e4b17023SJohn Marino extern void weak_finish (void); 171*e4b17023SJohn Marino 172*e4b17023SJohn Marino /* Return the default TLS model for a given variable. */ 173*e4b17023SJohn Marino extern enum tls_model decl_default_tls_model (const_tree); 174*e4b17023SJohn Marino 175*e4b17023SJohn Marino /* Decode an `asm' spec for a declaration as a register name. 176*e4b17023SJohn Marino Return the register number, or -1 if nothing specified, 177*e4b17023SJohn Marino or -2 if the ASMSPEC is not `cc' or `memory' and is not recognized, 178*e4b17023SJohn Marino or -3 if ASMSPEC is `cc' and is not recognized, 179*e4b17023SJohn Marino or -4 if ASMSPEC is `memory' and is not recognized. 180*e4b17023SJohn Marino Accept an exact spelling or a decimal number. 181*e4b17023SJohn Marino Prefixes such as % are optional. */ 182*e4b17023SJohn Marino extern int decode_reg_name (const char *); 183*e4b17023SJohn Marino 184*e4b17023SJohn Marino /* Similar to decode_reg_name, but takes an extra parameter that is a 185*e4b17023SJohn Marino pointer to the number of (internal) registers described by the 186*e4b17023SJohn Marino external name. */ 187*e4b17023SJohn Marino extern int decode_reg_name_and_count (const char *, int *); 188*e4b17023SJohn Marino 189*e4b17023SJohn Marino extern void assemble_alias (tree, tree); 190*e4b17023SJohn Marino 191*e4b17023SJohn Marino extern void default_assemble_visibility (tree, int); 192*e4b17023SJohn Marino 193*e4b17023SJohn Marino /* Output a string of literal assembler code 194*e4b17023SJohn Marino for an `asm' keyword used between functions. */ 195*e4b17023SJohn Marino extern void assemble_asm (tree); 196*e4b17023SJohn Marino 197*e4b17023SJohn Marino /* Output assembler code for the constant pool of a function and associated 198*e4b17023SJohn Marino with defining the name of the function. DECL describes the function. 199*e4b17023SJohn Marino NAME is the function's name. For the constant pool, we use the current 200*e4b17023SJohn Marino constant pool data. */ 201*e4b17023SJohn Marino extern void assemble_start_function (tree, const char *); 202*e4b17023SJohn Marino 203*e4b17023SJohn Marino /* Output assembler code associated with defining the size of the 204*e4b17023SJohn Marino function. DECL describes the function. NAME is the function's name. */ 205*e4b17023SJohn Marino extern void assemble_end_function (tree, const char *); 206*e4b17023SJohn Marino 207*e4b17023SJohn Marino /* Assemble everything that is needed for a variable or function declaration. 208*e4b17023SJohn Marino Not used for automatic variables, and not used for function definitions. 209*e4b17023SJohn Marino Should not be called for variables of incomplete structure type. 210*e4b17023SJohn Marino 211*e4b17023SJohn Marino TOP_LEVEL is nonzero if this variable has file scope. 212*e4b17023SJohn Marino AT_END is nonzero if this is the special handling, at end of compilation, 213*e4b17023SJohn Marino to define things that have had only tentative definitions. 214*e4b17023SJohn Marino DONT_OUTPUT_DATA if nonzero means don't actually output the 215*e4b17023SJohn Marino initial value (that will be done by the caller). */ 216*e4b17023SJohn Marino extern void assemble_variable (tree, int, int, int); 217*e4b17023SJohn Marino 218*e4b17023SJohn Marino /* Compute the alignment of variable specified by DECL. 219*e4b17023SJohn Marino DONT_OUTPUT_DATA is from assemble_variable. */ 220*e4b17023SJohn Marino extern void align_variable (tree decl, bool dont_output_data); 221*e4b17023SJohn Marino 222*e4b17023SJohn Marino /* Queue for outputting something to declare an external symbol to the 223*e4b17023SJohn Marino assembler. (Most assemblers don't need this, so we normally output 224*e4b17023SJohn Marino nothing.) Do nothing if DECL is not external. */ 225*e4b17023SJohn Marino extern void assemble_external (tree); 226*e4b17023SJohn Marino 227*e4b17023SJohn Marino /* Assemble code to leave SIZE bytes of zeros. */ 228*e4b17023SJohn Marino extern void assemble_zeros (unsigned HOST_WIDE_INT); 229*e4b17023SJohn Marino 230*e4b17023SJohn Marino /* Assemble an alignment pseudo op for an ALIGN-bit boundary. */ 231*e4b17023SJohn Marino extern void assemble_align (int); 232*e4b17023SJohn Marino 233*e4b17023SJohn Marino /* Assemble a string constant with the specified C string as contents. */ 234*e4b17023SJohn Marino extern void assemble_string (const char *, int); 235*e4b17023SJohn Marino 236*e4b17023SJohn Marino /* Similar, for calling a library function FUN. */ 237*e4b17023SJohn Marino extern void assemble_external_libcall (rtx); 238*e4b17023SJohn Marino 239*e4b17023SJohn Marino /* Assemble a label named NAME. */ 240*e4b17023SJohn Marino extern void assemble_label (FILE *, const char *); 241*e4b17023SJohn Marino 242*e4b17023SJohn Marino /* Output to FILE (an assembly file) a reference to NAME. If NAME 243*e4b17023SJohn Marino starts with a *, the rest of NAME is output verbatim. Otherwise 244*e4b17023SJohn Marino NAME is transformed in a target-specific way (usually by the 245*e4b17023SJohn Marino addition of an underscore). */ 246*e4b17023SJohn Marino extern void assemble_name_raw (FILE *, const char *); 247*e4b17023SJohn Marino 248*e4b17023SJohn Marino /* Like assemble_name_raw, but should be used when NAME might refer to 249*e4b17023SJohn Marino an entity that is also represented as a tree (like a function or 250*e4b17023SJohn Marino variable). If NAME does refer to such an entity, that entity will 251*e4b17023SJohn Marino be marked as referenced. */ 252*e4b17023SJohn Marino extern void assemble_name (FILE *, const char *); 253*e4b17023SJohn Marino 254*e4b17023SJohn Marino /* Return the assembler directive for creating a given kind of integer 255*e4b17023SJohn Marino object. SIZE is the number of bytes in the object and ALIGNED_P 256*e4b17023SJohn Marino indicates whether it is known to be aligned. Return NULL if the 257*e4b17023SJohn Marino assembly dialect has no such directive. 258*e4b17023SJohn Marino 259*e4b17023SJohn Marino The returned string should be printed at the start of a new line and 260*e4b17023SJohn Marino be followed immediately by the object's initial value. */ 261*e4b17023SJohn Marino extern const char *integer_asm_op (int, int); 262*e4b17023SJohn Marino 263*e4b17023SJohn Marino /* Use directive OP to assemble an integer object X. Print OP at the 264*e4b17023SJohn Marino start of the line, followed immediately by the value of X. */ 265*e4b17023SJohn Marino extern void assemble_integer_with_op (const char *, rtx); 266*e4b17023SJohn Marino 267*e4b17023SJohn Marino /* The default implementation of the asm_out.integer target hook. */ 268*e4b17023SJohn Marino extern bool default_assemble_integer (rtx, unsigned int, int); 269*e4b17023SJohn Marino 270*e4b17023SJohn Marino /* Assemble the integer constant X into an object of SIZE bytes. ALIGN is 271*e4b17023SJohn Marino the alignment of the integer in bits. Return 1 if we were able to output 272*e4b17023SJohn Marino the constant, otherwise 0. If FORCE is nonzero the constant must 273*e4b17023SJohn Marino be outputable. */ 274*e4b17023SJohn Marino extern bool assemble_integer (rtx, unsigned, unsigned, int); 275*e4b17023SJohn Marino 276*e4b17023SJohn Marino /* Return section for TEXT_SECITON_NAME if DECL or DECL_SECTION_NAME (DECL) 277*e4b17023SJohn Marino is NULL. */ 278*e4b17023SJohn Marino extern section *get_named_text_section (tree, const char *, const char *); 279*e4b17023SJohn Marino 280*e4b17023SJohn Marino /* An interface to assemble_integer for the common case in which a value is 281*e4b17023SJohn Marino fully aligned and must be printed. VALUE is the value of the integer 282*e4b17023SJohn Marino object and SIZE is the number of bytes it contains. */ 283*e4b17023SJohn Marino #define assemble_aligned_integer(SIZE, VALUE) \ 284*e4b17023SJohn Marino assemble_integer (VALUE, SIZE, (SIZE) * BITS_PER_UNIT, 1) 285*e4b17023SJohn Marino 286*e4b17023SJohn Marino #ifdef REAL_VALUE_TYPE_SIZE 287*e4b17023SJohn Marino /* Assemble the floating-point constant D into an object of size MODE. */ 288*e4b17023SJohn Marino extern void assemble_real (REAL_VALUE_TYPE, enum machine_mode, unsigned); 289*e4b17023SJohn Marino #endif 290*e4b17023SJohn Marino 291*e4b17023SJohn Marino /* Write the address of the entity given by SYMBOL to SEC. */ 292*e4b17023SJohn Marino extern void assemble_addr_to_section (rtx, section *); 293*e4b17023SJohn Marino 294*e4b17023SJohn Marino /* Return the size of the constant pool. */ 295*e4b17023SJohn Marino extern int get_pool_size (void); 296*e4b17023SJohn Marino 297*e4b17023SJohn Marino #ifdef HAVE_peephole 298*e4b17023SJohn Marino extern rtx peephole (rtx); 299*e4b17023SJohn Marino #endif 300*e4b17023SJohn Marino 301*e4b17023SJohn Marino extern void output_shared_constant_pool (void); 302*e4b17023SJohn Marino 303*e4b17023SJohn Marino extern void output_object_blocks (void); 304*e4b17023SJohn Marino 305*e4b17023SJohn Marino extern void output_quoted_string (FILE *, const char *); 306*e4b17023SJohn Marino 307*e4b17023SJohn Marino /* Whether a constructor CTOR is a valid static constant initializer if all 308*e4b17023SJohn Marino its elements are. This used to be internal to initializer_constant_valid_p 309*e4b17023SJohn Marino and has been exposed to let other functions like categorize_ctor_elements 310*e4b17023SJohn Marino evaluate the property while walking a constructor for other purposes. */ 311*e4b17023SJohn Marino 312*e4b17023SJohn Marino extern bool constructor_static_from_elts_p (const_tree); 313*e4b17023SJohn Marino 314*e4b17023SJohn Marino /* Return nonzero if VALUE is a valid constant-valued expression 315*e4b17023SJohn Marino for use in initializing a static variable; one that can be an 316*e4b17023SJohn Marino element of a "constant" initializer. 317*e4b17023SJohn Marino 318*e4b17023SJohn Marino Return null_pointer_node if the value is absolute; 319*e4b17023SJohn Marino if it is relocatable, return the variable that determines the relocation. 320*e4b17023SJohn Marino We assume that VALUE has been folded as much as possible; 321*e4b17023SJohn Marino therefore, we do not need to check for such things as 322*e4b17023SJohn Marino arithmetic-combinations of integers. */ 323*e4b17023SJohn Marino extern tree initializer_constant_valid_p (tree, tree); 324*e4b17023SJohn Marino 325*e4b17023SJohn Marino /* Return true if VALUE is a valid constant-valued expression 326*e4b17023SJohn Marino for use in initializing a static bit-field; one that can be 327*e4b17023SJohn Marino an element of a "constant" initializer. */ 328*e4b17023SJohn Marino extern bool initializer_constant_valid_for_bitfield_p (tree); 329*e4b17023SJohn Marino 330*e4b17023SJohn Marino /* Output assembler code for constant EXP to FILE, with no label. 331*e4b17023SJohn Marino This includes the pseudo-op such as ".int" or ".byte", and a newline. 332*e4b17023SJohn Marino Assumes output_addressed_constants has been done on EXP already. 333*e4b17023SJohn Marino 334*e4b17023SJohn Marino Generate exactly SIZE bytes of assembler data, padding at the end 335*e4b17023SJohn Marino with zeros if necessary. SIZE must always be specified. 336*e4b17023SJohn Marino 337*e4b17023SJohn Marino ALIGN is the alignment in bits that may be assumed for the data. */ 338*e4b17023SJohn Marino extern void output_constant (tree, unsigned HOST_WIDE_INT, unsigned int); 339*e4b17023SJohn Marino 340*e4b17023SJohn Marino /* When outputting delayed branch sequences, this rtx holds the 341*e4b17023SJohn Marino sequence being output. It is null when no delayed branch 342*e4b17023SJohn Marino sequence is being output, so it can be used as a test in the 343*e4b17023SJohn Marino insn output code. 344*e4b17023SJohn Marino 345*e4b17023SJohn Marino This variable is defined in final.c. */ 346*e4b17023SJohn Marino extern rtx final_sequence; 347*e4b17023SJohn Marino 348*e4b17023SJohn Marino /* The line number of the beginning of the current function. Various 349*e4b17023SJohn Marino md code needs this so that it can output relative linenumbers. */ 350*e4b17023SJohn Marino 351*e4b17023SJohn Marino #ifdef SDB_DEBUGGING_INFO /* Avoid undef sym in certain broken linkers. */ 352*e4b17023SJohn Marino extern int sdb_begin_function_line; 353*e4b17023SJohn Marino #endif 354*e4b17023SJohn Marino 355*e4b17023SJohn Marino /* File in which assembler code is being written. */ 356*e4b17023SJohn Marino 357*e4b17023SJohn Marino #ifdef BUFSIZ 358*e4b17023SJohn Marino extern FILE *asm_out_file; 359*e4b17023SJohn Marino #endif 360*e4b17023SJohn Marino 361*e4b17023SJohn Marino /* The first global object in the file. */ 362*e4b17023SJohn Marino extern const char *first_global_object_name; 363*e4b17023SJohn Marino 364*e4b17023SJohn Marino /* The first weak object in the file. */ 365*e4b17023SJohn Marino extern const char *weak_global_object_name; 366*e4b17023SJohn Marino 367*e4b17023SJohn Marino /* Nonzero if function being compiled doesn't contain any calls 368*e4b17023SJohn Marino (ignoring the prologue and epilogue). This is set prior to 369*e4b17023SJohn Marino local register allocation and is valid for the remaining 370*e4b17023SJohn Marino compiler passes. */ 371*e4b17023SJohn Marino 372*e4b17023SJohn Marino extern int current_function_is_leaf; 373*e4b17023SJohn Marino 374*e4b17023SJohn Marino /* Nonzero if function being compiled doesn't modify the stack pointer 375*e4b17023SJohn Marino (ignoring the prologue and epilogue). This is only valid after 376*e4b17023SJohn Marino pass_stack_ptr_mod has run. */ 377*e4b17023SJohn Marino 378*e4b17023SJohn Marino extern int current_function_sp_is_unchanging; 379*e4b17023SJohn Marino 380*e4b17023SJohn Marino /* Nonzero if the function being compiled is a leaf function which only 381*e4b17023SJohn Marino uses leaf registers. This is valid after reload (specifically after 382*e4b17023SJohn Marino sched2) and is useful only if the port defines LEAF_REGISTERS. */ 383*e4b17023SJohn Marino 384*e4b17023SJohn Marino extern int current_function_uses_only_leaf_regs; 385*e4b17023SJohn Marino 386*e4b17023SJohn Marino /* Default file in which to dump debug output. */ 387*e4b17023SJohn Marino 388*e4b17023SJohn Marino #ifdef BUFSIZ 389*e4b17023SJohn Marino extern FILE *dump_file; 390*e4b17023SJohn Marino #endif 391*e4b17023SJohn Marino 392*e4b17023SJohn Marino /* Nonnull if the insn currently being emitted was a COND_EXEC pattern. */ 393*e4b17023SJohn Marino extern rtx current_insn_predicate; 394*e4b17023SJohn Marino 395*e4b17023SJohn Marino /* Last insn processed by final_scan_insn. */ 396*e4b17023SJohn Marino extern rtx current_output_insn; 397*e4b17023SJohn Marino 398*e4b17023SJohn Marino /* Nonzero while outputting an `asm' with operands. 399*e4b17023SJohn Marino This means that inconsistencies are the user's fault, so don't die. 400*e4b17023SJohn Marino The precise value is the insn being output, to pass to error_for_asm. */ 401*e4b17023SJohn Marino extern rtx this_is_asm_operands; 402*e4b17023SJohn Marino 403*e4b17023SJohn Marino /* Carry information from ASM_DECLARE_OBJECT_NAME 404*e4b17023SJohn Marino to ASM_FINISH_DECLARE_OBJECT. */ 405*e4b17023SJohn Marino extern int size_directive_output; 406*e4b17023SJohn Marino extern tree last_assemble_variable_decl; 407*e4b17023SJohn Marino 408*e4b17023SJohn Marino extern bool first_function_block_is_cold; 409*e4b17023SJohn Marino 410*e4b17023SJohn Marino /* Decide whether DECL needs to be in a writable section. 411*e4b17023SJohn Marino RELOC is the same as for SELECT_SECTION. */ 412*e4b17023SJohn Marino extern bool decl_readonly_section (const_tree, int); 413*e4b17023SJohn Marino 414*e4b17023SJohn Marino /* This can be used to compute RELOC for the function above, when 415*e4b17023SJohn Marino given a constant expression. */ 416*e4b17023SJohn Marino extern int compute_reloc_for_constant (tree); 417*e4b17023SJohn Marino 418*e4b17023SJohn Marino /* User label prefix in effect for this compilation. */ 419*e4b17023SJohn Marino extern const char *user_label_prefix; 420*e4b17023SJohn Marino 421*e4b17023SJohn Marino /* Default target function prologue and epilogue assembler output. */ 422*e4b17023SJohn Marino extern void default_function_pro_epilogue (FILE *, HOST_WIDE_INT); 423*e4b17023SJohn Marino 424*e4b17023SJohn Marino /* Default target function switched text sections. */ 425*e4b17023SJohn Marino extern void default_function_switched_text_sections (FILE *, tree, bool); 426*e4b17023SJohn Marino 427*e4b17023SJohn Marino /* Default target hook that outputs nothing to a stream. */ 428*e4b17023SJohn Marino extern void no_asm_to_stream (FILE *); 429*e4b17023SJohn Marino 430*e4b17023SJohn Marino /* Flags controlling properties of a section. */ 431*e4b17023SJohn Marino #define SECTION_ENTSIZE 0x000ff /* entity size in section */ 432*e4b17023SJohn Marino #define SECTION_CODE 0x00100 /* contains code */ 433*e4b17023SJohn Marino #define SECTION_WRITE 0x00200 /* data is writable */ 434*e4b17023SJohn Marino #define SECTION_DEBUG 0x00400 /* contains debug data */ 435*e4b17023SJohn Marino #define SECTION_LINKONCE 0x00800 /* is linkonce */ 436*e4b17023SJohn Marino #define SECTION_SMALL 0x01000 /* contains "small data" */ 437*e4b17023SJohn Marino #define SECTION_BSS 0x02000 /* contains zeros only */ 438*e4b17023SJohn Marino #define SECTION_FORGET 0x04000 /* forget that we've entered the section */ 439*e4b17023SJohn Marino #define SECTION_MERGE 0x08000 /* contains mergeable data */ 440*e4b17023SJohn Marino #define SECTION_STRINGS 0x10000 /* contains zero terminated strings without 441*e4b17023SJohn Marino embedded zeros */ 442*e4b17023SJohn Marino #define SECTION_OVERRIDE 0x20000 /* allow override of default flags */ 443*e4b17023SJohn Marino #define SECTION_TLS 0x40000 /* contains thread-local storage */ 444*e4b17023SJohn Marino #define SECTION_NOTYPE 0x80000 /* don't output @progbits */ 445*e4b17023SJohn Marino #define SECTION_DECLARED 0x100000 /* section has been used */ 446*e4b17023SJohn Marino #define SECTION_STYLE_MASK 0x600000 /* bits used for SECTION_STYLE */ 447*e4b17023SJohn Marino #define SECTION_COMMON 0x800000 /* contains common data */ 448*e4b17023SJohn Marino #define SECTION_RELRO 0x1000000 /* data is readonly after relocation processing */ 449*e4b17023SJohn Marino #define SECTION_EXCLUDE 0x2000000 /* discarded by the linker */ 450*e4b17023SJohn Marino #define SECTION_MACH_DEP 0x4000000 /* subsequent bits reserved for target */ 451*e4b17023SJohn Marino 452*e4b17023SJohn Marino /* This SECTION_STYLE is used for unnamed sections that we can switch 453*e4b17023SJohn Marino to using a special assembler directive. */ 454*e4b17023SJohn Marino #define SECTION_UNNAMED 0x000000 455*e4b17023SJohn Marino 456*e4b17023SJohn Marino /* This SECTION_STYLE is used for named sections that we can switch 457*e4b17023SJohn Marino to using a general section directive. */ 458*e4b17023SJohn Marino #define SECTION_NAMED 0x200000 459*e4b17023SJohn Marino 460*e4b17023SJohn Marino /* This SECTION_STYLE is used for sections that we cannot switch to at 461*e4b17023SJohn Marino all. The choice of section is implied by the directive that we use 462*e4b17023SJohn Marino to declare the object. */ 463*e4b17023SJohn Marino #define SECTION_NOSWITCH 0x400000 464*e4b17023SJohn Marino 465*e4b17023SJohn Marino /* A helper function for default_elf_select_section and 466*e4b17023SJohn Marino default_elf_unique_section. Categorizes the DECL. */ 467*e4b17023SJohn Marino 468*e4b17023SJohn Marino enum section_category 469*e4b17023SJohn Marino { 470*e4b17023SJohn Marino SECCAT_TEXT, 471*e4b17023SJohn Marino 472*e4b17023SJohn Marino SECCAT_RODATA, 473*e4b17023SJohn Marino SECCAT_RODATA_MERGE_STR, 474*e4b17023SJohn Marino SECCAT_RODATA_MERGE_STR_INIT, 475*e4b17023SJohn Marino SECCAT_RODATA_MERGE_CONST, 476*e4b17023SJohn Marino SECCAT_SRODATA, 477*e4b17023SJohn Marino 478*e4b17023SJohn Marino SECCAT_DATA, 479*e4b17023SJohn Marino 480*e4b17023SJohn Marino /* To optimize loading of shared programs, define following subsections 481*e4b17023SJohn Marino of data section: 482*e4b17023SJohn Marino _REL Contains data that has relocations, so they get grouped 483*e4b17023SJohn Marino together and dynamic linker will visit fewer pages in memory. 484*e4b17023SJohn Marino _RO Contains data that is otherwise read-only. This is useful 485*e4b17023SJohn Marino with prelinking as most relocations won't be dynamically 486*e4b17023SJohn Marino linked and thus stay read only. 487*e4b17023SJohn Marino _LOCAL Marks data containing relocations only to local objects. 488*e4b17023SJohn Marino These relocations will get fully resolved by prelinking. */ 489*e4b17023SJohn Marino SECCAT_DATA_REL, 490*e4b17023SJohn Marino SECCAT_DATA_REL_LOCAL, 491*e4b17023SJohn Marino SECCAT_DATA_REL_RO, 492*e4b17023SJohn Marino SECCAT_DATA_REL_RO_LOCAL, 493*e4b17023SJohn Marino 494*e4b17023SJohn Marino SECCAT_SDATA, 495*e4b17023SJohn Marino SECCAT_TDATA, 496*e4b17023SJohn Marino 497*e4b17023SJohn Marino SECCAT_BSS, 498*e4b17023SJohn Marino SECCAT_SBSS, 499*e4b17023SJohn Marino SECCAT_TBSS 500*e4b17023SJohn Marino }; 501*e4b17023SJohn Marino 502*e4b17023SJohn Marino /* Information that is provided by all instances of the section type. */ 503*e4b17023SJohn Marino struct GTY(()) section_common { 504*e4b17023SJohn Marino /* The set of SECTION_* flags that apply to this section. */ 505*e4b17023SJohn Marino unsigned int flags; 506*e4b17023SJohn Marino }; 507*e4b17023SJohn Marino 508*e4b17023SJohn Marino /* Information about a SECTION_NAMED section. */ 509*e4b17023SJohn Marino struct GTY(()) named_section { 510*e4b17023SJohn Marino struct section_common common; 511*e4b17023SJohn Marino 512*e4b17023SJohn Marino /* The name of the section. */ 513*e4b17023SJohn Marino const char *name; 514*e4b17023SJohn Marino 515*e4b17023SJohn Marino /* If nonnull, the VAR_DECL or FUNCTION_DECL with which the 516*e4b17023SJohn Marino section is associated. */ 517*e4b17023SJohn Marino tree decl; 518*e4b17023SJohn Marino }; 519*e4b17023SJohn Marino 520*e4b17023SJohn Marino /* A callback that writes the assembly code for switching to an unnamed 521*e4b17023SJohn Marino section. The argument provides callback-specific data. */ 522*e4b17023SJohn Marino typedef void (*unnamed_section_callback) (const void *); 523*e4b17023SJohn Marino 524*e4b17023SJohn Marino /* Information about a SECTION_UNNAMED section. */ 525*e4b17023SJohn Marino struct GTY(()) unnamed_section { 526*e4b17023SJohn Marino struct section_common common; 527*e4b17023SJohn Marino 528*e4b17023SJohn Marino /* The callback used to switch to the section, and the data that 529*e4b17023SJohn Marino should be passed to the callback. */ 530*e4b17023SJohn Marino unnamed_section_callback GTY ((skip)) callback; 531*e4b17023SJohn Marino const void *GTY ((skip)) data; 532*e4b17023SJohn Marino 533*e4b17023SJohn Marino /* The next entry in the chain of unnamed sections. */ 534*e4b17023SJohn Marino section *next; 535*e4b17023SJohn Marino }; 536*e4b17023SJohn Marino 537*e4b17023SJohn Marino /* A callback that writes the assembly code for a decl in a 538*e4b17023SJohn Marino SECTION_NOSWITCH section. DECL is the decl that should be assembled 539*e4b17023SJohn Marino and NAME is the name of its SYMBOL_REF. SIZE is the size of the decl 540*e4b17023SJohn Marino in bytes and ROUNDED is that size rounded up to the next 541*e4b17023SJohn Marino BIGGEST_ALIGNMENT / BITS_PER_UNIT boundary. 542*e4b17023SJohn Marino 543*e4b17023SJohn Marino Return true if the callback used DECL_ALIGN to set the object's 544*e4b17023SJohn Marino alignment. A false return value implies that we are relying 545*e4b17023SJohn Marino on the rounded size to align the decl. */ 546*e4b17023SJohn Marino typedef bool (*noswitch_section_callback) (tree decl, const char *name, 547*e4b17023SJohn Marino unsigned HOST_WIDE_INT size, 548*e4b17023SJohn Marino unsigned HOST_WIDE_INT rounded); 549*e4b17023SJohn Marino 550*e4b17023SJohn Marino /* Information about a SECTION_NOSWITCH section. */ 551*e4b17023SJohn Marino struct GTY(()) noswitch_section { 552*e4b17023SJohn Marino struct section_common common; 553*e4b17023SJohn Marino 554*e4b17023SJohn Marino /* The callback used to assemble decls in this section. */ 555*e4b17023SJohn Marino noswitch_section_callback GTY ((skip)) callback; 556*e4b17023SJohn Marino }; 557*e4b17023SJohn Marino 558*e4b17023SJohn Marino /* Information about a section, which may be named or unnamed. */ 559*e4b17023SJohn Marino union GTY ((desc ("SECTION_STYLE (&(%h))"))) section { 560*e4b17023SJohn Marino struct section_common GTY ((skip)) common; 561*e4b17023SJohn Marino struct named_section GTY ((tag ("SECTION_NAMED"))) named; 562*e4b17023SJohn Marino struct unnamed_section GTY ((tag ("SECTION_UNNAMED"))) unnamed; 563*e4b17023SJohn Marino struct noswitch_section GTY ((tag ("SECTION_NOSWITCH"))) noswitch; 564*e4b17023SJohn Marino }; 565*e4b17023SJohn Marino 566*e4b17023SJohn Marino /* Return the style of section SECT. */ 567*e4b17023SJohn Marino #define SECTION_STYLE(SECT) ((SECT)->common.flags & SECTION_STYLE_MASK) 568*e4b17023SJohn Marino 569*e4b17023SJohn Marino struct object_block; 570*e4b17023SJohn Marino 571*e4b17023SJohn Marino /* Special well-known sections. */ 572*e4b17023SJohn Marino extern GTY(()) section *text_section; 573*e4b17023SJohn Marino extern GTY(()) section *data_section; 574*e4b17023SJohn Marino extern GTY(()) section *readonly_data_section; 575*e4b17023SJohn Marino extern GTY(()) section *sdata_section; 576*e4b17023SJohn Marino extern GTY(()) section *ctors_section; 577*e4b17023SJohn Marino extern GTY(()) section *dtors_section; 578*e4b17023SJohn Marino extern GTY(()) section *bss_section; 579*e4b17023SJohn Marino extern GTY(()) section *sbss_section; 580*e4b17023SJohn Marino extern GTY(()) section *exception_section; 581*e4b17023SJohn Marino extern GTY(()) section *eh_frame_section; 582*e4b17023SJohn Marino extern GTY(()) section *tls_comm_section; 583*e4b17023SJohn Marino extern GTY(()) section *comm_section; 584*e4b17023SJohn Marino extern GTY(()) section *lcomm_section; 585*e4b17023SJohn Marino extern GTY(()) section *bss_noswitch_section; 586*e4b17023SJohn Marino 587*e4b17023SJohn Marino extern GTY(()) section *in_section; 588*e4b17023SJohn Marino extern GTY(()) bool in_cold_section_p; 589*e4b17023SJohn Marino 590*e4b17023SJohn Marino extern section *get_unnamed_section (unsigned int, void (*) (const void *), 591*e4b17023SJohn Marino const void *); 592*e4b17023SJohn Marino extern section *get_section (const char *, unsigned int, tree); 593*e4b17023SJohn Marino extern section *get_named_section (tree, const char *, int); 594*e4b17023SJohn Marino extern section *get_variable_section (tree, bool); 595*e4b17023SJohn Marino extern void place_block_symbol (rtx); 596*e4b17023SJohn Marino extern rtx get_section_anchor (struct object_block *, HOST_WIDE_INT, 597*e4b17023SJohn Marino enum tls_model); 598*e4b17023SJohn Marino extern section *mergeable_constant_section (enum machine_mode, 599*e4b17023SJohn Marino unsigned HOST_WIDE_INT, 600*e4b17023SJohn Marino unsigned int); 601*e4b17023SJohn Marino extern section *function_section (tree); 602*e4b17023SJohn Marino extern section *unlikely_text_section (void); 603*e4b17023SJohn Marino extern section *current_function_section (void); 604*e4b17023SJohn Marino 605*e4b17023SJohn Marino /* Return the numbered .ctors.N (if CONSTRUCTOR_P) or .dtors.N (if 606*e4b17023SJohn Marino not) section for PRIORITY. */ 607*e4b17023SJohn Marino extern section *get_cdtor_priority_section (int, bool); 608*e4b17023SJohn Marino 609*e4b17023SJohn Marino extern bool unlikely_text_section_p (section *); 610*e4b17023SJohn Marino extern void switch_to_section (section *); 611*e4b17023SJohn Marino extern void output_section_asm_op (const void *); 612*e4b17023SJohn Marino 613*e4b17023SJohn Marino extern void record_tm_clone_pair (tree, tree); 614*e4b17023SJohn Marino extern void finish_tm_clone_pairs (void); 615*e4b17023SJohn Marino extern tree get_tm_clone_pair (tree); 616*e4b17023SJohn Marino 617*e4b17023SJohn Marino extern void default_asm_output_source_filename (FILE *, const char *); 618*e4b17023SJohn Marino extern void output_file_directive (FILE *, const char *); 619*e4b17023SJohn Marino 620*e4b17023SJohn Marino extern unsigned int default_section_type_flags (tree, const char *, int); 621*e4b17023SJohn Marino 622*e4b17023SJohn Marino extern bool have_global_bss_p (void); 623*e4b17023SJohn Marino extern void default_no_named_section (const char *, unsigned int, tree); 624*e4b17023SJohn Marino extern void default_elf_asm_named_section (const char *, unsigned int, tree); 625*e4b17023SJohn Marino extern enum section_category categorize_decl_for_section (const_tree, int); 626*e4b17023SJohn Marino extern void default_coff_asm_named_section (const char *, unsigned int, tree); 627*e4b17023SJohn Marino extern void default_pe_asm_named_section (const char *, unsigned int, tree); 628*e4b17023SJohn Marino 629*e4b17023SJohn Marino extern void default_stabs_asm_out_destructor (rtx, int); 630*e4b17023SJohn Marino extern void default_named_section_asm_out_destructor (rtx, int); 631*e4b17023SJohn Marino extern void default_dtor_section_asm_out_destructor (rtx, int); 632*e4b17023SJohn Marino extern void default_stabs_asm_out_constructor (rtx, int); 633*e4b17023SJohn Marino extern void default_named_section_asm_out_constructor (rtx, int); 634*e4b17023SJohn Marino extern void default_ctor_section_asm_out_constructor (rtx, int); 635*e4b17023SJohn Marino 636*e4b17023SJohn Marino extern section *default_select_section (tree, int, unsigned HOST_WIDE_INT); 637*e4b17023SJohn Marino extern section *default_elf_select_section (tree, int, unsigned HOST_WIDE_INT); 638*e4b17023SJohn Marino extern void default_unique_section (tree, int); 639*e4b17023SJohn Marino extern section *default_function_rodata_section (tree); 640*e4b17023SJohn Marino extern section *default_no_function_rodata_section (tree); 641*e4b17023SJohn Marino extern section *default_clone_table_section (void); 642*e4b17023SJohn Marino extern section *default_select_rtx_section (enum machine_mode, rtx, 643*e4b17023SJohn Marino unsigned HOST_WIDE_INT); 644*e4b17023SJohn Marino extern section *default_elf_select_rtx_section (enum machine_mode, rtx, 645*e4b17023SJohn Marino unsigned HOST_WIDE_INT); 646*e4b17023SJohn Marino extern void default_encode_section_info (tree, rtx, int); 647*e4b17023SJohn Marino extern const char *default_strip_name_encoding (const char *); 648*e4b17023SJohn Marino extern void default_asm_output_anchor (rtx); 649*e4b17023SJohn Marino extern bool default_use_anchors_for_symbol_p (const_rtx); 650*e4b17023SJohn Marino extern bool default_binds_local_p (const_tree); 651*e4b17023SJohn Marino extern bool default_binds_local_p_1 (const_tree, int); 652*e4b17023SJohn Marino extern void default_globalize_label (FILE *, const char *); 653*e4b17023SJohn Marino extern void default_globalize_decl_name (FILE *, tree); 654*e4b17023SJohn Marino extern void default_emit_unwind_label (FILE *, tree, int, int); 655*e4b17023SJohn Marino extern void default_emit_except_table_label (FILE *); 656*e4b17023SJohn Marino extern void default_generate_internal_label (char *, const char *, 657*e4b17023SJohn Marino unsigned long); 658*e4b17023SJohn Marino extern void default_internal_label (FILE *, const char *, unsigned long); 659*e4b17023SJohn Marino extern void default_asm_declare_constant_name (FILE *, const char *, 660*e4b17023SJohn Marino const_tree, HOST_WIDE_INT); 661*e4b17023SJohn Marino extern void default_file_start (void); 662*e4b17023SJohn Marino extern void file_end_indicate_exec_stack (void); 663*e4b17023SJohn Marino extern void file_end_indicate_split_stack (void); 664*e4b17023SJohn Marino 665*e4b17023SJohn Marino extern void default_elf_asm_output_external (FILE *file, tree, 666*e4b17023SJohn Marino const char *); 667*e4b17023SJohn Marino extern void default_elf_asm_output_limited_string (FILE *, const char *); 668*e4b17023SJohn Marino extern void default_elf_asm_output_ascii (FILE *, const char *, unsigned int); 669*e4b17023SJohn Marino extern void default_elf_internal_label (FILE *, const char *, unsigned long); 670*e4b17023SJohn Marino 671*e4b17023SJohn Marino extern void default_elf_init_array_asm_out_constructor (rtx, int); 672*e4b17023SJohn Marino extern void default_elf_fini_array_asm_out_destructor (rtx, int); 673*e4b17023SJohn Marino extern int maybe_assemble_visibility (tree); 674*e4b17023SJohn Marino 675*e4b17023SJohn Marino extern int default_address_cost (rtx, bool); 676*e4b17023SJohn Marino 677*e4b17023SJohn Marino /* Output stack usage information. */ 678*e4b17023SJohn Marino extern void output_stack_usage (void); 679*e4b17023SJohn Marino 680*e4b17023SJohn Marino /* dbxout helper functions */ 681*e4b17023SJohn Marino #if defined DBX_DEBUGGING_INFO || defined XCOFF_DEBUGGING_INFO 682*e4b17023SJohn Marino 683*e4b17023SJohn Marino extern void dbxout_int (int); 684*e4b17023SJohn Marino extern void dbxout_stabd (int, int); 685*e4b17023SJohn Marino extern void dbxout_begin_stabn (int); 686*e4b17023SJohn Marino extern void dbxout_begin_stabn_sline (int); 687*e4b17023SJohn Marino extern void dbxout_begin_empty_stabs (int); 688*e4b17023SJohn Marino extern void dbxout_begin_simple_stabs (const char *, int); 689*e4b17023SJohn Marino extern void dbxout_begin_simple_stabs_desc (const char *, int, int); 690*e4b17023SJohn Marino 691*e4b17023SJohn Marino extern void dbxout_stab_value_zero (void); 692*e4b17023SJohn Marino extern void dbxout_stab_value_label (const char *); 693*e4b17023SJohn Marino extern void dbxout_stab_value_label_diff (const char *, const char *); 694*e4b17023SJohn Marino extern void dbxout_stab_value_internal_label (const char *, int *); 695*e4b17023SJohn Marino extern void dbxout_stab_value_internal_label_diff (const char *, int *, 696*e4b17023SJohn Marino const char *); 697*e4b17023SJohn Marino 698*e4b17023SJohn Marino #endif 699*e4b17023SJohn Marino 700*e4b17023SJohn Marino #endif /* ! GCC_OUTPUT_H */ 701