Home | History | Annotate | Download | only in inc
      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