GNU Compiler Collection (GCC) Internals: File Framework |
---|
Next: Data Output, Up: Assembler Format [Contents][Index]
This describes the overall framework of an assembly file.
Output to asm_out_file
any text which the assembler expects to
find at the beginning of a file. The default behavior is controlled
by two flags, documented below. Unless your target’s assembler is
quite unusual, if you override the default, you should call
default_file_start
at some point in your target hook. This
lets other target files rely on these variables.
If this flag is true, the text of the macro ASM_APP_OFF
will be
printed as the very first line in the assembly file, unless
-fverbose-asm is in effect. (If that macro has been defined
to the empty string, this variable has no effect.) With the normal
definition of ASM_APP_OFF
, the effect is to notify the GNU
assembler that it need not bother stripping comments or extra
whitespace from its input. This allows it to work a bit faster.
The default is false. You should not set it to true unless you have verified that your port does not generate any extra whitespace or comments that will cause GAS to issue errors in NO_APP mode.
If this flag is true, output_file_directive
will be called
for the primary source file, immediately after printing
ASM_APP_OFF
(if that is enabled). Most ELF assemblers expect
this to be done. The default is false.
Output to asm_out_file
any text which the assembler expects
to find at the end of a file. The default is to output nothing.
Some systems use a common convention, the ‘.note.GNU-stack’
special section, to indicate whether or not an object file relies on
the stack being executable. If your system uses this convention, you
should define TARGET_ASM_FILE_END
to this function. If you
need to do other things in that hook, have your hook function call
this function.
Output to asm_out_file
any text which the assembler expects
to find at the start of an LTO section. The default is to output
nothing.
Output to asm_out_file
any text which the assembler expects
to find at the end of an LTO section. The default is to output
nothing.
Output to asm_out_file
any text which is needed before emitting
unwind info and debug info at the end of a file. Some targets emit
here PIC setup thunks that cannot be emitted at the end of file,
because they couldn’t have unwind info then. The default is to output
nothing.
A C string constant describing how to begin a comment in the target assembler language. The compiler assumes that the comment will end at the end of the line.
A C string constant for text to be output before each asm
statement or group of consecutive ones. Normally this is
"#APP"
, which is a comment that has no effect on most
assemblers but tells the GNU assembler that it must check the lines
that follow for all valid assembler constructs.
A C string constant for text to be output after each asm
statement or group of consecutive ones. Normally this is
"#NO_APP"
, which tells the GNU assembler to resume making the
time-saving assumptions that are valid for ordinary compiler output.
A C statement to output COFF information or DWARF debugging information which indicates that filename name is the current source file to the stdio stream stream.
This macro need not be defined if the standard form of output for the file format in use is appropriate.
Output COFF information or DWARF debugging information which indicates that filename name is the current source file to the stdio stream file.
This target hook need not be defined if the standard form of output for the file format in use is appropriate.
Output a string based on name, suitable for the ‘#ident’ directive, or the equivalent directive or pragma in non-C-family languages. If this hook is not defined, nothing is output for the ‘#ident’ directive.
A C statement to output the string string to the stdio stream
stream. If you do not call the function output_quoted_string
in your config files, GCC will only call it to output filenames to
the assembler source. So you can use it to canonicalize the format
of the filename using this macro.
Output assembly directives to switch to section name. The section
should have attributes as specified by flags, which is a bit mask
of the SECTION_*
flags defined in output.h. If decl
is non-NULL, it is the VAR_DECL
or FUNCTION_DECL
with which
this section is associated.
This hook can be used to encode ELF section flags for which no letter
code has been defined in the assembler. It is called by
default_asm_named_section
whenever the section flags need to be
emitted in the assembler output. If the hook returns true, then the
numerical value for ELF section flags should be calculated from
flags and saved in *num; the value is printed out instead of the
normal sequence of letter codes. If the hook is not defined, or if it
returns false, then num is ignored and the traditional letter sequence
is emitted.
Return preferred text (sub)section for function decl.
Main purpose of this function is to separate cold, normal and hot
functions. startup is true when function is known to be used only
at startup (from static constructors or it is main()
).
exit is true when function is known to be used only at exit
(from static destructors).
Return NULL if function should go to default text section.
Used by the target to emit any assembler directives or additional labels needed when a function is partitioned between different sections. Output should be written to file. The function decl is available as decl and the new section is ‘cold’ if new_is_cold is true
.
This flag is true if the target supports TARGET_ASM_NAMED_SECTION
.
It must not be modified by command-line option processing.
This flag is true if we can create zeroed data by switching to a BSS
section and then using ASM_OUTPUT_SKIP
to allocate the space.
This is true on most ELF targets.
Choose a set of section attributes for use by TARGET_ASM_NAMED_SECTION
based on a variable or function decl, a section name, and whether or not the
declaration’s initializer may contain runtime relocations. decl may be
null, in which case read-write data should be assumed.
The default version of this function handles choosing code vs data,
read-only vs read-write data, and flag_pic
. You should only
need to override this if your target has special flags that might be
set via __attribute__
.
Provides the target with the ability to record the gcc command line switches that have been passed to the compiler, and options that are enabled. The type argument specifies what is being recorded. It can take the following values:
SWITCH_TYPE_PASSED
text is a command line switch that has been set by the user.
SWITCH_TYPE_ENABLED
text is an option which has been enabled. This might be as a direct result of a command line switch, or because it is enabled by default or because it has been enabled as a side effect of a different command line switch. For example, the -O2 switch enables various different individual optimization passes.
SWITCH_TYPE_DESCRIPTIVE
text is either NULL or some descriptive text which should be ignored. If text is NULL then it is being used to warn the target hook that either recording is starting or ending. The first time type is SWITCH_TYPE_DESCRIPTIVE and text is NULL, the warning is for start up and the second time the warning is for wind down. This feature is to allow the target hook to make any necessary preparations before it starts to record switches and to perform any necessary tidying up after it has finished recording switches.
SWITCH_TYPE_LINE_START
This option can be ignored by this target hook.
SWITCH_TYPE_LINE_END
This option can be ignored by this target hook.
The hook’s return value must be zero. Other return values may be supported in the future.
By default this hook is set to NULL, but an example implementation is
provided for ELF based targets. Called elf_record_gcc_switches,
it records the switches as ASCII text inside a new, string mergeable
section in the assembler output file. The name of the new section is
provided by the TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
target
hook.
This is the name of the section that will be created by the example
ELF implementation of the TARGET_ASM_RECORD_GCC_SWITCHES
target
hook.
Next: Data Output, Up: Assembler Format [Contents][Index]