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