1*4d9fdb46SRobert Mustacchi /* 2*4d9fdb46SRobert Mustacchi Copyright (c) 2020, David Anderson 3*4d9fdb46SRobert Mustacchi All rights reserved. 4*4d9fdb46SRobert Mustacchi 5*4d9fdb46SRobert Mustacchi Redistribution and use in source and binary forms, with 6*4d9fdb46SRobert Mustacchi or without modification, are permitted provided that the 7*4d9fdb46SRobert Mustacchi following conditions are met: 8*4d9fdb46SRobert Mustacchi 9*4d9fdb46SRobert Mustacchi Redistributions of source code must retain the above 10*4d9fdb46SRobert Mustacchi copyright notice, this list of conditions and the following 11*4d9fdb46SRobert Mustacchi disclaimer. 12*4d9fdb46SRobert Mustacchi 13*4d9fdb46SRobert Mustacchi Redistributions in binary form must reproduce the above 14*4d9fdb46SRobert Mustacchi copyright notice, this list of conditions and the following 15*4d9fdb46SRobert Mustacchi disclaimer in the documentation and/or other materials 16*4d9fdb46SRobert Mustacchi provided with the distribution. 17*4d9fdb46SRobert Mustacchi 18*4d9fdb46SRobert Mustacchi THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 19*4d9fdb46SRobert Mustacchi CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 20*4d9fdb46SRobert Mustacchi INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21*4d9fdb46SRobert Mustacchi OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*4d9fdb46SRobert Mustacchi ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 23*4d9fdb46SRobert Mustacchi CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24*4d9fdb46SRobert Mustacchi SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25*4d9fdb46SRobert Mustacchi NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26*4d9fdb46SRobert Mustacchi LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27*4d9fdb46SRobert Mustacchi HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28*4d9fdb46SRobert Mustacchi CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 29*4d9fdb46SRobert Mustacchi OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 30*4d9fdb46SRobert Mustacchi EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31*4d9fdb46SRobert Mustacchi */ 32*4d9fdb46SRobert Mustacchi #ifndef DWARF_RNGLISTS_H 33*4d9fdb46SRobert Mustacchi #define DWARF_RNGLISTS_H 34*4d9fdb46SRobert Mustacchi #ifdef __cplusplus 35*4d9fdb46SRobert Mustacchi extern "C" { 36*4d9fdb46SRobert Mustacchi #endif /* __cplusplus */ 37*4d9fdb46SRobert Mustacchi 38*4d9fdb46SRobert Mustacchi /* Rangelists header for a CU. The 39*4d9fdb46SRobert Mustacchi type is never visible to libdwarf callers */ 40*4d9fdb46SRobert Mustacchi struct Dwarf_Rnglists_Context_s { 41*4d9fdb46SRobert Mustacchi Dwarf_Debug rc_dbg; 42*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rc_index; /* An index assigned by 43*4d9fdb46SRobert Mustacchi libdwarf to each rnglists context. Starting 44*4d9fdb46SRobert Mustacchi with zero at the zero offset in .debug_rnglists. */ 45*4d9fdb46SRobert Mustacchi 46*4d9fdb46SRobert Mustacchi /* Offset of the .debug_rnglists header involved. */ 47*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rc_header_offset; 48*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rc_length; 49*4d9fdb46SRobert Mustacchi 50*4d9fdb46SRobert Mustacchi /* Many places in in libdwarf this is called length_size. */ 51*4d9fdb46SRobert Mustacchi Dwarf_Small rc_offset_size; 52*4d9fdb46SRobert Mustacchi 53*4d9fdb46SRobert Mustacchi /* rc_extension_size is zero unless this is standard 54*4d9fdb46SRobert Mustacchi DWARF3 and later 64bit dwarf using the extension mechanism. 55*4d9fdb46SRobert Mustacchi 64bit DWARF3 and later: rc_extension_size is 4. 56*4d9fdb46SRobert Mustacchi 64bit DWARF2 MIPS/IRIX: rc_extension_size is zero. 57*4d9fdb46SRobert Mustacchi 32bit DWARF: rc_extension_size is zero. */ 58*4d9fdb46SRobert Mustacchi Dwarf_Small rc_extension_size; 59*4d9fdb46SRobert Mustacchi 60*4d9fdb46SRobert Mustacchi unsigned rc_version; /* 5 */ 61*4d9fdb46SRobert Mustacchi Dwarf_Small rc_address_size; 62*4d9fdb46SRobert Mustacchi Dwarf_Small rc_segment_selector_size; 63*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rc_offset_entry_count; 64*4d9fdb46SRobert Mustacchi 65*4d9fdb46SRobert Mustacchi /* offset in the section of the offset entries */ 66*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rc_offsets_off_in_sect; 67*4d9fdb46SRobert Mustacchi 68*4d9fdb46SRobert Mustacchi /* Do not free. Points into section memory */ 69*4d9fdb46SRobert Mustacchi Dwarf_Small * rc_offsets_array; 70*4d9fdb46SRobert Mustacchi 71*4d9fdb46SRobert Mustacchi /* Offset in the .debug_rnglists section of the 72*4d9fdb46SRobert Mustacchi first rangelist in the set of rangelists for the 73*4d9fdb46SRobert Mustacchi CU. */ 74*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rc_first_rnglist_offset; 75*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rc_past_last_rnglist_offset; 76*4d9fdb46SRobert Mustacchi 77*4d9fdb46SRobert Mustacchi /* pointer to 1st byte of rangelist header*/ 78*4d9fdb46SRobert Mustacchi Dwarf_Small * rc_rnglists_header; 79*4d9fdb46SRobert Mustacchi /* pointer to first byte of the rnglist data 80*4d9fdb46SRobert Mustacchi for rnglist involved. Do not free. */ 81*4d9fdb46SRobert Mustacchi Dwarf_Small *rc_startaddr; 82*4d9fdb46SRobert Mustacchi /* pointer one past end of the rnglist data. */ 83*4d9fdb46SRobert Mustacchi Dwarf_Small *rc_endaddr; 84*4d9fdb46SRobert Mustacchi }; 85*4d9fdb46SRobert Mustacchi 86*4d9fdb46SRobert Mustacchi struct Dwarf_Rnglists_Entry_s { 87*4d9fdb46SRobert Mustacchi unsigned rle_entrylen; 88*4d9fdb46SRobert Mustacchi unsigned rle_code; 89*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rle_raw1; 90*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rle_raw2; 91*4d9fdb46SRobert Mustacchi /* Cooked means the raw values from the .debug_rnglists 92*4d9fdb46SRobert Mustacchi section translated to DIE-specific addresses. */ 93*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rle_cooked1; 94*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rle_cooked2; 95*4d9fdb46SRobert Mustacchi Dwarf_Rnglists_Entry rle_next; 96*4d9fdb46SRobert Mustacchi }; 97*4d9fdb46SRobert Mustacchi 98*4d9fdb46SRobert Mustacchi 99*4d9fdb46SRobert Mustacchi struct Dwarf_Rnglists_Head_s { 100*4d9fdb46SRobert Mustacchi Dwarf_Rnglists_Entry *rh_rnglists; 101*4d9fdb46SRobert Mustacchi /* rh_last and rh_first used during build-up. 102*4d9fdb46SRobert Mustacchi Zero when array rh_rnglists built. */ 103*4d9fdb46SRobert Mustacchi Dwarf_Rnglists_Entry rh_first; 104*4d9fdb46SRobert Mustacchi Dwarf_Rnglists_Entry rh_last; 105*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rh_count; 106*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rh_bytes_total; 107*4d9fdb46SRobert Mustacchi 108*4d9fdb46SRobert Mustacchi /* A global Rnglists Context, */ 109*4d9fdb46SRobert Mustacchi Dwarf_CU_Context rh_context; 110*4d9fdb46SRobert Mustacchi Dwarf_Debug rh_dbg; 111*4d9fdb46SRobert Mustacchi Dwarf_Rnglists_Context rh_localcontext; 112*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rh_version; 113*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rh_index; 114*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rh_offset_size; 115*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rh_address_size; 116*4d9fdb46SRobert Mustacchi unsigned rh_segment_selector_size; 117*4d9fdb46SRobert Mustacchi 118*4d9fdb46SRobert Mustacchi /* DW_AT_rnglists_base */ 119*4d9fdb46SRobert Mustacchi Dwarf_Bool rh_at_rnglists_base_present; 120*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rh_at_rnglists_base; 121*4d9fdb46SRobert Mustacchi 122*4d9fdb46SRobert Mustacchi /* DW_AT_low_pc of CU or zero if none. */ 123*4d9fdb46SRobert Mustacchi Dwarf_Bool rh_cu_base_address_present; 124*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rh_cu_base_address; 125*4d9fdb46SRobert Mustacchi 126*4d9fdb46SRobert Mustacchi /* DW_AT_addr_base, so we can use .debug_addr 127*4d9fdb46SRobert Mustacchi if such is needed. */ 128*4d9fdb46SRobert Mustacchi Dwarf_Bool rh_cu_addr_base_present; 129*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rh_cu_addr_base; 130*4d9fdb46SRobert Mustacchi Dwarf_Small * rh_rlepointer; 131*4d9fdb46SRobert Mustacchi Dwarf_Unsigned rh_rlearea_offset; 132*4d9fdb46SRobert Mustacchi Dwarf_Small * rh_end_data_area; 133*4d9fdb46SRobert Mustacchi }; 134*4d9fdb46SRobert Mustacchi 135*4d9fdb46SRobert Mustacchi void _dwarf_rnglists_head_destructor(void *m); 136*4d9fdb46SRobert Mustacchi 137*4d9fdb46SRobert Mustacchi #ifdef __cplusplus 138*4d9fdb46SRobert Mustacchi } 139*4d9fdb46SRobert Mustacchi #endif /* __cplusplus */ 140*4d9fdb46SRobert Mustacchi #endif /* DWARF_RNGLISTS_H */ 141