/*
* 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_ */