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