173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Copyright 2001-2008 Texas Instruments - http://www.ti.com/ 373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Licensed under the Apache License, Version 2.0 (the "License"); 573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * you may not use this file except in compliance with the License. 673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * You may obtain a copy of the License at 773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * http://www.apache.org/licenses/LICENSE-2.0 973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 1073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Unless required by applicable law or agreed to in writing, software 1173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * distributed under the License is distributed on an "AS IS" BASIS, 1273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * See the License for the specific language governing permissions and 1473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * limitations under the License. 1573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 1673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 1773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 1873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifndef _GETSECTION_H_ 1973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define _GETSECTION_H_ 2073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 2173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifndef _SIZE_T_DEFINED_ /* Android sets _SIZE_T_DEFINED_ on defining size_t */ 2273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavintypedef unsigned int size_t; 2373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define _SIZE_T_DEFINED_ 2473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 2573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include "dynamic_loader.h" 2673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 2773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef __cplusplus 2873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavinextern "C" { /* C-only version */ 2973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 3073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 3173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 3273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Get Section Information 3373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 3473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * This file provides an API add-on to the dynamic loader that allows the user 3573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * to query section information and extract section data from dynamic load 3673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * modules. 3773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 3873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NOTE: 3973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Functions in this API assume that the supplied Dynamic_Loader_Stream object 4073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * supports the set_file_posn method. 4173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 4273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 4373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin typedef void *DLOAD_module_info; /* opaque handle for module information */ 4473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 4573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/***************************************************************************** 4673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Procedure DLOAD_module_open 4773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 4873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 4973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * module The input stream that supplies the module image 5073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * syms Host-side malloc/free and error reporting functions. 5173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Other methods are unused. 5273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 5373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Effect: 5473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Reads header information from a dynamic loader module using the specified 5573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * stream object, and returns a handle for the module information. This 5673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * handle may be used in subsequent query calls to obtain information 5773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * contained in the module. 5873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 5973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 6073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NULL if an error is encountered, otherwise a module handle for use 6173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * in subsequent operations. 6273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *****************************************************************************/ 6373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern DLOAD_module_info DLOAD_module_open(struct Dynamic_Loader_Stream * 6473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin module, 6573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct Dynamic_Loader_Sym * syms); 6673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 6773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/***************************************************************************** 6873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Procedure DLOAD_GetSectionInfo 6973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 7073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 7173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * minfo Handle from DLOAD_module_open for this module 7273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * sectionName Pointer to the string name of the section desired 7373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * sectionInfo Address of a section info structure pointer to be initialized 7473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 7573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Effect: 7673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Finds the specified section in the module information, and fills in 7773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the provided LDR_SECTION_INFO structure. 7873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 7973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 8073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * TRUE for success, FALSE for section not found 8173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *****************************************************************************/ 8273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern int DLOAD_GetSectionInfo(DLOAD_module_info minfo, 8373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin const char *sectionName, 8473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin const struct LDR_SECTION_INFO ** 8573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin const sectionInfo); 8673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 8773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/***************************************************************************** 8873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Procedure DLOAD_GetSectionNum 8973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 9073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 9173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * minfo Handle from DLOAD_module_open for this module 9273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * secn Section number 0.. 9373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * sectionInfo Address of a section info structure pointer to be initialized 9473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 9573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Effect: 9673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Finds the secn'th section in the specified module, and fills in 9773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the provided LDR_SECTION_INFO structure. If there are less than "secn+1" 9873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * sections in the module, returns NULL. 9973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 10073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 10173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * TRUE for success, FALSE for failure 10273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *****************************************************************************/ 10373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern int DLOAD_GetSectionNum(DLOAD_module_info minfo, 10473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin const unsigned secn, 10573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin const struct LDR_SECTION_INFO ** 10673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin const sectionInfo); 10773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 10873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/***************************************************************************** 10973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Procedure DLOAD_RoundUpSectionSize 11073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 11173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 11273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * sectSize The actual size of the section in target addressable units 11373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 11473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Effect: 11573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Rounds up the section size to the next multiple of 32 bits. 11673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 11773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 11873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * The rounded-up section size. 11973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *****************************************************************************/ 12073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern size_t DLOAD_RoundUpSectionSize(LDR_ADDR sectSize); 12173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 12273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/***************************************************************************** 12373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Procedure DLOAD_GetSection 12473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 12573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 12673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * minfo Handle from DLOAD_module_open for this module 12773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * sectionInfo Pointer to a section info structure for the desired section 12873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * sectionData Buffer to contain the section initialized data 12973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 13073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Effect: 13173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Copies the initialized data for the specified section into the 13273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * supplied buffer. 13373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 13473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 13573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * TRUE for success, FALSE for section not found 13673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *****************************************************************************/ 13773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern int DLOAD_GetSection(DLOAD_module_info minfo, 13873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin const struct LDR_SECTION_INFO * sectionInfo, 13973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin void *sectionData); 14073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 14173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/***************************************************************************** 14273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Procedure DLOAD_module_close 14373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 14473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 14573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * minfo Handle from DLOAD_module_open for this module 14673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 14773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Effect: 14873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Releases any storage associated with the module handle. On return, 14973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the module handle is invalid. 15073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 15173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 15273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Zero for success. On error, the number of errors detected is returned. 15373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Individual errors are reported using syms->Error_Report(), where syms was 15473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * an argument to DLOAD_module_open 15573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *****************************************************************************/ 15673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern void DLOAD_module_close(DLOAD_module_info minfo); 15773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 15873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef __cplusplus 15973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin} 16073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 16173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif /* _GETSECTION_H_ */ 162