|
|
1.1.1.2 root 1: This is Info file gcc.info, produced by Makeinfo-1.55 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:
1.1.1.3 ! root 6: Published by the Free Software Foundation 59 Temple Place - Suite 330
! 7: Boston, MA 02111-1307 USA
1.1 root 8:
1.1.1.3 ! root 9: Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software
! 10: Foundation, Inc.
1.1 root 11:
12: Permission is granted to make and distribute verbatim copies of this
13: manual provided the copyright notice and this permission notice are
14: preserved on all copies.
15:
16: Permission is granted to copy and distribute modified versions of
17: this manual under the conditions for verbatim copying, provided also
1.1.1.2 root 18: that the sections entitled "GNU General Public License," "Funding for
19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
20: included exactly as in the original, and provided that the entire
21: resulting derived work is distributed under the terms of a permission
22: notice identical to this one.
1.1 root 23:
24: Permission is granted to copy and distribute translations of this
25: manual into another language, under the above conditions for modified
26: versions, except that the sections entitled "GNU General Public
1.1.1.2 root 27: License," "Funding for Free Software," and "Protect Your Freedom--Fight
28: `Look And Feel'", and this permission notice, may be included in
29: translations approved by the Free Software Foundation instead of in the
30: original English.
1.1 root 31:
32:
1.1.1.3 ! root 33: File: gcc.info, Node: Uninitialized Data, Next: Label Output, Prev: Data Output, Up: Assembler Format
1.1 root 34:
1.1.1.3 ! root 35: Output of Uninitialized Variables
! 36: ---------------------------------
1.1 root 37:
1.1.1.3 ! root 38: Each of the macros in this section is used to do the whole job of
! 39: outputting a single uninitialized variable.
1.1 root 40:
1.1.1.3 ! root 41: `ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)'
! 42: A C statement (sans semicolon) to output to the stdio stream
! 43: STREAM the assembler definition of a common-label named NAME whose
! 44: size is SIZE bytes. The variable ROUNDED is the size rounded up
! 45: to whatever alignment the caller wants.
! 46:
! 47: Use the expression `assemble_name (STREAM, NAME)' to output the
! 48: name itself; before and after that, output the additional
! 49: assembler syntax for defining the name, and a newline.
! 50:
! 51: This macro controls how the assembler definitions of uninitialized
! 52: global variables are output.
! 53:
! 54: `ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT)'
! 55: Like `ASM_OUTPUT_COMMON' except takes the required alignment as a
! 56: separate, explicit argument. If you define this macro, it is used
! 57: in place of `ASM_OUTPUT_COMMON', and gives you more flexibility in
! 58: handling the required alignment of the variable. The alignment is
! 59: specified as the number of bits.
! 60:
! 61: `ASM_OUTPUT_SHARED_COMMON (STREAM, NAME, SIZE, ROUNDED)'
! 62: If defined, it is similar to `ASM_OUTPUT_COMMON', except that it
! 63: is used when NAME is shared. If not defined, `ASM_OUTPUT_COMMON'
! 64: will be used.
! 65:
! 66: `ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)'
! 67: A C statement (sans semicolon) to output to the stdio stream
! 68: STREAM the assembler definition of a local-common-label named NAME
! 69: whose size is SIZE bytes. The variable ROUNDED is the size
! 70: rounded up to whatever alignment the caller wants.
! 71:
! 72: Use the expression `assemble_name (STREAM, NAME)' to output the
! 73: name itself; before and after that, output the additional
! 74: assembler syntax for defining the name, and a newline.
! 75:
! 76: This macro controls how the assembler definitions of uninitialized
! 77: static variables are output.
! 78:
! 79: `ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT)'
! 80: Like `ASM_OUTPUT_LOCAL' except takes the required alignment as a
! 81: separate, explicit argument. If you define this macro, it is used
! 82: in place of `ASM_OUTPUT_LOCAL', and gives you more flexibility in
! 83: handling the required alignment of the variable. The alignment is
! 84: specified as the number of bits.
! 85:
! 86: `ASM_OUTPUT_SHARED_LOCAL (STREAM, NAME, SIZE, ROUNDED)'
! 87: If defined, it is similar to `ASM_OUTPUT_LOCAL', except that it is
! 88: used when NAME is shared. If not defined, `ASM_OUTPUT_LOCAL' will
! 89: be used.
! 90:
! 91:
! 92: File: gcc.info, Node: Label Output, Next: Initialization, Prev: Uninitialized Data, Up: Assembler Format
! 93:
! 94: Output and Generation of Labels
! 95: -------------------------------
! 96:
! 97: This is about outputting labels.
! 98:
! 99: `ASM_OUTPUT_LABEL (STREAM, NAME)'
! 100: A C statement (sans semicolon) to output to the stdio stream
! 101: STREAM the assembler definition of a label named NAME. Use the
! 102: expression `assemble_name (STREAM, NAME)' to output the name
! 103: itself; before and after that, output the additional assembler
! 104: syntax for defining the name, and a newline.
! 105:
! 106: `ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)'
! 107: A C statement (sans semicolon) to output to the stdio stream
! 108: STREAM any text necessary for declaring the name NAME of a
! 109: function which is being defined. This macro is responsible for
! 110: outputting the label definition (perhaps using
! 111: `ASM_OUTPUT_LABEL'). The argument DECL is the `FUNCTION_DECL'
! 112: tree node representing the function.
! 113:
! 114: If this macro is not defined, then the function name is defined in
! 115: the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
! 116:
! 117: `ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL)'
! 118: A C statement (sans semicolon) to output to the stdio stream
! 119: STREAM any text necessary for declaring the size of a function
! 120: which is being defined. The argument NAME is the name of the
! 121: function. The argument DECL is the `FUNCTION_DECL' tree node
! 122: representing the function.
! 123:
! 124: If this macro is not defined, then the function size is not
! 125: defined.
! 126:
! 127: `ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL)'
! 128: A C statement (sans semicolon) to output to the stdio stream
! 129: STREAM any text necessary for declaring the name NAME of an
! 130: initialized variable which is being defined. This macro must
! 131: output the label definition (perhaps using `ASM_OUTPUT_LABEL').
! 132: The argument DECL is the `VAR_DECL' tree node representing the
! 133: variable.
! 134:
! 135: If this macro is not defined, then the variable name is defined in
! 136: the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
! 137:
! 138: `ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND)'
! 139: A C statement (sans semicolon) to finish up declaring a variable
! 140: name once the compiler has processed its initializer fully and
! 141: thus has had a chance to determine the size of an array when
! 142: controlled by an initializer. This is used on systems where it's
! 143: necessary to declare something about the size of the object.
! 144:
! 145: If you don't define this macro, that is equivalent to defining it
! 146: to do nothing.
! 147:
! 148: `ASM_GLOBALIZE_LABEL (STREAM, NAME)'
! 149: A C statement (sans semicolon) to output to the stdio stream
! 150: STREAM some commands that will make the label NAME global; that
! 151: is, available for reference from other files. Use the expression
! 152: `assemble_name (STREAM, NAME)' to output the name itself; before
! 153: and after that, output the additional assembler syntax for making
! 154: that name global, and a newline.
! 155:
! 156: `ASM_WEAKEN_LABEL'
! 157: A C statement (sans semicolon) to output to the stdio stream
! 158: STREAM some commands that will make the label NAME weak; that is,
! 159: available for reference from other files but only used if no other
! 160: definition is available. Use the expression `assemble_name
! 161: (STREAM, NAME)' to output the name itself; before and after that,
! 162: output the additional assembler syntax for making that name weak,
! 163: and a newline.
! 164:
! 165: If you don't define this macro, GNU CC will not support weak
! 166: symbols and you should not define the `SUPPORTS_WEAK' macro.
! 167:
! 168: `SUPPORTS_WEAK'
! 169: A C expression which evaluates to true if the target supports weak
! 170: symbols.
! 171:
! 172: If you don't define this macro, `defaults.h' provides a default
! 173: definition. If `ASM_WEAKEN_LABEL' is defined, the default
! 174: definition is `1'; otherwise, it is `0'. Define this macro if you
! 175: want to control weak symbol support with a compiler flag such as
! 176: `-melf'.
! 177:
! 178: `ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)'
! 179: A C statement (sans semicolon) to output to the stdio stream
! 180: STREAM any text necessary for declaring the name of an external
! 181: symbol named NAME which is referenced in this compilation but not
! 182: defined. The value of DECL is the tree node for the declaration.
! 183:
! 184: This macro need not be defined if it does not need to output
! 185: anything. The GNU assembler and most Unix assemblers don't
! 186: require anything.
! 187:
! 188: `ASM_OUTPUT_EXTERNAL_LIBCALL (STREAM, SYMREF)'
! 189: A C statement (sans semicolon) to output on STREAM an assembler
! 190: pseudo-op to declare a library function name external. The name
! 191: of the library function is given by SYMREF, which has type `rtx'
! 192: and is a `symbol_ref'.
! 193:
! 194: This macro need not be defined if it does not need to output
! 195: anything. The GNU assembler and most Unix assemblers don't
! 196: require anything.
! 197:
! 198: `ASM_OUTPUT_LABELREF (STREAM, NAME)'
! 199: A C statement (sans semicolon) to output to the stdio stream
! 200: STREAM a reference in assembler syntax to a label named NAME.
! 201: This should add `_' to the front of the name, if that is customary
! 202: on your operating system, as it is in most Berkeley Unix systems.
! 203: This macro is used in `assemble_name'.
! 204:
! 205: `ASM_OUTPUT_INTERNAL_LABEL (STREAM, PREFIX, NUM)'
! 206: A C statement to output to the stdio stream STREAM a label whose
! 207: name is made from the string PREFIX and the number NUM.
! 208:
! 209: It is absolutely essential that these labels be distinct from the
! 210: labels used for user-level functions and variables. Otherwise,
! 211: certain programs will have name conflicts with internal labels.
! 212:
! 213: It is desirable to exclude internal labels from the symbol table
! 214: of the object file. Most assemblers have a naming convention for
! 215: labels that should be excluded; on many systems, the letter `L' at
! 216: the beginning of a label has this effect. You should find out what
! 217: convention your system uses, and follow it.
! 218:
! 219: The usual definition of this macro is as follows:
! 220:
! 221: fprintf (STREAM, "L%s%d:\n", PREFIX, NUM)
! 222:
! 223: `ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)'
! 224: A C statement to store into the string STRING a label whose name
! 225: is made from the string PREFIX and the number NUM.
! 226:
! 227: This string, when output subsequently by `assemble_name', should
! 228: produce the output that `ASM_OUTPUT_INTERNAL_LABEL' would produce
! 229: with the same PREFIX and NUM.
! 230:
! 231: If the string begins with `*', then `assemble_name' will output
! 232: the rest of the string unchanged. It is often convenient for
! 233: `ASM_GENERATE_INTERNAL_LABEL' to use `*' in this way. If the
! 234: string doesn't start with `*', then `ASM_OUTPUT_LABELREF' gets to
! 235: output the string, and may change it. (Of course,
! 236: `ASM_OUTPUT_LABELREF' is also part of your machine description, so
! 237: you should know what it does on your machine.)
! 238:
! 239: `ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)'
! 240: A C expression to assign to OUTVAR (which is a variable of type
! 241: `char *') a newly allocated string made from the string NAME and
! 242: the number NUMBER, with some suitable punctuation added. Use
! 243: `alloca' to get space for the string.
! 244:
! 245: The string will be used as an argument to `ASM_OUTPUT_LABELREF' to
! 246: produce an assembler label for an internal static variable whose
! 247: name is NAME. Therefore, the string must be such as to result in
! 248: valid assembler code. The argument NUMBER is different each time
! 249: this macro is executed; it prevents conflicts between
! 250: similarly-named internal static variables in different scopes.
! 251:
! 252: Ideally this string should not be a valid C identifier, to prevent
! 253: any conflict with the user's own symbols. Most assemblers allow
! 254: periods or percent signs in assembler symbols; putting at least
! 255: one of these between the name and the number will suffice.
! 256:
! 257: `ASM_OUTPUT_DEF (STREAM, NAME, VALUE)'
! 258: A C statement to output to the stdio stream STREAM assembler code
! 259: which defines (equates) the symbol NAME to have the value VALUE.
! 260:
! 261: If SET_ASM_OP is defined, a default definition is provided which is
! 262: correct for most systems.
! 263:
! 264: `OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME, SEL_NAME)'
! 265: Define this macro to override the default assembler names used for
! 266: Objective C methods.
! 267:
! 268: The default name is a unique method number followed by the name of
! 269: the class (e.g. `_1_Foo'). For methods in categories, the name of
! 270: the category is also included in the assembler name (e.g.
! 271: `_1_Foo_Bar').
! 272:
! 273: These names are safe on most systems, but make debugging difficult
! 274: since the method's selector is not present in the name.
! 275: Therefore, particular systems define other ways of computing names.
! 276:
! 277: BUF is an expression of type `char *' which gives you a buffer in
! 278: which to store the name; its length is as long as CLASS_NAME,
! 279: CAT_NAME and SEL_NAME put together, plus 50 characters extra.
! 280:
! 281: The argument IS_INST specifies whether the method is an instance
! 282: method or a class method; CLASS_NAME is the name of the class;
! 283: CAT_NAME is the name of the category (or NULL if the method is not
! 284: in a category); and SEL_NAME is the name of the selector.
! 285:
! 286: On systems where the assembler can handle quoted names, you can
! 287: use this macro to provide more human-readable names.
! 288:
! 289:
! 290: File: gcc.info, Node: Initialization, Next: Macros for Initialization, Prev: Label Output, Up: Assembler Format
! 291:
! 292: How Initialization Functions Are Handled
! 293: ----------------------------------------
! 294:
! 295: The compiled code for certain languages includes "constructors"
! 296: (also called "initialization routines")--functions to initialize data
! 297: in the program when the program is started. These functions need to be
! 298: called before the program is "started"--that is to say, before `main'
! 299: is called.
! 300:
! 301: Compiling some languages generates "destructors" (also called
! 302: "termination routines") that should be called when the program
! 303: terminates.
! 304:
! 305: To make the initialization and termination functions work, the
! 306: compiler must output something in the assembler code to cause those
! 307: functions to be called at the appropriate time. When you port the
! 308: compiler to a new system, you need to specify how to do this.
! 309:
! 310: There are two major ways that GCC currently supports the execution of
! 311: initialization and termination functions. Each way has two variants.
! 312: Much of the structure is common to all four variations.
! 313:
! 314: The linker must build two lists of these functions--a list of
! 315: initialization functions, called `__CTOR_LIST__', and a list of
! 316: termination functions, called `__DTOR_LIST__'.
! 317:
! 318: Each list always begins with an ignored function pointer (which may
! 319: hold 0, -1, or a count of the function pointers after it, depending on
! 320: the environment). This is followed by a series of zero or more function
! 321: pointers to constructors (or destructors), followed by a function
! 322: pointer containing zero.
! 323:
! 324: Depending on the operating system and its executable file format,
! 325: either `crtstuff.c' or `libgcc2.c' traverses these lists at startup
! 326: time and exit time. Constructors are called in reverse order of the
! 327: list; destructors in forward order.
! 328:
! 329: The best way to handle static constructors works only for object file
! 330: formats which provide arbitrarily-named sections. A section is set
! 331: aside for a list of constructors, and another for a list of destructors.
! 332: Traditionally these are called `.ctors' and `.dtors'. Each object file
! 333: that defines an initialization function also puts a word in the
! 334: constructor section to point to that function. The linker accumulates
! 335: all these words into one contiguous `.ctors' section. Termination
! 336: functions are handled similarly.
! 337:
! 338: To use this method, you need appropriate definitions of the macros
! 339: `ASM_OUTPUT_CONSTRUCTOR' and `ASM_OUTPUT_DESTRUCTOR'. Usually you can
! 340: get them by including `svr4.h'.
! 341:
! 342: When arbitrary sections are available, there are two variants,
! 343: depending upon how the code in `crtstuff.c' is called. On systems that
! 344: support an "init" section which is executed at program startup, parts
! 345: of `crtstuff.c' are compiled into that section. The program is linked
! 346: by the `gcc' driver like this:
! 347:
! 348: ld -o OUTPUT_FILE crtbegin.o ... crtend.o -lgcc
! 349:
! 350: The head of a function (`__do_global_ctors') appears in the init
! 351: section of `crtbegin.o'; the remainder of the function appears in the
! 352: init section of `crtend.o'. The linker will pull these two parts of
! 353: the section together, making a whole function. If any of the user's
! 354: object files linked into the middle of it contribute code, then that
! 355: code will be executed as part of the body of `__do_global_ctors'.
! 356:
! 357: To use this variant, you must define the `INIT_SECTION_ASM_OP' macro
! 358: properly.
! 359:
! 360: If no init section is available, do not define
! 361: `INIT_SECTION_ASM_OP'. Then `__do_global_ctors' is built into the text
! 362: section like all other functions, and resides in `libgcc.a'. When GCC
! 363: compiles any function called `main', it inserts a procedure call to
! 364: `__main' as the first executable code after the function prologue. The
! 365: `__main' function, also defined in `libgcc2.c', simply calls
! 366: `__do_global_ctors'.
! 367:
! 368: In file formats that don't support arbitrary sections, there are
! 369: again two variants. In the simplest variant, the GNU linker (GNU `ld')
! 370: and an `a.out' format must be used. In this case,
! 371: `ASM_OUTPUT_CONSTRUCTOR' is defined to produce a `.stabs' entry of type
! 372: `N_SETT', referencing the name `__CTOR_LIST__', and with the address of
! 373: the void function containing the initialization code as its value. The
! 374: GNU linker recognizes this as a request to add the value to a "set";
! 375: the values are accumulated, and are eventually placed in the executable
! 376: as a vector in the format described above, with a leading (ignored)
! 377: count and a trailing zero element. `ASM_OUTPUT_DESTRUCTOR' is handled
! 378: similarly. Since no init section is available, the absence of
! 379: `INIT_SECTION_ASM_OP' causes the compilation of `main' to call `__main'
! 380: as above, starting the initialization process.
! 381:
! 382: The last variant uses neither arbitrary sections nor the GNU linker.
! 383: This is preferable when you want to do dynamic linking and when using
! 384: file formats which the GNU linker does not support, such as `ECOFF'. In
! 385: this case, `ASM_OUTPUT_CONSTRUCTOR' does not produce an `N_SETT'
! 386: symbol; initialization and termination functions are recognized simply
! 387: by their names. This requires an extra program in the linkage step,
! 388: called `collect2'. This program pretends to be the linker, for use
! 389: with GNU CC; it does its job by running the ordinary linker, but also
! 390: arranges to include the vectors of initialization and termination
! 391: functions. These functions are called via `__main' as described above.
! 392:
! 393: Choosing among these configuration options has been simplified by a
! 394: set of operating-system-dependent files in the `config' subdirectory.
! 395: These files define all of the relevant parameters. Usually it is
! 396: sufficient to include one into your specific machine-dependent
! 397: configuration file. These files are:
! 398:
! 399: `aoutos.h'
! 400: For operating systems using the `a.out' format.
! 401:
! 402: `next.h'
! 403: For operating systems using the `MachO' format.
! 404:
! 405: `svr3.h'
! 406: For System V Release 3 and similar systems using `COFF' format.
! 407:
! 408: `svr4.h'
! 409: For System V Release 4 and similar systems using `ELF' format.
! 410:
! 411: `vms.h'
! 412: For the VMS operating system.
! 413:
! 414: The following section describes the specific macros that control and
! 415: customize the handling of initialization and termination functions.
! 416:
! 417:
! 418: File: gcc.info, Node: Macros for Initialization, Next: Instruction Output, Prev: Initialization, Up: Assembler Format
! 419:
! 420: Macros Controlling Initialization Routines
! 421: ------------------------------------------
! 422:
! 423: Here are the macros that control how the compiler handles
! 424: initialization and termination functions:
! 425:
! 426: `INIT_SECTION_ASM_OP'
! 427: If defined, a C string constant for the assembler operation to
! 428: identify the following data as initialization code. If not
! 429: defined, GNU CC will assume such a section does not exist. When
! 430: you are using special sections for initialization and termination
! 431: functions, this macro also controls how `crtstuff.c' and
! 432: `libgcc2.c' arrange to run the initialization functions.
! 433:
! 434: `HAS_INIT_SECTION'
! 435: If defined, `main' will not call `__main' as described above.
! 436: This macro should be defined for systems that control the contents
! 437: of the init section on a symbol-by-symbol basis, such as OSF/1,
! 438: and should not be defined explicitly for systems that support
! 439: `INIT_SECTION_ASM_OP'.
! 440:
! 441: `LD_INIT_SWITCH'
! 442: If defined, a C string constant for a switch that tells the linker
! 443: that the following symbol is an initialization routine.
! 444:
! 445: `LD_FINI_SWITCH'
! 446: If defined, a C string constant for a switch that tells the linker
! 447: that the following symbol is a finalization routine.
! 448:
! 449: `INVOKE__main'
! 450: If defined, `main' will call `__main' despite the presence of
! 451: `INIT_SECTION_ASM_OP'. This macro should be defined for systems
! 452: where the init section is not actually run automatically, but is
! 453: still useful for collecting the lists of constructors and
! 454: destructors.
! 455:
! 456: `ASM_OUTPUT_CONSTRUCTOR (STREAM, NAME)'
! 457: Define this macro as a C statement to output on the stream STREAM
! 458: the assembler code to arrange to call the function named NAME at
! 459: initialization time.
! 460:
! 461: Assume that NAME is the name of a C function generated
! 462: automatically by the compiler. This function takes no arguments.
! 463: Use the function `assemble_name' to output the name NAME; this
! 464: performs any system-specific syntactic transformations such as
! 465: adding an underscore.
! 466:
! 467: If you don't define this macro, nothing special is output to
! 468: arrange to call the function. This is correct when the function
! 469: will be called in some other manner--for example, by means of the
! 470: `collect2' program, which looks through the symbol table to find
! 471: these functions by their names.
! 472:
! 473: `ASM_OUTPUT_DESTRUCTOR (STREAM, NAME)'
! 474: This is like `ASM_OUTPUT_CONSTRUCTOR' but used for termination
! 475: functions rather than initialization functions.
! 476:
! 477: If your system uses `collect2' as the means of processing
! 478: constructors, then that program normally uses `nm' to scan an object
! 479: file for constructor functions to be called. On certain kinds of
! 480: systems, you can define these macros to make `collect2' work faster
! 481: (and, in some cases, make it work at all):
! 482:
! 483: `OBJECT_FORMAT_COFF'
! 484: Define this macro if the system uses COFF (Common Object File
! 485: Format) object files, so that `collect2' can assume this format
! 486: and scan object files directly for dynamic constructor/destructor
! 487: functions.
! 488:
! 489: `OBJECT_FORMAT_ROSE'
! 490: Define this macro if the system uses ROSE format object files, so
! 491: that `collect2' can assume this format and scan object files
! 492: directly for dynamic constructor/destructor functions.
! 493:
! 494: These macros are effective only in a native compiler; `collect2' as
! 495: part of a cross compiler always uses `nm' for the target machine.
! 496:
! 497: `REAL_NM_FILE_NAME'
! 498: Define this macro as a C string constant containing the file name
! 499: to use to execute `nm'. The default is to search the path
! 500: normally for `nm'.
! 501:
! 502: If your system supports shared libraries and has a program to list
! 503: the dynamic dependencies of a given library or executable, you can
! 504: define these macros to enable support for running initialization
! 505: and termination functions in shared libraries:
! 506:
! 507: `LDD_SUFFIX'
! 508: Define this macro to a C string constant containing the name of the
! 509: program which lists dynamic dependencies, like `"ldd"' under SunOS
! 510: 4.
! 511:
! 512: `PARSE_LDD_OUTPUT (PTR)'
! 513: Define this macro to be C code that extracts filenames from the
! 514: output of the program denoted by `LDD_SUFFIX'. PTR is a variable
! 515: of type `char *' that points to the beginning of a line of output
! 516: from `LDD_SUFFIX'. If the line lists a dynamic dependency, the
! 517: code must advance PTR to the beginning of the filename on that
! 518: line. Otherwise, it must set PTR to `NULL'.
! 519:
! 520:
! 521: File: gcc.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format
! 522:
! 523: Output of Assembler Instructions
! 524: --------------------------------
! 525:
! 526: This describes assembler instruction output.
! 527:
! 528: `REGISTER_NAMES'
! 529: A C initializer containing the assembler's names for the machine
! 530: registers, each one as a C string constant. This is what
! 531: translates register numbers in the compiler into assembler
! 532: language.
! 533:
! 534: `ADDITIONAL_REGISTER_NAMES'
! 535: If defined, a C initializer for an array of structures containing
! 536: a name and a register number. This macro defines additional names
! 537: for hard registers, thus allowing the `asm' option in declarations
! 538: to refer to registers using alternate names.
! 539:
! 540: `ASM_OUTPUT_OPCODE (STREAM, PTR)'
! 541: Define this macro if you are using an unusual assembler that
! 542: requires different names for the machine instructions.
! 543:
! 544: The definition is a C statement or statements which output an
! 545: assembler instruction opcode to the stdio stream STREAM. The
! 546: macro-operand PTR is a variable of type `char *' which points to
! 547: the opcode name in its "internal" form--the form that is written
! 548: in the machine description. The definition should output the
! 549: opcode name to STREAM, performing any translation you desire, and
! 550: increment the variable PTR to point at the end of the opcode so
! 551: that it will not be output twice.
! 552:
! 553: In fact, your macro definition may process less than the entire
! 554: opcode name, or more than the opcode name; but if you want to
! 555: process text that includes `%'-sequences to substitute operands,
! 556: you must take care of the substitution yourself. Just be sure to
! 557: increment PTR over whatever text should not be output normally.
! 558:
! 559: If you need to look at the operand values, they can be found as the
! 560: elements of `recog_operand'.
! 561:
! 562: If the macro definition does nothing, the instruction is output in
! 563: the usual way.
! 564:
! 565: `FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)'
! 566: If defined, a C statement to be executed just prior to the output
! 567: of assembler code for INSN, to modify the extracted operands so
! 568: they will be output differently.
! 569:
! 570: Here the argument OPVEC is the vector containing the operands
! 571: extracted from INSN, and NOPERANDS is the number of elements of
! 572: the vector which contain meaningful data for this insn. The
! 573: contents of this vector are what will be used to convert the insn
! 574: template into assembler code, so you can change the assembler
! 575: output by changing the contents of the vector.
! 576:
! 577: This macro is useful when various assembler syntaxes share a single
! 578: file of instruction patterns; by defining this macro differently,
! 579: you can cause a large class of instructions to be output
! 580: differently (such as with rearranged operands). Naturally,
! 581: variations in assembler syntax affecting individual insn patterns
! 582: ought to be handled by writing conditional output routines in
! 583: those patterns.
! 584:
! 585: If this macro is not defined, it is equivalent to a null statement.
! 586:
! 587: `PRINT_OPERAND (STREAM, X, CODE)'
! 588: A C compound statement to output to stdio stream STREAM the
! 589: assembler syntax for an instruction operand X. X is an RTL
! 590: expression.
! 591:
! 592: CODE is a value that can be used to specify one of several ways of
! 593: printing the operand. It is used when identical operands must be
! 594: printed differently depending on the context. CODE comes from the
! 595: `%' specification that was used to request printing of the
! 596: operand. If the specification was just `%DIGIT' then CODE is 0;
! 597: if the specification was `%LTR DIGIT' then CODE is the ASCII code
! 598: for LTR.
! 599:
! 600: If X is a register, this macro should print the register's name.
! 601: The names can be found in an array `reg_names' whose type is `char
! 602: *[]'. `reg_names' is initialized from `REGISTER_NAMES'.
! 603:
! 604: When the machine description has a specification `%PUNCT' (a `%'
! 605: followed by a punctuation character), this macro is called with a
! 606: null pointer for X and the punctuation character for CODE.
! 607:
! 608: `PRINT_OPERAND_PUNCT_VALID_P (CODE)'
! 609: A C expression which evaluates to true if CODE is a valid
! 610: punctuation character for use in the `PRINT_OPERAND' macro. If
! 611: `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
! 612: punctuation characters (except for the standard one, `%') are used
! 613: in this way.
! 614:
! 615: `PRINT_OPERAND_ADDRESS (STREAM, X)'
! 616: A C compound statement to output to stdio stream STREAM the
! 617: assembler syntax for an instruction operand that is a memory
! 618: reference whose address is X. X is an RTL expression.
! 619:
! 620: On some machines, the syntax for a symbolic address depends on the
! 621: section that the address refers to. On these machines, define the
! 622: macro `ENCODE_SECTION_INFO' to store the information into the
! 623: `symbol_ref', and then check for it here. *Note Assembler
! 624: Format::.
! 625:
! 626: `DBR_OUTPUT_SEQEND(FILE)'
! 627: A C statement, to be executed after all slot-filler instructions
! 628: have been output. If necessary, call `dbr_sequence_length' to
! 629: determine the number of slots filled in a sequence (zero if not
! 630: currently outputting a sequence), to decide how many no-ops to
! 631: output, or whatever.
! 632:
! 633: Don't define this macro if it has nothing to do, but it is helpful
! 634: in reading assembly output if the extent of the delay sequence is
! 635: made explicit (e.g. with white space).
! 636:
! 637: Note that output routines for instructions with delay slots must be
! 638: prepared to deal with not being output as part of a sequence (i.e.
! 639: when the scheduling pass is not run, or when no slot fillers could
! 640: be found.) The variable `final_sequence' is null when not
! 641: processing a sequence, otherwise it contains the `sequence' rtx
! 642: being output.
! 643:
! 644: `REGISTER_PREFIX'
! 645: `LOCAL_LABEL_PREFIX'
! 646: `USER_LABEL_PREFIX'
! 647: `IMMEDIATE_PREFIX'
! 648: If defined, C string expressions to be used for the `%R', `%L',
! 649: `%U', and `%I' options of `asm_fprintf' (see `final.c'). These
! 650: are useful when a single `md' file must support multiple assembler
! 651: formats. In that case, the various `tm.h' files can define these
! 652: macros differently.
! 653:
! 654: `ASSEMBLER_DIALECT'
! 655: If your target supports multiple dialects of assembler language
! 656: (such as different opcodes), define this macro as a C expression
! 657: that gives the numeric index of the assembler language dialect to
! 658: use, with zero as the first variant.
! 659:
! 660: If this macro is defined, you may use
! 661: `{option0|option1|option2...}' constructs in the output templates
! 662: of patterns (*note Output Template::.) or in the first argument of
! 663: `asm_fprintf'. This construct outputs `option0', `option1' or
! 664: `option2', etc., if the value of `ASSEMBLER_DIALECT' is zero, one
! 665: or two, etc. Any special characters within these strings retain
! 666: their usual meaning.
! 667:
! 668: If you do not define this macro, the characters `{', `|' and `}'
! 669: do not have any special meaning when used in templates or operands
! 670: to `asm_fprintf'.
! 671:
! 672: Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX',
! 673: `USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the
! 674: variations in assemble language syntax with that mechanism. Define
! 675: `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax if the
! 676: syntax variant are larger and involve such things as different
! 677: opcodes or operand order.
! 678:
! 679: `ASM_OUTPUT_REG_PUSH (STREAM, REGNO)'
! 680: A C expression to output to STREAM some assembler code which will
! 681: push hard register number REGNO onto the stack. The code need not
! 682: be optimal, since this macro is used only when profiling.
! 683:
! 684: `ASM_OUTPUT_REG_POP (STREAM, REGNO)'
! 685: A C expression to output to STREAM some assembler code which will
! 686: pop hard register number REGNO off of the stack. The code need
! 687: not be optimal, since this macro is used only when profiling.
! 688:
! 689:
! 690: File: gcc.info, Node: Dispatch Tables, Next: Alignment Output, Prev: Instruction Output, Up: Assembler Format
! 691:
! 692: Output of Dispatch Tables
! 693: -------------------------
! 694:
! 695: This concerns dispatch tables.
! 696:
! 697: `ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, VALUE, REL)'
! 698: This macro should be provided on machines where the addresses in a
! 699: dispatch table are relative to the table's own address.
! 700:
! 701: The definition should be a C statement to output to the stdio
! 702: stream STREAM an assembler pseudo-instruction to generate a
! 703: difference between two labels. VALUE and REL are the numbers of
! 704: two internal labels. The definitions of these labels are output
! 705: using `ASM_OUTPUT_INTERNAL_LABEL', and they must be printed in the
! 706: same way here. For example,
! 707:
! 708: fprintf (STREAM, "\t.word L%d-L%d\n",
! 709: VALUE, REL)
! 710:
! 711: `ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)'
! 712: This macro should be provided on machines where the addresses in a
! 713: dispatch table are absolute.
! 714:
! 715: The definition should be a C statement to output to the stdio
! 716: stream STREAM an assembler pseudo-instruction to generate a
! 717: reference to a label. VALUE is the number of an internal label
! 718: whose definition is output using `ASM_OUTPUT_INTERNAL_LABEL'. For
! 719: example,
! 720:
! 721: fprintf (STREAM, "\t.word L%d\n", VALUE)
! 722:
! 723: `ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)'
! 724: Define this if the label before a jump-table needs to be output
! 725: specially. The first three arguments are the same as for
! 726: `ASM_OUTPUT_INTERNAL_LABEL'; the fourth argument is the jump-table
! 727: which follows (a `jump_insn' containing an `addr_vec' or
! 728: `addr_diff_vec').
! 729:
! 730: This feature is used on system V to output a `swbeg' statement for
! 731: the table.
! 732:
! 733: If this macro is not defined, these labels are output with
! 734: `ASM_OUTPUT_INTERNAL_LABEL'.
! 735:
! 736: `ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)'
! 737: Define this if something special must be output at the end of a
! 738: jump-table. The definition should be a C statement to be executed
! 739: after the assembler code for the table is written. It should write
! 740: the appropriate code to stdio stream STREAM. The argument TABLE
! 741: is the jump-table insn, and NUM is the label-number of the
! 742: preceding label.
! 743:
! 744: If this macro is not defined, nothing special is output at the end
! 745: of the jump-table.
! 746:
! 747:
! 748: File: gcc.info, Node: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format
! 749:
! 750: Assembler Commands for Alignment
! 751: --------------------------------
! 752:
! 753: This describes commands for alignment.
! 754:
! 755: `ASM_OUTPUT_ALIGN_CODE (FILE)'
! 756: A C expression to output text to align the location counter in the
! 757: way that is desirable at a point in the code that is reached only
! 758: by jumping.
! 759:
! 760: This macro need not be defined if you don't want any special
! 761: alignment to be done at such a time. Most machine descriptions do
! 762: not currently define the macro.
! 763:
! 764: `ASM_OUTPUT_LOOP_ALIGN (FILE)'
! 765: A C expression to output text to align the location counter in the
! 766: way that is desirable at the beginning of a loop.
! 767:
! 768: This macro need not be defined if you don't want any special
! 769: alignment to be done at such a time. Most machine descriptions do
! 770: not currently define the macro.
! 771:
! 772: `ASM_OUTPUT_SKIP (STREAM, NBYTES)'
! 773: A C statement to output to the stdio stream STREAM an assembler
! 774: instruction to advance the location counter by NBYTES bytes.
! 775: Those bytes should be zero when loaded. NBYTES will be a C
! 776: expression of type `int'.
! 777:
! 778: `ASM_NO_SKIP_IN_TEXT'
! 779: Define this macro if `ASM_OUTPUT_SKIP' should not be used in the
! 780: text section because it fails put zeros in the bytes that are
! 781: skipped. This is true on many Unix systems, where the pseudo-op
! 782: to skip bytes produces no-op instructions rather than zeros when
! 783: used in the text section.
! 784:
! 785: `ASM_OUTPUT_ALIGN (STREAM, POWER)'
! 786: A C statement to output to the stdio stream STREAM an assembler
! 787: command to advance the location counter to a multiple of 2 to the
! 788: POWER bytes. POWER will be a C expression of type `int'.
! 789:
! 790:
! 791: File: gcc.info, Node: Debugging Info, Next: Cross-compilation, Prev: Assembler Format, Up: Target Macros
! 792:
! 793: Controlling Debugging Information Format
! 794: ========================================
! 795:
! 796: This describes how to specify debugging information.
! 797:
! 798: * Menu:
! 799:
! 800: * All Debuggers:: Macros that affect all debugging formats uniformly.
! 801: * DBX Options:: Macros enabling specific options in DBX format.
! 802: * DBX Hooks:: Hook macros for varying DBX format.
! 803: * File Names and DBX:: Macros controlling output of file names in DBX format.
! 804: * SDB and DWARF:: Macros for SDB (COFF) and DWARF formats.
! 805:
! 806:
! 807: File: gcc.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info
! 808:
! 809: Macros Affecting All Debugging Formats
! 810: --------------------------------------
! 811:
! 812: These macros affect all debugging formats.
! 813:
! 814: `DBX_REGISTER_NUMBER (REGNO)'
! 815: A C expression that returns the DBX register number for the
! 816: compiler register number REGNO. In simple cases, the value of this
! 817: expression may be REGNO itself. But sometimes there are some
! 818: registers that the compiler knows about and DBX does not, or vice
! 819: versa. In such cases, some register may need to have one number in
! 820: the compiler and another for DBX.
! 821:
! 822: If two registers have consecutive numbers inside GNU CC, and they
! 823: can be used as a pair to hold a multiword value, then they *must*
! 824: have consecutive numbers after renumbering with
! 825: `DBX_REGISTER_NUMBER'. Otherwise, debuggers will be unable to
! 826: access such a pair, because they expect register pairs to be
! 827: consecutive in their own numbering scheme.
! 828:
! 829: If you find yourself defining `DBX_REGISTER_NUMBER' in way that
! 830: does not preserve register pairs, then what you must do instead is
! 831: redefine the actual register numbering scheme.
! 832:
! 833: `DEBUGGER_AUTO_OFFSET (X)'
! 834: A C expression that returns the integer offset value for an
! 835: automatic variable having address X (an RTL expression). The
! 836: default computation assumes that X is based on the frame-pointer
! 837: and gives the offset from the frame-pointer. This is required for
! 838: targets that produce debugging output for DBX or COFF-style
! 839: debugging output for SDB and allow the frame-pointer to be
! 840: eliminated when the `-g' options is used.
! 841:
! 842: `DEBUGGER_ARG_OFFSET (OFFSET, X)'
! 843: A C expression that returns the integer offset value for an
! 844: argument having address X (an RTL expression). The nominal offset
! 845: is OFFSET.
! 846:
! 847: `PREFERRED_DEBUGGING_TYPE'
! 848: A C expression that returns the type of debugging output GNU CC
! 849: produces when the user specifies `-g' or `-ggdb'. Define this if
! 850: you have arranged for GNU CC to support more than one format of
! 851: debugging output. Currently, the allowable values are `DBX_DEBUG',
! 852: `SDB_DEBUG', `DWARF_DEBUG', and `XCOFF_DEBUG'.
! 853:
! 854: The value of this macro only affects the default debugging output;
! 855: the user can always get a specific type of output by using
! 856: `-gstabs', `-gcoff', `-gdwarf', or `-gxcoff'.
! 857:
! 858:
! 859: File: gcc.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info
! 860:
! 861: Specific Options for DBX Output
! 862: -------------------------------
! 863:
! 864: These are specific options for DBX output.
! 865:
! 866: `DBX_DEBUGGING_INFO'
! 867: Define this macro if GNU CC should produce debugging output for DBX
! 868: in response to the `-g' option.
! 869:
! 870: `XCOFF_DEBUGGING_INFO'
! 871: Define this macro if GNU CC should produce XCOFF format debugging
! 872: output in response to the `-g' option. This is a variant of DBX
! 873: format.
! 874:
! 875: `DEFAULT_GDB_EXTENSIONS'
! 876: Define this macro to control whether GNU CC should by default
! 877: generate GDB's extended version of DBX debugging information
! 878: (assuming DBX-format debugging information is enabled at all). If
! 879: you don't define the macro, the default is 1: always generate the
! 880: extended information if there is any occasion to.
! 881:
! 882: `DEBUG_SYMS_TEXT'
! 883: Define this macro if all `.stabs' commands should be output while
! 884: in the text section.
! 885:
! 886: `ASM_STABS_OP'
! 887: A C string constant naming the assembler pseudo op to use instead
! 888: of `.stabs' to define an ordinary debugging symbol. If you don't
! 889: define this macro, `.stabs' is used. This macro applies only to
! 890: DBX debugging information format.
! 891:
! 892: `ASM_STABD_OP'
! 893: A C string constant naming the assembler pseudo op to use instead
! 894: of `.stabd' to define a debugging symbol whose value is the current
! 895: location. If you don't define this macro, `.stabd' is used. This
! 896: macro applies only to DBX debugging information format.
! 897:
! 898: `ASM_STABN_OP'
! 899: A C string constant naming the assembler pseudo op to use instead
! 900: of `.stabn' to define a debugging symbol with no name. If you
! 901: don't define this macro, `.stabn' is used. This macro applies
! 902: only to DBX debugging information format.
! 903:
! 904: `DBX_NO_XREFS'
! 905: Define this macro if DBX on your system does not support the
! 906: construct `xsTAGNAME'. On some systems, this construct is used to
! 907: describe a forward reference to a structure named TAGNAME. On
! 908: other systems, this construct is not supported at all.
! 909:
! 910: `DBX_CONTIN_LENGTH'
! 911: A symbol name in DBX-format debugging information is normally
! 912: continued (split into two separate `.stabs' directives) when it
! 913: exceeds a certain length (by default, 80 characters). On some
! 914: operating systems, DBX requires this splitting; on others,
! 915: splitting must not be done. You can inhibit splitting by defining
! 916: this macro with the value zero. You can override the default
! 917: splitting-length by defining this macro as an expression for the
! 918: length you desire.
! 919:
! 920: `DBX_CONTIN_CHAR'
! 921: Normally continuation is indicated by adding a `\' character to
! 922: the end of a `.stabs' string when a continuation follows. To use
! 923: a different character instead, define this macro as a character
! 924: constant for the character you want to use. Do not define this
! 925: macro if backslash is correct for your system.
! 926:
! 927: `DBX_STATIC_STAB_DATA_SECTION'
! 928: Define this macro if it is necessary to go to the data section
! 929: before outputting the `.stabs' pseudo-op for a non-global static
! 930: variable.
! 931:
! 932: `DBX_TYPE_DECL_STABS_CODE'
! 933: The value to use in the "code" field of the `.stabs' directive for
! 934: a typedef. The default is `N_LSYM'.
! 935:
! 936: `DBX_STATIC_CONST_VAR_CODE'
! 937: The value to use in the "code" field of the `.stabs' directive for
! 938: a static variable located in the text section. DBX format does not
! 939: provide any "right" way to do this. The default is `N_FUN'.
! 940:
! 941: `DBX_REGPARM_STABS_CODE'
! 942: The value to use in the "code" field of the `.stabs' directive for
! 943: a parameter passed in registers. DBX format does not provide any
! 944: "right" way to do this. The default is `N_RSYM'.
! 945:
! 946: `DBX_REGPARM_STABS_LETTER'
! 947: The letter to use in DBX symbol data to identify a symbol as a
! 948: parameter passed in registers. DBX format does not customarily
! 949: provide any way to do this. The default is `'P''.
! 950:
! 951: `DBX_MEMPARM_STABS_LETTER'
! 952: The letter to use in DBX symbol data to identify a symbol as a
! 953: stack parameter. The default is `'p''.
! 954:
! 955: `DBX_FUNCTION_FIRST'
! 956: Define this macro if the DBX information for a function and its
! 957: arguments should precede the assembler code for the function.
! 958: Normally, in DBX format, the debugging information entirely
! 959: follows the assembler code.
! 960:
! 961: `DBX_LBRAC_FIRST'
! 962: Define this macro if the `N_LBRAC' symbol for a block should
! 963: precede the debugging information for variables and functions
! 964: defined in that block. Normally, in DBX format, the `N_LBRAC'
! 965: symbol comes first.
! 966:
! 967: `DBX_BLOCKS_FUNCTION_RELATIVE'
! 968: Define this macro if the value of a symbol describing the scope of
! 969: a block (`N_LBRAC' or `N_RBRAC') should be relative to the start
! 970: of the enclosing function. Normally, GNU C uses an absolute
! 971: address.
! 972:
! 973:
! 974: File: gcc.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info
! 975:
! 976: Open-Ended Hooks for DBX Format
! 977: -------------------------------
! 978:
! 979: These are hooks for DBX format.
! 980:
! 981: `DBX_OUTPUT_LBRAC (STREAM, NAME)'
! 982: Define this macro to say how to output to STREAM the debugging
! 983: information for the start of a scope level for variable names. The
! 984: argument NAME is the name of an assembler symbol (for use with
! 985: `assemble_name') whose value is the address where the scope begins.
! 986:
! 987: `DBX_OUTPUT_RBRAC (STREAM, NAME)'
! 988: Like `DBX_OUTPUT_LBRAC', but for the end of a scope level.
! 989:
! 990: `DBX_OUTPUT_ENUM (STREAM, TYPE)'
! 991: Define this macro if the target machine requires special handling
! 992: to output an enumeration type. The definition should be a C
! 993: statement (sans semicolon) to output the appropriate information
! 994: to STREAM for the type TYPE.
! 995:
! 996: `DBX_OUTPUT_FUNCTION_END (STREAM, FUNCTION)'
! 997: Define this macro if the target machine requires special output at
! 998: the end of the debugging information for a function. The
! 999: definition should be a C statement (sans semicolon) to output the
! 1000: appropriate information to STREAM. FUNCTION is the
! 1001: `FUNCTION_DECL' node for the function.
! 1002:
! 1003: `DBX_OUTPUT_STANDARD_TYPES (SYMS)'
! 1004: Define this macro if you need to control the order of output of the
! 1005: standard data types at the beginning of compilation. The argument
! 1006: SYMS is a `tree' which is a chain of all the predefined global
! 1007: symbols, including names of data types.
! 1008:
! 1009: Normally, DBX output starts with definitions of the types for
! 1010: integers and characters, followed by all the other predefined
! 1011: types of the particular language in no particular order.
! 1012:
! 1013: On some machines, it is necessary to output different particular
! 1014: types first. To do this, define `DBX_OUTPUT_STANDARD_TYPES' to
! 1015: output those symbols in the necessary order. Any predefined types
! 1016: that you don't explicitly output will be output afterward in no
! 1017: particular order.
! 1018:
! 1019: Be careful not to define this macro so that it works only for C.
! 1020: There are no global variables to access most of the built-in
! 1021: types, because another language may have another set of types.
! 1022: The way to output a particular type is to look through SYMS to see
! 1023: if you can find it. Here is an example:
! 1024:
! 1025: {
! 1026: tree decl;
! 1027: for (decl = syms; decl; decl = TREE_CHAIN (decl))
! 1028: if (!strcmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
! 1029: "long int"))
! 1030: dbxout_symbol (decl);
! 1031: ...
! 1032: }
! 1033:
! 1034: This does nothing if the expected type does not exist.
! 1035:
! 1036: See the function `init_decl_processing' in `c-decl.c' to find the
! 1037: names to use for all the built-in C types.
! 1038:
! 1039: Here is another way of finding a particular type:
! 1040:
! 1041: {
! 1042: tree decl;
! 1043: for (decl = syms; decl; decl = TREE_CHAIN (decl))
! 1044: if (TREE_CODE (decl) == TYPE_DECL
! 1045: && (TREE_CODE (TREE_TYPE (decl))
! 1046: == INTEGER_CST)
! 1047: && TYPE_PRECISION (TREE_TYPE (decl)) == 16
! 1048: && TYPE_UNSIGNED (TREE_TYPE (decl)))
! 1049: /* This must be `unsigned short'. */
! 1050: dbxout_symbol (decl);
! 1051: ...
! 1052: }
! 1053:
! 1054:
! 1055: File: gcc.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info
! 1056:
! 1057: File Names in DBX Format
! 1058: ------------------------
! 1059:
! 1060: This describes file names in DBX format.
! 1061:
! 1062: `DBX_WORKING_DIRECTORY'
! 1063: Define this if DBX wants to have the current directory recorded in
! 1064: each object file.
! 1065:
! 1066: Note that the working directory is always recorded if GDB
! 1067: extensions are enabled.
! 1068:
! 1069: `DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME)'
! 1070: A C statement to output DBX debugging information to the stdio
! 1071: stream STREAM which indicates that file NAME is the main source
! 1072: file--the file specified as the input file for compilation. This
! 1073: macro is called only once, at the beginning of compilation.
! 1074:
! 1075: This macro need not be defined if the standard form of output for
! 1076: DBX debugging information is appropriate.
! 1077:
! 1078: `DBX_OUTPUT_MAIN_SOURCE_DIRECTORY (STREAM, NAME)'
! 1079: A C statement to output DBX debugging information to the stdio
! 1080: stream STREAM which indicates that the current directory during
! 1081: compilation is named NAME.
! 1082:
! 1083: This macro need not be defined if the standard form of output for
! 1084: DBX debugging information is appropriate.
! 1085:
! 1086: `DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME)'
! 1087: A C statement to output DBX debugging information at the end of
! 1088: compilation of the main source file NAME.
! 1089:
! 1090: If you don't define this macro, nothing special is output at the
! 1091: end of compilation, which is correct for most machines.
! 1092:
! 1093: `DBX_OUTPUT_SOURCE_FILENAME (STREAM, NAME)'
! 1094: A C statement to output DBX debugging information to the stdio
! 1095: stream STREAM which indicates that file NAME is the current source
! 1096: file. This output is generated each time input shifts to a
! 1097: different source file as a result of `#include', the end of an
! 1098: included file, or a `#line' command.
! 1099:
! 1100: This macro need not be defined if the standard form of output for
! 1101: DBX debugging information is appropriate.
! 1102:
! 1103:
! 1104: File: gcc.info, Node: SDB and DWARF, Prev: File Names and DBX, Up: Debugging Info
! 1105:
! 1106: Macros for SDB and DWARF Output
! 1107: -------------------------------
! 1108:
! 1109: Here are macros for SDB and DWARF output.
! 1110:
! 1111: `SDB_DEBUGGING_INFO'
! 1112: Define this macro if GNU CC should produce COFF-style debugging
! 1113: output for SDB in response to the `-g' option.
! 1114:
! 1115: `DWARF_DEBUGGING_INFO'
! 1116: Define this macro if GNU CC should produce dwarf format debugging
! 1117: output in response to the `-g' option.
! 1118:
! 1119: `PUT_SDB_...'
! 1120: Define these macros to override the assembler syntax for the
! 1121: special SDB assembler directives. See `sdbout.c' for a list of
! 1122: these macros and their arguments. If the standard syntax is used,
! 1123: you need not define them yourself.
! 1124:
! 1125: `SDB_DELIM'
! 1126: Some assemblers do not support a semicolon as a delimiter, even
! 1127: between SDB assembler directives. In that case, define this macro
! 1128: to be the delimiter to use (usually `\n'). It is not necessary to
! 1129: define a new set of `PUT_SDB_OP' macros if this is the only change
! 1130: required.
! 1131:
! 1132: `SDB_GENERATE_FAKE'
! 1133: Define this macro to override the usual method of constructing a
! 1134: dummy name for anonymous structure and union types. See
! 1135: `sdbout.c' for more information.
! 1136:
! 1137: `SDB_ALLOW_UNKNOWN_REFERENCES'
! 1138: Define this macro to allow references to unknown structure, union,
! 1139: or enumeration tags to be emitted. Standard COFF does not allow
! 1140: handling of unknown references, MIPS ECOFF has support for it.
! 1141:
! 1142: `SDB_ALLOW_FORWARD_REFERENCES'
! 1143: Define this macro to allow references to structure, union, or
! 1144: enumeration tags that have not yet been seen to be handled. Some
! 1145: assemblers choke if forward tags are used, while some require it.
1.1 root 1146:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.