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