|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.