| /* dwarf2dbg.h - DWARF2 debug support | 
 |    Copyright (C) 1999-2025 Free Software Foundation, Inc. | 
 |  | 
 |    This file is part of GAS, the GNU Assembler. | 
 |  | 
 |    GAS is free software; you can redistribute it and/or modify | 
 |    it under the terms of the GNU General Public License as published by | 
 |    the Free Software Foundation; either version 3, or (at your option) | 
 |    any later version. | 
 |  | 
 |    GAS is distributed in the hope that it will be useful, | 
 |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 |    GNU General Public License for more details. | 
 |  | 
 |    You should have received a copy of the GNU General Public License | 
 |    along with GAS; see the file COPYING.  If not, write to the Free | 
 |    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA | 
 |    02110-1301, USA.  */ | 
 |  | 
 | #ifndef AS_DWARF2DBG_H | 
 | #define AS_DWARF2DBG_H | 
 |  | 
 | #include "as.h" | 
 |  | 
 | #define DWARF2_FLAG_IS_STMT		(1 << 0) | 
 | #define DWARF2_FLAG_BASIC_BLOCK		(1 << 1) | 
 | #define DWARF2_FLAG_PROLOGUE_END	(1 << 2) | 
 | #define DWARF2_FLAG_EPILOGUE_BEGIN	(1 << 3) | 
 |  | 
 | struct dwarf2_line_info | 
 | { | 
 |   unsigned int filenum; | 
 |   unsigned int line; | 
 |   unsigned int column; | 
 |   unsigned int isa; | 
 |   unsigned int flags; | 
 |   unsigned int discriminator; | 
 |   /* filenum == -1u chooses filename, otherwise view.  */ | 
 |   union | 
 |   { | 
 |     symbolS *view; | 
 |     const char *filename; | 
 |   } u; | 
 | }; | 
 |  | 
 | /* Implements the .file FILENO "FILENAME" directive.  FILENO can be 0 | 
 |    to indicate that no file number has been assigned.  All real file | 
 |    number must be >0.  The second form returns the filename extracted | 
 |    from the input stream.  */ | 
 | extern void   dwarf2_directive_file (int); | 
 | extern char * dwarf2_directive_filename (void); | 
 |  | 
 | /* Implements the .loc FILENO LINENO [COLUMN] directive.  FILENO is | 
 |    the file number, LINENO the line number and the (optional) COLUMN | 
 |    the column of the source code that the following instruction | 
 |    corresponds to.  FILENO can be 0 to indicate that the filename | 
 |    specified by the textually most recent .file directive should be | 
 |    used.  */ | 
 | extern void dwarf2_directive_loc (int); | 
 |  | 
 | /* Implements the .loc_mark_labels {0,1} directive.  */ | 
 | extern void dwarf2_directive_loc_mark_labels (int); | 
 |  | 
 | /* Returns the current source information.  If .file directives have | 
 |    been encountered, the info for the corresponding source file is | 
 |    returned.  Otherwise, the info for the assembly source file is | 
 |    returned.  */ | 
 | extern void dwarf2_where (struct dwarf2_line_info *); | 
 |  | 
 | /* A hook to allow the target backend to inform the line number state | 
 |    machine of isa changes when assembler debug info is enabled.  */ | 
 | extern void dwarf2_set_isa (unsigned int); | 
 |  | 
 | /* This function generates .debug_line info based on the address and | 
 |    source information passed in the arguments.  ADDR should be the | 
 |    frag-relative offset of the instruction the information is for and | 
 |    L is the source information that should be associated with that | 
 |    address.  */ | 
 | extern void dwarf2_gen_line_info (addressT, struct dwarf2_line_info *); | 
 |  | 
 | /* Must be called for each generated instruction.  */ | 
 | extern void dwarf2_emit_insn (int); | 
 |  | 
 | void dwarf2_move_insn (int); | 
 |  | 
 | /* Reset the state of the line number information to reflect that | 
 |    it has been used.  */ | 
 | extern void dwarf2_consume_line_info (void); | 
 |  | 
 | /* Should be called for each code label.  */ | 
 | extern void dwarf2_emit_label (symbolS *); | 
 |  | 
 | /* True when we've seen a .loc directive recently.  Used to avoid | 
 |    doing work when there's nothing to do.  */ | 
 | extern bool dwarf2_loc_directive_seen; | 
 |  | 
 | /* True when we're supposed to set the basic block mark whenever a label | 
 |    is seen.  Unless the target is doing Something Weird, just call | 
 |    dwarf2_emit_label.  */ | 
 | extern bool dwarf2_loc_mark_labels; | 
 |  | 
 | extern void dwarf2_init (void); | 
 |  | 
 | extern void dwarf2_finish (void); | 
 |  | 
 | extern int dwarf2dbg_estimate_size_before_relax (fragS *); | 
 | extern int dwarf2dbg_relax_frag (fragS *); | 
 | extern void dwarf2dbg_convert_frag (fragS *); | 
 |  | 
 | extern void dwarf2dbg_final_check (void); | 
 |  | 
 | /* An enumeration which describes the sizes of offsets (to DWARF sections) | 
 |    and the mechanism by which the size is indicated.  */ | 
 | enum dwarf2_format | 
 | { | 
 |   /* 32-bit format: the initial length field is 4 bytes long.  */ | 
 |   dwarf2_format_32bit, | 
 |   /* DWARF3 64-bit format: the representation of the initial length | 
 |      (of a DWARF section) is 0xffffffff (4 bytes) followed by eight | 
 |      bytes indicating the actual length.  */ | 
 |   dwarf2_format_64bit, | 
 |   /* SGI extension to DWARF2: The initial length is eight bytes.  */ | 
 |   dwarf2_format_64bit_irix | 
 | }; | 
 |  | 
 | #endif /* AS_DWARF2DBG_H */ |