| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <!-- Copyright (C) 1988-2015 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 5.2, http://www.gnu.org/software/texinfo/ --> |
| <head> |
| <title>GNU Compiler Collection (GCC) Internals: Label Output</title> |
| |
| <meta name="description" content="GNU Compiler Collection (GCC) Internals: Label Output"> |
| <meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Label Output"> |
| <meta name="resource-type" content="document"> |
| <meta name="distribution" content="global"> |
| <meta name="Generator" content="makeinfo"> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <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.smallquotation {font-size: smaller} |
| div.display {margin-left: 3.2em} |
| div.example {margin-left: 3.2em} |
| div.indentedblock {margin-left: 3.2em} |
| div.lisp {margin-left: 3.2em} |
| div.smalldisplay {margin-left: 3.2em} |
| div.smallexample {margin-left: 3.2em} |
| div.smallindentedblock {margin-left: 3.2em; font-size: smaller} |
| 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.nocodebreak {white-space:nowrap} |
| span.nolinebreak {white-space:nowrap} |
| span.roman {font-family:serif; font-weight:normal} |
| span.sansserif {font-family:sans-serif; font-weight:normal} |
| ul.no-bullet {list-style: none} |
| --> |
| </style> |
| |
| |
| </head> |
| |
| <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> |
| <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">17.21.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_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-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> |