#### 18.21.5 Macros for DWARF Output

Here are macros for DWARF output.

Macro: DWARF2_DEBUGGING_INFO

  Define this macro if GCC should produce dwarf version 2 format debugging output in response to the `-g` option.

  Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree function)

    Define this to enable the dwarf attribute `DW_AT_calling_convention` to be emitted for each function. Instead of an integer return the enum value for the `DW_CC_` tag.

  To support optional call frame debugging information, you must also define `INCOMING_RETURN_ADDR_RTX` and either set `RTX_FRAME_RELATED_P` on the prologue insns if you use RTL for the prologue, or call `dwarf2out_def_cfa` and `dwarf2out_reg_save` as appropriate from `TARGET_ASM_FUNCTION_PROLOGUE` if you don’t.

Macro: DWARF2_FRAME_INFO

  Define this macro to a nonzero value if GCC should always output Dwarf 2 frame information. If `TARGET_EXCEPT_UNWIND_INFO` (see Exception Region Output) returns `UI_DWARF2`, and exceptions are enabled, GCC will output this information not matter how you define `DWARF2_FRAME_INFO`.

Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void)

  This hook defines the mechanism that will be used for describing frame unwind information to the debugger. Normally the hook will return `UI_DWARF2` if DWARF 2 debug information is enabled, and return `UI_NONE` otherwise.

  A target may return `UI_DWARF2` even when DWARF 2 debug information is disabled in order to always output DWARF 2 frame information.

  A target may return `UI_TARGET` if it has ABI specified unwind tables. This will suppress generation of the normal debug frame unwind information.

Macro: DWARF2_ASM_LINE_DEBUG_INFO

  Define this macro to be a nonzero value if the assembler can generate Dwarf 2 line debug info sections. This will result in much more compact line number tables, and hence is desirable if it works.

Macro: DWARF2_ASM_VIEW_DEBUG_INFO

  Define this macro to be a nonzero value if the assembler supports view assignment and verification in `.loc`. If it does not, but the user enables location views, the compiler may have to fallback to internal line number tables.

Target Hook: int TARGET_RESET_LOCATION_VIEW (rtx_insn *)

  This hook, if defined, enables -ginternal-reset-location-views, and uses its result to override cases in which the estimated min insn length might be nonzero even when a PC advance (i.e., a view reset) cannot be taken for granted.

  If the hook is defined, it must return a positive value to indicate the insn definitely advances the PC, and so the view number can be safely assumed to be reset; a negative value to mean the insn definitely does not advance the PC, and os the view number must not be reset; or zero to decide based on the estimated insn length.

  If insn length is to be regarded as reliable, set the hook to `hook_int_rtx_insn_0`.

Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS

  True if the `.debug_pubtypes` and `.debug_pubnames` sections should be emitted. These sections are not used on most platforms, and in particular GDB does not use them.

Target Hook: bool TARGET_DELAY_SCHED2

  True if sched2 is not to be run at its normal place. This usually means it will be run as part of machine-specific reorg.

Target Hook: bool TARGET_DELAY_VARTRACK

  True if vartrack is not to be run at its normal place. This usually means it will be run as part of machine-specific reorg.

Target Hook: bool TARGET_NO_REGISTER_ALLOCATION

  True if register allocation and the passes following it should not be run. Usually true only for virtual assembler targets.

Macro: ASM_OUTPUT_DWARF_DELTA (stream, size, label1, label2)

  A C statement to issue assembly directives that create a difference lab1 minus lab2, using an integer of the given size.

Macro: ASM_OUTPUT_DWARF_VMS_DELTA (stream, size, label1, label2)

  A C statement to issue assembly directives that create a difference between the two given labels in system defined units, e.g. instruction slots on IA64 VMS, using an integer of the given size.

Macro: ASM_OUTPUT_DWARF_OFFSET (stream, size, label, offset, section)

  A C statement to issue assembly directives that create a section-relative reference to the given label plus offset, using an integer of the given size. The label is known to be defined in the given section.

Macro: ASM_OUTPUT_DWARF_PCREL (stream, size, label)

  A C statement to issue assembly directives that create a self-relative reference to the given label, using an integer of the given size.

Macro: ASM_OUTPUT_DWARF_DATAREL (stream, size, label)

  A C statement to issue assembly directives that create a reference to the given label relative to the dbase, using an integer of the given size.

Macro: ASM_OUTPUT_DWARF_TABLE_REF (label)

  A C statement to issue assembly directives that create a reference to the DWARF table identifier label from the current section. This is used on some systems to avoid garbage collecting a DWARF table which is referenced by a function.

Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *file, int size, rtx x)

  If defined, this target hook is a function which outputs a DTP-relative reference to the given TLS symbol of the specified size.