|
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <!-- Copyright (C) 1988-2020 Free Software Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with the
- Invariant Sections being "Funding Free Software", the Front-Cover
- Texts being (a) (see below), and with the Back-Cover Texts being (b)
- (see below). A copy of the license is included in the section entitled
- "GNU Free Documentation License".
-
- (a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
- (b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development. -->
- <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>Label Output (GNU Compiler Collection (GCC) Internals)</title>
-
- <meta name="description" content="Label Output (GNU Compiler Collection (GCC) Internals)">
- <meta name="keywords" content="Label Output (GNU Compiler Collection (GCC) Internals)">
- <meta name="resource-type" content="document">
- <meta name="distribution" content="global">
- <meta name="Generator" content="makeinfo">
- <link href="index.html#Top" rel="start" title="Top">
- <link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
- <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
- <link href="Assembler-Format.html#Assembler-Format" rel="up" title="Assembler Format">
- <link href="Initialization.html#Initialization" rel="next" title="Initialization">
- <link href="Uninitialized-Data.html#Uninitialized-Data" rel="prev" title="Uninitialized Data">
- <style type="text/css">
- <!--
- a.summary-letter {text-decoration: none}
- blockquote.indentedblock {margin-right: 0em}
- blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
- blockquote.smallquotation {font-size: smaller}
- div.display {margin-left: 3.2em}
- div.example {margin-left: 3.2em}
- div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smalllisp {margin-left: 3.2em}
- kbd {font-style: oblique}
- pre.display {font-family: inherit}
- pre.format {font-family: inherit}
- pre.menu-comment {font-family: serif}
- pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
- span.nolinebreak {white-space: nowrap}
- span.roman {font-family: initial; font-weight: normal}
- span.sansserif {font-family: sans-serif; font-weight: normal}
- ul.no-bullet {list-style: none}
- -->
- </style>
-
-
- </head>
-
- <body lang="en">
- <a name="Label-Output"></a>
- <div class="header">
- <p>
- Next: <a href="Initialization.html#Initialization" accesskey="n" rel="next">Initialization</a>, Previous: <a href="Uninitialized-Data.html#Uninitialized-Data" accesskey="p" rel="prev">Uninitialized Data</a>, Up: <a href="Assembler-Format.html#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <hr>
- <a name="Output-and-Generation-of-Labels"></a>
- <h4 class="subsection">18.20.4 Output and Generation of Labels</h4>
-
- <p>This is about outputting labels.
- </p>
- <a name="index-assemble_005fname"></a>
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fLABEL"></a>Macro: <strong>ASM_OUTPUT_LABEL</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> the assembler definition of a label named <var>name</var>.
- Use the expression <code>assemble_name (<var>stream</var>, <var>name</var>)</code> to
- output the name itself; before and after that, output the additional
- assembler syntax for defining the name, and a newline. A default
- definition of this macro is provided which is correct for most systems.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fFUNCTION_005fLABEL"></a>Macro: <strong>ASM_OUTPUT_FUNCTION_LABEL</strong> <em>(<var>stream</var>, <var>name</var>, <var>decl</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> the assembler definition of a label named <var>name</var> of
- a function.
- Use the expression <code>assemble_name (<var>stream</var>, <var>name</var>)</code> to
- output the name itself; before and after that, output the additional
- assembler syntax for defining the name, and a newline. A default
- definition of this macro is provided which is correct for most systems.
- </p>
- <p>If this macro is not defined, then the function name is defined in the
- usual manner as a label (by means of <code>ASM_OUTPUT_LABEL</code>).
- </p></dd></dl>
-
- <a name="index-assemble_005fname_005fraw"></a>
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fINTERNAL_005fLABEL"></a>Macro: <strong>ASM_OUTPUT_INTERNAL_LABEL</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
- <dd><p>Identical to <code>ASM_OUTPUT_LABEL</code>, except that <var>name</var> is known
- to refer to a compiler-generated label. The default definition uses
- <code>assemble_name_raw</code>, which is like <code>assemble_name</code> except
- that it is more efficient.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-SIZE_005fASM_005fOP"></a>Macro: <strong>SIZE_ASM_OP</strong></dt>
- <dd><p>A C string containing the appropriate assembler directive to specify the
- size of a symbol, without any arguments. On systems that use ELF, the
- default (in <samp>config/elfos.h</samp>) is ‘<samp>"\t.size\t"</samp>’; on other
- systems, the default is not to define this macro.
- </p>
- <p>Define this macro only if it is correct to use the default definitions
- of <code>ASM_OUTPUT_SIZE_DIRECTIVE</code> and <code>ASM_OUTPUT_MEASURED_SIZE</code>
- for your system. If you need your own custom definitions of those
- macros, or if you do not need explicit symbol sizes at all, do not
- define this macro.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fSIZE_005fDIRECTIVE"></a>Macro: <strong>ASM_OUTPUT_SIZE_DIRECTIVE</strong> <em>(<var>stream</var>, <var>name</var>, <var>size</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> a directive telling the assembler that the size of the
- symbol <var>name</var> is <var>size</var>. <var>size</var> is a <code>HOST_WIDE_INT</code>.
- If you define <code>SIZE_ASM_OP</code>, a default definition of this macro is
- provided.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fMEASURED_005fSIZE"></a>Macro: <strong>ASM_OUTPUT_MEASURED_SIZE</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> a directive telling the assembler to calculate the size of
- the symbol <var>name</var> by subtracting its address from the current
- address.
- </p>
- <p>If you define <code>SIZE_ASM_OP</code>, a default definition of this macro is
- provided. The default assumes that the assembler recognizes a special
- ‘<samp>.</samp>’ symbol as referring to the current address, and can calculate
- the difference between this and another symbol. If your assembler does
- not recognize ‘<samp>.</samp>’ or cannot do calculations with it, you will need
- to redefine <code>ASM_OUTPUT_MEASURED_SIZE</code> to use some other technique.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-NO_005fDOLLAR_005fIN_005fLABEL"></a>Macro: <strong>NO_DOLLAR_IN_LABEL</strong></dt>
- <dd><p>Define this macro if the assembler does not accept the character
- ‘<samp>$</samp>’ in label names. By default constructors and destructors in
- G++ have ‘<samp>$</samp>’ in the identifiers. If this macro is defined,
- ‘<samp>.</samp>’ is used instead.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-NO_005fDOT_005fIN_005fLABEL"></a>Macro: <strong>NO_DOT_IN_LABEL</strong></dt>
- <dd><p>Define this macro if the assembler does not accept the character
- ‘<samp>.</samp>’ in label names. By default constructors and destructors in G++
- have names that use ‘<samp>.</samp>’. If this macro is defined, these names
- are rewritten to avoid ‘<samp>.</samp>’.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TYPE_005fASM_005fOP"></a>Macro: <strong>TYPE_ASM_OP</strong></dt>
- <dd><p>A C string containing the appropriate assembler directive to specify the
- type of a symbol, without any arguments. On systems that use ELF, the
- default (in <samp>config/elfos.h</samp>) is ‘<samp>"\t.type\t"</samp>’; on other
- systems, the default is not to define this macro.
- </p>
- <p>Define this macro only if it is correct to use the default definition of
- <code>ASM_OUTPUT_TYPE_DIRECTIVE</code> for your system. If you need your own
- custom definition of this macro, or if you do not need explicit symbol
- types at all, do not define this macro.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TYPE_005fOPERAND_005fFMT"></a>Macro: <strong>TYPE_OPERAND_FMT</strong></dt>
- <dd><p>A C string which specifies (using <code>printf</code> syntax) the format of
- the second operand to <code>TYPE_ASM_OP</code>. On systems that use ELF, the
- default (in <samp>config/elfos.h</samp>) is ‘<samp>"@%s"</samp>’; on other systems,
- the default is not to define this macro.
- </p>
- <p>Define this macro only if it is correct to use the default definition of
- <code>ASM_OUTPUT_TYPE_DIRECTIVE</code> for your system. If you need your own
- custom definition of this macro, or if you do not need explicit symbol
- types at all, do not define this macro.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fTYPE_005fDIRECTIVE"></a>Macro: <strong>ASM_OUTPUT_TYPE_DIRECTIVE</strong> <em>(<var>stream</var>, <var>type</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> a directive telling the assembler that the type of the
- symbol <var>name</var> is <var>type</var>. <var>type</var> is a C string; currently,
- that string is always either ‘<samp>"function"</samp>’ or ‘<samp>"object"</samp>’, but
- you should not count on this.
- </p>
- <p>If you define <code>TYPE_ASM_OP</code> and <code>TYPE_OPERAND_FMT</code>, a default
- definition of this macro is provided.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fDECLARE_005fFUNCTION_005fNAME"></a>Macro: <strong>ASM_DECLARE_FUNCTION_NAME</strong> <em>(<var>stream</var>, <var>name</var>, <var>decl</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> any text necessary for declaring the name <var>name</var> of a
- function which is being defined. This macro is responsible for
- outputting the label definition (perhaps using
- <code>ASM_OUTPUT_FUNCTION_LABEL</code>). The argument <var>decl</var> is the
- <code>FUNCTION_DECL</code> tree node representing the function.
- </p>
- <p>If this macro is not defined, then the function name is defined in the
- usual manner as a label (by means of <code>ASM_OUTPUT_FUNCTION_LABEL</code>).
- </p>
- <p>You may wish to use <code>ASM_OUTPUT_TYPE_DIRECTIVE</code> in the definition
- of this macro.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fDECLARE_005fFUNCTION_005fSIZE"></a>Macro: <strong>ASM_DECLARE_FUNCTION_SIZE</strong> <em>(<var>stream</var>, <var>name</var>, <var>decl</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> any text necessary for declaring the size of a function
- which is being defined. The argument <var>name</var> is the name of the
- function. The argument <var>decl</var> is the <code>FUNCTION_DECL</code> tree node
- representing the function.
- </p>
- <p>If this macro is not defined, then the function size is not defined.
- </p>
- <p>You may wish to use <code>ASM_OUTPUT_MEASURED_SIZE</code> in the definition
- of this macro.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fDECLARE_005fCOLD_005fFUNCTION_005fNAME"></a>Macro: <strong>ASM_DECLARE_COLD_FUNCTION_NAME</strong> <em>(<var>stream</var>, <var>name</var>, <var>decl</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> any text necessary for declaring the name <var>name</var> of a
- cold function partition which is being defined. This macro is responsible
- for outputting the label definition (perhaps using
- <code>ASM_OUTPUT_FUNCTION_LABEL</code>). The argument <var>decl</var> is the
- <code>FUNCTION_DECL</code> tree node representing the function.
- </p>
- <p>If this macro is not defined, then the cold partition name is defined in the
- usual manner as a label (by means of <code>ASM_OUTPUT_LABEL</code>).
- </p>
- <p>You may wish to use <code>ASM_OUTPUT_TYPE_DIRECTIVE</code> in the definition
- of this macro.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fDECLARE_005fCOLD_005fFUNCTION_005fSIZE"></a>Macro: <strong>ASM_DECLARE_COLD_FUNCTION_SIZE</strong> <em>(<var>stream</var>, <var>name</var>, <var>decl</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> any text necessary for declaring the size of a cold function
- partition which is being defined. The argument <var>name</var> is the name of the
- cold partition of the function. The argument <var>decl</var> is the
- <code>FUNCTION_DECL</code> tree node representing the function.
- </p>
- <p>If this macro is not defined, then the partition size is not defined.
- </p>
- <p>You may wish to use <code>ASM_OUTPUT_MEASURED_SIZE</code> in the definition
- of this macro.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fDECLARE_005fOBJECT_005fNAME"></a>Macro: <strong>ASM_DECLARE_OBJECT_NAME</strong> <em>(<var>stream</var>, <var>name</var>, <var>decl</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> any text necessary for declaring the name <var>name</var> of an
- initialized variable which is being defined. This macro must output the
- label definition (perhaps using <code>ASM_OUTPUT_LABEL</code>). The argument
- <var>decl</var> is the <code>VAR_DECL</code> tree node representing the variable.
- </p>
- <p>If this macro is not defined, then the variable name is defined in the
- usual manner as a label (by means of <code>ASM_OUTPUT_LABEL</code>).
- </p>
- <p>You may wish to use <code>ASM_OUTPUT_TYPE_DIRECTIVE</code> and/or
- <code>ASM_OUTPUT_SIZE_DIRECTIVE</code> in the definition of this macro.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fASM_005fDECLARE_005fCONSTANT_005fNAME"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_DECLARE_CONSTANT_NAME</strong> <em>(FILE *<var>file</var>, const char *<var>name</var>, const_tree <var>expr</var>, HOST_WIDE_INT <var>size</var>)</em></dt>
- <dd><p>A target hook to output to the stdio stream <var>file</var> any text necessary
- for declaring the name <var>name</var> of a constant which is being defined. This
- target hook is responsible for outputting the label definition (perhaps using
- <code>assemble_label</code>). The argument <var>exp</var> is the value of the constant,
- and <var>size</var> is the size of the constant in bytes. The <var>name</var>
- will be an internal label.
- </p>
- <p>The default version of this target hook, define the <var>name</var> in the
- usual manner as a label (by means of <code>assemble_label</code>).
- </p>
- <p>You may wish to use <code>ASM_OUTPUT_TYPE_DIRECTIVE</code> in this target hook.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fDECLARE_005fREGISTER_005fGLOBAL"></a>Macro: <strong>ASM_DECLARE_REGISTER_GLOBAL</strong> <em>(<var>stream</var>, <var>decl</var>, <var>regno</var>, <var>name</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> any text necessary for claiming a register <var>regno</var>
- for a global variable <var>decl</var> with name <var>name</var>.
- </p>
- <p>If you don’t define this macro, that is equivalent to defining it to do
- nothing.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fFINISH_005fDECLARE_005fOBJECT"></a>Macro: <strong>ASM_FINISH_DECLARE_OBJECT</strong> <em>(<var>stream</var>, <var>decl</var>, <var>toplevel</var>, <var>atend</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to finish up declaring a variable name
- once the compiler has processed its initializer fully and thus has had a
- chance to determine the size of an array when controlled by an
- initializer. This is used on systems where it’s necessary to declare
- something about the size of the object.
- </p>
- <p>If you don’t define this macro, that is equivalent to defining it to do
- nothing.
- </p>
- <p>You may wish to use <code>ASM_OUTPUT_SIZE_DIRECTIVE</code> and/or
- <code>ASM_OUTPUT_MEASURED_SIZE</code> in the definition of this macro.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fASM_005fGLOBALIZE_005fLABEL"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_GLOBALIZE_LABEL</strong> <em>(FILE *<var>stream</var>, const char *<var>name</var>)</em></dt>
- <dd><p>This target hook is a function to output to the stdio stream
- <var>stream</var> some commands that will make the label <var>name</var> global;
- that is, available for reference from other files.
- </p>
- <p>The default implementation relies on a proper definition of
- <code>GLOBAL_ASM_OP</code>.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fASM_005fGLOBALIZE_005fDECL_005fNAME"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_GLOBALIZE_DECL_NAME</strong> <em>(FILE *<var>stream</var>, tree <var>decl</var>)</em></dt>
- <dd><p>This target hook is a function to output to the stdio stream
- <var>stream</var> some commands that will make the name associated with <var>decl</var>
- global; that is, available for reference from other files.
- </p>
- <p>The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL target hook.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fASM_005fASSEMBLE_005fUNDEFINED_005fDECL"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_ASSEMBLE_UNDEFINED_DECL</strong> <em>(FILE *<var>stream</var>, const char *<var>name</var>, const_tree <var>decl</var>)</em></dt>
- <dd><p>This target hook is a function to output to the stdio stream
- <var>stream</var> some commands that will declare the name associated with
- <var>decl</var> which is not defined in the current translation unit. Most
- assemblers do not require anything to be output in this case.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fWEAKEN_005fLABEL"></a>Macro: <strong>ASM_WEAKEN_LABEL</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> some commands that will make the label <var>name</var> weak;
- that is, available for reference from other files but only used if
- no other definition is available. Use the expression
- <code>assemble_name (<var>stream</var>, <var>name</var>)</code> to output the name
- itself; before and after that, output the additional assembler syntax
- for making that name weak, and a newline.
- </p>
- <p>If you don’t define this macro or <code>ASM_WEAKEN_DECL</code>, GCC will not
- support weak symbols and you should not define the <code>SUPPORTS_WEAK</code>
- macro.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fWEAKEN_005fDECL"></a>Macro: <strong>ASM_WEAKEN_DECL</strong> <em>(<var>stream</var>, <var>decl</var>, <var>name</var>, <var>value</var>)</em></dt>
- <dd><p>Combines (and replaces) the function of <code>ASM_WEAKEN_LABEL</code> and
- <code>ASM_OUTPUT_WEAK_ALIAS</code>, allowing access to the associated function
- or variable decl. If <var>value</var> is not <code>NULL</code>, this C statement
- should output to the stdio stream <var>stream</var> assembler code which
- defines (equates) the weak symbol <var>name</var> to have the value
- <var>value</var>. If <var>value</var> is <code>NULL</code>, it should output commands
- to make <var>name</var> weak.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fWEAKREF"></a>Macro: <strong>ASM_OUTPUT_WEAKREF</strong> <em>(<var>stream</var>, <var>decl</var>, <var>name</var>, <var>value</var>)</em></dt>
- <dd><p>Outputs a directive that enables <var>name</var> to be used to refer to
- symbol <var>value</var> with weak-symbol semantics. <code>decl</code> is the
- declaration of <code>name</code>.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-SUPPORTS_005fWEAK"></a>Macro: <strong>SUPPORTS_WEAK</strong></dt>
- <dd><p>A preprocessor constant expression which evaluates to true if the target
- supports weak symbols.
- </p>
- <p>If you don’t define this macro, <samp>defaults.h</samp> provides a default
- definition. If either <code>ASM_WEAKEN_LABEL</code> or <code>ASM_WEAKEN_DECL</code>
- is defined, the default definition is ‘<samp>1</samp>’; otherwise, it is ‘<samp>0</samp>’.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fSUPPORTS_005fWEAK"></a>Macro: <strong>TARGET_SUPPORTS_WEAK</strong></dt>
- <dd><p>A C expression which evaluates to true if the target supports weak symbols.
- </p>
- <p>If you don’t define this macro, <samp>defaults.h</samp> provides a default
- definition. The default definition is ‘<samp>(SUPPORTS_WEAK)</samp>’. Define
- this macro if you want to control weak symbol support with a compiler
- flag such as <samp>-melf</samp>.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-MAKE_005fDECL_005fONE_005fONLY"></a>Macro: <strong>MAKE_DECL_ONE_ONLY</strong> <em>(<var>decl</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to mark <var>decl</var> to be emitted as a
- public symbol such that extra copies in multiple translation units will
- be discarded by the linker. Define this macro if your object file
- format provides support for this concept, such as the ‘<samp>COMDAT</samp>’
- section flags in the Microsoft Windows PE/COFF format, and this support
- requires changes to <var>decl</var>, such as putting it in a separate section.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-SUPPORTS_005fONE_005fONLY"></a>Macro: <strong>SUPPORTS_ONE_ONLY</strong></dt>
- <dd><p>A C expression which evaluates to true if the target supports one-only
- semantics.
- </p>
- <p>If you don’t define this macro, <samp>varasm.c</samp> provides a default
- definition. If <code>MAKE_DECL_ONE_ONLY</code> is defined, the default
- definition is ‘<samp>1</samp>’; otherwise, it is ‘<samp>0</samp>’. Define this macro if
- you want to control one-only symbol support with a compiler flag, or if
- setting the <code>DECL_ONE_ONLY</code> flag is enough to mark a declaration to
- be emitted as one-only.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fASM_005fASSEMBLE_005fVISIBILITY"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_ASSEMBLE_VISIBILITY</strong> <em>(tree <var>decl</var>, int <var>visibility</var>)</em></dt>
- <dd><p>This target hook is a function to output to <var>asm_out_file</var> some
- commands that will make the symbol(s) associated with <var>decl</var> have
- hidden, protected or internal visibility as specified by <var>visibility</var>.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fWEAK_005fNOT_005fIN_005fARCHIVE_005fTOC"></a>Macro: <strong>TARGET_WEAK_NOT_IN_ARCHIVE_TOC</strong></dt>
- <dd><p>A C expression that evaluates to true if the target’s linker expects
- that weak symbols do not appear in a static archive’s table of contents.
- The default is <code>0</code>.
- </p>
- <p>Leaving weak symbols out of an archive’s table of contents means that,
- if a symbol will only have a definition in one translation unit and
- will have undefined references from other translation units, that
- symbol should not be weak. Defining this macro to be nonzero will
- thus have the effect that certain symbols that would normally be weak
- (explicit template instantiations, and vtables for polymorphic classes
- with noninline key methods) will instead be nonweak.
- </p>
- <p>The C++ ABI requires this macro to be zero. Define this macro for
- targets where full C++ ABI compliance is impossible and where linker
- restrictions require weak symbols to be left out of a static archive’s
- table of contents.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fEXTERNAL"></a>Macro: <strong>ASM_OUTPUT_EXTERNAL</strong> <em>(<var>stream</var>, <var>decl</var>, <var>name</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> any text necessary for declaring the name of an external
- symbol named <var>name</var> which is referenced in this compilation but
- not defined. The value of <var>decl</var> is the tree node for the
- declaration.
- </p>
- <p>This macro need not be defined if it does not need to output anything.
- The GNU assembler and most Unix assemblers don’t require anything.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fASM_005fEXTERNAL_005fLIBCALL"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_EXTERNAL_LIBCALL</strong> <em>(rtx <var>symref</var>)</em></dt>
- <dd><p>This target hook is a function to output to <var>asm_out_file</var> an assembler
- pseudo-op to declare a library function name external. The name of the
- library function is given by <var>symref</var>, which is a <code>symbol_ref</code>.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fASM_005fMARK_005fDECL_005fPRESERVED"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_MARK_DECL_PRESERVED</strong> <em>(const char *<var>symbol</var>)</em></dt>
- <dd><p>This target hook is a function to output to <var>asm_out_file</var> an assembler
- directive to annotate <var>symbol</var> as used. The Darwin target uses the
- .no_dead_code_strip directive.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fLABELREF"></a>Macro: <strong>ASM_OUTPUT_LABELREF</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output to the stdio stream
- <var>stream</var> a reference in assembler syntax to a label named
- <var>name</var>. This should add ‘<samp>_</samp>’ to the front of the name, if that
- is customary on your operating system, as it is in most Berkeley Unix
- systems. This macro is used in <code>assemble_name</code>.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fMANGLE_005fASSEMBLER_005fNAME"></a>Target Hook: <em>tree</em> <strong>TARGET_MANGLE_ASSEMBLER_NAME</strong> <em>(const char *<var>name</var>)</em></dt>
- <dd><p>Given a symbol <var>name</var>, perform same mangling as <code>varasm.c</code>’s <code>assemble_name</code>, but in memory rather than to a file stream, returning result as an <code>IDENTIFIER_NODE</code>. Required for correct LTO symtabs. The default implementation calls the <code>TARGET_STRIP_NAME_ENCODING</code> hook and then prepends the <code>USER_LABEL_PREFIX</code>, if any.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fSYMBOL_005fREF"></a>Macro: <strong>ASM_OUTPUT_SYMBOL_REF</strong> <em>(<var>stream</var>, <var>sym</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output a reference to
- <code>SYMBOL_REF</code> <var>sym</var>. If not defined, <code>assemble_name</code>
- will be used to output the name of the symbol. This macro may be used
- to modify the way a symbol is referenced depending on information
- encoded by <code>TARGET_ENCODE_SECTION_INFO</code>.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fLABEL_005fREF"></a>Macro: <strong>ASM_OUTPUT_LABEL_REF</strong> <em>(<var>stream</var>, <var>buf</var>)</em></dt>
- <dd><p>A C statement (sans semicolon) to output a reference to <var>buf</var>, the
- result of <code>ASM_GENERATE_INTERNAL_LABEL</code>. If not defined,
- <code>assemble_name</code> will be used to output the name of the symbol.
- This macro is not used by <code>output_asm_label</code>, or the <code>%l</code>
- specifier that calls it; the intention is that this macro should be set
- when it is necessary to output a label differently when its address is
- being taken.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fASM_005fINTERNAL_005fLABEL"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_INTERNAL_LABEL</strong> <em>(FILE *<var>stream</var>, const char *<var>prefix</var>, unsigned long <var>labelno</var>)</em></dt>
- <dd><p>A function to output to the stdio stream <var>stream</var> a label whose
- name is made from the string <var>prefix</var> and the number <var>labelno</var>.
- </p>
- <p>It is absolutely essential that these labels be distinct from the labels
- used for user-level functions and variables. Otherwise, certain programs
- will have name conflicts with internal labels.
- </p>
- <p>It is desirable to exclude internal labels from the symbol table of the
- object file. Most assemblers have a naming convention for labels that
- should be excluded; on many systems, the letter ‘<samp>L</samp>’ at the
- beginning of a label has this effect. You should find out what
- convention your system uses, and follow it.
- </p>
- <p>The default version of this function utilizes <code>ASM_GENERATE_INTERNAL_LABEL</code>.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fDEBUG_005fLABEL"></a>Macro: <strong>ASM_OUTPUT_DEBUG_LABEL</strong> <em>(<var>stream</var>, <var>prefix</var>, <var>num</var>)</em></dt>
- <dd><p>A C statement to output to the stdio stream <var>stream</var> a debug info
- label whose name is made from the string <var>prefix</var> and the number
- <var>num</var>. This is useful for VLIW targets, where debug info labels
- may need to be treated differently than branch target labels. On some
- systems, branch target labels must be at the beginning of instruction
- bundles, but debug info labels can occur in the middle of instruction
- bundles.
- </p>
- <p>If this macro is not defined, then <code>(*targetm.asm_out.internal_label)</code> will be
- used.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fGENERATE_005fINTERNAL_005fLABEL"></a>Macro: <strong>ASM_GENERATE_INTERNAL_LABEL</strong> <em>(<var>string</var>, <var>prefix</var>, <var>num</var>)</em></dt>
- <dd><p>A C statement to store into the string <var>string</var> a label whose name
- is made from the string <var>prefix</var> and the number <var>num</var>.
- </p>
- <p>This string, when output subsequently by <code>assemble_name</code>, should
- produce the output that <code>(*targetm.asm_out.internal_label)</code> would produce
- with the same <var>prefix</var> and <var>num</var>.
- </p>
- <p>If the string begins with ‘<samp>*</samp>’, then <code>assemble_name</code> will
- output the rest of the string unchanged. It is often convenient for
- <code>ASM_GENERATE_INTERNAL_LABEL</code> to use ‘<samp>*</samp>’ in this way. If the
- string doesn’t start with ‘<samp>*</samp>’, then <code>ASM_OUTPUT_LABELREF</code> gets
- to output the string, and may change it. (Of course,
- <code>ASM_OUTPUT_LABELREF</code> is also part of your machine description, so
- you should know what it does on your machine.)
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fFORMAT_005fPRIVATE_005fNAME"></a>Macro: <strong>ASM_FORMAT_PRIVATE_NAME</strong> <em>(<var>outvar</var>, <var>name</var>, <var>number</var>)</em></dt>
- <dd><p>A C expression to assign to <var>outvar</var> (which is a variable of type
- <code>char *</code>) a newly allocated string made from the string
- <var>name</var> and the number <var>number</var>, with some suitable punctuation
- added. Use <code>alloca</code> to get space for the string.
- </p>
- <p>The string will be used as an argument to <code>ASM_OUTPUT_LABELREF</code> to
- produce an assembler label for an internal static variable whose name is
- <var>name</var>. Therefore, the string must be such as to result in valid
- assembler code. The argument <var>number</var> is different each time this
- macro is executed; it prevents conflicts between similarly-named
- internal static variables in different scopes.
- </p>
- <p>Ideally this string should not be a valid C identifier, to prevent any
- conflict with the user’s own symbols. Most assemblers allow periods
- or percent signs in assembler symbols; putting at least one of these
- between the name and the number will suffice.
- </p>
- <p>If this macro is not defined, a default definition will be provided
- which is correct for most systems.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fDEF"></a>Macro: <strong>ASM_OUTPUT_DEF</strong> <em>(<var>stream</var>, <var>name</var>, <var>value</var>)</em></dt>
- <dd><p>A C statement to output to the stdio stream <var>stream</var> assembler code
- which defines (equates) the symbol <var>name</var> to have the value <var>value</var>.
- </p>
- <a name="index-SET_005fASM_005fOP"></a>
- <p>If <code>SET_ASM_OP</code> is defined, a default definition is provided which is
- correct for most systems.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fDEF_005fFROM_005fDECLS"></a>Macro: <strong>ASM_OUTPUT_DEF_FROM_DECLS</strong> <em>(<var>stream</var>, <var>decl_of_name</var>, <var>decl_of_value</var>)</em></dt>
- <dd><p>A C statement to output to the stdio stream <var>stream</var> assembler code
- which defines (equates) the symbol whose tree node is <var>decl_of_name</var>
- to have the value of the tree node <var>decl_of_value</var>. This macro will
- be used in preference to ‘<samp>ASM_OUTPUT_DEF</samp>’ if it is defined and if
- the tree nodes are available.
- </p>
- <a name="index-SET_005fASM_005fOP-1"></a>
- <p>If <code>SET_ASM_OP</code> is defined, a default definition is provided which is
- correct for most systems.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-TARGET_005fDEFERRED_005fOUTPUT_005fDEFS"></a>Macro: <strong>TARGET_DEFERRED_OUTPUT_DEFS</strong> <em>(<var>decl_of_name</var>, <var>decl_of_value</var>)</em></dt>
- <dd><p>A C statement that evaluates to true if the assembler code which defines
- (equates) the symbol whose tree node is <var>decl_of_name</var> to have the value
- of the tree node <var>decl_of_value</var> should be emitted near the end of the
- current compilation unit. The default is to not defer output of defines.
- This macro affects defines output by ‘<samp>ASM_OUTPUT_DEF</samp>’ and
- ‘<samp>ASM_OUTPUT_DEF_FROM_DECLS</samp>’.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-ASM_005fOUTPUT_005fWEAK_005fALIAS"></a>Macro: <strong>ASM_OUTPUT_WEAK_ALIAS</strong> <em>(<var>stream</var>, <var>name</var>, <var>value</var>)</em></dt>
- <dd><p>A C statement to output to the stdio stream <var>stream</var> assembler code
- which defines (equates) the weak symbol <var>name</var> to have the value
- <var>value</var>. If <var>value</var> is <code>NULL</code>, it defines <var>name</var> as
- an undefined weak symbol.
- </p>
- <p>Define this macro if the target only supports weak aliases; define
- <code>ASM_OUTPUT_DEF</code> instead if possible.
- </p></dd></dl>
-
- <dl>
- <dt><a name="index-OBJC_005fGEN_005fMETHOD_005fLABEL"></a>Macro: <strong>OBJC_GEN_METHOD_LABEL</strong> <em>(<var>buf</var>, <var>is_inst</var>, <var>class_name</var>, <var>cat_name</var>, <var>sel_name</var>)</em></dt>
- <dd><p>Define this macro to override the default assembler names used for
- Objective-C methods.
- </p>
- <p>The default name is a unique method number followed by the name of the
- class (e.g. ‘<samp>_1_Foo</samp>’). For methods in categories, the name of
- the category is also included in the assembler name (e.g.
- ‘<samp>_1_Foo_Bar</samp>’).
- </p>
- <p>These names are safe on most systems, but make debugging difficult since
- the method’s selector is not present in the name. Therefore, particular
- systems define other ways of computing names.
- </p>
- <p><var>buf</var> is an expression of type <code>char *</code> which gives you a
- buffer in which to store the name; its length is as long as
- <var>class_name</var>, <var>cat_name</var> and <var>sel_name</var> put together, plus
- 50 characters extra.
- </p>
- <p>The argument <var>is_inst</var> specifies whether the method is an instance
- method or a class method; <var>class_name</var> is the name of the class;
- <var>cat_name</var> is the name of the category (or <code>NULL</code> if the method is not
- in a category); and <var>sel_name</var> is the name of the selector.
- </p>
- <p>On systems where the assembler can handle quoted names, you can use this
- macro to provide more human-readable names.
- </p></dd></dl>
-
- <hr>
- <div class="header">
- <p>
- Next: <a href="Initialization.html#Initialization" accesskey="n" rel="next">Initialization</a>, Previous: <a href="Uninitialized-Data.html#Uninitialized-Data" accesskey="p" rel="prev">Uninitialized Data</a>, Up: <a href="Assembler-Format.html#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
- </div>
-
-
-
- </body>
- </html>
|