|
|
1.1 ! root 1: Info file gcc.info, produced by Makeinfo, -*- Text -*- from input ! 2: file gcc.texinfo. ! 3: ! 4: This file documents the use and the internals of the GNU compiler. ! 5: ! 6: Copyright (C) 1988 Free Software Foundation, Inc. ! 7: ! 8: Permission is granted to make and distribute verbatim copies of this ! 9: manual provided the copyright notice and this permission notice are ! 10: preserved on all copies. ! 11: ! 12: Permission is granted to copy and distribute modified versions of ! 13: this manual under the conditions for verbatim copying, provided also ! 14: that the section entitled ``GNU CC General Public License'' is ! 15: included exactly as in the original, and provided that the entire ! 16: resulting derived work is distributed under the terms of a permission ! 17: notice identical to this one. ! 18: ! 19: Permission is granted to copy and distribute translations of this ! 20: manual into another language, under the above conditions for modified ! 21: versions, except that the section entitled ``GNU CC General Public ! 22: License'' and this permission notice may be included in translations ! 23: approved by the Free Software Foundation instead of in the original ! 24: English. ! 25: ! 26: ! 27: ! 28: File: gcc.info, Node: Assembler Format, Prev: Condition Code, Up: Machine Macros ! 29: ! 30: Output of Assembler Code ! 31: ======================== ! 32: ! 33: `ASM_SPEC' ! 34: A C string constant that tells the GNU CC driver program options ! 35: to pass to the assembler. It can also specify how to translate ! 36: options you give to GNU CC into options for GNU CC to pass to ! 37: the assembler. See the file `tm-sun3.h' for an example of this. ! 38: ! 39: Do not define this macro if it does not need to do anything. ! 40: ! 41: `LINK_SPEC' ! 42: A C string constant that tells the GNU CC driver program options ! 43: to pass to the linker. It can also specify how to translate ! 44: options you give to GNU CC into options for GNU CC to pass to ! 45: the linker. ! 46: ! 47: Do not define this macro if it does not need to do anything. ! 48: ! 49: `LIB_SPEC' ! 50: Another C string constant used much like `LINK_SPEC'. The ! 51: difference between the two is that `LIBS_SPEC' is used at the ! 52: end of the command given to the linker. ! 53: ! 54: If this macro is not defined, a default is provided that loads ! 55: the standard C library from the usual place. See `gcc.c'. ! 56: ! 57: `STARTFILE_SPEC' ! 58: Another C string constant used much like `LINK_SPEC'. The ! 59: difference between the two is that `STARTFILE_SPEC' is used at ! 60: the very beginning of the command given to the linker. ! 61: ! 62: If this macro is not defined, a default is provided that loads ! 63: the standard C startup file from the usual place. See `gcc.c'. ! 64: ! 65: `ASM_FILE_START (STREAM)' ! 66: A C expression which outputs to the stdio stream STREAM some ! 67: appropriate text to go at the start of an assembler file. ! 68: ! 69: Normally this macro is defined to output a line containing ! 70: `#NO_APP', which is a comment that has no effect on most ! 71: assemblers but tells the GNU assembler that it can save time by ! 72: not checking for certain assembler constructs. ! 73: ! 74: On systems that use SDB, it is necessary to output certain ! 75: commands; see `tm-attasm.h'. ! 76: ! 77: `ASM_APP_ON' ! 78: A C string constant for text to be output before each `asm' ! 79: statement or group of consecutive ones. Normally this is ! 80: `"#APP"', which is a comment that has no effect on most ! 81: assemblers but tells the GNU assembler that it must check the ! 82: lines that follow for all valid assembler constructs. ! 83: ! 84: `ASM_APP_OFF' ! 85: A C string constant for text to be output after each `asm' ! 86: statement or group of consecutive ones. Normally this is ! 87: `"#NO_APP"', which tells the GNU assembler to resume making the ! 88: time-saving assumptions that are valid for ordinary compiler ! 89: output. ! 90: ! 91: `TEXT_SECTION_ASM_OP' ! 92: A C string constant for the assembler operation that should ! 93: precede instructions and read-only data. Normally `".text"' is ! 94: right. ! 95: ! 96: `DATA_SECTION_ASM_OP' ! 97: A C string constant for the assembler operation to identify the ! 98: following data as writable initialized data. Normally `".data"' ! 99: is right. ! 100: ! 101: `REGISTER_NAMES' ! 102: A C initializer containing the assembler's names for the machine ! 103: registers, each one as a C string constant. This is what ! 104: translates register numbers in the compiler into assembler ! 105: language. ! 106: ! 107: `DBX_REGISTER_NUMBER (REGNO)' ! 108: A C expression that returns the DBX register number for the ! 109: compiler register number REGNO. In simple cases, the value of ! 110: this expression may be REGNO itself. But sometimes there are ! 111: some registers that the compiler knows about and DBX does not, ! 112: or vice versa. In such cases, some register may need to have ! 113: one number in the compiler and another for DBX. ! 114: ! 115: `DBX_DEBUGGING_INFO' ! 116: Define this macro if GNU CC should produce debugging output for ! 117: DBX in response to the `-g' option. ! 118: ! 119: `SDB_DEBUGGING_INFO' ! 120: Define this macro if GNU CC should produce debugging output for ! 121: SDB in response to the `-g' option. ! 122: ! 123: `PUT_SDB_OP' ! 124: Define these macros to override the assembler syntax for the ! 125: special SDB assembler directives. See `sdbout.c' for a list of ! 126: these macros and their arguments. If the standard syntax is ! 127: used, you need not define them yourself. ! 128: ! 129: `SDB_GENERATE_FAKE' ! 130: Define this macro to override the usual method of constructing a ! 131: dummy name for anonymous structure and union types. See ! 132: `sdbout.c' for more infomation. ! 133: ! 134: `DBX_NO_XREFS' ! 135: Define this macro if DBX on your system does not support the ! 136: construct `xsTAGNAME'. On some systems, this construct is used ! 137: to describe a forward reference to a structure named TAGNAME. ! 138: On other systems, this construct is not supported at all. ! 139: ! 140: `DBX_CONTIN_LENGTH' ! 141: A symbol name in DBX-format debugging information is normally ! 142: continued (split into two separate `.stabs' directives) when it ! 143: exceeds a certain length (by default, 80 characters). On some ! 144: operating systems, DBX requires this splitting; on others, ! 145: splitting must not be done. You can inhibit splitting by ! 146: defining this macro with the value zero. You can override the ! 147: default splitting-length by defining this macro as an expression ! 148: for the length you desire. ! 149: ! 150: `DBX_CONTIN_CHAR' ! 151: Normally continuation is indicated by adding a `\' character to ! 152: the end of a `.stabs' string when a continuation follows. To ! 153: use a different character instead, define this macro as a ! 154: character constant for the character you want to use. Do not ! 155: define this macro if backslash is correct for your system. ! 156: ! 157: `ASM_OUTPUT_LABEL (STREAM, NAME)' ! 158: A C statement (sans semicolon) to output to the stdio stream ! 159: STREAM the assembler definition of a label named NAME. Use the ! 160: expression `assemble_name (STREAM, NAME)' to output the name ! 161: itself; before and after that, output the additional assembler ! 162: syntax for defining the name, and a newline. ! 163: ! 164: `ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)' ! 165: A C statement (sans semicolon) to output to the stdio stream ! 166: STREAM any text necessary for declaring the name NAME of a ! 167: function which is being defined. This macro is responsible for ! 168: outputting the label definition (perhaps using ! 169: `ASM_OUTPUT_LABEL'). The argument DECL is the `FUNCTION_DECL' ! 170: tree node representing the function. ! 171: ! 172: If this macro is not defined, then the function name is defined ! 173: in the usual manner as a label (by means of `ASM_OUTPUT_LABEL'). ! 174: ! 175: `ASM_GLOBALIZE_LABEL (STREAM, NAME)' ! 176: A C statement (sans semicolon) to output to the stdio stream ! 177: STREAM some commands that will make the label NAME global; that ! 178: is, available for reference from other files. Use the ! 179: expression `assemble_name (STREAM, NAME)' to output the name ! 180: itself; before and after that, output the additional assembler ! 181: syntax for making that name global, and a newline. ! 182: ! 183: `ASM_OUTPUT_EXTERNAL (STREAM, NAME, DECL)' ! 184: A C statement (sans semicolon) to output to the stdio stream ! 185: STREAM any text necessary for declaring the name of an external ! 186: symbol named NAME which is referenced in this compilation but ! 187: not defined. The value of DECL is the tree node for the ! 188: declaration. ! 189: ! 190: This macro need not be defined if it does not need to output ! 191: anything. The GNU assembler and most Unix assemblers don't ! 192: require anything. ! 193: ! 194: `ASM_OUTPUT_LABELREF (STREAM, NAME)' ! 195: A C statement to output to the stdio stream STREAM a reference ! 196: in assembler syntax to a label named NAME. The character `_' ! 197: should be added to the front of the name, if that is customary ! 198: on your operating system, as it is in most Berkeley Unix ! 199: systems. This macro is used in `assemble_name'. ! 200: ! 201: `ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)' ! 202: A C statement to store into the string STRING a label whose name ! 203: is made from the string PREFIX and the number NUM. ! 204: ! 205: This string, when output subsequently by `ASM_OUTPUT_LABELREF', ! 206: should produce the same output that `ASM_OUTPUT_INTERNAL_LABEL' ! 207: would produce with the same PREFIX and NUM. ! 208: ! 209: `ASM_OUTPUT_INTERNAL_LABEL (STREAM, PREFIX, NUM)' ! 210: A C statement to output to the stdio stream STREAM a label whose ! 211: name is made from the string PREFIX and the number NUM. These ! 212: labels are used for internal purposes, and there is no reason ! 213: for them to appear in the symbol table of the object file. On ! 214: many systems, the letter `L' at the beginning of a label has ! 215: this effect. The usual definition of this macro is as follows: ! 216: ! 217: fprintf (STREAM, "L%s%d:\n", PREFIX, NUM) ! 218: ! 219: `ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)' ! 220: Define this if the label before a jump-table needs to be output ! 221: specially. The first three arguments are the same as for ! 222: `ASM_OUTPUT_INTERNAL_LABEL'; the fourth argument is the ! 223: jump-table which follows (a `jump_insn' containing an `addr_vec' ! 224: or `addr_diff_vec'). ! 225: ! 226: This feature is used on system V to output a `swbeg' statement ! 227: for the table. ! 228: ! 229: If this macro is not defined, these labels are output with ! 230: `ASM_OUTPUT_INTERNAL_LABEL'. ! 231: ! 232: `ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)' ! 233: Define this if something special must be output at the end of a ! 234: jump-table. The definition should be a C statement to be ! 235: executed after the assembler code for the table is written. It ! 236: should write the appropriate code to stdio stream STREAM. The ! 237: argument TABLE is the jump-table insn, and NUM is the ! 238: label-number of the preceding label. ! 239: ! 240: If this macro is not defined, nothing special is output at the ! 241: end of the jump-table. ! 242: ! 243: `ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)' ! 244: A C expression to assign to OUTVAR (which is a variable of type ! 245: `char *') a newly allocated string made from the string NAME and ! 246: the number NUMBER, with some suitable punctuation added. Use ! 247: `alloca' to get space for the string. ! 248: ! 249: This string will be used as the argument to ! 250: `ASM_OUTPUT_LABELREF' to produce an assembler label for an ! 251: internal static variable whose name is NAME. Therefore, the ! 252: string must be such as to result in valid assembler code. The ! 253: argument NUMBER is different each time this macro is executed; ! 254: it prevents conflicts between similarly-named internal static ! 255: variables in different scopes. ! 256: ! 257: Ideally this string should not be a valid C identifier, to ! 258: prevent any conflict with the user's own symbols. Most ! 259: assemblers allow periods or percent signs in assembler symbols; ! 260: putting at least one of these between the name and the number ! 261: will suffice. ! 262: ! 263: `ASM_OUTPUT_REG_PUSH (STREAM, REGNO)' ! 264: A C expression to output to STREAM some assembler code which ! 265: will push hard register number REGNO onto the stack. The code ! 266: need not be optimal, since this macro is used only when profiling. ! 267: ! 268: `ASM_OUTPUT_REG_POP (STREAM, REGNO)' ! 269: A C expression to output to STREAM some assembler code which ! 270: will pop hard register number REGNO off of the stack. The code ! 271: need not be optimal, since this macro is used only when profiling. ! 272: ! 273: `ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, VALUE, REL)' ! 274: This macro should be provided on machines where the addresses in ! 275: a dispatch table are relative to the table's own address. ! 276: ! 277: The definition should be a C statement to output to the stdio ! 278: stream STREAM an assembler pseudo-instruction to generate a ! 279: difference between two labels. VALUE and REL are the numbers of ! 280: two internal labels. The definitions of these labels are output ! 281: using `ASM_OUTPUT_INTERNAL_LABEL', and they must be printed in ! 282: the same way here. For example, ! 283: ! 284: fprintf (STREAM, "\t.word L%d-L%d\n", ! 285: VALUE, REL) ! 286: ! 287: `ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)' ! 288: This macro should be provided on machines where the addresses in ! 289: a dispatch table are absolute. ! 290: ! 291: The definition should be a C statement to output to the stdio ! 292: stream STREAM an assembler pseudo-instruction to generate a ! 293: reference to a label. VALUE is the number of an internal label ! 294: whose definition is output using `ASM_OUTPUT_INTERNAL_LABEL'. ! 295: For example, ! 296: ! 297: fprintf (STREAM, "\t.word L%d\n", VALUE) ! 298: ! 299: `ASM_OUTPUT_DOUBLE (STREAM, VALUE)' ! 300: A C statement to output to the stdio stream STREAM an assembler ! 301: instruction to assemble a `double' constant whose value is ! 302: VALUE. VALUE will be a C expression of type `double'. ! 303: ! 304: `ASM_OUTPUT_FLOAT (STREAM, VALUE)' ! 305: A C statement to output to the stdio stream STREAM an assembler ! 306: instruction to assemble a `float' constant whose value is VALUE. ! 307: vALUE will be a C expression of type `float'. ! 308: ! 309: `ASM_OUTPUT_INT (STREAM, EXP)' ! 310: `ASM_OUTPUT_SHORT (STREAM, EXP)' ! 311: `ASM_OUTPUT_CHAR (STREAM, EXP)' ! 312: A C statement to output to the stdio stream STREAM an assembler ! 313: instruction to assemble a `int', `short' or `char' constant ! 314: whose value is VALUE. The argument EXP will be an RTL ! 315: expression which represents a constant value. Use ! 316: `output_addr_const (EXP)' to output this value as an assembler ! 317: expression. ! 318: ! 319: `ASM_OUTPUT_BYTE (STREAM, VALUE)' ! 320: A C statement to output to the stdio stream STREAM an assembler ! 321: instruction to assemble a single byte containing the number VALUE. ! 322: ! 323: `ASM_OUTPUT_ASCII (STREAM, PTR, LEN)' ! 324: A C statement to output to the stdio stream STREAM an assembler ! 325: instruction to assemble a string constant containing the LEN ! 326: bytes at PTR. PTR will be a C expression of type `char *' and ! 327: LEN a C expression of type `int'. ! 328: ! 329: If the assembler has a `.ascii' pseudo-op as found in the ! 330: Berkeley Unix assembler, do not define the macro ! 331: `ASM_OUTPUT_ASCII'. ! 332: ! 333: `ASM_OUTPUT_SKIP (STREAM, NBYTES)' ! 334: A C statement to output to the stdio stream STREAM an assembler ! 335: instruction to advance the location counter by NBYTES bytes. ! 336: NBYTES will be a C expression of type `int'. ! 337: ! 338: `ASM_OUTPUT_ALIGN (STREAM, POWER)' ! 339: A C statement to output to the stdio stream STREAM an assembler ! 340: instruction to advance the location counter to a multiple of 2 ! 341: to the POWER bytes. POWER will be a C expression of type `int'. ! 342: ! 343: `ASM_OUTPUT_COMMON (STREAM, NAME, SIZE)' ! 344: A C statement (sans semicolon) to output to the stdio stream ! 345: STREAM the assembler definition of a common-label named NAME ! 346: whose size is SIZE bytes. Use the expression `assemble_name ! 347: (STREAM, NAME)' to output the name itself; before and after ! 348: that, output the additional assembler syntax for defining the ! 349: name, and a newline. ! 350: ! 351: This macro controls how the assembler definitions of ! 352: uninitialized global variables are output. ! 353: ! 354: `ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE)' ! 355: A C statement (sans semicolon) to output to the stdio stream ! 356: STREAM the assembler definition of a local-common-label named ! 357: NAME whose size is SIZE bytes. Use the expression ! 358: `assemble_name (STREAM, NAME)' to output the name itself; before ! 359: and after that, output the additional assembler syntax for ! 360: defining the name, and a newline. ! 361: ! 362: This macro controls how the assembler definitions of ! 363: uninitialized static variables are output. ! 364: ! 365: `ASM_OUTPUT_SOURCE_LINE (STREAM, LINE)' ! 366: A C statment to output DBX or SDB debugging information before ! 367: code for line number LINE of the current source file to the ! 368: stdio stream STREAM. ! 369: ! 370: This macro need not be defined if the standard form of debugging ! 371: information for the debugger in use is appropriate. ! 372: ! 373: `ASM_OUTPUT_IDENT (STREAM, STRING)' ! 374: A C statement to output something to the assembler file to ! 375: handle a `#ident' directive containing the text STRING. If this ! 376: macro is not defined, the assembler code `.ident "STRING"' will ! 377: be output by default. ! 378: ! 379: This macro is significant only if `IDENT_DIRECTIVE' is defined. ! 380: ! 381: `TARGET_BELL' ! 382: A C constant expression for the integer value for escape ! 383: sequence `\a'. ! 384: ! 385: `TARGET_BS' ! 386: `TARGET_TAB' ! 387: `TARGET_NEWLINE' ! 388: C constant expressions for the integer values for escape ! 389: sequences `\b', `\t' and `\n'. ! 390: ! 391: `TARGET_VT' ! 392: `TARGET_FF' ! 393: `TARGET_CR' ! 394: C constant expressions for the integer values for escape ! 395: sequences `\v', `\f' and `\r'. ! 396: ! 397: `ASM_OUTPUT_OPCODE (STREAM, PTR)' ! 398: Define this macro if you are using an unusual assembler that ! 399: requires different names for the machine instructions. ! 400: ! 401: The definition is a C statement or statements which output an ! 402: assembler instruction opcode to the stdio stream STREAM. The ! 403: macro-operand PTR is a variable of type `char *' which points to ! 404: the opcode name in its ``internal'' form--the form that is ! 405: written in the machine description. The definition should ! 406: output the opcode name to STREAM, performing any translation you ! 407: desire, and increment the variable PTR to point at the end of ! 408: the opcode so that it will not be output twice. ! 409: ! 410: In fact, your macro definition may process less than the entire ! 411: opcode name, or more than the opcode name; but if you want to ! 412: process text that includes `%'-sequences to substitute operands, ! 413: you must take care of the substitution yourself. Just be sure ! 414: to increment PTR over whatever text should not be output normally. ! 415: ! 416: If the macro definition does nothing, the instruction is output ! 417: in the usual way. ! 418: ! 419: `FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)' ! 420: If defined, a C statement to be executed just prior to the ! 421: output of assembler code for INSN, to modify the extracted ! 422: operands so they will be output differently. ! 423: ! 424: Here the argument OPVEC is the vector containing the operands ! 425: extracted from INSN, and NOPERANDS is the number of elements of ! 426: the vector which contain meaningful data for this insn. The ! 427: contents of this vector are what will be used to convert the ! 428: insn template into assembler code, so you can change the ! 429: assembler output by changing the contents of the vector. ! 430: ! 431: This macro is useful when various assembler syntaxes share a ! 432: single file of instruction patterns; by defining this macro ! 433: differently, you can cause a large class of instructions to be ! 434: output differently (such as with rearranged operands). ! 435: Naturally, variations in assembler syntax affecting individual ! 436: insn patterns ought to be handled by writing conditional output ! 437: routines in those patterns. ! 438: ! 439: If this macro is not defined, it is equivalent to a null ! 440: statement. ! 441: ! 442: `PRINT_OPERAND (STREAM, X, CODE)' ! 443: A C compound statement to output to stdio stream STREAM the ! 444: assembler syntax for an instruction operand X. X is an RTL ! 445: expression. ! 446: ! 447: CODE is a value that can be used to specify one of several ways ! 448: of printing the operand. It is used when identical operands ! 449: must be printed differently depending on the context. CODE ! 450: comes from the `%' specification that was used to request ! 451: printing of the operand. If the specification was just `%DIGIT' ! 452: then CODE is 0; if the specification was `%LTR DIGIT' then CODE ! 453: is the ASCII code for LTR. ! 454: ! 455: If X is a register, this macro should print the register's name. ! 456: The names can be found in an array `reg_names' whose type is ! 457: `char *[]'. `reg_names' is initialized from `REGISTER_NAMES'. ! 458: ! 459: When the machine description has a specification `%PUNCT' (a `%' ! 460: followed by a punctuation character), this macro is called with ! 461: a null pointer for X and the punctuation character for CODE. ! 462: ! 463: `PRINT_OPERAND_ADDRESS (STREAM, X)' ! 464: A C compound statement to output to stdio stream STREAM the ! 465: assembler syntax for an instruction operand that is a memory ! 466: reference whose address is X. X is an RTL expression. ! 467: ! 468: `ASM_OPEN_PAREN' ! 469: `ASM_CLOSE_PAREN' ! 470: These macros are defined as C string constant, describing the ! 471: syntax in the assembler for grouping arithmetic expressions. ! 472: The following definitions are correct for most assemblers: ! 473: ! 474: #define ASM_OPEN_PAREN "(" ! 475: #define ASM_CLOSE_PAREN ")" ! 476: ! 477: ! 478: ! 479: File: gcc.info, Node: Config, Prev: Machine Macros, Up: Top ! 480: ! 481: The Configuration File ! 482: ********************** ! 483: ! 484: The configuration file `xm-MACHINE.h' contains macro definitions that ! 485: describe the machine and system on which the compiler is running. ! 486: Most of the values in it are actually the same on all machines that ! 487: GNU CC runs on, so large parts of all configuration files are ! 488: identical. But there are some macros that vary: ! 489: ! 490: `FAILURE_EXIT_CODE' ! 491: A C expression for the status code to be returned when the ! 492: compiler exits after serious errors. ! 493: ! 494: `SUCCESS_EXIT_CODE' ! 495: A C expression for the status code to be returned when the ! 496: compiler exits without serious errors. ! 497: ! 498: In addition, configuration files for system V define `bcopy', `bzero' ! 499: and `bcmp' as aliases. Some files define `alloca' as a macro when ! 500: compiled with GNU CC, in order to take advantage of the benefit of ! 501: GNU CC's built-in `alloca'. ! 502:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.