1*f3e7f55eSRobert Mustacchi /* 2*f3e7f55eSRobert Mustacchi 3*f3e7f55eSRobert Mustacchi Copyright (C) 2000, 2004, 2006 Silicon Graphics, Inc. All Rights Reserved. 4*f3e7f55eSRobert Mustacchi Portions Copyright (C) 2009-2010 David Anderson. All Rights Reserved. 5*f3e7f55eSRobert Mustacchi 6*f3e7f55eSRobert Mustacchi This program is free software; you can redistribute it and/or modify it 7*f3e7f55eSRobert Mustacchi under the terms of version 2.1 of the GNU Lesser General Public License 8*f3e7f55eSRobert Mustacchi as published by the Free Software Foundation. 9*f3e7f55eSRobert Mustacchi 10*f3e7f55eSRobert Mustacchi This program is distributed in the hope that it would be useful, but 11*f3e7f55eSRobert Mustacchi WITHOUT ANY WARRANTY; without even the implied warranty of 12*f3e7f55eSRobert Mustacchi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13*f3e7f55eSRobert Mustacchi 14*f3e7f55eSRobert Mustacchi Further, this software is distributed without any warranty that it is 15*f3e7f55eSRobert Mustacchi free of the rightful claim of any third person regarding infringement 16*f3e7f55eSRobert Mustacchi or the like. Any license provided herein, whether implied or 17*f3e7f55eSRobert Mustacchi otherwise, applies only to this software file. Patent licenses, if 18*f3e7f55eSRobert Mustacchi any, provided herein do not apply to combinations of this program with 19*f3e7f55eSRobert Mustacchi other software, or any other product whatsoever. 20*f3e7f55eSRobert Mustacchi 21*f3e7f55eSRobert Mustacchi You should have received a copy of the GNU Lesser General Public 22*f3e7f55eSRobert Mustacchi License along with this program; if not, write the Free Software 23*f3e7f55eSRobert Mustacchi Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, 24*f3e7f55eSRobert Mustacchi USA. 25*f3e7f55eSRobert Mustacchi 26*f3e7f55eSRobert Mustacchi Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, 27*f3e7f55eSRobert Mustacchi Mountain View, CA 94043, or: 28*f3e7f55eSRobert Mustacchi 29*f3e7f55eSRobert Mustacchi http://www.sgi.com 30*f3e7f55eSRobert Mustacchi 31*f3e7f55eSRobert Mustacchi For further information regarding this notice, see: 32*f3e7f55eSRobert Mustacchi 33*f3e7f55eSRobert Mustacchi http://oss.sgi.com/projects/GenInfo/NoticeExplan 34*f3e7f55eSRobert Mustacchi 35*f3e7f55eSRobert Mustacchi */ 36*f3e7f55eSRobert Mustacchi 37*f3e7f55eSRobert Mustacchi 38*f3e7f55eSRobert Mustacchi 39*f3e7f55eSRobert Mustacchi #define DW_EXTENDED_OPCODE 0 40*f3e7f55eSRobert Mustacchi 41*f3e7f55eSRobert Mustacchi /* 42*f3e7f55eSRobert Mustacchi This is used as the starting value for an algorithm 43*f3e7f55eSRobert Mustacchi to get the minimum difference between 2 values. 44*f3e7f55eSRobert Mustacchi UINT_MAX is used as our approximation to infinity. 45*f3e7f55eSRobert Mustacchi */ 46*f3e7f55eSRobert Mustacchi #define MAX_LINE_DIFF UINT_MAX 47*f3e7f55eSRobert Mustacchi 48*f3e7f55eSRobert Mustacchi /* This is for a sanity check on line 49*f3e7f55eSRobert Mustacchi table extended opcodes. 50*f3e7f55eSRobert Mustacchi It is entirely arbitrary, and 100 is surely too small if 51*f3e7f55eSRobert Mustacchi someone was inserting strings in the opcode. */ 52*f3e7f55eSRobert Mustacchi #define DW_LNE_LEN_MAX 100 53*f3e7f55eSRobert Mustacchi 54*f3e7f55eSRobert Mustacchi 55*f3e7f55eSRobert Mustacchi /* 56*f3e7f55eSRobert Mustacchi This structure is used to build a list of all the 57*f3e7f55eSRobert Mustacchi files that are used in the current compilation unit. 58*f3e7f55eSRobert Mustacchi All of the fields execpt fi_next have meanings that 59*f3e7f55eSRobert Mustacchi are obvious from section 6.2.4 of the Libdwarf Doc. 60*f3e7f55eSRobert Mustacchi */ 61*f3e7f55eSRobert Mustacchi struct Dwarf_File_Entry_s { 62*f3e7f55eSRobert Mustacchi /* Points to string naming the file. */ 63*f3e7f55eSRobert Mustacchi Dwarf_Small *fi_file_name; 64*f3e7f55eSRobert Mustacchi 65*f3e7f55eSRobert Mustacchi /* 66*f3e7f55eSRobert Mustacchi Index into the list of directories of the directory in which 67*f3e7f55eSRobert Mustacchi this file exits. */ 68*f3e7f55eSRobert Mustacchi Dwarf_Sword fi_dir_index; 69*f3e7f55eSRobert Mustacchi 70*f3e7f55eSRobert Mustacchi /* Time of last modification of the file. */ 71*f3e7f55eSRobert Mustacchi Dwarf_Unsigned fi_time_last_mod; 72*f3e7f55eSRobert Mustacchi 73*f3e7f55eSRobert Mustacchi /* Length in bytes of the file. */ 74*f3e7f55eSRobert Mustacchi Dwarf_Unsigned fi_file_length; 75*f3e7f55eSRobert Mustacchi 76*f3e7f55eSRobert Mustacchi /* Pointer for chaining file entries. */ 77*f3e7f55eSRobert Mustacchi Dwarf_File_Entry fi_next; 78*f3e7f55eSRobert Mustacchi }; 79*f3e7f55eSRobert Mustacchi 80*f3e7f55eSRobert Mustacchi 81*f3e7f55eSRobert Mustacchi typedef struct Dwarf_Line_Context_s *Dwarf_Line_Context; 82*f3e7f55eSRobert Mustacchi 83*f3e7f55eSRobert Mustacchi /* 84*f3e7f55eSRobert Mustacchi This structure provides the context in which the fields of 85*f3e7f55eSRobert Mustacchi a Dwarf_Line structure are interpreted. They come from the 86*f3e7f55eSRobert Mustacchi statement program prologue. **Updated by dwarf_srclines in 87*f3e7f55eSRobert Mustacchi dwarf_line.c. 88*f3e7f55eSRobert Mustacchi */ 89*f3e7f55eSRobert Mustacchi struct Dwarf_Line_Context_s { 90*f3e7f55eSRobert Mustacchi /* 91*f3e7f55eSRobert Mustacchi Points to a chain of entries providing info about source files 92*f3e7f55eSRobert Mustacchi for the current set of Dwarf_Line structures. File number 93*f3e7f55eSRobert Mustacchi 'li_file 1' is last on the list, the first list entry is the 94*f3e7f55eSRobert Mustacchi file numbered lc_file_entry_count. The numbering of the file 95*f3e7f55eSRobert Mustacchi names matches the dwarf2/3 line table specification file table 96*f3e7f55eSRobert Mustacchi and DW_LNE_define_file numbering rules. */ 97*f3e7f55eSRobert Mustacchi Dwarf_File_Entry lc_file_entries; 98*f3e7f55eSRobert Mustacchi /* 99*f3e7f55eSRobert Mustacchi Count of number of source files for this set of Dwarf_Line 100*f3e7f55eSRobert Mustacchi structures. */ 101*f3e7f55eSRobert Mustacchi Dwarf_Sword lc_file_entry_count; 102*f3e7f55eSRobert Mustacchi /* 103*f3e7f55eSRobert Mustacchi Points to the portion of .debug_line section that contains a 104*f3e7f55eSRobert Mustacchi list of strings naming the included directories. */ 105*f3e7f55eSRobert Mustacchi Dwarf_Small *lc_include_directories; 106*f3e7f55eSRobert Mustacchi 107*f3e7f55eSRobert Mustacchi /* Count of the number of included directories. */ 108*f3e7f55eSRobert Mustacchi Dwarf_Sword lc_include_directories_count; 109*f3e7f55eSRobert Mustacchi 110*f3e7f55eSRobert Mustacchi /* Count of the number of lines for this cu. */ 111*f3e7f55eSRobert Mustacchi Dwarf_Sword lc_line_count; 112*f3e7f55eSRobert Mustacchi 113*f3e7f55eSRobert Mustacchi /* Points to name of compilation directory. */ 114*f3e7f55eSRobert Mustacchi Dwarf_Small *lc_compilation_directory; 115*f3e7f55eSRobert Mustacchi 116*f3e7f55eSRobert Mustacchi Dwarf_Debug lc_dbg; 117*f3e7f55eSRobert Mustacchi 118*f3e7f55eSRobert Mustacchi Dwarf_Half lc_version_number; /* DWARF2/3 version number, 2 119*f3e7f55eSRobert Mustacchi for DWARF2, 3 for DWARF3. */ 120*f3e7f55eSRobert Mustacchi }; 121*f3e7f55eSRobert Mustacchi 122*f3e7f55eSRobert Mustacchi 123*f3e7f55eSRobert Mustacchi /* 124*f3e7f55eSRobert Mustacchi This structure defines a row of the line table. 125*f3e7f55eSRobert Mustacchi All of the fields except li_offset have the exact 126*f3e7f55eSRobert Mustacchi same meaning that is defined in Section 6.2.2 127*f3e7f55eSRobert Mustacchi of the Libdwarf Document. 128*f3e7f55eSRobert Mustacchi 129*f3e7f55eSRobert Mustacchi li_offset is used by _dwarf_addr_finder() which is called 130*f3e7f55eSRobert Mustacchi by rqs(1), an sgi utility for 'moving' shared libraries 131*f3e7f55eSRobert Mustacchi as if the static linker (ld) had linked the shared library 132*f3e7f55eSRobert Mustacchi at the newly-specified address. Most libdwarf-using 133*f3e7f55eSRobert Mustacchi apps will ignore li_offset and _dwarf_addr_finder(). 134*f3e7f55eSRobert Mustacchi 135*f3e7f55eSRobert Mustacchi */ 136*f3e7f55eSRobert Mustacchi struct Dwarf_Line_s { 137*f3e7f55eSRobert Mustacchi Dwarf_Addr li_address; /* pc value of machine instr */ 138*f3e7f55eSRobert Mustacchi union addr_or_line_s { 139*f3e7f55eSRobert Mustacchi struct li_inner_s { 140*f3e7f55eSRobert Mustacchi Dwarf_Sword li_file; /* int identifying src file */ 141*f3e7f55eSRobert Mustacchi /* li_file is a number 1-N, indexing into a conceptual 142*f3e7f55eSRobert Mustacchi source file table as described in dwarf2/3 spec line 143*f3e7f55eSRobert Mustacchi table doc. (see Dwarf_File_Entry lc_file_entries; and 144*f3e7f55eSRobert Mustacchi Dwarf_Sword lc_file_entry_count;) */ 145*f3e7f55eSRobert Mustacchi 146*f3e7f55eSRobert Mustacchi Dwarf_Sword li_line; /* source file line number. */ 147*f3e7f55eSRobert Mustacchi Dwarf_Half li_column; /* source file column number */ 148*f3e7f55eSRobert Mustacchi Dwarf_Small li_isa; 149*f3e7f55eSRobert Mustacchi 150*f3e7f55eSRobert Mustacchi /* To save space, use bit flags. */ 151*f3e7f55eSRobert Mustacchi /* indicate start of stmt */ 152*f3e7f55eSRobert Mustacchi unsigned char li_is_stmt:1; 153*f3e7f55eSRobert Mustacchi 154*f3e7f55eSRobert Mustacchi /* indicate start basic block */ 155*f3e7f55eSRobert Mustacchi unsigned char li_basic_block:1; 156*f3e7f55eSRobert Mustacchi 157*f3e7f55eSRobert Mustacchi /* first post sequence instr */ 158*f3e7f55eSRobert Mustacchi unsigned char li_end_sequence:1; 159*f3e7f55eSRobert Mustacchi 160*f3e7f55eSRobert Mustacchi unsigned char li_prologue_end:1; 161*f3e7f55eSRobert Mustacchi unsigned char li_epilogue_begin:1; 162*f3e7f55eSRobert Mustacchi } li_l_data; 163*f3e7f55eSRobert Mustacchi Dwarf_Off li_offset; /* for rqs */ 164*f3e7f55eSRobert Mustacchi } li_addr_line; 165*f3e7f55eSRobert Mustacchi Dwarf_Line_Context li_context; /* assoc Dwarf_Line_Context_s */ 166*f3e7f55eSRobert Mustacchi }; 167*f3e7f55eSRobert Mustacchi 168*f3e7f55eSRobert Mustacchi 169*f3e7f55eSRobert Mustacchi int _dwarf_line_address_offsets(Dwarf_Debug dbg, 170*f3e7f55eSRobert Mustacchi Dwarf_Die die, 171*f3e7f55eSRobert Mustacchi Dwarf_Addr ** addrs, 172*f3e7f55eSRobert Mustacchi Dwarf_Off ** offs, 173*f3e7f55eSRobert Mustacchi Dwarf_Unsigned * returncount, 174*f3e7f55eSRobert Mustacchi Dwarf_Error * err); 175*f3e7f55eSRobert Mustacchi int _dwarf_internal_srclines(Dwarf_Die die, 176*f3e7f55eSRobert Mustacchi Dwarf_Line ** linebuf, 177*f3e7f55eSRobert Mustacchi Dwarf_Signed * count, 178*f3e7f55eSRobert Mustacchi Dwarf_Bool doaddrs, 179*f3e7f55eSRobert Mustacchi Dwarf_Bool dolines, Dwarf_Error * error); 180*f3e7f55eSRobert Mustacchi 181*f3e7f55eSRobert Mustacchi 182*f3e7f55eSRobert Mustacchi 183*f3e7f55eSRobert Mustacchi /* The LOP, WHAT_IS_OPCODE stuff is here so it can 184*f3e7f55eSRobert Mustacchi be reused in 3 places. Seemed hard to keep 185*f3e7f55eSRobert Mustacchi the 3 places the same without an inline func or 186*f3e7f55eSRobert Mustacchi a macro. 187*f3e7f55eSRobert Mustacchi 188*f3e7f55eSRobert Mustacchi Handling the line section where the header and the 189*f3e7f55eSRobert Mustacchi file being processed do not match (unusual, but 190*f3e7f55eSRobert Mustacchi planned for in the design of .debug_line) 191*f3e7f55eSRobert Mustacchi is too tricky to recode this several times and keep 192*f3e7f55eSRobert Mustacchi it right. 193*f3e7f55eSRobert Mustacchi 194*f3e7f55eSRobert Mustacchi As it is the code starting up line-reading is duplicated 195*f3e7f55eSRobert Mustacchi and that is just wrong to do. FIXME! 196*f3e7f55eSRobert Mustacchi */ 197*f3e7f55eSRobert Mustacchi #define LOP_EXTENDED 1 198*f3e7f55eSRobert Mustacchi #define LOP_DISCARD 2 199*f3e7f55eSRobert Mustacchi #define LOP_STANDARD 3 200*f3e7f55eSRobert Mustacchi #define LOP_SPECIAL 4 201*f3e7f55eSRobert Mustacchi 202*f3e7f55eSRobert Mustacchi #define WHAT_IS_OPCODE(type,opcode,base,opcode_length,line_ptr,highest_std) \ 203*f3e7f55eSRobert Mustacchi if( (opcode) < (base) ) { \ 204*f3e7f55eSRobert Mustacchi /* we know we must treat as a standard op \ 205*f3e7f55eSRobert Mustacchi or a special case. \ 206*f3e7f55eSRobert Mustacchi */ \ 207*f3e7f55eSRobert Mustacchi if((opcode) == DW_EXTENDED_OPCODE) { \ 208*f3e7f55eSRobert Mustacchi type = LOP_EXTENDED; \ 209*f3e7f55eSRobert Mustacchi } else if( ((highest_std)+1) >= (base)) { \ 210*f3e7f55eSRobert Mustacchi /* == Standard case: compile of \ 211*f3e7f55eSRobert Mustacchi dwarf_line.c and object \ 212*f3e7f55eSRobert Mustacchi have same standard op codes set. \ 213*f3e7f55eSRobert Mustacchi \ 214*f3e7f55eSRobert Mustacchi > Special case: compile of dwarf_line.c\ 215*f3e7f55eSRobert Mustacchi has things in standard op codes list \ 216*f3e7f55eSRobert Mustacchi in dwarf.h header not \ 217*f3e7f55eSRobert Mustacchi in the object: handle this as a standard\ 218*f3e7f55eSRobert Mustacchi op code in switch below. \ 219*f3e7f55eSRobert Mustacchi The header special ops overlap the \ 220*f3e7f55eSRobert Mustacchi object standard ops. \ 221*f3e7f55eSRobert Mustacchi The new standard op codes will not \ 222*f3e7f55eSRobert Mustacchi appear in the object. \ 223*f3e7f55eSRobert Mustacchi */ \ 224*f3e7f55eSRobert Mustacchi type = LOP_STANDARD; \ 225*f3e7f55eSRobert Mustacchi } else { \ 226*f3e7f55eSRobert Mustacchi /* These are standard opcodes in the object\ 227*f3e7f55eSRobert Mustacchi ** that were not defined in the header \ 228*f3e7f55eSRobert Mustacchi ** at the time dwarf_line.c \ 229*f3e7f55eSRobert Mustacchi ** was compiled. Provides the ability of \ 230*f3e7f55eSRobert Mustacchi ** out-of-date dwarf reader to read newer \ 231*f3e7f55eSRobert Mustacchi ** line table data transparently. \ 232*f3e7f55eSRobert Mustacchi */ \ 233*f3e7f55eSRobert Mustacchi type = LOP_DISCARD; \ 234*f3e7f55eSRobert Mustacchi } \ 235*f3e7f55eSRobert Mustacchi \ 236*f3e7f55eSRobert Mustacchi } else { \ 237*f3e7f55eSRobert Mustacchi /* Is a special op code. \ 238*f3e7f55eSRobert Mustacchi */ \ 239*f3e7f55eSRobert Mustacchi type = LOP_SPECIAL; \ 240*f3e7f55eSRobert Mustacchi } 241*f3e7f55eSRobert Mustacchi 242*f3e7f55eSRobert Mustacchi /* The following is from the dwarf definition of 'ubyte' 243*f3e7f55eSRobert Mustacchi and is specifically mentioned in section 6.2.5.1, page 54 244*f3e7f55eSRobert Mustacchi of the Rev 2.0.0 dwarf specification. 245*f3e7f55eSRobert Mustacchi */ 246*f3e7f55eSRobert Mustacchi 247*f3e7f55eSRobert Mustacchi #define MAX_LINE_OP_CODE 255 248*f3e7f55eSRobert Mustacchi 249*f3e7f55eSRobert Mustacchi 250*f3e7f55eSRobert Mustacchi /* The following structs (Line_Table_File_Entry_s,Line_Table_Prefix_s) 251*f3e7f55eSRobert Mustacchi and functions allow refactoring common code into a single 252*f3e7f55eSRobert Mustacchi reader routine. 253*f3e7f55eSRobert Mustacchi */ 254*f3e7f55eSRobert Mustacchi /* There can be zero of more of these needed for 1 line prologue. */ 255*f3e7f55eSRobert Mustacchi struct Line_Table_File_Entry_s { 256*f3e7f55eSRobert Mustacchi Dwarf_Small *lte_filename; 257*f3e7f55eSRobert Mustacchi Dwarf_Unsigned lte_directory_index; 258*f3e7f55eSRobert Mustacchi Dwarf_Unsigned lte_last_modification_time; 259*f3e7f55eSRobert Mustacchi Dwarf_Unsigned lte_length_of_file; 260*f3e7f55eSRobert Mustacchi }; 261*f3e7f55eSRobert Mustacchi 262*f3e7f55eSRobert Mustacchi /* Data picked up from the line table prologue for a single 263*f3e7f55eSRobert Mustacchi CU. */ 264*f3e7f55eSRobert Mustacchi struct Line_Table_Prefix_s { 265*f3e7f55eSRobert Mustacchi 266*f3e7f55eSRobert Mustacchi /* pf_total_length is the value of the length field for the line 267*f3e7f55eSRobert Mustacchi table of this CU. So it does not count the length of itself (the 268*f3e7f55eSRobert Mustacchi length value) for consistency with the say lenghts recorded in 269*f3e7f55eSRobert Mustacchi DWARF2/3. */ 270*f3e7f55eSRobert Mustacchi Dwarf_Unsigned pf_total_length; 271*f3e7f55eSRobert Mustacchi 272*f3e7f55eSRobert Mustacchi /* Length of the initial length field itself. */ 273*f3e7f55eSRobert Mustacchi Dwarf_Half pf_length_field_length; 274*f3e7f55eSRobert Mustacchi 275*f3e7f55eSRobert Mustacchi /* The version is 2 for DWARF2, 3 for DWARF3 */ 276*f3e7f55eSRobert Mustacchi Dwarf_Half pf_version; 277*f3e7f55eSRobert Mustacchi 278*f3e7f55eSRobert Mustacchi Dwarf_Unsigned pf_prologue_length; 279*f3e7f55eSRobert Mustacchi Dwarf_Small pf_minimum_instruction_length; 280*f3e7f55eSRobert Mustacchi 281*f3e7f55eSRobert Mustacchi /* Start and end of this CU line area. pf_line_ptr_start + 282*f3e7f55eSRobert Mustacchi pf_total_length + pf_length_field_length == pf_line_ptr_end. 283*f3e7f55eSRobert Mustacchi Meaning pf_line_ptr_start is before the length info. */ 284*f3e7f55eSRobert Mustacchi Dwarf_Small *pf_line_ptr_start; 285*f3e7f55eSRobert Mustacchi Dwarf_Small *pf_line_ptr_end; 286*f3e7f55eSRobert Mustacchi 287*f3e7f55eSRobert Mustacchi /* Used to check that decoding of the line prologue is done right. */ 288*f3e7f55eSRobert Mustacchi Dwarf_Small *pf_line_prologue_start; 289*f3e7f55eSRobert Mustacchi 290*f3e7f55eSRobert Mustacchi Dwarf_Small pf_default_is_stmt; 291*f3e7f55eSRobert Mustacchi Dwarf_Sbyte pf_line_base; 292*f3e7f55eSRobert Mustacchi Dwarf_Small pf_line_range; 293*f3e7f55eSRobert Mustacchi 294*f3e7f55eSRobert Mustacchi /* Highest std opcode (+1). */ 295*f3e7f55eSRobert Mustacchi Dwarf_Small pf_opcode_base; 296*f3e7f55eSRobert Mustacchi 297*f3e7f55eSRobert Mustacchi /* pf_opcode_base -1 entries (each a count, normally the value of 298*f3e7f55eSRobert Mustacchi each entry is 0 or 1). */ 299*f3e7f55eSRobert Mustacchi Dwarf_Small *pf_opcode_length_table; 300*f3e7f55eSRobert Mustacchi 301*f3e7f55eSRobert Mustacchi Dwarf_Unsigned pf_include_directories_count; 302*f3e7f55eSRobert Mustacchi /* Array of pointers to dir strings. pf_include_directories_count 303*f3e7f55eSRobert Mustacchi entriesin the array. */ 304*f3e7f55eSRobert Mustacchi Dwarf_Small **pf_include_directories; 305*f3e7f55eSRobert Mustacchi 306*f3e7f55eSRobert Mustacchi /* Count of entries in line_table_file_entries array. */ 307*f3e7f55eSRobert Mustacchi Dwarf_Unsigned pf_files_count; 308*f3e7f55eSRobert Mustacchi struct Line_Table_File_Entry_s *pf_line_table_file_entries; 309*f3e7f55eSRobert Mustacchi 310*f3e7f55eSRobert Mustacchi /* The number to treat as standard ops. This is a special 311*f3e7f55eSRobert Mustacchi accomodation of gcc using the new standard opcodes but not 312*f3e7f55eSRobert Mustacchi updating the version number. It's legal dwarf2, but much better 313*f3e7f55eSRobert Mustacchi for the user to understand as dwarf3 when 'it looks ok'. */ 314*f3e7f55eSRobert Mustacchi Dwarf_Bool pf_std_op_count; 315*f3e7f55eSRobert Mustacchi 316*f3e7f55eSRobert Mustacchi }; 317*f3e7f55eSRobert Mustacchi 318*f3e7f55eSRobert Mustacchi void dwarf_init_line_table_prefix(struct Line_Table_Prefix_s *pf); 319*f3e7f55eSRobert Mustacchi void dwarf_free_line_table_prefix(struct Line_Table_Prefix_s *pf); 320*f3e7f55eSRobert Mustacchi 321*f3e7f55eSRobert Mustacchi int dwarf_read_line_table_prefix(Dwarf_Debug dbg, 322*f3e7f55eSRobert Mustacchi Dwarf_Small * data_start, 323*f3e7f55eSRobert Mustacchi Dwarf_Unsigned data_length, 324*f3e7f55eSRobert Mustacchi Dwarf_Small ** updated_data_start_out, 325*f3e7f55eSRobert Mustacchi struct Line_Table_Prefix_s *prefix_out, 326*f3e7f55eSRobert Mustacchi /* The following 2 arguments are solely for warning users 327*f3e7f55eSRobert Mustacchi * when there is a surprising 'gap' in the .debug_line info. */ 328*f3e7f55eSRobert Mustacchi Dwarf_Small ** bogus_bytes_ptr, 329*f3e7f55eSRobert Mustacchi Dwarf_Unsigned * bogus_bytes_count, 330*f3e7f55eSRobert Mustacchi Dwarf_Error * err, 331*f3e7f55eSRobert Mustacchi int * err_count_out); 332