1*f3e7f55eSRobert Mustacchi /* 2*f3e7f55eSRobert Mustacchi 3*f3e7f55eSRobert Mustacchi Copyright (C) 2000,2004 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 40*f3e7f55eSRobert Mustacchi /* relocation section names */ 41*f3e7f55eSRobert Mustacchi extern char *_dwarf_rel_section_names[]; 42*f3e7f55eSRobert Mustacchi 43*f3e7f55eSRobert Mustacchi /* section names */ 44*f3e7f55eSRobert Mustacchi extern char *_dwarf_sectnames[]; 45*f3e7f55eSRobert Mustacchi 46*f3e7f55eSRobert Mustacchi /* struct to hold relocation entries. Its mantained as a linked 47*f3e7f55eSRobert Mustacchi list of relocation structs, and will then be written at as a 48*f3e7f55eSRobert Mustacchi whole into the relocation section. Whether its 32 bit or 49*f3e7f55eSRobert Mustacchi 64 bit will be obtained from Dwarf_Debug pointer. 50*f3e7f55eSRobert Mustacchi */ 51*f3e7f55eSRobert Mustacchi 52*f3e7f55eSRobert Mustacchi 53*f3e7f55eSRobert Mustacchi 54*f3e7f55eSRobert Mustacchi 55*f3e7f55eSRobert Mustacchi 56*f3e7f55eSRobert Mustacchi /* 57*f3e7f55eSRobert Mustacchi struct stores a chunk of data pertaining to a section 58*f3e7f55eSRobert Mustacchi */ 59*f3e7f55eSRobert Mustacchi struct Dwarf_P_Section_Data_s { 60*f3e7f55eSRobert Mustacchi int ds_elf_sect_no; /* elf section number */ 61*f3e7f55eSRobert Mustacchi char *ds_data; /* data contained in section */ 62*f3e7f55eSRobert Mustacchi unsigned long ds_nbytes; /* bytes of data used so far */ 63*f3e7f55eSRobert Mustacchi unsigned long ds_orig_alloc; /* bytes allocated originally */ 64*f3e7f55eSRobert Mustacchi Dwarf_P_Section_Data ds_next; /* next on the list */ 65*f3e7f55eSRobert Mustacchi }; 66*f3e7f55eSRobert Mustacchi 67*f3e7f55eSRobert Mustacchi /* Used to allow a dummy initial struct (which we 68*f3e7f55eSRobert Mustacchi drop before it gets used 69*f3e7f55eSRobert Mustacchi This must not match any legitimate 'section' number. 70*f3e7f55eSRobert Mustacchi */ 71*f3e7f55eSRobert Mustacchi #define MAGIC_SECT_NO -3 72*f3e7f55eSRobert Mustacchi 73*f3e7f55eSRobert Mustacchi /* Size of chunk of data allocated in one alloc 74*f3e7f55eSRobert Mustacchi Not clear if this is the best size. 75*f3e7f55eSRobert Mustacchi Used to be just 4096 for user data, the section data struct 76*f3e7f55eSRobert Mustacchi was a separate malloc. 77*f3e7f55eSRobert Mustacchi */ 78*f3e7f55eSRobert Mustacchi #define CHUNK_SIZE (4096 - sizeof (struct Dwarf_P_Section_Data_s)) 79*f3e7f55eSRobert Mustacchi 80*f3e7f55eSRobert Mustacchi /* 81*f3e7f55eSRobert Mustacchi chunk alloc routine - 82*f3e7f55eSRobert Mustacchi if chunk->ds_data is nil, it will alloc CHUNK_SIZE bytes, 83*f3e7f55eSRobert Mustacchi and return pointer to the beginning. If chunk is not nil, 84*f3e7f55eSRobert Mustacchi it will see if there's enoungh space for nbytes in current 85*f3e7f55eSRobert Mustacchi chunk, if not, add new chunk to linked list, and return 86*f3e7f55eSRobert Mustacchi a char * pointer to it. Return null if unsuccessful. 87*f3e7f55eSRobert Mustacchi */ 88*f3e7f55eSRobert Mustacchi Dwarf_Small *_dwarf_pro_buffer(Dwarf_P_Debug dbg, int sectno, 89*f3e7f55eSRobert Mustacchi unsigned long nbytes); 90*f3e7f55eSRobert Mustacchi 91*f3e7f55eSRobert Mustacchi #define GET_CHUNK(dbg,sectno,ptr,nbytes,error) \ 92*f3e7f55eSRobert Mustacchi { \ 93*f3e7f55eSRobert Mustacchi (ptr) = _dwarf_pro_buffer((dbg),(sectno),(nbytes)); \ 94*f3e7f55eSRobert Mustacchi if ((ptr) == NULL) { \ 95*f3e7f55eSRobert Mustacchi DWARF_P_DBG_ERROR(dbg,DW_DLE_CHUNK_ALLOC,-1); \ 96*f3e7f55eSRobert Mustacchi } \ 97*f3e7f55eSRobert Mustacchi } 98*f3e7f55eSRobert Mustacchi 99*f3e7f55eSRobert Mustacchi 100*f3e7f55eSRobert Mustacchi 101*f3e7f55eSRobert Mustacchi int 102*f3e7f55eSRobert Mustacchi _dwarf_transform_arange_to_disk(Dwarf_P_Debug dbg, 103*f3e7f55eSRobert Mustacchi Dwarf_Error * error); 104*f3e7f55eSRobert Mustacchi 105*f3e7f55eSRobert Mustacchi /* These are for creating ELF section type codes. 106*f3e7f55eSRobert Mustacchi */ 107*f3e7f55eSRobert Mustacchi #if defined(linux) || defined(__BEOS__) || !defined(SHT_MIPS_DWARF) 108*f3e7f55eSRobert Mustacchi /* Intel's SoftSdv accepts only this */ 109*f3e7f55eSRobert Mustacchi #define SECTION_TYPE SHT_PROGBITS 110*f3e7f55eSRobert Mustacchi #else 111*f3e7f55eSRobert Mustacchi #define SECTION_TYPE SHT_MIPS_DWARF 112*f3e7f55eSRobert Mustacchi #endif 113