1*f3e7f55eSRobert Mustacchi /* 2*f3e7f55eSRobert Mustacchi 3*f3e7f55eSRobert Mustacchi Copyright (C) 2000,2004,2005 Silicon Graphics, Inc. All Rights Reserved. 4*f3e7f55eSRobert Mustacchi 5*f3e7f55eSRobert Mustacchi This program is free software; you can redistribute it and/or modify it 6*f3e7f55eSRobert Mustacchi under the terms of version 2.1 of the GNU Lesser General Public License 7*f3e7f55eSRobert Mustacchi as published by the Free Software Foundation. 8*f3e7f55eSRobert Mustacchi 9*f3e7f55eSRobert Mustacchi This program is distributed in the hope that it would be useful, but 10*f3e7f55eSRobert Mustacchi WITHOUT ANY WARRANTY; without even the implied warranty of 11*f3e7f55eSRobert Mustacchi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12*f3e7f55eSRobert Mustacchi 13*f3e7f55eSRobert Mustacchi Further, this software is distributed without any warranty that it is 14*f3e7f55eSRobert Mustacchi free of the rightful claim of any third person regarding infringement 15*f3e7f55eSRobert Mustacchi or the like. Any license provided herein, whether implied or 16*f3e7f55eSRobert Mustacchi otherwise, applies only to this software file. Patent licenses, if 17*f3e7f55eSRobert Mustacchi any, provided herein do not apply to combinations of this program with 18*f3e7f55eSRobert Mustacchi other software, or any other product whatsoever. 19*f3e7f55eSRobert Mustacchi 20*f3e7f55eSRobert Mustacchi You should have received a copy of the GNU Lesser General Public 21*f3e7f55eSRobert Mustacchi License along with this program; if not, write the Free Software 22*f3e7f55eSRobert Mustacchi Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, 23*f3e7f55eSRobert Mustacchi USA. 24*f3e7f55eSRobert Mustacchi 25*f3e7f55eSRobert Mustacchi Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, 26*f3e7f55eSRobert Mustacchi Mountain View, CA 94043, or: 27*f3e7f55eSRobert Mustacchi 28*f3e7f55eSRobert Mustacchi http://www.sgi.com 29*f3e7f55eSRobert Mustacchi 30*f3e7f55eSRobert Mustacchi For further information regarding this notice, see: 31*f3e7f55eSRobert Mustacchi 32*f3e7f55eSRobert Mustacchi http://oss.sgi.com/projects/GenInfo/NoticeExplan 33*f3e7f55eSRobert Mustacchi 34*f3e7f55eSRobert Mustacchi */ 35*f3e7f55eSRobert Mustacchi 36*f3e7f55eSRobert Mustacchi 37*f3e7f55eSRobert Mustacchi 38*f3e7f55eSRobert Mustacchi 39*f3e7f55eSRobert Mustacchi typedef struct Dwarf_Global_Context_s *Dwarf_Global_Context; 40*f3e7f55eSRobert Mustacchi 41*f3e7f55eSRobert Mustacchi /* 42*f3e7f55eSRobert Mustacchi This struct contains header information for a set of pubnames. 43*f3e7f55eSRobert Mustacchi Essentially, they contain the context for a set of pubnames 44*f3e7f55eSRobert Mustacchi belonging to a compilation-unit. 45*f3e7f55eSRobert Mustacchi 46*f3e7f55eSRobert Mustacchi This is also used for the sgi-specific 47*f3e7f55eSRobert Mustacchi weaknames, typenames, varnames, funcnames data: 48*f3e7f55eSRobert Mustacchi the structs for those are incomplete and 49*f3e7f55eSRobert Mustacchi instances of this are used instead. 50*f3e7f55eSRobert Mustacchi 51*f3e7f55eSRobert Mustacchi Also used for DWARF3 .debug_pubtypes. 52*f3e7f55eSRobert Mustacchi 53*f3e7f55eSRobert Mustacchi */ 54*f3e7f55eSRobert Mustacchi struct Dwarf_Global_Context_s { 55*f3e7f55eSRobert Mustacchi 56*f3e7f55eSRobert Mustacchi /* Length in .debug_pubnames (etc) of a set of names for a 57*f3e7f55eSRobert Mustacchi compilation-unit. Dwarf_Word pu_length; The value is not made 58*f3e7f55eSRobert Mustacchi available outside libdwarf and not used inside, so no need to 59*f3e7f55eSRobert Mustacchi record it. */ 60*f3e7f55eSRobert Mustacchi 61*f3e7f55eSRobert Mustacchi /* For this context, size of a length. 4 or 8 */ 62*f3e7f55eSRobert Mustacchi unsigned char pu_length_size; 63*f3e7f55eSRobert Mustacchi 64*f3e7f55eSRobert Mustacchi /* For this CU, size of the extension 0 except for dwarf2 extension 65*f3e7f55eSRobert Mustacchi 64bit, in which case is 4. */ 66*f3e7f55eSRobert Mustacchi unsigned char pu_extension_size; 67*f3e7f55eSRobert Mustacchi 68*f3e7f55eSRobert Mustacchi /* 69*f3e7f55eSRobert Mustacchi Offset into .debug_info of the compilation-unit header (not DIE) 70*f3e7f55eSRobert Mustacchi for this set of pubnames. */ 71*f3e7f55eSRobert Mustacchi Dwarf_Off pu_offset_of_cu_header; 72*f3e7f55eSRobert Mustacchi 73*f3e7f55eSRobert Mustacchi /* Size of compilation-unit that these pubnames are in. */ 74*f3e7f55eSRobert Mustacchi Dwarf_Unsigned pu_info_length; 75*f3e7f55eSRobert Mustacchi 76*f3e7f55eSRobert Mustacchi Dwarf_Debug pu_dbg; 77*f3e7f55eSRobert Mustacchi }; 78*f3e7f55eSRobert Mustacchi 79*f3e7f55eSRobert Mustacchi 80*f3e7f55eSRobert Mustacchi /* This struct contains information for a single pubname. */ 81*f3e7f55eSRobert Mustacchi struct Dwarf_Global_s { 82*f3e7f55eSRobert Mustacchi 83*f3e7f55eSRobert Mustacchi /* 84*f3e7f55eSRobert Mustacchi Offset from the start of the corresponding compilation-unit of 85*f3e7f55eSRobert Mustacchi the DIE for the given pubname CU. */ 86*f3e7f55eSRobert Mustacchi Dwarf_Off gl_named_die_offset_within_cu; 87*f3e7f55eSRobert Mustacchi 88*f3e7f55eSRobert Mustacchi /* Points to the given pubname. */ 89*f3e7f55eSRobert Mustacchi Dwarf_Small *gl_name; 90*f3e7f55eSRobert Mustacchi 91*f3e7f55eSRobert Mustacchi /* Context for this pubname. */ 92*f3e7f55eSRobert Mustacchi Dwarf_Global_Context gl_context; 93*f3e7f55eSRobert Mustacchi }; 94*f3e7f55eSRobert Mustacchi 95*f3e7f55eSRobert Mustacchi int _dwarf_internal_get_pubnames_like_data(Dwarf_Debug dbg, 96*f3e7f55eSRobert Mustacchi Dwarf_Small * 97*f3e7f55eSRobert Mustacchi section_data_ptr, 98*f3e7f55eSRobert Mustacchi Dwarf_Unsigned 99*f3e7f55eSRobert Mustacchi section_length, 100*f3e7f55eSRobert Mustacchi Dwarf_Global ** globals, 101*f3e7f55eSRobert Mustacchi Dwarf_Signed * return_count, 102*f3e7f55eSRobert Mustacchi Dwarf_Error * error, 103*f3e7f55eSRobert Mustacchi int context_code, 104*f3e7f55eSRobert Mustacchi int global_code, 105*f3e7f55eSRobert Mustacchi int length_err_num, 106*f3e7f55eSRobert Mustacchi int version_err_num); 107*f3e7f55eSRobert Mustacchi 108*f3e7f55eSRobert Mustacchi void 109*f3e7f55eSRobert Mustacchi _dwarf_internal_globals_dealloc( Dwarf_Debug dbg, Dwarf_Global *dwgl, 110*f3e7f55eSRobert Mustacchi Dwarf_Signed count, 111*f3e7f55eSRobert Mustacchi int context_code, 112*f3e7f55eSRobert Mustacchi int global_code, 113*f3e7f55eSRobert Mustacchi int list_code); 114*f3e7f55eSRobert Mustacchi 115*f3e7f55eSRobert Mustacchi 116*f3e7f55eSRobert Mustacchi #ifdef __sgi /* __sgi should only be defined for IRIX/MIPS. */ 117*f3e7f55eSRobert Mustacchi void _dwarf_fix_up_offset_irix(Dwarf_Debug dbg, 118*f3e7f55eSRobert Mustacchi Dwarf_Unsigned *varp, 119*f3e7f55eSRobert Mustacchi char *caller_site_name); 120*f3e7f55eSRobert Mustacchi #define FIX_UP_OFFSET_IRIX_BUG(ldbg,var,name) _dwarf_fix_up_offset_irix(ldbg,&var,name) 121*f3e7f55eSRobert Mustacchi #else 122*f3e7f55eSRobert Mustacchi #define FIX_UP_OFFSET_IRIX_BUG(ldbg,var,name) 123*f3e7f55eSRobert Mustacchi #endif 124*f3e7f55eSRobert Mustacchi 125