1 /*
2  *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
3  *
4  *  Licensed under the Apache License, Version 2.0 (the "License");
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  */
16 
17 
18 #ifndef _GETSECTION_H_
19 #define _GETSECTION_H_
20 
21 #ifndef _SIZE_T_DEFINED_	/* Android sets _SIZE_T_DEFINED_ on defining size_t */
22 typedef unsigned int size_t;
23 #define _SIZE_T_DEFINED_
24 #endif
25 #include "dynamic_loader.h"
26 
27 #ifdef __cplusplus
28 extern "C" {			/* C-only version */
29 #endif
30 
31 /*
32  * Get Section Information
33  *
34  * This file provides an API add-on to the dynamic loader that allows the user
35  * to query section information and extract section data from dynamic load
36  * modules.
37  *
38  * NOTE:
39  * Functions in this API assume that the supplied Dynamic_Loader_Stream object
40  * supports the set_file_posn method.
41  */
42 
43 	typedef void *DLOAD_module_info;	/* opaque handle for module information */
44 
45 /*****************************************************************************
46  * Procedure DLOAD_module_open
47  *
48  * Parameters:
49  *  module  The input stream that supplies the module image
50  *  syms    Host-side malloc/free and error reporting functions.
51  *          Other methods are unused.
52  *
53  * Effect:
54  *  Reads header information from a dynamic loader module using the specified
55  * stream object, and returns a handle for the module information.  This
56  * handle may be used in subsequent query calls to obtain information
57  * contained in the module.
58  *
59  * Returns:
60  *  NULL if an error is encountered, otherwise a module handle for use
61  * in subsequent operations.
62  *****************************************************************************/
63 	extern DLOAD_module_info DLOAD_module_open(struct Dynamic_Loader_Stream *
64 						   module,
65 						   struct Dynamic_Loader_Sym * syms);
66 
67 /*****************************************************************************
68  * Procedure DLOAD_GetSectionInfo
69  *
70  * Parameters:
71  *  minfo       Handle from DLOAD_module_open for this module
72  *  sectionName Pointer to the string name of the section desired
73  *  sectionInfo Address of a section info structure pointer to be initialized
74  *
75  * Effect:
76  *  Finds the specified section in the module information, and fills in
77  * the provided LDR_SECTION_INFO structure.
78  *
79  * Returns:
80  *  TRUE for success, FALSE for section not found
81  *****************************************************************************/
82 	extern int DLOAD_GetSectionInfo(DLOAD_module_info minfo,
83 					const char *sectionName,
84 					const struct LDR_SECTION_INFO **
85 					const sectionInfo);
86 
87 /*****************************************************************************
88  * Procedure DLOAD_GetSectionNum
89  *
90  * Parameters:
91  *  minfo       Handle from DLOAD_module_open for this module
92  *  secn        Section number 0..
93  *  sectionInfo Address of a section info structure pointer to be initialized
94  *
95  * Effect:
96  *  Finds the secn'th section in the specified module, and fills in
97  * the provided LDR_SECTION_INFO structure.  If there are less than "secn+1"
98  * sections in the module, returns NULL.
99  *
100  * Returns:
101  *  TRUE for success, FALSE for failure
102  *****************************************************************************/
103 	extern int DLOAD_GetSectionNum(DLOAD_module_info minfo,
104 				       const unsigned secn,
105 				       const struct LDR_SECTION_INFO **
106 				       const sectionInfo);
107 
108 /*****************************************************************************
109  * Procedure DLOAD_RoundUpSectionSize
110  *
111  * Parameters:
112  *  sectSize    The actual size of the section in target addressable units
113  *
114  * Effect:
115  *  Rounds up the section size to the next multiple of 32 bits.
116  *
117  * Returns:
118  *  The rounded-up section size.
119  *****************************************************************************/
120 	extern size_t DLOAD_RoundUpSectionSize(LDR_ADDR sectSize);
121 
122 /*****************************************************************************
123  * Procedure DLOAD_GetSection
124  *
125  * Parameters:
126  *  minfo       Handle from DLOAD_module_open for this module
127  *  sectionInfo Pointer to a section info structure for the desired section
128  *  sectionData Buffer to contain the section initialized data
129  *
130  * Effect:
131  *  Copies the initialized data for the specified section into the
132  * supplied buffer.
133  *
134  * Returns:
135  *  TRUE for success, FALSE for section not found
136  *****************************************************************************/
137 	extern int DLOAD_GetSection(DLOAD_module_info minfo,
138 				    const struct LDR_SECTION_INFO * sectionInfo,
139 				    void *sectionData);
140 
141 /*****************************************************************************
142  * Procedure DLOAD_module_close
143  *
144  * Parameters:
145  *  minfo       Handle from DLOAD_module_open for this module
146  *
147  * Effect:
148  *  Releases any storage associated with the module handle.  On return,
149  * the module handle is invalid.
150  *
151  * Returns:
152  *  Zero for success. On error, the number of errors detected is returned.
153  * Individual errors are reported using syms->Error_Report(), where syms was
154  * an argument to DLOAD_module_open
155  *****************************************************************************/
156 	extern void DLOAD_module_close(DLOAD_module_info minfo);
157 
158 #ifdef __cplusplus
159 }
160 #endif
161 #endif				/* _GETSECTION_H_ */
162