Annotation of GNUtools/cc/gcc.info-20, revision 1.1

1.1     ! root        1: This is Info file gcc.info, produced by Makeinfo-1.54 from the input
        !             2: file gcc.texi.
        !             3: 
        !             4:    This file documents the use and the internals of the GNU compiler.
        !             5: 
        !             6:    Published by the Free Software Foundation 675 Massachusetts Avenue
        !             7: Cambridge, MA 02139 USA
        !             8: 
        !             9:    Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc.
        !            10: 
        !            11:    Permission is granted to make and distribute verbatim copies of this
        !            12: manual provided the copyright notice and this permission notice are
        !            13: preserved on all copies.
        !            14: 
        !            15:    Permission is granted to copy and distribute modified versions of
        !            16: this manual under the conditions for verbatim copying, provided also
        !            17: that the sections entitled "GNU General Public License" and "Protect
        !            18: Your Freedom--Fight `Look And Feel'" are included exactly as in the
        !            19: original, and provided that the entire resulting derived work is
        !            20: distributed under the terms of a permission notice identical to this
        !            21: one.
        !            22: 
        !            23:    Permission is granted to copy and distribute translations of this
        !            24: manual into another language, under the above conditions for modified
        !            25: versions, except that the sections entitled "GNU General Public
        !            26: License" and "Protect Your Freedom--Fight `Look And Feel'", and this
        !            27: permission notice, may be included in translations approved by the Free
        !            28: Software Foundation instead of in the original English.
        !            29: 
        !            30: 
        !            31: File: gcc.info,  Node: Condition Code,  Next: Costs,  Prev: Addressing Modes,  Up: Target Macros
        !            32: 
        !            33: Condition Code Status
        !            34: =====================
        !            35: 
        !            36:    The file `conditions.h' defines a variable `cc_status' to describe
        !            37: how the condition code was computed (in case the interpretation of the
        !            38: condition code depends on the instruction that it was set by).  This
        !            39: variable contains the RTL expressions on which the condition code is
        !            40: currently based, and several standard flags.
        !            41: 
        !            42:    Sometimes additional machine-specific flags must be defined in the
        !            43: machine description header file.  It can also add additional
        !            44: machine-specific information by defining `CC_STATUS_MDEP'.
        !            45: 
        !            46: `CC_STATUS_MDEP'
        !            47:      C code for a data type which is used for declaring the `mdep'
        !            48:      component of `cc_status'.  It defaults to `int'.
        !            49: 
        !            50:      This macro is not used on machines that do not use `cc0'.
        !            51: 
        !            52: `CC_STATUS_MDEP_INIT'
        !            53:      A C expression to initialize the `mdep' field to "empty".  The
        !            54:      default definition does nothing, since most machines don't use the
        !            55:      field anyway.  If you want to use the field, you should probably
        !            56:      define this macro to initialize it.
        !            57: 
        !            58:      This macro is not used on machines that do not use `cc0'.
        !            59: 
        !            60: `NOTICE_UPDATE_CC (EXP, INSN)'
        !            61:      A C compound statement to set the components of `cc_status'
        !            62:      appropriately for an insn INSN whose body is EXP.  It is this
        !            63:      macro's responsibility to recognize insns that set the condition
        !            64:      code as a byproduct of other activity as well as those that
        !            65:      explicitly set `(cc0)'.
        !            66: 
        !            67:      This macro is not used on machines that do not use `cc0'.
        !            68: 
        !            69:      If there are insns that do not set the condition code but do alter
        !            70:      other machine registers, this macro must check to see whether they
        !            71:      invalidate the expressions that the condition code is recorded as
        !            72:      reflecting.  For example, on the 68000, insns that store in address
        !            73:      registers do not set the condition code, which means that usually
        !            74:      `NOTICE_UPDATE_CC' can leave `cc_status' unaltered for such insns.
        !            75:      But suppose that the previous insn set the condition code based
        !            76:      on location `a4@(102)' and the current insn stores a new value in
        !            77:      `a4'.  Although the condition code is not changed by this, it will
        !            78:      no longer be true that it reflects the contents of `a4@(102)'.
        !            79:      Therefore, `NOTICE_UPDATE_CC' must alter `cc_status' in this case
        !            80:      to say that nothing is known about the condition code value.
        !            81: 
        !            82:      The definition of `NOTICE_UPDATE_CC' must be prepared to deal with
        !            83:      the results of peephole optimization: insns whose patterns are
        !            84:      `parallel' RTXs containing various `reg', `mem' or constants which
        !            85:      are just the operands.  The RTL structure of these insns is not
        !            86:      sufficient to indicate what the insns actually do.  What
        !            87:      `NOTICE_UPDATE_CC' should do when it sees one is just to run
        !            88:      `CC_STATUS_INIT'.
        !            89: 
        !            90:      A possible definition of `NOTICE_UPDATE_CC' is to call a function
        !            91:      that looks at an attribute (*note Insn Attributes::.) named, for
        !            92:      example, `cc'.  This avoids having detailed information about
        !            93:      patterns in two places, the `md' file and in `NOTICE_UPDATE_CC'.
        !            94: 
        !            95: `EXTRA_CC_MODES'
        !            96:      A list of names to be used for additional modes for condition code
        !            97:      values in registers (*note Jump Patterns::.).  These names are
        !            98:      added to `enum machine_mode' and all have class `MODE_CC'.  By
        !            99:      convention, they should start with `CC' and end with `mode'.
        !           100: 
        !           101:      You should only define this macro if your machine does not use
        !           102:      `cc0' and only if additional modes are required.
        !           103: 
        !           104: `EXTRA_CC_NAMES'
        !           105:      A list of C strings giving the names for the modes listed in
        !           106:      `EXTRA_CC_MODES'.  For example, the Sparc defines this macro and
        !           107:      `EXTRA_CC_MODES' as
        !           108: 
        !           109:           #define EXTRA_CC_MODES CC_NOOVmode, CCFPmode
        !           110:           #define EXTRA_CC_NAMES "CC_NOOV", "CCFP"
        !           111: 
        !           112:      This macro is not required if `EXTRA_CC_MODES' is not defined.
        !           113: 
        !           114: `SELECT_CC_MODE (OP, X, Y)'
        !           115:      Returns a mode from class `MODE_CC' to be used when comparison
        !           116:      operation code OP is applied to rtx X and Y.  For example, on the
        !           117:      Sparc, `SELECT_CC_MODE' is defined as (see *note Jump Patterns::.
        !           118:      for a description of the reason for this definition)
        !           119: 
        !           120:           #define SELECT_CC_MODE(OP,X,Y) \
        !           121:             (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT          \
        !           122:              ? ((OP == EQ || OP == NE) ? CCFPmode : CCFPEmode)    \
        !           123:              : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS    \
        !           124:                  || GET_CODE (X) == NEG) \
        !           125:                 ? CC_NOOVmode : CCmode))
        !           126: 
        !           127:      This macro is not required if `EXTRA_CC_MODES' is not defined.
        !           128: 
        !           129: 
        !           130: File: gcc.info,  Node: Costs,  Next: Sections,  Prev: Condition Code,  Up: Target Macros
        !           131: 
        !           132: Describing Relative Costs of Operations
        !           133: =======================================
        !           134: 
        !           135:    These macros let you describe the relative speed of various
        !           136: operations on the target machine.
        !           137: 
        !           138: `CONST_COSTS (X, CODE, OUTER_CODE)'
        !           139:      A part of a C `switch' statement that describes the relative costs
        !           140:      of constant RTL expressions.  It must contain `case' labels for
        !           141:      expression codes `const_int', `const', `symbol_ref', `label_ref'
        !           142:      and `const_double'.  Each case must ultimately reach a `return'
        !           143:      statement to return the relative cost of the use of that kind of
        !           144:      constant value in an expression.  The cost may depend on the
        !           145:      precise value of the constant, which is available for examination
        !           146:      in X, and the rtx code of the expression in which it is contained,
        !           147:      found in OUTER_CODE.
        !           148: 
        !           149:      CODE is the expression code--redundant, since it can be obtained
        !           150:      with `GET_CODE (X)'.
        !           151: 
        !           152: `RTX_COSTS (X, CODE, OUTER_CODE)'
        !           153:      Like `CONST_COSTS' but applies to nonconstant RTL expressions.
        !           154:      This can be used, for example, to indicate how costly a multiply
        !           155:      instruction is.  In writing this macro, you can use the construct
        !           156:      `COSTS_N_INSNS (N)' to specify a cost equal to N fast
        !           157:      instructions.  OUTER_CODE is the code of the expression in which X
        !           158:      is contained.
        !           159: 
        !           160:      This macro is optional; do not define it if the default cost
        !           161:      assumptions are adequate for the target machine.
        !           162: 
        !           163: `ADDRESS_COST (ADDRESS)'
        !           164:      An expression giving the cost of an addressing mode that contains
        !           165:      ADDRESS.  If not defined, the cost is computed from the ADDRESS
        !           166:      expression and the `CONST_COSTS' values.
        !           167: 
        !           168:      For most CISC machines, the default cost is a good approximation
        !           169:      of the true cost of the addressing mode.  However, on RISC
        !           170:      machines, all instructions normally have the same length and
        !           171:      execution time.  Hence all addresses will have equal costs.
        !           172: 
        !           173:      In cases where more than one form of an address is known, the form
        !           174:      with the lowest cost will be used.  If multiple forms have the
        !           175:      same, lowest, cost, the one that is the most complex will be used.
        !           176: 
        !           177:      For example, suppose an address that is equal to the sum of a
        !           178:      register and a constant is used twice in the same basic block.
        !           179:      When this macro is not defined, the address will be computed in a
        !           180:      register and memory references will be indirect through that
        !           181:      register.  On machines where the cost of the addressing mode
        !           182:      containing the sum is no higher than that of a simple indirect
        !           183:      reference, this will produce an additional instruction and
        !           184:      possibly require an additional register.  Proper specification of
        !           185:      this macro eliminates this overhead for such machines.
        !           186: 
        !           187:      Similar use of this macro is made in strength reduction of loops.
        !           188: 
        !           189:      ADDRESS need not be valid as an address.  In such a case, the cost
        !           190:      is not relevant and can be any value; invalid addresses need not be
        !           191:      assigned a different cost.
        !           192: 
        !           193:      On machines where an address involving more than one register is as
        !           194:      cheap as an address computation involving only one register,
        !           195:      defining `ADDRESS_COST' to reflect this can cause two registers to
        !           196:      be live over a region of code where only one would have been if
        !           197:      `ADDRESS_COST' were not defined in that manner.  This effect should
        !           198:      be considered in the definition of this macro.  Equivalent costs
        !           199:      should probably only be given to addresses with different numbers
        !           200:      of registers on machines with lots of registers.
        !           201: 
        !           202:      This macro will normally either not be defined or be defined as a
        !           203:      constant.
        !           204: 
        !           205: `REGISTER_MOVE_COST (FROM, TO)'
        !           206:      A C expression for the cost of moving data from a register in class
        !           207:      FROM to one in class TO.  The classes are expressed using the
        !           208:      enumeration values such as `GENERAL_REGS'.  A value of 4 is the
        !           209:      default; other values are interpreted relative to that.
        !           210: 
        !           211:      It is not required that the cost always equal 2 when FROM is the
        !           212:      same as TO; on some machines it is expensive to move between
        !           213:      registers if they are not general registers.
        !           214: 
        !           215:      If reload sees an insn consisting of a single `set' between two
        !           216:      hard registers, and if `REGISTER_MOVE_COST' applied to their
        !           217:      classes returns a value of 2, reload does not check to ensure that
        !           218:      the constraints of the insn are met.  Setting a cost of other than
        !           219:      2 will allow reload to verify that the constraints are met.  You
        !           220:      should do this if the `movM' pattern's constraints do not allow
        !           221:      such copying.
        !           222: 
        !           223: `MEMORY_MOVE_COST (M)'
        !           224:      A C expression for the cost of moving data of mode M between a
        !           225:      register and memory.  A value of 2 is the default; this cost is
        !           226:      relative to those in `REGISTER_MOVE_COST'.
        !           227: 
        !           228:      If moving between registers and memory is more expensive than
        !           229:      between two registers, you should define this macro to express the
        !           230:      relative cost.
        !           231: 
        !           232: `BRANCH_COST'
        !           233:      A C expression for the cost of a branch instruction.  A value of 1
        !           234:      is the default; other values are interpreted relative to that.
        !           235: 
        !           236:    Here are additional macros which do not specify precise relative
        !           237: costs, but only that certain actions are more expensive than GNU CC
        !           238: would ordinarily expect.
        !           239: 
        !           240: `SLOW_BYTE_ACCESS'
        !           241:      Define this macro as a C expression which is nonzero if accessing
        !           242:      less than a word of memory (i.e. a `char' or a `short') is no
        !           243:      faster than accessing a word of memory, i.e., if such access
        !           244:      require more than one instruction or if there is no difference in
        !           245:      cost between byte and (aligned) word loads.
        !           246: 
        !           247:      When this macro is not defined, the compiler will access a field by
        !           248:      finding the smallest containing object; when it is defined, a
        !           249:      fullword load will be used if alignment permits.  Unless bytes
        !           250:      accesses are faster than word accesses, using word accesses is
        !           251:      preferable since it may eliminate subsequent memory access if
        !           252:      subsequent accesses occur to other fields in the same word of the
        !           253:      structure, but to different bytes.
        !           254: 
        !           255: `SLOW_ZERO_EXTEND'
        !           256:      Define this macro if zero-extension (of a `char' or `short' to an
        !           257:      `int') can be done faster if the destination is a register that is
        !           258:      known to be zero.
        !           259: 
        !           260:      If you define this macro, you must have instruction patterns that
        !           261:      recognize RTL structures like this:
        !           262: 
        !           263:           (set (strict_low_part (subreg:QI (reg:SI ...) 0)) ...)
        !           264: 
        !           265:      and likewise for `HImode'.
        !           266: 
        !           267: `SLOW_UNALIGNED_ACCESS'
        !           268:      Define this macro to be the value 1 if unaligned accesses have a
        !           269:      cost many times greater than aligned accesses, for example if they
        !           270:      are emulated in a trap handler.
        !           271: 
        !           272:      When this macro is non-zero, the compiler will act as if
        !           273:      `STRICT_ALIGNMENT' were non-zero when generating code for block
        !           274:      moves.  This can cause significantly more instructions to be
        !           275:      produced.  Therefore, do not set this macro non-zero if unaligned
        !           276:      accesses only add a cycle or two to the time for a memory access.
        !           277: 
        !           278:      If the value of this macro is always zero, it need not be defined.
        !           279: 
        !           280: `DONT_REDUCE_ADDR'
        !           281:      Define this macro to inhibit strength reduction of memory
        !           282:      addresses.  (On some machines, such strength reduction seems to do
        !           283:      harm rather than good.)
        !           284: 
        !           285: `MOVE_RATIO'
        !           286:      The number of scalar move insns which should be generated instead
        !           287:      of a string move insn or a library call.  Increasing the value
        !           288:      will always make code faster, but eventually incurs high cost in
        !           289:      increased code size.
        !           290: 
        !           291:      If you don't define this, a reasonable default is used.
        !           292: 
        !           293: `NO_FUNCTION_CSE'
        !           294:      Define this macro if it is as good or better to call a constant
        !           295:      function address than to call an address kept in a register.
        !           296: 
        !           297: `NO_RECURSIVE_FUNCTION_CSE'
        !           298:      Define this macro if it is as good or better for a function to call
        !           299:      itself with an explicit address than to call an address kept in a
        !           300:      register.
        !           301: 
        !           302: `ADJUST_COST (INSN, LINK, DEP_INSN, COST)'
        !           303:      A C statement (sans semicolon) to update the integer variable COST
        !           304:      based on the relationship between INSN that is dependent on
        !           305:      DEP_INSN through the dependence LINK.  The default is to make no
        !           306:      adjustment to COST.  This can be used for example to specify to
        !           307:      the scheduler that an output- or anti-dependence does not incur
        !           308:      the same cost as a data-dependence.
        !           309: 
        !           310: 
        !           311: File: gcc.info,  Node: Sections,  Next: PIC,  Prev: Costs,  Up: Target Macros
        !           312: 
        !           313: Dividing the Output into Sections (Texts, Data, ...)
        !           314: ====================================================
        !           315: 
        !           316:    An object file is divided into sections containing different types of
        !           317: data.  In the most common case, there are three sections: the "text
        !           318: section", which holds instructions and read-only data; the "data
        !           319: section", which holds initialized writable data; and the "bss section",
        !           320: which holds uninitialized data.  Some systems have other kinds of
        !           321: sections.
        !           322: 
        !           323:    The compiler must tell the assembler when to switch sections.  These
        !           324: macros control what commands to output to tell the assembler this.  You
        !           325: can also define additional sections.
        !           326: 
        !           327: `TEXT_SECTION_ASM_OP'
        !           328:      A C expression whose value is a string containing the assembler
        !           329:      operation that should precede instructions and read-only data.
        !           330:      Normally `".text"' is right.
        !           331: 
        !           332: `DATA_SECTION_ASM_OP'
        !           333:      A C expression whose value is a string containing the assembler
        !           334:      operation to identify the following data as writable initialized
        !           335:      data.  Normally `".data"' is right.
        !           336: 
        !           337: `SHARED_SECTION_ASM_OP'
        !           338:      if defined, a C expression whose value is a string containing the
        !           339:      assembler operation to identify the following data as shared data.
        !           340:      If not defined, `DATA_SECTION_ASM_OP' will be used.
        !           341: 
        !           342: `INIT_SECTION_ASM_OP'
        !           343:      if defined, a C expression whose value is a string containing the
        !           344:      assembler operation to identify the following data as
        !           345:      initialization code.  If not defined, GNU CC will assume such a
        !           346:      section does not exist.
        !           347: 
        !           348: `EXTRA_SECTIONS'
        !           349:      A list of names for sections other than the standard two, which are
        !           350:      `in_text' and `in_data'.  You need not define this macro on a
        !           351:      system with no other sections (that GCC needs to use).
        !           352: 
        !           353: `EXTRA_SECTION_FUNCTIONS'
        !           354:      One or more functions to be defined in `varasm.c'.  These
        !           355:      functions should do jobs analogous to those of `text_section' and
        !           356:      `data_section', for your additional sections.  Do not define this
        !           357:      macro if you do not define `EXTRA_SECTIONS'.
        !           358: 
        !           359: `READONLY_DATA_SECTION'
        !           360:      On most machines, read-only variables, constants, and jump tables
        !           361:      are placed in the text section.  If this is not the case on your
        !           362:      machine, this macro should be defined to be the name of a function
        !           363:      (either `data_section' or a function defined in `EXTRA_SECTIONS')
        !           364:      that switches to the section to be used for read-only items.
        !           365: 
        !           366:      If these items should be placed in the text section, this macro
        !           367:      should not be defined.
        !           368: 
        !           369: `SELECT_SECTION (EXP, RELOC)'
        !           370:      A C statement or statements to switch to the appropriate section
        !           371:      for output of EXP.  You can assume that EXP is either a `VAR_DECL'
        !           372:      node or a constant of some sort.  RELOC indicates whether the
        !           373:      initial value of EXP requires link-time relocations.  Select the
        !           374:      section by calling `text_section' or one of the alternatives for
        !           375:      other sections.
        !           376: 
        !           377:      Do not define this macro if you put all read-only variables and
        !           378:      constants in the read-only data section (usually the text section).
        !           379: 
        !           380: `SELECT_RTX_SECTION (MODE, RTX)'
        !           381:      A C statement or statements to switch to the appropriate section
        !           382:      for output of RTX in mode MODE.  You can assume that RTX is some
        !           383:      kind of constant in RTL.  The argument MODE is redundant except in
        !           384:      the case of a `const_int' rtx.  Select the section by calling
        !           385:      `text_section' or one of the alternatives for other sections.
        !           386: 
        !           387:      Do not define this macro if you put all constants in the read-only
        !           388:      data section.
        !           389: 
        !           390: `JUMP_TABLES_IN_TEXT_SECTION'
        !           391:      Define this macro if jump tables (for `tablejump' insns) should be
        !           392:      output in the text section, along with the assembler instructions.
        !           393:      Otherwise, the readonly data section is used.
        !           394: 
        !           395:      This macro is irrelevant if there is no separate readonly data
        !           396:      section.
        !           397: 
        !           398: `ENCODE_SECTION_INFO (DECL)'
        !           399:      Define this macro if references to a symbol must be treated
        !           400:      differently depending on something about the variable or function
        !           401:      named by the symbol (such as what section it is in).
        !           402: 
        !           403:      The macro definition, if any, is executed immediately after the
        !           404:      rtl for DECL has been created and stored in `DECL_RTL (DECL)'.
        !           405:      The value of the rtl will be a `mem' whose address is a
        !           406:      `symbol_ref'.
        !           407: 
        !           408:      The usual thing for this macro to do is to record a flag in the
        !           409:      `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
        !           410:      name string in the `symbol_ref' (if one bit is not enough
        !           411:      information).
        !           412: 
        !           413: `STRIP_NAME_ENCODING (VAR, SYM_NAME)'
        !           414:      Decode SYM_NAME and store the real name part in VAR, sans the
        !           415:      characters that encode section info.  Define this macro if
        !           416:      `ENCODE_SECTION_INFO' alters the symbol's name string.
        !           417: 
        !           418: 
        !           419: File: gcc.info,  Node: PIC,  Next: Assembler Format,  Prev: Sections,  Up: Target Macros
        !           420: 
        !           421: Position Independent Code
        !           422: =========================
        !           423: 
        !           424:    This section describes macros that help implement generation of
        !           425: position independent code.  Simply defining these macros is not enough
        !           426: to generate valid PIC; you must also add support to the macros
        !           427: `GO_IF_LEGITIMATE_ADDRESS' and `PRINT_OPERAND_ADDRESS', as well as
        !           428: `LEGITIMIZE_ADDRESS'.  You must modify the definition of `movsi' to do
        !           429: something appropriate when the source operand contains a symbolic
        !           430: address.  You may also need to alter the handling of switch statements
        !           431: so that they use relative addresses.
        !           432: 
        !           433: `PIC_OFFSET_TABLE_REGNUM'
        !           434:      The register number of the register used to address a table of
        !           435:      static data addresses in memory.  In some cases this register is
        !           436:      defined by a processor's "application binary interface" (ABI).
        !           437:      When this macro is defined, RTL is generated for this register
        !           438:      once, as with the stack pointer and frame pointer registers.  If
        !           439:      this macro is not defined, it is up to the machine-dependent files
        !           440:      to allocate such a register (if necessary).
        !           441: 
        !           442: `FINALIZE_PIC'
        !           443:      By generating position-independent code, when two different
        !           444:      programs (A and B) share a common library (libC.a), the text of
        !           445:      the library can be shared whether or not the library is linked at
        !           446:      the same address for both programs.  In some of these
        !           447:      environments, position-independent code requires not only the use
        !           448:      of different addressing modes, but also special code to enable the
        !           449:      use of these addressing modes.
        !           450: 
        !           451:      The `FINALIZE_PIC' macro serves as a hook to emit these special
        !           452:      codes once the function is being compiled into assembly code, but
        !           453:      not before.  (It is not done before, because in the case of
        !           454:      compiling an inline function, it would lead to multiple PIC
        !           455:      prologues being included in functions which used inline functions
        !           456:      and were compiled to assembly language.)
        !           457: 
        !           458: `LEGITIMATE_PIC_OPERAND_P (X)'
        !           459:      A C expression that is nonzero if X is a legitimate immediate
        !           460:      operand on the target machine when generating position independent
        !           461:      code.  You can assume that X satisfies `CONSTANT_P', so you need
        !           462:      not check this.  You can also assume FLAG_PIC is true, so you need
        !           463:      not check it either.  You need not define this macro if all
        !           464:      constants (including `SYMBOL_REF') can be immediate operands when
        !           465:      generating position independent code.
        !           466: 
        !           467: 
        !           468: File: gcc.info,  Node: Assembler Format,  Next: Debugging Info,  Prev: PIC,  Up: Target Macros
        !           469: 
        !           470: Defining the Output Assembler Language
        !           471: ======================================
        !           472: 
        !           473:    This section describes macros whose principal purpose is to describe
        !           474: how to write instructions in assembler language-rather than what the
        !           475: instructions do.
        !           476: 
        !           477: * Menu:
        !           478: 
        !           479: * File Framework::       Structural information for the assembler file.
        !           480: * Data Output::          Output of constants (numbers, strings, addresses).
        !           481: * Uninitialized Data::   Output of uninitialized variables.
        !           482: * Label Output::         Output and generation of labels.
        !           483: * Initialization::       General principles of initialization
        !           484:                           and termination routines.
        !           485: * Macros for Initialization::
        !           486:                         Specific macros that control the handling of
        !           487:                           initialization and termination routines.
        !           488: * Instruction Output::   Output of actual instructions.
        !           489: * Dispatch Tables::      Output of jump tables.
        !           490: * Alignment Output::     Pseudo ops for alignment and skipping data.
        !           491: 
        !           492: 
        !           493: File: gcc.info,  Node: File Framework,  Next: Data Output,  Up: Assembler Format
        !           494: 
        !           495: The Overall Framework of an Assembler File
        !           496: ------------------------------------------
        !           497: 
        !           498: `ASM_FILE_START (STREAM)'
        !           499:      A C expression which outputs to the stdio stream STREAM some
        !           500:      appropriate text to go at the start of an assembler file.
        !           501: 
        !           502:      Normally this macro is defined to output a line containing
        !           503:      `#NO_APP', which is a comment that has no effect on most
        !           504:      assemblers but tells the GNU assembler that it can save time by not
        !           505:      checking for certain assembler constructs.
        !           506: 
        !           507:      On systems that use SDB, it is necessary to output certain
        !           508:      commands; see `attasm.h'.
        !           509: 
        !           510: `ASM_FILE_END (STREAM)'
        !           511:      A C expression which outputs to the stdio stream STREAM some
        !           512:      appropriate text to go at the end of an assembler file.
        !           513: 
        !           514:      If this macro is not defined, the default is to output nothing
        !           515:      special at the end of the file.  Most systems don't require any
        !           516:      definition.
        !           517: 
        !           518:      On systems that use SDB, it is necessary to output certain
        !           519:      commands; see `attasm.h'.
        !           520: 
        !           521: `ASM_IDENTIFY_GCC (FILE)'
        !           522:      A C statement to output assembler commands which will identify the
        !           523:      object file as having been compiled with GNU CC (or another GNU
        !           524:      compiler).
        !           525: 
        !           526:      If you don't define this macro, the string `gcc_compiled.:' is
        !           527:      output.  This string is calculated to define a symbol which, on
        !           528:      BSD systems, will never be defined for any other reason.  GDB
        !           529:      checks for the presence of this symbol when reading the symbol
        !           530:      table of an executable.
        !           531: 
        !           532:      On non-BSD systems, you must arrange communication with GDB in
        !           533:      some other fashion.  If GDB is not used on your system, you can
        !           534:      define this macro with an empty body.
        !           535: 
        !           536: `ASM_COMMENT_START'
        !           537:      A C string constant describing how to begin a comment in the target
        !           538:      assembler language.  The compiler assumes that the comment will
        !           539:      end at the end of the line.
        !           540: 
        !           541: `ASM_APP_ON'
        !           542:      A C string constant for text to be output before each `asm'
        !           543:      statement or group of consecutive ones.  Normally this is
        !           544:      `"#APP"', which is a comment that has no effect on most assemblers
        !           545:      but tells the GNU assembler that it must check the lines that
        !           546:      follow for all valid assembler constructs.
        !           547: 
        !           548: `ASM_APP_OFF'
        !           549:      A C string constant for text to be output after each `asm'
        !           550:      statement or group of consecutive ones.  Normally this is
        !           551:      `"#NO_APP"', which tells the GNU assembler to resume making the
        !           552:      time-saving assumptions that are valid for ordinary compiler
        !           553:      output.
        !           554: 
        !           555: `ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)'
        !           556:      A C statement to output COFF information or DWARF debugging
        !           557:      information which indicates that filename NAME is the current
        !           558:      source file to the stdio stream STREAM.
        !           559: 
        !           560:      This macro need not be defined if the standard form of output for
        !           561:      the file format in use is appropriate.
        !           562: 
        !           563: `ASM_OUTPUT_SOURCE_LINE (STREAM, LINE)'
        !           564:      A C statement to output DBX or SDB debugging information before
        !           565:      code for line number LINE of the current source file to the stdio
        !           566:      stream STREAM.
        !           567: 
        !           568:      This macro need not be defined if the standard form of debugging
        !           569:      information for the debugger in use is appropriate.
        !           570: 
        !           571: `ASM_OUTPUT_IDENT (STREAM, STRING)'
        !           572:      A C statement to output something to the assembler file to handle a
        !           573:      `#ident' directive containing the text STRING.  If this macro is
        !           574:      not defined, nothing is output for a `#ident' directive.
        !           575: 
        !           576: `OBJC_PROLOGUE'
        !           577:      A C statement to output any assembler statements which are
        !           578:      required to precede any Objective C object definitions or message
        !           579:      sending.  The statement is executed only when compiling an
        !           580:      Objective C program.
        !           581: 
        !           582: 
        !           583: File: gcc.info,  Node: Data Output,  Next: Uninitialized Data,  Prev: File Framework,  Up: Assembler Format
        !           584: 
        !           585: Output of Data
        !           586: --------------
        !           587: 
        !           588: `ASM_OUTPUT_LONG_DOUBLE (STREAM, VALUE)'
        !           589: `ASM_OUTPUT_DOUBLE (STREAM, VALUE)'
        !           590: `ASM_OUTPUT_FLOAT (STREAM, VALUE)'
        !           591:      A C statement to output to the stdio stream STREAM an assembler
        !           592:      instruction to assemble a floating-point constant of `TFmode',
        !           593:      `DFmode' or `SFmode', respectively, whose value is VALUE.  VALUE
        !           594:      will be a C expression of type `REAL_VALUE_TYPE'.  Macros such as
        !           595:      `REAL_VALUE_TO_TARGET_DOUBLE' are useful for writing these
        !           596:      definitions.
        !           597: 
        !           598: `ASM_OUTPUT_QUADRUPLE_INT (STREAM, EXP)'
        !           599: `ASM_OUTPUT_DOUBLE_INT (STREAM, EXP)'
        !           600: `ASM_OUTPUT_INT (STREAM, EXP)'
        !           601: `ASM_OUTPUT_SHORT (STREAM, EXP)'
        !           602: `ASM_OUTPUT_CHAR (STREAM, EXP)'
        !           603:      A C statement to output to the stdio stream STREAM an assembler
        !           604:      instruction to assemble an integer of 16, 8, 4, 2 or 1 bytes,
        !           605:      respectively, whose value is VALUE.  The argument EXP will be an
        !           606:      RTL expression which represents a constant value.  Use
        !           607:      `output_addr_const (STREAM, EXP)' to output this value as an
        !           608:      assembler expression.
        !           609: 
        !           610:      For sizes larger than `UNITS_PER_WORD', if the action of a macro
        !           611:      would be identical to repeatedly calling the macro corresponding to
        !           612:      a size of `UNITS_PER_WORD', once for each word, you need not define
        !           613:      the macro.
        !           614: 
        !           615: `ASM_OUTPUT_BYTE (STREAM, VALUE)'
        !           616:      A C statement to output to the stdio stream STREAM an assembler
        !           617:      instruction to assemble a single byte containing the number VALUE.
        !           618: 
        !           619: `ASM_BYTE_OP'
        !           620:      A C string constant giving the pseudo-op to use for a sequence of
        !           621:      single-byte constants.  If this macro is not defined, the default
        !           622:      is `"byte"'.
        !           623: 
        !           624: `ASM_OUTPUT_ASCII (STREAM, PTR, LEN)'
        !           625:      A C statement to output to the stdio stream STREAM an assembler
        !           626:      instruction to assemble a string constant containing the LEN bytes
        !           627:      at PTR.  PTR will be a C expression of type `char *' and LEN a C
        !           628:      expression of type `int'.
        !           629: 
        !           630:      If the assembler has a `.ascii' pseudo-op as found in the Berkeley
        !           631:      Unix assembler, do not define the macro `ASM_OUTPUT_ASCII'.
        !           632: 
        !           633: `ASM_OUTPUT_POOL_PROLOGUE (FILE FUNNAME FUNDECL SIZE)'
        !           634:      A C statement to output assembler commands to define the start of
        !           635:      the constant pool for a function.  FUNNAME is a string giving the
        !           636:      name of the function.  Should the return type of the function be
        !           637:      required, it can be obtained via FUNDECL.  SIZE is the size, in
        !           638:      bytes, of the constant pool that will be written immediately after
        !           639:      this call.
        !           640: 
        !           641:      If no constant-pool prefix is required, the usual case, this macro
        !           642:      need not be defined.
        !           643: 
        !           644: `ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, LABELNO, JUMPTO)'
        !           645:      A C statement (with or without semicolon) to output a constant in
        !           646:      the constant pool, if it needs special treatment.  (This macro
        !           647:      need not do anything for RTL expressions that can be output
        !           648:      normally.)
        !           649: 
        !           650:      The argument FILE is the standard I/O stream to output the
        !           651:      assembler code on.  X is the RTL expression for the constant to
        !           652:      output, and MODE is the machine mode (in case X is a `const_int').
        !           653:      ALIGN is the required alignment for the value X; you should
        !           654:      output an assembler directive to force this much alignment.
        !           655: 
        !           656:      The argument LABELNO is a number to use in an internal label for
        !           657:      the address of this pool entry.  The definition of this macro is
        !           658:      responsible for outputting the label definition at the proper
        !           659:      place.  Here is how to do this:
        !           660: 
        !           661:           ASM_OUTPUT_INTERNAL_LABEL (FILE, "LC", LABELNO);
        !           662: 
        !           663:      When you output a pool entry specially, you should end with a
        !           664:      `goto' to the label JUMPTO.  This will prevent the same pool entry
        !           665:      from being output a second time in the usual manner.
        !           666: 
        !           667:      You need not define this macro if it would do nothing.
        !           668: 
        !           669: `ASM_OPEN_PAREN'
        !           670: `ASM_CLOSE_PAREN'
        !           671:      These macros are defined as C string constant, describing the
        !           672:      syntax in the assembler for grouping arithmetic expressions.  The
        !           673:      following definitions are correct for most assemblers:
        !           674: 
        !           675:           #define ASM_OPEN_PAREN "("
        !           676:           #define ASM_CLOSE_PAREN ")"
        !           677: 
        !           678:    These macros are provided by `real.h' for writing the definitions of
        !           679: `ASM_OUTPUT_DOUBLE' and the like:
        !           680: 
        !           681: `REAL_VALUE_TO_TARGET_SINGLE (X, L)'
        !           682: `REAL_VALUE_TO_TARGET_DOUBLE (X, L)'
        !           683: `REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L)'
        !           684:      These translate X, of type `REAL_VALUE_TYPE', to the target's
        !           685:      floating point representation, and store its bit pattern in the
        !           686:      array of `long int' whose address is L.  The number of elements in
        !           687:      the output array is determined by the size of the desired target
        !           688:      floating point data type: 32 bits of it go in each `long int' array
        !           689:      element.  Each array element holds 32 bits of the result, even if
        !           690:      `long int' is wider than 32 bits on the host machine.
        !           691: 
        !           692:      The array element values are designed so that you can print them
        !           693:      out using `fprintf' in the order they should appear in the target
        !           694:      machine's memory.
        !           695: 
        !           696: `REAL_VALUE_TO_DECIMAL (X, FORMAT, STRING)'
        !           697:      This macro converts X, of type `REAL_VALUE_TYPE', to a decimal
        !           698:      number and stores it as a string into STRING.  You must pass, as
        !           699:      STRING, the address of a long enough block of space to hold the
        !           700:      result.
        !           701: 
        !           702:      The argument FORMAT is a `printf'-specification that serves as a
        !           703:      suggestion for how to format the output string.
        !           704: 
        !           705: 
        !           706: File: gcc.info,  Node: Uninitialized Data,  Next: Label Output,  Prev: Data Output,  Up: Assembler Format
        !           707: 
        !           708: Output of Uninitialized Variables
        !           709: ---------------------------------
        !           710: 
        !           711:    Each of the macros in this section is used to do the whole job of
        !           712: outputting a single uninitialized variable.
        !           713: 
        !           714: `ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)'
        !           715:      A C statement (sans semicolon) to output to the stdio stream
        !           716:      STREAM the assembler definition of a common-label named NAME whose
        !           717:      size is SIZE bytes.  The variable ROUNDED is the size rounded up
        !           718:      to whatever alignment the caller wants.
        !           719: 
        !           720:      Use the expression `assemble_name (STREAM, NAME)' to output the
        !           721:      name itself; before and after that, output the additional
        !           722:      assembler syntax for defining the name, and a newline.
        !           723: 
        !           724:      This macro controls how the assembler definitions of uninitialized
        !           725:      global variables are output.
        !           726: 
        !           727: `ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)'
        !           728:      Like `ASM_OUTPUT_COMMON' except takes the required alignment as a
        !           729:      separate, explicit argument.  If you define this macro, it is used
        !           730:      in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in
        !           731:      handling the required alignment of the variable.
        !           732: 
        !           733: `ASM_OUTPUT_SHARED_COMMON (STREAM, NAME, SIZE, ROUNDED)'
        !           734:      If defined, it is similar to `ASM_OUTPUT_COMMON', except that it
        !           735:      is used when NAME is shared.  If not defined, `ASM_OUTPUT_COMMON'
        !           736:      will be used.
        !           737: 
        !           738: `ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)'
        !           739:      A C statement (sans semicolon) to output to the stdio stream
        !           740:      STREAM the assembler definition of a local-common-label named NAME
        !           741:      whose size is SIZE bytes.  The variable ROUNDED is the size
        !           742:      rounded up to whatever alignment the caller wants.
        !           743: 
        !           744:      Use the expression `assemble_name (STREAM, NAME)' to output the
        !           745:      name itself; before and after that, output the additional
        !           746:      assembler syntax for defining the name, and a newline.
        !           747: 
        !           748:      This macro controls how the assembler definitions of uninitialized
        !           749:      static variables are output.
        !           750: 
        !           751: `ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)'
        !           752:      Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a
        !           753:      separate, explicit argument.  If you define this macro, it is used
        !           754:      in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in
        !           755:      handling the required alignment of the variable.
        !           756: 
        !           757: `ASM_OUTPUT_SHARED_LOCAL (STREAM, NAME, SIZE, ROUNDED)'
        !           758:      If defined, it is similar to `ASM_OUTPUT_LOCAL', except that it is
        !           759:      used when NAME is shared.  If not defined, `ASM_OUTPUT_LOCAL' will
        !           760:      be used.
        !           761: 
        !           762: 
        !           763: File: gcc.info,  Node: Label Output,  Next: Initialization,  Prev: Uninitialized Data,  Up: Assembler Format
        !           764: 
        !           765: Output and Generation of Labels
        !           766: -------------------------------
        !           767: 
        !           768: `ASM_OUTPUT_LABEL (STREAM, NAME)'
        !           769:      A C statement (sans semicolon) to output to the stdio stream
        !           770:      STREAM the assembler definition of a label named NAME.  Use the
        !           771:      expression `assemble_name (STREAM, NAME)' to output the name
        !           772:      itself; before and after that, output the additional assembler
        !           773:      syntax for defining the name, and a newline.
        !           774: 
        !           775: `ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)'
        !           776:      A C statement (sans semicolon) to output to the stdio stream
        !           777:      STREAM any text necessary for declaring the name NAME of a
        !           778:      function which is being defined.  This macro is responsible for
        !           779:      outputting the label definition (perhaps using
        !           780:      `ASM_OUTPUT_LABEL').  The argument DECL is the `FUNCTION_DECL'
        !           781:      tree node representing the function.
        !           782: 
        !           783:      If this macro is not defined, then the function name is defined in
        !           784:      the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
        !           785: 
        !           786: `ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)'
        !           787:      A C statement (sans semicolon) to output to the stdio stream
        !           788:      STREAM any text necessary for declaring the size of a function
        !           789:      which is being defined.  The argument NAME is the name of the
        !           790:      function.  The argument DECL is the `FUNCTION_DECL' tree node
        !           791:      representing the function.
        !           792: 
        !           793:      If this macro is not defined, then the function size is not
        !           794:      defined.
        !           795: 
        !           796: `ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)'
        !           797:      A C statement (sans semicolon) to output to the stdio stream
        !           798:      STREAM any text necessary for declaring the name NAME of an
        !           799:      initialized variable which is being defined.  This macro must
        !           800:      output the label definition (perhaps using `ASM_OUTPUT_LABEL').
        !           801:      The argument DECL is the `VAR_DECL' tree node representing the
        !           802:      variable.
        !           803: 
        !           804:      If this macro is not defined, then the variable name is defined in
        !           805:      the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
        !           806: 
        !           807: `ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)'
        !           808:      A C statement (sans semicolon) to finish up declaring a variable
        !           809:      name once the compiler has processed its initializer fully and
        !           810:      thus has had a chance to determine the size of an array when
        !           811:      controlled by an initializer.  This is used on systems where it's
        !           812:      necessary to declare something about the size of the object.
        !           813: 
        !           814:      If you don't define this macro, that is equivalent to defining it
        !           815:      to do nothing.
        !           816: 
        !           817: `ASM_GLOBALIZE_LABEL (STREAM, NAME)'
        !           818:      A C statement (sans semicolon) to output to the stdio stream
        !           819:      STREAM some commands that will make the label NAME global; that
        !           820:      is, available for reference from other files.  Use the expression
        !           821:      `assemble_name (STREAM, NAME)' to output the name itself; before
        !           822:      and after that, output the additional assembler syntax for making
        !           823:      that name global, and a newline.
        !           824: 
        !           825: `ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)'
        !           826:      A C statement (sans semicolon) to output to the stdio stream
        !           827:      STREAM any text necessary for declaring the name of an external
        !           828:      symbol named NAME which is referenced in this compilation but not
        !           829:      defined.  The value of DECL is the tree node for the declaration.
        !           830: 
        !           831:      This macro need not be defined if it does not need to output
        !           832:      anything.  The GNU assembler and most Unix assemblers don't
        !           833:      require anything.
        !           834: 
        !           835: `ASM_OUTPUT_EXTERNAL_LIBCALL (STREAM, SYMREF)'
        !           836:      A C statement (sans semicolon) to output on STREAM an assembler
        !           837:      pseudo-op to declare a library function name external.  The name
        !           838:      of the library function is given by SYMREF, which has type `rtx'
        !           839:      and is a `symbol_ref'.
        !           840: 
        !           841:      This macro need not be defined if it does not need to output
        !           842:      anything.  The GNU assembler and most Unix assemblers don't
        !           843:      require anything.
        !           844: 
        !           845: `ASM_OUTPUT_LABELREF (STREAM, NAME)'
        !           846:      A C statement (sans semicolon) to output to the stdio stream
        !           847:      STREAM a reference in assembler syntax to a label named NAME.
        !           848:      This should add `_' to the front of the name, if that is customary
        !           849:      on your operating system, as it is in most Berkeley Unix systems.
        !           850:      This macro is used in `assemble_name'.
        !           851: 
        !           852: `ASM_OUTPUT_INTERNAL_LABEL (STREAM, PREFIX, NUM)'
        !           853:      A C statement to output to the stdio stream STREAM a label whose
        !           854:      name is made from the string PREFIX and the number NUM.
        !           855: 
        !           856:      It is absolutely essential that these labels be distinct from the
        !           857:      labels used for user-level functions and variables.  Otherwise,
        !           858:      certain programs will have name conflicts with internal labels.
        !           859: 
        !           860:      It is desirable to exclude internal labels from the symbol table
        !           861:      of the object file.  Most assemblers have a naming convention for
        !           862:      labels that should be excluded; on many systems, the letter `L' at
        !           863:      the beginning of a label has this effect.  You should find out what
        !           864:      convention your system uses, and follow it.
        !           865: 
        !           866:      The usual definition of this macro is as follows:
        !           867: 
        !           868:           fprintf (STREAM, "L%s%d:\n", PREFIX, NUM)
        !           869: 
        !           870: `ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)'
        !           871:      A C statement to store into the string STRING a label whose name
        !           872:      is made from the string PREFIX and the number NUM.
        !           873: 
        !           874:      This string, when output subsequently by `assemble_name', should
        !           875:      produce the output that `ASM_OUTPUT_INTERNAL_LABEL' would produce
        !           876:      with the same PREFIX and NUM.
        !           877: 
        !           878:      If the string begins with `*', then `assemble_name' will output
        !           879:      the rest of the string unchanged.  It is often convenient for
        !           880:      `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way.  If the
        !           881:      string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to
        !           882:      output the string, and may change it.  (Of course,
        !           883:      `ASM_OUTPUT_LABELREF' is also part of your machine description, so
        !           884:      you should know what it does on your machine.)
        !           885: 
        !           886: `ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)'
        !           887:      A C expression to assign to OUTVAR (which is a variable of type
        !           888:      `char *') a newly allocated string made from the string NAME and
        !           889:      the number NUMBER, with some suitable punctuation added.  Use
        !           890:      `alloca' to get space for the string.
        !           891: 
        !           892:      The string will be used as an argument to `ASM_OUTPUT_LABELREF' to
        !           893:      produce an assembler label for an internal static variable whose
        !           894:      name is NAME.  Therefore, the string must be such as to result in
        !           895:      valid assembler code.  The argument NUMBER is different each time
        !           896:      this macro is executed; it prevents conflicts between
        !           897:      similarly-named internal static variables in different scopes.
        !           898: 
        !           899:      Ideally this string should not be a valid C identifier, to prevent
        !           900:      any conflict with the user's own symbols.  Most assemblers allow
        !           901:      periods or percent signs in assembler symbols; putting at least
        !           902:      one of these between the name and the number will suffice.
        !           903: 
        !           904: `OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME, SEL_NAME)'
        !           905:      Define this macro to override the default assembler names used for
        !           906:      Objective C methods.
        !           907: 
        !           908:      The default name is a unique method number followed by the name of
        !           909:      the class (e.g. `_1_Foo').  For methods in categories, the name of
        !           910:      the category is also included in the assembler name (e.g.
        !           911:      `_1_Foo_Bar').
        !           912: 
        !           913:      These names are safe on most systems, but make debugging difficult
        !           914:      since the method's selector is not present in the name.
        !           915:      Therefore, particular systems define other ways of computing names.
        !           916: 
        !           917:      BUF is an expression of type `char *' which gives you a buffer in
        !           918:      which to store the name; its length is as long as CLASS_NAME,
        !           919:      CAT_NAME and SEL_NAME put together, plus 50 characters extra.
        !           920: 
        !           921:      The argument IS_INST specifies whether the method is an instance
        !           922:      method or a class method; CLASS_NAME is the name of the class;
        !           923:      CAT_NAME is the name of the category (or NULL if the method is not
        !           924:      in a category); and SEL_NAME is the name of the selector.
        !           925: 
        !           926:      On systems where the assembler can handle quoted names, you can
        !           927:      use this macro to provide more human-readable names.
        !           928: 
        !           929: 
        !           930: File: gcc.info,  Node: Initialization,  Next: Macros for Initialization,  Prev: Label Output,  Up: Assembler Format
        !           931: 
        !           932: How Initialization Functions Are Handled
        !           933: ----------------------------------------
        !           934: 
        !           935:    The compiled code for certain languages includes "constructors"
        !           936: (also called "initialization routines")--functions to initialize data
        !           937: in the program when the program is started.  These functions need to be
        !           938: called before the program is "started"--that is to say, before `main'
        !           939: is called.
        !           940: 
        !           941:    Compiling some languages generates "destructors" (also called
        !           942: "termination routines") that should be called when the program
        !           943: terminates.
        !           944: 
        !           945:    To make the initialization and termination functions work, the
        !           946: compiler must output something in the assembler code to cause those
        !           947: functions to be called at the appropriate time.  When you port the
        !           948: compiler to a new system, you need to specify how to do this.
        !           949: 
        !           950:    There are two major ways that GCC currently supports the execution of
        !           951: initialization and termination functions.  Each way has two variants.
        !           952: Much of the structure is common to all four variations.
        !           953: 
        !           954:    The linker must build two lists of these functions--a list of
        !           955: initialization functions, called `__CTOR_LIST__', and a list of
        !           956: termination functions, called `__DTOR_LIST__'.
        !           957: 
        !           958:    Each list always begins with an ignored function pointer (which may
        !           959: hold 0, -1, or a count of the function pointers after it, depending on
        !           960: the environment).  This is followed by a series of zero or more function
        !           961: pointers to constructors (or destructors), followed by a function
        !           962: pointer containing zero.
        !           963: 
        !           964:    Depending on the operating system and its executable file format,
        !           965: either `crtstuff.c' or `libgcc2.c' traverses these lists at startup
        !           966: time and exit time.  Constructors are called in forward order of the
        !           967: list; destructors in reverse order.
        !           968: 
        !           969:    The best way to handle static constructors works only for object file
        !           970: formats which provide arbitrarily-named sections.  A section is set
        !           971: aside for a list of constructors, and another for a list of destructors.
        !           972: Traditionally these are called `.ctors' and `.dtors'.  Each object file
        !           973: that defines an initialization function also puts a word in the
        !           974: constructor section to point to that function.  The linker accumulates
        !           975: all these words into one contiguous `.ctors' section.  Termination
        !           976: functions are handled similarly.
        !           977: 
        !           978:    To use this method, you need appropriate definitions of the macros
        !           979: `ASM_OUTPUT_CONSTRUCTOR' and `ASM_OUTPUT_DESTRUCTOR'.  Usually you can
        !           980: get them by including `svr4.h'.
        !           981: 
        !           982:    When arbitrary sections are available, there are two variants,
        !           983: depending upon how the code in `crtstuff.c' is called.  On systems that
        !           984: support an "init" section which is executed at program startup, parts
        !           985: of `crtstuff.c' are compiled into that section.  The program is linked
        !           986: by the `gcc' driver like this:
        !           987: 
        !           988:      ld -o OUTPUT_FILE crtbegin.o ... crtend.o -lgcc
        !           989: 
        !           990:    The head of a function (`__do_global_ctors') appears in the init
        !           991: section of `crtbegin.o'; the remainder of the function appears in the
        !           992: init section of `crtend.o'.  The linker will pull these two parts of
        !           993: the section together, making a whole function.  If any of the user's
        !           994: object files linked into the middle of it contribute code, then that
        !           995: code will be executed as part of the body of `__do_global_ctors'.
        !           996: 
        !           997:    To use this variant, you must define the `INIT_SECTION_ASM_OP' macro
        !           998: properly.
        !           999: 
        !          1000:    If no init section is available, do not define
        !          1001: `INIT_SECTION_ASM_OP'.  Then `__do_global_ctors' is built into the text
        !          1002: section like all other functions, and resides in `libgcc.a'.  When GCC
        !          1003: compiles any function called `main', it inserts a procedure call to
        !          1004: `__main' as the first executable code after the function prologue.  The
        !          1005: `__main' function, also defined in `libgcc2.c', simply calls
        !          1006: `__do_global_ctors'.
        !          1007: 
        !          1008:    In file formats that don't support arbitrary sections, there are
        !          1009: again two variants.  In the simplest variant, the GNU linker (GNU `ld')
        !          1010: and an `a.out' format must be used.  In this case,
        !          1011: `ASM_OUTPUT_CONSTRUCTOR' is defined to produce a `.stabs' entry of type
        !          1012: `N_SETT', referencing the name `__CTOR_LIST__', and with the address of
        !          1013: the void function containing the initialization code as its value.  The
        !          1014: GNU linker recognizes this as a request to add the value to a "set";
        !          1015: the values are accumulated, and are eventually placed in the executable
        !          1016: as a vector in the format described above, with a leading (ignored)
        !          1017: count and a trailing zero element.  `ASM_OUTPUT_DESTRUCTOR' is handled
        !          1018: similarly.  Since no init section is available, the absence of
        !          1019: `INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main'
        !          1020: as above, starting the initialization process.
        !          1021: 
        !          1022:    The last variant uses neither arbitrary sections nor the GNU linker.
        !          1023: This is preferable when you want to do dynamic linking and when using
        !          1024: file formats which the GNU linker does not support, such as `ECOFF'.  In
        !          1025: this case, `ASM_OUTPUT_CONSTRUCTOR' does not produce an `N_SETT'
        !          1026: symbol; initialization and termination functions are recognized simply
        !          1027: by their names.  This requires an extra program in the linkage step,
        !          1028: called `collect2'.  This program pretends to be the linker, for use
        !          1029: with GNU CC; it does its job by running the ordinary linker, but also
        !          1030: arranges to include the vectors of initialization and termination
        !          1031: functions.  These functions are called via `__main' as described above.
        !          1032: 
        !          1033:    Choosing among these configuration options has been simplified by a
        !          1034: set of operating-system-dependent files in the `config' subdirectory.
        !          1035: These files define all of the relevant parameters.  Usually it is
        !          1036: sufficient to include one into your specific machine-dependent
        !          1037: configuration file.  These files are:
        !          1038: 
        !          1039: `aoutos.h'
        !          1040:      For operating systems using the `a.out' format.
        !          1041: 
        !          1042: `next.h'
        !          1043:      For operating systems using the `MachO' format.
        !          1044: 
        !          1045: `svr3.h'
        !          1046:      For System V Release 3 and similar systems using `COFF' format.
        !          1047: 
        !          1048: `svr4.h'
        !          1049:      For System V Release 4 and similar systems using `ELF' format.
        !          1050: 
        !          1051: `vms.h'
        !          1052:      For the VMS operating system.
        !          1053: 
        !          1054:    The following section describes the specific macros that control and
        !          1055: customize the handling of initialization and termination functions.
        !          1056: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.