/* * Copyright 2001-2008 Texas Instruments - http://www.ti.com/ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _GETSECTION_H_ #define _GETSECTION_H_ #ifndef _SIZE_T_DEFINED_ /* Android sets _SIZE_T_DEFINED_ on defining size_t */ typedef unsigned int size_t; #define _SIZE_T_DEFINED_ #endif #include "dynamic_loader.h" #ifdef __cplusplus extern "C" { /* C-only version */ #endif /* * Get Section Information * * This file provides an API add-on to the dynamic loader that allows the user * to query section information and extract section data from dynamic load * modules. * * NOTE: * Functions in this API assume that the supplied Dynamic_Loader_Stream object * supports the set_file_posn method. */ typedef void *DLOAD_module_info; /* opaque handle for module information */ /***************************************************************************** * Procedure DLOAD_module_open * * Parameters: * module The input stream that supplies the module image * syms Host-side malloc/free and error reporting functions. * Other methods are unused. * * Effect: * Reads header information from a dynamic loader module using the specified * stream object, and returns a handle for the module information. This * handle may be used in subsequent query calls to obtain information * contained in the module. * * Returns: * NULL if an error is encountered, otherwise a module handle for use * in subsequent operations. *****************************************************************************/ extern DLOAD_module_info DLOAD_module_open(struct Dynamic_Loader_Stream * module, struct Dynamic_Loader_Sym * syms); /***************************************************************************** * Procedure DLOAD_GetSectionInfo * * Parameters: * minfo Handle from DLOAD_module_open for this module * sectionName Pointer to the string name of the section desired * sectionInfo Address of a section info structure pointer to be initialized * * Effect: * Finds the specified section in the module information, and fills in * the provided LDR_SECTION_INFO structure. * * Returns: * TRUE for success, FALSE for section not found *****************************************************************************/ extern int DLOAD_GetSectionInfo(DLOAD_module_info minfo, const char *sectionName, const struct LDR_SECTION_INFO ** const sectionInfo); /***************************************************************************** * Procedure DLOAD_GetSectionNum * * Parameters: * minfo Handle from DLOAD_module_open for this module * secn Section number 0.. * sectionInfo Address of a section info structure pointer to be initialized * * Effect: * Finds the secn'th section in the specified module, and fills in * the provided LDR_SECTION_INFO structure. If there are less than "secn+1" * sections in the module, returns NULL. * * Returns: * TRUE for success, FALSE for failure *****************************************************************************/ extern int DLOAD_GetSectionNum(DLOAD_module_info minfo, const unsigned secn, const struct LDR_SECTION_INFO ** const sectionInfo); /***************************************************************************** * Procedure DLOAD_RoundUpSectionSize * * Parameters: * sectSize The actual size of the section in target addressable units * * Effect: * Rounds up the section size to the next multiple of 32 bits. * * Returns: * The rounded-up section size. *****************************************************************************/ extern size_t DLOAD_RoundUpSectionSize(LDR_ADDR sectSize); /***************************************************************************** * Procedure DLOAD_GetSection * * Parameters: * minfo Handle from DLOAD_module_open for this module * sectionInfo Pointer to a section info structure for the desired section * sectionData Buffer to contain the section initialized data * * Effect: * Copies the initialized data for the specified section into the * supplied buffer. * * Returns: * TRUE for success, FALSE for section not found *****************************************************************************/ extern int DLOAD_GetSection(DLOAD_module_info minfo, const struct LDR_SECTION_INFO * sectionInfo, void *sectionData); /***************************************************************************** * Procedure DLOAD_module_close * * Parameters: * minfo Handle from DLOAD_module_open for this module * * Effect: * Releases any storage associated with the module handle. On return, * the module handle is invalid. * * Returns: * Zero for success. On error, the number of errors detected is returned. * Individual errors are reported using syms->Error_Report(), where syms was * an argument to DLOAD_module_open *****************************************************************************/ extern void DLOAD_module_close(DLOAD_module_info minfo); #ifdef __cplusplus } #endif #endif /* _GETSECTION_H_ */