xref: /titanic_50/usr/src/lib/libdwarf/common/pro_section.h (revision f3e7f55e73a39377d55a030f124cc86b3b66a9cc)
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