|
|
1.1.1.2 ! root 1: This is Info file gcc.info, produced by Makeinfo-1.49 from the input 1.1 root 2: file gcc.texi. 3: 4: This file documents the use and the internals of the GNU compiler. 5: 6: Copyright (C) 1988, 1989, 1992 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 1.1.1.2 ! root 14: that the sections entitled "GNU General Public License" and "Protect ! 15: Your Freedom--Fight `Look And Feel'" are included exactly as in the ! 16: original, and provided that the entire resulting derived work is ! 17: distributed under the terms of a permission notice identical to this ! 18: one. 1.1 root 19: 20: Permission is granted to copy and distribute translations of this 21: manual into another language, under the above conditions for modified 22: versions, except that the sections entitled "GNU General Public 1.1.1.2 ! root 23: License" and "Protect Your Freedom--Fight `Look And Feel'", and this ! 24: permission notice, may be included in translations approved by the Free ! 25: Software Foundation instead of in the original English. 1.1 root 26: 27: 1.1.1.2 ! root 28: File: gcc.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format 1.1 root 29: 1.1.1.2 ! root 30: Output of Assembler Instructions ! 31: -------------------------------- ! 32: ! 33: `REGISTER_NAMES' ! 34: A C initializer containing the assembler's names for the machine ! 35: registers, each one as a C string constant. This is what ! 36: translates register numbers in the compiler into assembler ! 37: language. ! 38: ! 39: `ADDITIONAL_REGISTER_NAMES' ! 40: If defined, a C initializer for an array of structures containing ! 41: a name and a register number. This macro defines additional names ! 42: for hard registers, thus allowing the `asm' option in declarations ! 43: to refer to registers using alternate names. ! 44: ! 45: `ASM_OUTPUT_OPCODE (STREAM, PTR)' ! 46: Define this macro if you are using an unusual assembler that ! 47: requires different names for the machine instructions. ! 48: ! 49: The definition is a C statement or statements which output an ! 50: assembler instruction opcode to the stdio stream STREAM. The ! 51: macro-operand PTR is a variable of type `char *' which points to ! 52: the opcode name in its "internal" form--the form that is written ! 53: in the machine description. The definition should output the ! 54: opcode name to STREAM, performing any translation you desire, and ! 55: increment the variable PTR to point at the end of the opcode so ! 56: that it will not be output twice. ! 57: ! 58: In fact, your macro definition may process less than the entire ! 59: opcode name, or more than the opcode name; but if you want to ! 60: process text that includes `%'-sequences to substitute operands, ! 61: you must take care of the substitution yourself. Just be sure to ! 62: increment PTR over whatever text should not be output normally. ! 63: ! 64: If you need to look at the operand values, they can be found as the ! 65: elements of `recog_operand'. ! 66: ! 67: If the macro definition does nothing, the instruction is output in ! 68: the usual way. ! 69: ! 70: `FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)' ! 71: If defined, a C statement to be executed just prior to the output ! 72: of assembler code for INSN, to modify the extracted operands so ! 73: they will be output differently. ! 74: ! 75: Here the argument OPVEC is the vector containing the operands ! 76: extracted from INSN, and NOPERANDS is the number of elements of ! 77: the vector which contain meaningful data for this insn. The ! 78: contents of this vector are what will be used to convert the insn ! 79: template into assembler code, so you can change the assembler ! 80: output by changing the contents of the vector. ! 81: ! 82: This macro is useful when various assembler syntaxes share a single ! 83: file of instruction patterns; by defining this macro differently, ! 84: you can cause a large class of instructions to be output ! 85: differently (such as with rearranged operands). Naturally, ! 86: variations in assembler syntax affecting individual insn patterns ! 87: ought to be handled by writing conditional output routines in ! 88: those patterns. ! 89: ! 90: If this macro is not defined, it is equivalent to a null statement. ! 91: ! 92: `PRINT_OPERAND (STREAM, X, CODE)' ! 93: A C compound statement to output to stdio stream STREAM the ! 94: assembler syntax for an instruction operand X. X is an RTL ! 95: expression. ! 96: ! 97: CODE is a value that can be used to specify one of several ways of ! 98: printing the operand. It is used when identical operands must be ! 99: printed differently depending on the context. CODE comes from the ! 100: `%' specification that was used to request printing of the ! 101: operand. If the specification was just `%DIGIT' then CODE is 0; ! 102: if the specification was `%LTR DIGIT' then CODE is the ASCII code ! 103: for LTR. ! 104: ! 105: If X is a register, this macro should print the register's name. ! 106: The names can be found in an array `reg_names' whose type is `char ! 107: *[]'. `reg_names' is initialized from `REGISTER_NAMES'. ! 108: ! 109: When the machine description has a specification `%PUNCT' (a `%' ! 110: followed by a punctuation character), this macro is called with a ! 111: null pointer for X and the punctuation character for CODE. ! 112: ! 113: `PRINT_OPERAND_PUNCT_VALID_P (CODE)' ! 114: A C expression which evaluates to true if CODE is a valid ! 115: punctuation character for use in the `PRINT_OPERAND' macro. If ! 116: `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no ! 117: punctuation characters (except for the standard one, `%') are used ! 118: in this way. ! 119: ! 120: `PRINT_OPERAND_ADDRESS (STREAM, X)' ! 121: A C compound statement to output to stdio stream STREAM the ! 122: assembler syntax for an instruction operand that is a memory ! 123: reference whose address is X. X is an RTL expression. ! 124: ! 125: On some machines, the syntax for a symbolic address depends on the ! 126: section that the address refers to. On these machines, define the ! 127: macro `ENCODE_SECTION_INFO' to store the information into the ! 128: `symbol_ref', and then check for it here. *Note Assembler ! 129: Format::. ! 130: ! 131: `DBR_OUTPUT_SEQEND(FILE)' ! 132: A C statement, to be executed after all slot-filler instructions ! 133: have been output. If necessary, call `dbr_sequence_length' to ! 134: determine the number of slots filled in a sequence (zero if not ! 135: currently outputting a sequence), to decide how many no-ops to ! 136: output, or whatever. ! 137: ! 138: Don't define this macro if it has nothing to do, but it is helpful ! 139: in reading assembly output if the extent of the delay sequence is ! 140: made explicit (e.g. with white space). ! 141: ! 142: Note that output routines for instructions with delay slots must be ! 143: prepared to deal with not being output as part of a sequence (i.e. ! 144: when the scheduling pass is not run, or when no slot fillers could ! 145: be found.) The variable `final_sequence' is null when not ! 146: processing a sequence, otherwise it contains the `sequence' rtx ! 147: being output. ! 148: ! 149: `REGISTER_PREFIX' ! 150: `LOCAL_LABEL_PREFIX' ! 151: `USER_LABEL_PREFIX' ! 152: `IMMEDIATE_PREFIX' ! 153: If defined, C string expressions to be used for the `%R', `%L', ! 154: `%U', and `%I' options of `asm_fprintf' (see `final.c'). These ! 155: are useful when a single `md' file must support multiple assembler ! 156: formats. In that case, the various `tm.h' files can define these ! 157: macros differently. ! 158: ! 159: `ASM_OUTPUT_REG_PUSH (STREAM, REGNO)' ! 160: A C expression to output to STREAM some assembler code which will ! 161: push hard register number REGNO onto the stack. The code need not ! 162: be optimal, since this macro is used only when profiling. ! 163: ! 164: `ASM_OUTPUT_REG_POP (STREAM, REGNO)' ! 165: A C expression to output to STREAM some assembler code which will ! 166: pop hard register number REGNO off of the stack. The code need not ! 167: be optimal, since this macro is used only when profiling. ! 168: ! 169: ! 170: File: gcc.info, Node: Dispatch Tables, Next: Alignment Output, Prev: Instruction Output, Up: Assembler Format ! 171: ! 172: Output of Dispatch Tables ! 173: ------------------------- ! 174: ! 175: `ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, VALUE, REL)' ! 176: This macro should be provided on machines where the addresses in a ! 177: dispatch table are relative to the table's own address. ! 178: ! 179: The definition should be a C statement to output to the stdio ! 180: stream STREAM an assembler pseudo-instruction to generate a ! 181: difference between two labels. VALUE and REL are the numbers of ! 182: two internal labels. The definitions of these labels are output ! 183: using `ASM_OUTPUT_INTERNAL_LABEL', and they must be printed in the ! 184: same way here. For example, ! 185: ! 186: fprintf (STREAM, "\t.word L%d-L%d\n", ! 187: VALUE, REL) ! 188: ! 189: `ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)' ! 190: This macro should be provided on machines where the addresses in a ! 191: dispatch table are absolute. ! 192: ! 193: The definition should be a C statement to output to the stdio ! 194: stream STREAM an assembler pseudo-instruction to generate a ! 195: reference to a label. VALUE is the number of an internal label ! 196: whose definition is output using `ASM_OUTPUT_INTERNAL_LABEL'. For ! 197: example, ! 198: ! 199: fprintf (STREAM, "\t.word L%d\n", VALUE) ! 200: ! 201: `ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)' ! 202: Define this if the label before a jump-table needs to be output ! 203: specially. The first three arguments are the same as for ! 204: `ASM_OUTPUT_INTERNAL_LABEL'; the fourth argument is the jump-table ! 205: which follows (a `jump_insn' containing an `addr_vec' or ! 206: `addr_diff_vec'). ! 207: ! 208: This feature is used on system V to output a `swbeg' statement for ! 209: the table. ! 210: ! 211: If this macro is not defined, these labels are output with ! 212: `ASM_OUTPUT_INTERNAL_LABEL'. ! 213: ! 214: `ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)' ! 215: Define this if something special must be output at the end of a ! 216: jump-table. The definition should be a C statement to be executed ! 217: after the assembler code for the table is written. It should write ! 218: the appropriate code to stdio stream STREAM. The argument TABLE ! 219: is the jump-table insn, and NUM is the label-number of the ! 220: preceding label. ! 221: ! 222: If this macro is not defined, nothing special is output at the end ! 223: of the jump-table. ! 224: ! 225: ! 226: File: gcc.info, Node: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format ! 227: ! 228: Assembler Commands for Alignment ! 229: -------------------------------- ! 230: ! 231: `ASM_OUTPUT_ALIGN_CODE (FILE)' ! 232: A C expression to output text to align the location counter in the ! 233: way that is desirable at a point in the code that is reached only ! 234: by jumping. ! 235: ! 236: This macro need not be defined if you don't want any special ! 237: alignment to be done at such a time. Most machine descriptions do ! 238: not currently define the macro. ! 239: ! 240: `ASM_OUTPUT_LOOP_ALIGN (FILE)' ! 241: A C expression to output text to align the location counter in the ! 242: way that is desirable at the beginning of a loop. ! 243: ! 244: This macro need not be defined if you don't want any special ! 245: alignment to be done at such a time. Most machine descriptions do ! 246: not currently define the macro. ! 247: ! 248: `ASM_OUTPUT_SKIP (STREAM, NBYTES)' ! 249: A C statement to output to the stdio stream STREAM an assembler ! 250: instruction to advance the location counter by NBYTES bytes. Those ! 251: bytes should be zero when loaded. NBYTES will be a C expression ! 252: of type `int'. ! 253: ! 254: `ASM_NO_SKIP_IN_TEXT' ! 255: Define this macro if `ASM_OUTPUT_SKIP' should not be used in the ! 256: text section because it fails put zeros in the bytes that are ! 257: skipped. This is true on many Unix systems, where the pseudo--op ! 258: to skip bytes produces no-op instructions rather than zeros when ! 259: used in the text section. ! 260: ! 261: `ASM_OUTPUT_ALIGN (STREAM, POWER)' ! 262: A C statement to output to the stdio stream STREAM an assembler ! 263: command to advance the location counter to a multiple of 2 to the ! 264: POWER bytes. POWER will be a C expression of type `int'. ! 265: ! 266: ! 267: File: gcc.info, Node: Debugging Info, Next: Cross-compilation, Prev: Assembler Format, Up: Target Macros ! 268: ! 269: Controlling Debugging Information Format ! 270: ======================================== 1.1 root 271: 272: * Menu: 273: 1.1.1.2 ! root 274: * All Debuggers:: Macros that affect all debugging formats uniformly. ! 275: * DBX Options:: Macros enabling specific options in DBX format. ! 276: * DBX Hooks:: Hook macros for varying DBX format. ! 277: * File Names and DBX:: Macros controlling output of file names in DBX format. ! 278: * SDB and DWARF:: Macros for SDB (COFF) and DWARF formats. ! 279: ! 280: ! 281: File: gcc.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info ! 282: ! 283: Macros Affecting All Debugging Formats ! 284: -------------------------------------- ! 285: ! 286: `DBX_REGISTER_NUMBER (REGNO)' ! 287: A C expression that returns the DBX register number for the ! 288: compiler register number REGNO. In simple cases, the value of this ! 289: expression may be REGNO itself. But sometimes there are some ! 290: registers that the compiler knows about and DBX does not, or vice ! 291: versa. In such cases, some register may need to have one number in ! 292: the compiler and another for DBX. ! 293: ! 294: If two registers have consecutive numbers inside GNU CC, and they ! 295: can be used as a pair to hold a multiword value, then they *must* ! 296: have consecutive numbers after renumbering with ! 297: `DBX_REGISTER_NUMBER'. Otherwise, debuggers will be unable to ! 298: access such a pair, because they expect register pairs to be ! 299: consecutive in their own numbering scheme. ! 300: ! 301: If you find yourself defining `DBX_REGISTER_NUMBER' in way that ! 302: does not preserve register pairs, then what you must do instead is ! 303: redefine the actual register numbering scheme. ! 304: ! 305: `DEBUGGER_AUTO_OFFSET (X)' ! 306: A C expression that returns the integer offset value for an ! 307: automatic variable having address X (an RTL expression). The ! 308: default computation assumes that X is based on the frame-pointer ! 309: and gives the offset from the frame-pointer. This is required for ! 310: targets that produce debugging output for DBX or COFF-style ! 311: debugging output for SDB and allow the frame-pointer to be ! 312: eliminated when the `-g' options is used. ! 313: ! 314: `DEBUGGER_ARG_OFFSET (OFFSET, X)' ! 315: A C expression that returns the integer offset value for an ! 316: argument having address X (an RTL expression). The nominal offset ! 317: is OFFSET. ! 318: ! 319: ! 320: File: gcc.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info ! 321: ! 322: Specific Options for DBX Output ! 323: ------------------------------- ! 324: ! 325: `DBX_DEBUGGING_INFO' ! 326: Define this macro if GNU CC should produce debugging output for DBX ! 327: in response to the `-g' option. ! 328: ! 329: `XCOFF_DEBUGGING_INFO' ! 330: Define this macro if GNU CC should produce XCOFF format debugging ! 331: output in response to the `-g' option. This is a variant of DBX ! 332: format. ! 333: ! 334: `DEFAULT_GDB_EXTENSIONS' ! 335: Define this macro to control whether GNU CC should by default ! 336: generate GDB's extended version of DBX debugging information ! 337: (assuming DBX-format debugging information is enabled at all). If ! 338: you don't define the macro, the default is 1: always generate the ! 339: extended information if there is any occasion to. ! 340: ! 341: `DEBUG_SYMS_TEXT' ! 342: Define this macro if all `.stabs' commands should be output while ! 343: in the text section. ! 344: ! 345: `ASM_STABS_OP' ! 346: A C string constant naming the assembler pseudo op to use instead ! 347: of `.stabs' to define an ordinary debugging symbol. If you don't ! 348: define this macro, `.stabs' is used. This macro applies only to ! 349: DBX debugging information format. ! 350: ! 351: `ASM_STABD_OP' ! 352: A C string constant naming the assembler pseudo op to use instead ! 353: of `.stabd' to define a debugging symbol whose value is the current ! 354: location. If you don't define this macro, `.stabd' is used. This ! 355: macro applies only to DBX debugging information format. ! 356: ! 357: `ASM_STABN_OP' ! 358: A C string constant naming the assembler pseudo op to use instead ! 359: of `.stabn' to define a debugging symbol with no name. If you ! 360: don't define this macro, `.stabn' is used. This macro applies ! 361: only to DBX debugging information format. ! 362: ! 363: `DBX_NO_XREFS' ! 364: Define this macro if DBX on your system does not support the ! 365: construct `xsTAGNAME'. On some systems, this construct is used to ! 366: describe a forward reference to a structure named TAGNAME. On ! 367: other systems, this construct is not supported at all. ! 368: ! 369: `DBX_CONTIN_LENGTH' ! 370: A symbol name in DBX-format debugging information is normally ! 371: continued (split into two separate `.stabs' directives) when it ! 372: exceeds a certain length (by default, 80 characters). On some ! 373: operating systems, DBX requires this splitting; on others, ! 374: splitting must not be done. You can inhibit splitting by defining ! 375: this macro with the value zero. You can override the default ! 376: splitting-length by defining this macro as an expression for the ! 377: length you desire. ! 378: ! 379: `DBX_CONTIN_CHAR' ! 380: Normally continuation is indicated by adding a `\' character to ! 381: the end of a `.stabs' string when a continuation follows. To use ! 382: a different character instead, define this macro as a character ! 383: constant for the character you want to use. Do not define this ! 384: macro if backslash is correct for your system. ! 385: ! 386: `DBX_STATIC_STAB_DATA_SECTION' ! 387: Define this macro if it is necessary to go to the data section ! 388: before outputting the `.stabs' pseudo-op for a non-global static ! 389: variable. ! 390: ! 391: `DBX_TYPE_DECL_STABS_CODE' ! 392: The value to use in the "code" field of the `.stabs' directive for ! 393: a typedef. The default is `N_LSYM'. ! 394: ! 395: `DBX_STATIC_CONST_VAR_CODE' ! 396: The value to use in the "code" field of the `.stabs' directive for ! 397: a static variable located in the text section. DBX format does not ! 398: provide any "right" way to do this. The default is `N_FUN'. ! 399: ! 400: `DBX_REGPARM_STABS_CODE' ! 401: The value to use in the "code" field of the `.stabs' directive for ! 402: a parameter passed in registers. DBX format does not provide any ! 403: "right" way to do this. The default is `N_RSYM'. ! 404: ! 405: `DBX_REGPARM_STABS_LETTER' ! 406: The letter to use in DBX symbol data to identify a symbol as a ! 407: parameter passed in registers. DBX format does not customarily ! 408: provide any way to do this. The default is `'P''. ! 409: ! 410: `DBX_MEMPARM_STABS_LETTER' ! 411: The letter to use in DBX symbol data to identify a symbol as a ! 412: stack parameter. The default is `'p''. ! 413: ! 414: `DBX_FUNCTION_FIRST' ! 415: Define this macro if the DBX information for a function and its ! 416: arguments should precede the assembler code for the function. ! 417: Normally, in DBX format, the debugging information entirely ! 418: follows the assembler code. ! 419: ! 420: `DBX_LBRAC_FIRST' ! 421: Define this macro if the `N_LBRAC' symbol for a block should ! 422: precede the debugging information for variables and functions ! 423: defined in that block. Normally, in DBX format, the `N_LBRAC' ! 424: symbol comes first. ! 425: ! 426: ! 427: File: gcc.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info ! 428: ! 429: Open-Ended Hooks for DBX Format ! 430: ------------------------------- ! 431: ! 432: `DBX_OUTPUT_LBRAC (STREAM, NAME)' ! 433: Define this macro to say how to output to STREAM the debugging ! 434: information for the start of a scope level for variable names. The ! 435: argument NAME is the name of an assembler symbol (for use with ! 436: `assemble_name') whose value is the address where the scope begins. ! 437: ! 438: `DBX_OUTPUT_RBRAC (STREAM, NAME)' ! 439: Like `DBX_OUTPUT_LBRAC', but for the end of a scope level. ! 440: ! 441: `DBX_OUTPUT_ENUM (STREAM, TYPE)' ! 442: Define this macro if the target machine requires special handling ! 443: to output an enumeration type. The definition should be a C ! 444: statement (sans semicolon) to output the appropriate information ! 445: to STREAM for the type TYPE. ! 446: ! 447: `DBX_OUTPUT_FUNCTION_END (STREAM, FUNCTION)' ! 448: Define this macro if the target machine requires special output at ! 449: the end of the debugging information for a function. The ! 450: definition should be a C statement (sans semicolon) to output the ! 451: appropriate information to STREAM. FUNCTION is the ! 452: `FUNCTION_DECL' node for the function. ! 453: ! 454: `DBX_OUTPUT_STANDARD_TYPES (SYMS)' ! 455: Define this macro if you need to control the order of output of the ! 456: standard data types at the beginning of compilation. The argument ! 457: SYMS is a `tree' which is a chain of all the predefined global ! 458: symbols, including names of data types. ! 459: ! 460: Normally, DBX output starts with definitions of the types for ! 461: integers and characters, followed by all the other predefined ! 462: types of the particular language in no particular order. ! 463: ! 464: On some machines, it is necessary to output different particular ! 465: types first. To do this, define `DBX_OUTPUT_STANDARD_TYPES' to ! 466: output those symbols in the necessary order. Any predefined types ! 467: that you don't explicitly output will be output afterward in no ! 468: particular order. ! 469: ! 470: Be careful not to define this macro so that it works only for C. ! 471: There are no global variables to access most of the built-in ! 472: types, because another language may have another set of types. ! 473: The way to output a particular type is to look through SYMS to see ! 474: if you can find it. Here is an example: ! 475: ! 476: { ! 477: tree decl; ! 478: for (decl = syms; decl; decl = TREE_CHAIN (decl)) ! 479: if (!strcmp (IDENTIFIER_POINTER (DECL_NAME (decl)), "long int")) ! 480: dbxout_symbol (decl); ! 481: ... ! 482: } ! 483: ! 484: This does nothing if the expected type does not exist. ! 485: ! 486: See the function `init_decl_processing' in source file `c-decl.c' ! 487: to find the names to use for all the built-in C types. ! 488: ! 489: Here is another way of finding a particular type: ! 490: ! 491: { ! 492: tree decl; ! 493: for (decl = syms; decl; decl = TREE_CHAIN (decl)) ! 494: if (TREE_CODE (decl) == TYPE_DECL ! 495: && TREE_CODE (TREE_TYPE (decl)) == INTEGER_CST ! 496: && TYPE_PRECISION (TREE_TYPE (decl)) == 16 ! 497: && TYPE_UNSIGNED (TREE_TYPE (decl))) ! 498: /* This must be `unsigned short'. */ ! 499: dbxout_symbol (decl); ! 500: ... ! 501: } ! 502: ! 503: ! 504: File: gcc.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info ! 505: ! 506: File Names in DBX Format ! 507: ------------------------ ! 508: ! 509: `DBX_WORKING_DIRECTORY' ! 510: Define this if DBX wants to have the current directory recorded in ! 511: each object file. ! 512: ! 513: Note that the working directory is always recorded if GDB ! 514: extensions are enabled. ! 515: ! 516: `DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)' ! 517: A C statement to output DBX debugging information to the stdio ! 518: stream STREAM which indicates that file NAME is the main source ! 519: file--the file specified as the input file for compilation. This ! 520: macro is called only once, at the beginning of compilation. ! 521: ! 522: This macro need not be defined if the standard form of output for ! 523: DBX debugging information is appropriate. ! 524: ! 525: `DBX_OUTPUT_MAIN_SOURCE_DIRECTORY (STREAM, NAME)' ! 526: A C statement to output DBX debugging information to the stdio ! 527: stream STREAM which indicates that the current directory during ! 528: compilation is named NAME. ! 529: ! 530: This macro need not be defined if the standard form of output for ! 531: DBX debugging information is appropriate. ! 532: ! 533: `DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)' ! 534: A C statement to output DBX debugging information at the end of ! 535: compilation of the main source file NAME. ! 536: ! 537: If you don't define this macro, nothing special is output at the ! 538: end of compilation, which is correct for most machines. ! 539: ! 540: `DBX_OUTPUT_SOURCE_FILENAME (STREAM, NAME)' ! 541: A C statement to output DBX debugging information to the stdio ! 542: stream STREAM which indicates that file NAME is the current source ! 543: file. This output is generated each time input shifts to a ! 544: different source file as a result of `#include', the end of an ! 545: included file, or a `#line' command. ! 546: ! 547: This macro need not be defined if the standard form of output for ! 548: DBX debugging information is appropriate. ! 549: ! 550: ! 551: File: gcc.info, Node: SDB and DWARF, Prev: File Names and DBX, Up: Debugging Info ! 552: ! 553: Macros for SDB and DWARF Output ! 554: ------------------------------- ! 555: ! 556: `SDB_DEBUGGING_INFO' ! 557: Define this macro if GNU CC should produce COFF-style debugging ! 558: output for SDB in response to the `-g' option. ! 559: ! 560: `DWARF_DEBUGGING_INFO' ! 561: Define this macro if GNU CC should produce dwarf format debugging ! 562: output in response to the `-g' option. ! 563: ! 564: `PUT_SDB_...' ! 565: Define these macros to override the assembler syntax for the ! 566: special SDB assembler directives. See `sdbout.c' for a list of ! 567: these macros and their arguments. If the standard syntax is used, ! 568: you need not define them yourself. ! 569: ! 570: `SDB_DELIM' ! 571: Some assemblers do not support a semicolon as a delimiter, even ! 572: between SDB assembler directives. In that case, define this macro ! 573: to be the delimiter to use (usually `\n'). It is not necessary to ! 574: define a new set of `PUT_SDB_OP' macros if this is the only change ! 575: required. ! 576: ! 577: `SDB_GENERATE_FAKE' ! 578: Define this macro to override the usual method of constructing a ! 579: dummy name for anonymous structure and union types. See ! 580: `sdbout.c' for more information. ! 581: ! 582: `SDB_ALLOW_UNKNOWN_REFERENCES' ! 583: Define this macro to allow references to unknown structure, union, ! 584: or enumeration tags to be emitted. Standard COFF does not allow ! 585: handling of unknown references, MIPS ECOFF has support for it. ! 586: ! 587: `SDB_ALLOW_FORWARD_REFERENCES' ! 588: Define this macro to allow references to structure, union, or ! 589: enumeration tags that have not yet been seen to be handled. Some ! 590: assemblers choke if forward tags are used, while some require it. ! 591: ! 592: ! 593: File: gcc.info, Node: Cross-compilation, Next: Misc, Prev: Debugging Info, Up: Target Macros ! 594: ! 595: Cross Compilation and Floating Point Format ! 596: =========================================== ! 597: ! 598: While all modern machines use 2's complement representation for ! 599: integers, there are a variety of representations for floating point ! 600: numbers. This means that in a cross-compiler the representation of ! 601: floating point numbers in the compiled program may be different from ! 602: that used in the machine doing the compilation. ! 603: ! 604: Because different representation systems may offer different amounts ! 605: of range and precision, the cross compiler cannot safely use the host ! 606: machine's floating point arithmetic. Therefore, floating point ! 607: constants must be represented in the target machine's format. This ! 608: means that the cross compiler cannot use `atof' to parse a floating ! 609: point constant; it must have its own special routine to use instead. ! 610: Also, constant folding must emulate the target machine's arithmetic (or ! 611: must not be done at all). ! 612: ! 613: The macros in the following table should be defined only if you are ! 614: cross compiling between different floating point formats. ! 615: ! 616: Otherwise, don't define them. Then default definitions will be set ! 617: up which use `double' as the data type, `==' to test for equality, etc. ! 618: ! 619: You don't need to worry about how many times you use an operand of ! 620: any of these macros. The compiler never uses operands which have side ! 621: effects. ! 622: ! 623: `REAL_VALUE_TYPE' ! 624: A macro for the C data type to be used to hold a floating point ! 625: value in the target machine's format. Typically this would be a ! 626: `struct' containing an array of `int'. ! 627: ! 628: `REAL_VALUES_EQUAL (X, Y)' ! 629: A macro for a C expression which compares for equality the two ! 630: values, X and Y, both of type `REAL_VALUE_TYPE'. ! 631: ! 632: `REAL_VALUES_LESS (X, Y)' ! 633: A macro for a C expression which tests whether X is less than Y, ! 634: both values being of type `REAL_VALUE_TYPE' and interpreted as ! 635: floating point numbers in the target machine's representation. ! 636: ! 637: `REAL_VALUE_LDEXP (X, SCALE)' ! 638: A macro for a C expression which performs the standard library ! 639: function `ldexp', but using the target machine's floating point ! 640: representation. Both X and the value of the expression have type ! 641: `REAL_VALUE_TYPE'. The second argument, SCALE, is an integer. ! 642: ! 643: `REAL_VALUE_FIX (X)' ! 644: A macro whose definition is a C expression to convert the ! 645: target-machine floating point value X to a signed integer. X has ! 646: type `REAL_VALUE_TYPE'. ! 647: ! 648: `REAL_VALUE_UNSIGNED_FIX (X)' ! 649: A macro whose definition is a C expression to convert the ! 650: target-machine floating point value X to an unsigned integer. X ! 651: has type `REAL_VALUE_TYPE'. ! 652: ! 653: `REAL_VALUE_FIX_TRUNCATE (X)' ! 654: A macro whose definition is a C expression to convert the ! 655: target-machine floating point value X to a signed integer, ! 656: rounding toward 0. X has type `REAL_VALUE_TYPE'. ! 657: ! 658: `REAL_VALUE_UNSIGNED_FIX_TRUNCATE (X)' ! 659: A macro whose definition is a C expression to convert the ! 660: target-machine floating point value X to an unsigned integer, ! 661: rounding toward 0. X has type `REAL_VALUE_TYPE'. ! 662: ! 663: `REAL_VALUE_ATOF (STRING)' ! 664: A macro for a C expression which converts STRING, an expression of ! 665: type `char *', into a floating point number in the target ! 666: machine's representation. The value has type `REAL_VALUE_TYPE'. ! 667: ! 668: `REAL_INFINITY' ! 669: Define this macro if infinity is a possible floating point value, ! 670: and therefore division by 0 is legitimate. ! 671: ! 672: `REAL_VALUE_ISINF (X)' ! 673: A macro for a C expression which determines whether X, a floating ! 674: point value, is infinity. The value has type `int'. By default, ! 675: this is defined to call `isinf'. ! 676: ! 677: `REAL_VALUE_ISNAN (X)' ! 678: A macro for a C expression which determines whether X, a floating ! 679: point value, is a "nan" (not-a-number). The value has type `int'. ! 680: By default, this is defined to call `isnan'. ! 681: ! 682: Define the following additional macros if you want to make floating ! 683: point constant folding work while cross compiling. If you don't define ! 684: them, cross compilation is still possible, but constant folding will ! 685: not happen for floating point values. ! 686: ! 687: `REAL_ARITHMETIC (OUTPUT, CODE, X, Y)' ! 688: A macro for a C statement which calculates an arithmetic operation ! 689: of the two floating point values X and Y, both of type ! 690: `REAL_VALUE_TYPE' in the target machine's representation, to ! 691: produce a result of the same type and representation which is ! 692: stored in OUTPUT (which will be a variable). ! 693: ! 694: The operation to be performed is specified by CODE, a tree code ! 695: which will always be one of the following: `PLUS_EXPR', ! 696: `MINUS_EXPR', `MULT_EXPR', `RDIV_EXPR', `MAX_EXPR', `MIN_EXPR'. ! 697: ! 698: The expansion of this macro is responsible for checking for ! 699: overflow. If overflow happens, the macro expansion should execute ! 700: the statement `return 0;', which indicates the inability to ! 701: perform the arithmetic operation requested. ! 702: ! 703: `REAL_VALUE_NEGATE (X)' ! 704: A macro for a C expression which returns the negative of the ! 705: floating point value X. Both X and the value of the expression ! 706: have type `REAL_VALUE_TYPE' and are in the target machine's ! 707: floating point representation. ! 708: ! 709: There is no way for this macro to report overflow, since overflow ! 710: can't happen in the negation operation. ! 711: ! 712: `REAL_VALUE_TRUNCATE (MODE, X)' ! 713: A macro for a C expression which converts the floating point value ! 714: X to mode MODE. ! 715: ! 716: Both X and the value of the expression have type `REAL_VALUE_TYPE' ! 717: and are in the target machine's floating point representation. ! 718: However, the value should have an appropriate bit pattern to be ! 719: output properly as a floating constant whose precision accords ! 720: with mode MODE. ! 721: ! 722: There is no way for this macro to report overflow. ! 723: ! 724: `REAL_VALUE_TO_INT (LOW, HIGH, X)' ! 725: A macro for a C expression which converts a floating point value X ! 726: into a double-precision integer which is then stored into LOW and ! 727: HIGH, two variables of type INT. ! 728: ! 729: `REAL_VALUE_FROM_INT (X, LOW, HIGH)' ! 730: A macro for a C expression which converts a double-precision ! 731: integer found in LOW and HIGH, two variables of type INT, into a ! 732: floating point value which is then stored into X. ! 733: ! 734: ! 735: File: gcc.info, Node: Misc, Prev: Cross-compilation, Up: Target Macros ! 736: ! 737: Miscellaneous Parameters ! 738: ======================== ! 739: ! 740: `PREDICATE_CODES' ! 741: Optionally define this if you have added predicates to ! 742: `MACHINE.c'. This macro is called within an initializer of an ! 743: array of structures. The first field in the structure is the name ! 744: of a predicate and the second field is an array of rtl codes. For ! 745: each predicate, list all rtl codes that can be in expressions ! 746: matched by the predicate. The list should have a trailing comma. ! 747: Here is an example of two entries in the list for a typical RISC ! 748: machine: ! 749: ! 750: #define PREDICATE_CODES \ ! 751: {"gen_reg_rtx_operand", {SUBREG, REG}}, \ ! 752: {"reg_or_short_cint_operand", {SUBREG, REG, CONST_INT}}, ! 753: ! 754: Defining this macro does not affect the generated code (however, ! 755: incorrect definitions that omit an rtl code that may be matched by ! 756: the predicate can cause the compiler to malfunction). Instead, it ! 757: allows the table built by `genrecog' to be more compact and ! 758: efficient, thus speeding up the compiler. The most important ! 759: predicates to include in the list specified by this macro are ! 760: thoses used in the most insn patterns. ! 761: ! 762: `CASE_VECTOR_MODE' ! 763: An alias for a machine mode name. This is the machine mode that ! 764: elements of a jump-table should have. ! 765: ! 766: `CASE_VECTOR_PC_RELATIVE' ! 767: Define this macro if jump-tables should contain relative addresses. ! 768: ! 769: `CASE_DROPS_THROUGH' ! 770: Define this if control falls through a `case' insn when the index ! 771: value is out of range. This means the specified default-label is ! 772: actually ignored by the `case' insn proper. ! 773: ! 774: `CASE_VALUES_THRESHOLD' ! 775: Define this to be the smallest number of different values for ! 776: which it is best to use a jump-table instead of a tree of ! 777: conditional branches. The default is four for machines with a ! 778: `casesi' instruction and five otherwise. This is best for most ! 779: machines. ! 780: ! 781: `BYTE_LOADS_ZERO_EXTEND' ! 782: Define this macro if an instruction to load a value narrower than a ! 783: word from memory into a register also zero-extends the value to ! 784: the whole register. ! 785: ! 786: `BYTE_LOADS_SIGN_EXTEND' ! 787: Define this macro if an instruction to load a value narrower than a ! 788: word from memory into a register also sign-extends the value to ! 789: the whole register. ! 790: ! 791: `IMPLICIT_FIX_EXPR' ! 792: An alias for a tree code that should be used by default for ! 793: conversion of floating point values to fixed point. Normally, ! 794: `FIX_ROUND_EXPR' is used. ! 795: ! 796: `FIXUNS_TRUNC_LIKE_FIX_TRUNC' ! 797: Define this macro if the same instructions that convert a floating ! 798: point number to a signed fixed point number also convert validly ! 799: to an unsigned one. ! 800: ! 801: `EASY_DIV_EXPR' ! 802: An alias for a tree code that is the easiest kind of division to ! 803: compile code for in the general case. It may be `TRUNC_DIV_EXPR', ! 804: `FLOOR_DIV_EXPR', `CEIL_DIV_EXPR' or `ROUND_DIV_EXPR'. These four ! 805: division operators differ in how they round the result to an ! 806: integer. `EASY_DIV_EXPR' is used when it is permissible to use ! 807: any of those kinds of division and the choice should be made on ! 808: the basis of efficiency. ! 809: ! 810: `MOVE_MAX' ! 811: The maximum number of bytes that a single instruction can move ! 812: quickly from memory to memory. ! 813: ! 814: `SHIFT_COUNT_TRUNCATED' ! 815: Defining this macro causes the compiler to omit a sign-extend, ! 816: zero-extend, or bitwise `and' instruction that truncates the count ! 817: of a shift operation to a width equal to the number of bits needed ! 818: to represent the size of the object being shifted. On machines ! 819: that have instructions that act on bitfields at variable ! 820: positions, which may include `bit test' instructions, defining ! 821: `SHIFT_COUNT_TRUNCATED' also enables deletion of truncations of ! 822: the values that serve as arguments to bitfield instructions. ! 823: ! 824: If both types of instructions truncate the count (for shifts) and ! 825: position (for bitfield operations), or if no variable-position ! 826: bitfield instructions exist, you should define this macro. ! 827: ! 828: However, on some machines, such as the 80386 and the 680x0, ! 829: truncation only applies to shift operations and not the (real or ! 830: pretended) bitfield operations. Do not define ! 831: `SHIFT_COUNT_TRUNCATED' on such machines. Instead, add patterns ! 832: to the `md' file that include the implied truncation of the shift ! 833: instructions. ! 834: ! 835: `TRULY_NOOP_TRUNCATION (OUTPREC, INPREC)' ! 836: A C expression which is nonzero if on this machine it is safe to ! 837: "convert" an integer of INPREC bits to one of OUTPREC bits (where ! 838: OUTPREC is smaller than INPREC) by merely operating on it as if it ! 839: had only OUTPREC bits. ! 840: ! 841: On many machines, this expression can be 1. ! 842: ! 843: It is reported that suboptimal code can result when ! 844: `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for modes for ! 845: which `MODES_TIEABLE_P' is 0. If this is the case, making ! 846: `TRULY_NOOP_TRUNCATION' return 0 in such cases may improve things. ! 847: ! 848: `STORE_FLAG_VALUE' ! 849: A C expression describing the value returned by a comparison ! 850: operator with an integral mode and stored by a store-flag ! 851: instruction (`sCOND') when the condition is true. This ! 852: description must apply to *all* the `sCOND' patterns and all the ! 853: comparison operators whose results have a `MODE_INT' mode. ! 854: ! 855: A value of 1 or -1 means that the instruction implementing the ! 856: comparison operator returns exactly 1 or -1 when the comparison is ! 857: true and 0 when the comparison is false. Otherwise, the value ! 858: indicates which bits of the result are guaranteed to be 1 when the ! 859: comparison is true. This value is interpreted in the mode of the ! 860: comparison operation, which is given by the mode of the first ! 861: operand in the `sCOND' pattern. Either the low bit or the sign ! 862: bit of `STORE_FLAG_VALUE' be on. Presently, only those bits are ! 863: used by the compiler. ! 864: ! 865: If `STORE_FLAG_VALUE' is neither 1 or -1, the compiler will ! 866: generate code that depends only on the specified bits. It can also ! 867: replace comparison operators with equivalent operations if they ! 868: cause the required bits to be set, even if the remaining bits are ! 869: undefined. For example, on a machine whose comparison operators ! 870: return an `SImode' value and where `STORE_FLAG_VALUE' is defined as ! 871: `0x80000000', saying that just the sign bit is relevant, the ! 872: expression ! 873: ! 874: (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0)) ! 875: ! 876: can be converted to ! 877: ! 878: (ashift:SI X (const_int N)) ! 879: ! 880: where N is the appropriate shift count to move the bit being ! 881: tested into the sign bit. ! 882: ! 883: There is no way to describe a machine that always sets the ! 884: low-order bit for a true value, but does not guarantee the value ! 885: of any other bits, but we do not know of any machine that has such ! 886: an instruction. If you are trying to port GNU CC to such a ! 887: machine, include an instruction to perform a logical-and of the ! 888: result with 1 in the pattern for the comparison operators and let ! 889: us know (*note Bug Reporting::.). ! 890: ! 891: Often, a machine will have multiple instructions that obtain a ! 892: value from a comparison (or the condition codes). Here are rules ! 893: to guide the choice of value for `STORE_FLAG_VALUE', and hence the ! 894: instructions to be used: ! 895: ! 896: * Use the shortest sequence that yields a valid definition for ! 897: `STORE_FLAG_VALUE'. It is more efficient for the compiler to ! 898: "normalize" the value (convert it to, e.g., 1 or 0) than for ! 899: the comparison operators to do so because there may be ! 900: opportunities to combine the normalization with other ! 901: operations. ! 902: ! 903: * For equal-length sequences, use a value of 1 or -1, with -1 ! 904: being slightly preferred on machines with expensive jumps and ! 905: 1 preferred on other machines. ! 906: ! 907: * As a second choice, choose a value of `0x80000001' if ! 908: instructions exist that set both the sign and low-order bits ! 909: but do not define the others. ! 910: ! 911: * Otherwise, use a value of `0x80000000'. ! 912: ! 913: You need not define `STORE_FLAG_VALUE' if the machine has no ! 914: store-flag instructions. ! 915: ! 916: `FLOAT_STORE_FLAG_VALUE' ! 917: A C expression that gives a non-zero floating point value that is ! 918: returned when comparison operators with floating-point results are ! 919: true. Define this macro on machine that have comparison operations ! 920: that return floating-point values. If there are no such ! 921: operations, do not define this macro. ! 922: ! 923: `Pmode' ! 924: An alias for the machine mode for pointers. Normally the ! 925: definition can be ! 926: ! 927: #define Pmode SImode ! 928: ! 929: `FUNCTION_MODE' ! 930: An alias for the machine mode used for memory references to ! 931: functions being called, in `call' RTL expressions. On most ! 932: machines this should be `QImode'. ! 933: ! 934: `INTEGRATE_THRESHOLD (DECL)' ! 935: A C expression for the maximum number of instructions above which ! 936: the function DECL should not be inlined. DECL is a ! 937: `FUNCTION_DECL' node. ! 938: ! 939: The default definition of this macro is 64 plus 8 times the number ! 940: of arguments that the function accepts. Some people think a larger ! 941: threshold should be used on RISC machines. ! 942: ! 943: `SCCS_DIRECTIVE' ! 944: Define this if the preprocessor should ignore `#sccs' directives ! 945: and print no error message. ! 946: ! 947: `HANDLE_PRAGMA (STREAM)' ! 948: Define this macro if you want to implement any pragmas. If ! 949: defined, it should be a C statement to be executed when `#pragma' ! 950: is seen. The argument STREAM is the stdio input stream from which ! 951: the source text can be read. ! 952: ! 953: It is generally a bad idea to implement new uses of `#pragma'. The ! 954: only reason to define this macro is for compatibility with other ! 955: compilers that do support `#pragma' for the sake of any user ! 956: programs which already use it. ! 957: ! 958: `DOLLARS_IN_IDENTIFIERS' ! 959: Define this macro to control use of the character `$' in identifier ! 960: names. The value should be 0, 1, or 2. 0 means `$' is not allowed ! 961: by default; 1 means it is allowed by default if `-traditional' is ! 962: used; 2 means it is allowed by default provided `-ansi' is not ! 963: used. 1 is the default; there is no need to define this macro in ! 964: that case. ! 965: ! 966: `NO_DOLLAR_IN_LABEL' ! 967: Define this macro if the assembler does not accept the character ! 968: `$' in label names. By default constructors and destructors in ! 969: G++ have `$' in the identifiers. If this macro is defined, `.' is ! 970: used instead. ! 971: ! 972: `DEFAULT_MAIN_RETURN' ! 973: Define this macro if the target system expects every program's ! 974: `main' function to return a standard "success" value by default ! 975: (if no other value is explicitly returned). ! 976: ! 977: The definition should be a C statement (sans semicolon) to ! 978: generate the appropriate rtl instructions. It is used only when ! 979: compiling the end of `main'. ! 980: ! 981: `HAVE_ATEXIT' ! 982: Define this if the target system supports the function `atexit' ! 983: from the ANSI C standard. If this is not defined, and ! 984: `INIT_SECTION_ASM_OP' is not defined, a default `exit' function ! 985: will be provided to support C++. ! 986: ! 987: `EXIT_BODY' ! 988: Define this if your `exit' function needs to do something besides ! 989: calling an external function `_cleanup' before terminating with ! 990: `_exit'. The `EXIT_BODY' macro is only needed if netiher ! 991: `HAVE_ATEXIT' nor `INIT_SECTION_ASM_OP' are defined. ! 992: ! 993: ! 994: File: gcc.info, Node: Config, Next: Index, Prev: Target Macros, Up: Top ! 995: ! 996: The Configuration File ! 997: ********************** ! 998: ! 999: The configuration file `xm-MACHINE.h' contains macro definitions ! 1000: that describe the machine and system on which the compiler is running, ! 1001: unlike the definitions in `MACHINE.h', which describe the machine for ! 1002: which the compiler is producing output. Most of the values in ! 1003: `xm-MACHINE.h' are actually the same on all machines that GNU CC runs ! 1004: on, so large parts of all configuration files are identical. But there ! 1005: are some macros that vary: ! 1006: ! 1007: `USG' ! 1008: Define this macro if the host system is System V. ! 1009: ! 1010: `VMS' ! 1011: Define this macro if the host system is VMS. ! 1012: ! 1013: `FAILURE_EXIT_CODE' ! 1014: A C expression for the status code to be returned when the compiler ! 1015: exits after serious errors. ! 1016: ! 1017: `SUCCESS_EXIT_CODE' ! 1018: A C expression for the status code to be returned when the compiler ! 1019: exits without serious errors. ! 1020: ! 1021: `HOST_WORDS_BIG_ENDIAN' ! 1022: Defined if the host machine stores words of multi-word values in ! 1023: big-endian order. (GNU CC does not depend on the host byte ! 1024: ordering within a word.) ! 1025: ! 1026: `HOST_FLOAT_FORMAT' ! 1027: A numeric code distinguishing the floating point format for the ! 1028: host machine. See `TARGET_FLOAT_FORMAT' in *Note Storage Layout:: ! 1029: for the alternatives and default. ! 1030: ! 1031: `HOST_BITS_PER_CHAR' ! 1032: A C expression for the number of bits in `char' on the host ! 1033: machine. ! 1034: ! 1035: `HOST_BITS_PER_SHORT' ! 1036: A C expression for the number of bits in `short' on the host ! 1037: machine. ! 1038: ! 1039: `HOST_BITS_PER_INT' ! 1040: A C expression for the number of bits in `int' on the host machine. ! 1041: ! 1042: `HOST_BITS_PER_LONG' ! 1043: A C expression for the number of bits in `long' on the host ! 1044: machine. ! 1045: ! 1046: `ONLY_INT_FIELDS' ! 1047: Define this macro to indicate that the host compiler only supports ! 1048: `int' bit fields, rather than other integral types, including ! 1049: `enum', as do most C compilers. ! 1050: ! 1051: `EXECUTABLE_SUFFIX' ! 1052: Define this macro if the host system uses a naming convention for ! 1053: executable files that involves a common suffix (such as, in some ! 1054: systems, `.exe') that must be mentioned explicitly when you run ! 1055: the program. ! 1056: ! 1057: `OBSTACK_CHUNK_SIZE' ! 1058: A C expression for the size of ordinary obstack chunks. If you ! 1059: don't define this, a usually-reasonable default is used. ! 1060: ! 1061: `OBSTACK_CHUNK_ALLOC' ! 1062: The function used to allocate obstack chunks. If you don't define ! 1063: this, `xmalloc' is used. ! 1064: ! 1065: `OBSTACK_CHUNK_FREE' ! 1066: The function used to free obstack chunks. If you don't define ! 1067: this, `free' is used. ! 1068: ! 1069: `USE_C_ALLOCA' ! 1070: Define this macro to indicate that the compiler is running with the ! 1071: `alloca' implemented in C. This version of `alloca' can be found ! 1072: in the file `alloca.c'; to use it, you must also alter the ! 1073: `Makefile' variable `ALLOCA'. (This is done automatically for the ! 1074: systems on which we know it is needed.) ! 1075: ! 1076: If you do define this macro, you should probably do it as follows: ! 1077: ! 1078: #ifndef __GNUC__ ! 1079: #define USE_C_ALLOCA ! 1080: #else ! 1081: #define alloca __builtin_alloca ! 1082: #endif ! 1083: ! 1084: so that when the compiler is compiled with GNU CC it uses the more ! 1085: efficient built-in `alloca' function. ! 1086: ! 1087: `FUNCTION_CONVERSION_BUG' ! 1088: Define this macro to indicate that the host compiler does not ! 1089: properly handle converting a function value to a ! 1090: pointer-to-function when it is used in an expression. ! 1091: ! 1092: `HAVE_VPRINTF' ! 1093: Define this if the library function `vprintf' is available on your ! 1094: system. ! 1095: ! 1096: `MULTIBYTE_CHARS' ! 1097: Define this macro to enable support for multibyte characters in the ! 1098: input to GNU CC. This requires that the host system support the ! 1099: ANSI C library functions for converting multibyte characters to ! 1100: wide characters. ! 1101: ! 1102: `HAVE_PUTENV' ! 1103: Define this if the library function `putenv' is available on your ! 1104: system. ! 1105: ! 1106: `NO_SYS_SIGLIST' ! 1107: Define this if your system *does not* provide the variable ! 1108: `sys_siglist'. ! 1109: ! 1110: `USE_PROTOTYPES' ! 1111: Define this to be 1 if you know that the host compiler supports ! 1112: prototypes, even if it doesn't define __STDC__, or define it to be ! 1113: 0 if you do not want any prototypes used in compiling GNU CC. If ! 1114: `USE_PROTOTYPES' is not defined, it will be determined ! 1115: automatically whether your compiler supports prototypes by ! 1116: checking if `__STDC__' is defined. ! 1117: ! 1118: `NO_MD_PROTOTYPES' ! 1119: Define this if you wish suppression of prototypes generated from ! 1120: the machine description file, but to use other prototypes within ! 1121: GNU CC. If `USE_PROTOTYPES' is defined to be 0, or the host ! 1122: compiler does not support prototypes, this macro has no effect. ! 1123: ! 1124: `MD_CALL_PROTOTYPES' ! 1125: Define this if you wish to generate prototypes for the `gen_call' ! 1126: or `gen_call_value' functions generated from the machine ! 1127: description file. If `USE_PROTOTYPES' is defined to be 0, or the ! 1128: host compiler does not support prototypes, or `NO_MD_PROTOTYPES' ! 1129: is defined, this macro has no effect. As soon as all of the ! 1130: machine descriptions are modified to have the appropriate number ! 1131: of arguments, this macro will be removed. ! 1132: ! 1133: Some systems do provide this variable, but with a different name ! 1134: such as `_sys_siglist'. On these systems, you can define ! 1135: `sys_siglist' as a macro which expands into the name actually ! 1136: provided. ! 1137: ! 1138: `NO_STAB_H' ! 1139: Define this if your system does not have the include file ! 1140: `stab.h'. If `USG' is defined, `NO_STAB_H' is assumed. 1.1 root 1141: 1.1.1.2 ! root 1142: In addition, configuration files for system V define `bcopy', ! 1143: `bzero' and `bcmp' as aliases. Some files define `alloca' as a macro ! 1144: when compiled with GNU CC, in order to take advantage of the benefit of ! 1145: GNU CC's built-in `alloca'. 1.1 root 1146: 1.1.1.2 ! root 1147:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.