kernel/eka/include/e32rom.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/e32rom.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,1313 @@
+// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32\include\e32rom.h
+// 
+// WARNING: This file contains some APIs which are internal and are subject
+//          to change without notice. Such APIs should therefore not be used
+//          outside the Kernel and Hardware Services package.
+//
+
+#ifndef __E32ROM_H__
+#define __E32ROM_H__
+#include <e32cmn.h>
+#include <e32def_private.h>
+
+//
+
+#ifndef __SECURITY_INFO_DEFINED__
+#define __SECURITY_INFO_DEFINED__
+/**
+@internalTechnology
+*/
+//This struct must be identical in size and offset to the one in e32cmn.h
+//Functions need not be duplicated.  But must be same structurally.
+struct SCapabilitySet
+	{
+	enum {ENCapW=2};
+	TUint32 iCaps[ENCapW];
+	inline const TUint32& operator[] (TInt aIndex) const { return iCaps[aIndex]; }
+	inline TUint32& operator[] (TInt aIndex) { return iCaps[aIndex]; }
+	};
+
+/**
+@internalTechnology
+*/
+//This struct must be identical in size and offset to the one in e32cmn.h
+//Functions need not be duplicated.  But must be same structurally.
+struct SSecurityInfo
+	{
+	TUint32	iSecureId;
+	TUint32	iVendorId;
+	SCapabilitySet iCaps;	
+	};
+#endif
+
+/**
+@internalTechnology
+@prototype
+*/
+struct SDemandPagingConfig
+	{
+	TUint16 iMinPages;
+	TUint16 iMaxPages;
+	TUint16 iYoungOldRatio;
+	TUint16 iSpare[3];		// iSpare[0:1] are used for emulated rom paging, 
+							// iSpare[2] is used for the old to oldest ratio.
+	};
+
+/**
+@internalTechnology
+@prototype
+*/
+struct SRomPageInfo
+	{
+	enum TAttributes
+		{
+		EPageable = 1<<0
+		};
+	enum TCompression  // todo: compression type not exclusive to rom pages
+		{
+		ENoCompression,
+		EBytePair,
+		};
+	TUint32 iDataStart;
+	TUint16 iDataSize;
+	TUint8  iCompressionType;
+	TUint8  iPagingAttributes;
+	};
+
+/**
+@publishedPartner
+@released
+
+Defines the size of the header for a ROM image.
+
+@see TRomHeader
+*/
+const TUint KRomHeaderSize=0x200;
+//
+
+
+/**
+@publishedPartner
+@released
+
+The format of the header for a ROM image.
+
+This is retained as part of the ROM image.
+It is generated by the rombuild tool, and is used by the Bootstrap and
+the kernel.
+*/
+class TRomHeader
+	{
+public:
+	enum { KDefaultDebugPort = -1 };
+	enum { KNumTraceMask = 8 };  // this is also defined in e23const.h
+
+__ASSERT_COMPILE(KNumTraceMask==KNumTraceMaskWords);
+
+public:
+    /**
+    Reserved for a small amount of Bootstrap code, if required.
+    The first 4 bytes of the binary image typically contains
+    a branch instruction which jumps to code at offset 0x100.
+    */
+	TUint8 iJump[124]; 
+	
+	                                     
+    /**
+    The restart vector.
+    */	                                     
+	TLinAddr iRestartVector;
+	
+	
+	/**
+	The date and time that the ROM image was built, in microseconds.
+	*/
+	TInt64 iTime;
+	
+	
+	/**
+	The high order 32 bits of the ROM image build date & time.
+	*/
+	TUint32 iTimeHi;
+	
+	
+	/**
+	The virtual address of the base of the ROM.
+	*/
+	TLinAddr iRomBase;
+	
+	
+	/**
+	The size of the ROM image, in bytes.
+	
+	This includes the second section for sectioned ROMs.
+	*/
+	TUint32 iRomSize;
+	
+	
+	/**
+	The virtual address of the TRomRootDirectoryList structure.
+
+    @see TRomRootDirectoryList 
+	*/
+	TLinAddr iRomRootDirectoryList;
+	
+	
+	/**
+	The virtual address of kernel data, when in RAM.
+	*/
+	TLinAddr iKernDataAddress;
+	
+	
+	/**
+	The virtual address of the top of the kernel region, when in RAM.
+	*/
+	TLinAddr iKernelLimit;
+	
+	
+	/**
+	The virtual address of the primarys ROM file image header.
+
+    @see TRomImageHeader 
+	*/
+	TLinAddr iPrimaryFile;
+	
+	
+	/**
+	The virtual address of the secondarys ROM file image header.
+	
+	@see TRomImageHeader 
+	*/
+	TLinAddr iSecondaryFile;
+	
+	
+	/**
+	A computed constant that causes the 32-bit checksum of the image to equal
+	the value specified by the "romchecksum" keyword.
+	*/
+	TUint iCheckSum;
+	
+	
+	/**
+	A unique number identifying the hardware for which this ROM image
+	has been built.
+
+    Note that this is only used for testing purposes.
+	*/
+	TUint32 iHardware;
+	
+	
+	/**
+	A bitmask identifying which of the languages are supported by the ROM image,
+	as specified by the "languages" keyword.
+
+    Note that this is only used for testing purposes.
+	*/
+	TInt64 iLanguage;
+	
+	
+	/**
+	Contains the flags that define the security options in force.
+	
+	@see TKernelConfigFlags
+	*/
+	TUint32 iKernelConfigFlags;
+
+	/**
+	The virtual address of the TRomExceptionSearchTable structure.
+
+	@see TRomExceptionSearchTable
+	*/
+	TLinAddr iRomExceptionSearchTable;
+	
+	/**
+	Current size of ROM header (Previously iUnused3)
+	If value is 0x69966996 then header size = 0x100
+	*/
+	TUint32 iRomHeaderSize;
+	
+	
+	/**
+	The virtual address of the ROM section header, if the ROM is sectioned.
+	
+	@see TRomSectionHeader
+	*/
+	TLinAddr iRomSectionHeader;
+	
+	
+	/**
+	The total supervisor data size, i.e. the amount of memory mapped for
+	the kernel data chunk.
+	*/
+	TInt iTotalSvDataSize;
+	
+	
+	/**
+	The virtual address of the TRomEntry for the Variant file.
+	
+	@see TRomEntry
+	*/
+	TLinAddr iVariantFile;
+
+	
+	/**
+	The virtual address of TRomEntry for the first extension file, if it exists.
+	
+	If there is more than one extension, then the next extension field in
+	the extensions TRomImageHeader points to the TRomEntry for
+	that next extension.
+	
+    @see TRomImageHeader::iNextExtension
+   	@see TRomImageHeader
+	@see TRomEntry
+	*/
+	TLinAddr iExtensionFile;
+	
+	
+	/**
+	The virtual adress of the first area to be relocated into RAM, as defined
+	using the "area" keyword.
+	*/
+	TLinAddr iRelocInfo;
+	
+	
+	/**
+	The old position of the kernel trace mask, see iTraceMask below
+	*/
+	TUint32  iOldTraceMask;		// The old location of the kernel tracemask
+	
+	
+	/**
+	The virtual address of the user data area.
+	*/
+	TLinAddr iUserDataAddress;	// non-MMU stuff
+
+	
+	/**
+	The total size of the user data.
+	*/
+	TInt iTotalUserDataSize;	// non-MMU stuff
+	
+	
+	/**
+	A value that is interpreted by the Bootstrap and kernel as the debug port
+	to be used.
+	*/
+	TUint32 iDebugPort;			// semantic is ASSP-specific
+	
+	
+	/**
+	The ROM version number.
+	*/
+	TVersion iVersion;
+	
+	
+	/**
+	The type of compression used for the image.
+	
+	This is a UID, or 0 if there is no compression.
+	*/
+	TUint32 iCompressionType;	// compression type used
+	
+	
+	/**
+	The size of the image after compression.
+	*/
+	TUint32 iCompressedSize;	// Size after compression
+	
+	
+	/**
+	The size of the image before compression.
+	*/
+	TUint32 iUncompressedSize;	// Size before compression
+	
+	
+	/**
+	*/
+	TUint32 iDisabledCapabilities[2];   // 2==SSecurityInfo::ENCapW
+
+
+	/**
+	The initial value for the kernel trace masks.
+	*/
+	TUint32  iTraceMask[KNumTraceMask];  // The kernel debug trace masks
+
+	/**
+	Initial values for fast-trace filter.
+	*/
+	TUint32 iInitialBTraceFilter[8];
+
+	/**
+	Initial value for size of fast-trace buffer.
+	*/
+	TInt iInitialBTraceBuffer;
+
+	/**
+	Initial value for size of fast-trace mode.
+	*/
+	TInt iInitialBTraceMode;
+
+	/**
+	Offset, in bytes from ROM start, for the start of the pageable ROM area.
+	*/
+	TInt iPageableRomStart;
+
+	/**
+	Size, in bytes, of the pageable ROM area.
+	*/
+	TInt iPageableRomSize;
+
+	/**
+	Offset, in bytes from ROM start, for the page index. (Array of SRomPageInfo objects.)
+	@internalTechnology
+	@prototype
+	*/
+	TInt iRomPageIndex;
+
+	/**
+	@internalTechnology
+	@prototype
+	*/
+	SDemandPagingConfig iDemandPagingConfig;
+
+	/**
+	Offset, in bytes from ROM start, for the start of compressed un-paged ROM area
+	@internalTechnology
+	@prototype
+	*/
+	TUint32 iCompressedUnpagedStart;
+	
+	
+	/**
+	Size, in bytes of the un-paged part of image after compression.
+	@internalTechnology
+	@prototype
+	*/
+	TUint32 iUnpagedCompressedSize;
+	
+	
+	/**
+	Size, in bytes of the un-paged part of image before compression.
+	@internalTechnology
+	@prototype
+	*/
+	TUint32 iUnpagedUncompressedSize;
+	
+	/**
+	The virtual address at which the start of the HCR repository file is located in the unpaged part of the Core ROM Image.
+	@internalTechnology
+	@prototype
+	*/
+	TUint32 iHcrFileAddress;
+	
+	/**
+	@internalComponent
+	*/
+	TUint32 iSpare[36];   // spare : force size to be correct
+
+	};
+
+__ASSERT_COMPILE(sizeof(TRomHeader)==KRomHeaderSize);
+__ASSERT_COMPILE(SCapabilitySet::ENCapW==2); // TRomHeader::iDisabledCapabilities has hard coded 2 because h2inc.pl does not parse scoped identifiers
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Contains information about a root directory.
+
+A variable number of these are contained in a TRomRootDirectoryList structure.
+
+@see TRomRootDirectoryList
+*/
+class TRootDirInfo
+	{
+public:
+    /**
+    The hardware variant for this root directory entry.
+    */
+	TUint iHardwareVariant;
+	
+	
+	/**
+	The virtual address of the root directory.
+	
+	@see TRomDir
+	*/
+	TLinAddr iAddressLin;
+	};
+
+
+
+
+/**
+@publishedPartner
+@released
+
+A structure that allows you to find the root directories for each hardware
+Variant supported by the ROM.
+
+Usually, there is only one Variant and one root directory. However, a ROM can
+have multiple root directories and directory trees, one for each hardware Variant
+supported by the ROM. This ensures that the file server only sees the files
+that are relevant to the hardware on which it is running. In this case, there
+are multiple entries in the table describing each root directory.
+*/
+class TRomRootDirectoryList
+	{
+public:
+    /**
+    The number of root directory entries.
+    */
+	TInt iNumRootDirs;
+	
+	
+	/**
+	The root directory entries.
+
+    The number of entries is defined by iNumRootDirs.
+	*/
+	TRootDirInfo iRootDir[1];
+	};
+
+
+
+
+/**
+@publishedPartner
+@released
+
+The format of a ROM section header.
+*/
+class TRomSectionHeader
+	{
+public:
+
+    /**
+    The ROM version number.
+    */
+	TVersion iVersion;
+	
+	
+	/**
+	A computed constant that causes the 32-bit checksum of the upper
+	section to equal zero.
+
+	Upper sections checksum to zero so that the overall ROM checksum in
+	the TRomHeader is unaffected by changes to this section.
+	
+	@see TRomHeader
+	*/
+	TUint iCheckSum;
+	
+	
+	/**
+	The date and time that the ROM image was built, in microseconds.
+	*/
+	TInt64 iTime;
+
+	
+	/**
+	A bitmask identifying which of the languages are supported by the ROM image,
+	as specified by the "languages" keyword.
+    */
+	TInt64 iLanguage;
+	};
+//
+
+
+
+
+/**
+@publishedPartner
+@released
+
+A structure that describes a file or a directory.
+*/
+class TRomEntry
+	{
+public:
+    
+     
+    /**
+    The size of the file.
+    */
+	TInt iSize;
+	
+	
+	/**
+	The virtual address of the file, or of a TRomDir structure if this entry
+	describes another directory.
+	
+	@see TRomDir
+	*/
+	TUint32 iAddressLin;
+
+
+	/**
+	Attributes.
+	*/
+	TUint8 iAtt;
+
+
+	/**
+	The length of the file or directory name.
+	*/
+	TUint8 iNameLength;
+
+
+	/**
+	A variable length field containing the file or directory name.
+	*/
+	TUint8 iName[2];
+	};
+
+
+
+
+/**
+@publishedPartner
+@released
+
+The size of the fixed part of a TRomEntry structure.
+*/
+const TInt KRomEntrySize=(sizeof(TRomEntry)-2);
+
+
+
+
+//
+class TRomDirSortInfo;
+
+/**
+@publishedPartner
+@released
+
+A structure that describes the first part of a ROM directory.
+
+This part of a ROM directory is a sequence of variable length entries,
+each describing a file or a subdirectory, in the order that the members
+were specified in the original obey file; the variable length entries are
+the TRomEntry structures that follow the iSize member.
+
+This part of the ROM directory is followed by a structure defined
+by TRomDirSortInfo, which contains a pair of sorted tables suitable for
+a binary search.
+
+@see TRomDirSortInfo
+*/
+class TRomDir
+	{
+public:
+	inline const TRomDirSortInfo* SortInfo() const;
+	inline const TRomEntry* SortedEntry(TInt aIndex) const;
+	inline TInt SubDirCount() const;
+	inline TInt FileCount() const;
+	inline TInt EntryCount() const;
+	TInt BinarySearch(const TDesC& aName, TInt aLengthLimit, TInt aMode, TBool aDir) const;
+	const TRomDir* FindLeafDir(const TDesC& aPath) const;
+public:
+
+    /**
+    The number of bytes occupied by the set of TRomEntry structures
+    that follow this field.
+    
+    @see TRomDir::iEntry
+    */
+	TInt iSize;
+
+	
+	/**
+	A variable number of entries, each of which describes a file or a directory.
+	
+	Each entry is 4-byte aligned, and may have padding to ensure that the entry
+	is 4-bye aligned.
+	*/
+	TRomEntry iEntry;
+	};
+
+
+
+
+/**
+@publishedPartner
+@released
+
+A structure that describes the second part of a ROM directory.
+
+It contains a pair of sorted tables suitable for
+a binary search. The sorted tables contain unsigned 16-bit scaled offsets,
+which point to the start of the corresponding TRomEntry in the TRomDir.
+
+@see TRomDir
+*/
+class TRomDirSortInfo
+	{
+public:
+
+	/**
+    The number of subdirectories in this directory.
+	*/
+	TUint16	iSubDirCount;		// number of subdirectories in this directory
+	
+	
+	/**
+	The number of files in this directory.
+	*/
+	TUint16 iFileCount;			// number of non-directory files in this directory
+	
+	
+	/**
+	The two sorted tables:
+	
+	1. First one is a table of 16-bit scaled offsets to the directory entries.
+	
+	2. Second one is a table of 16-bit scaled ofsets to the file entries.
+	   This table starts at offset 2*iSubDirCount from the start of the first table.
+	   
+	If the offset is X, then the corresponding TRomEntry is at address:
+	@code
+	4*X +(char*)address of the first TRomEntry
+	@endcode
+	For example, the first entry is at offset zero.
+	
+	The entries are sorted in the order of the UTF-8 representation of
+	the names in a case insensitive way (compare the C function stricmp()).
+	In effect, this folds upper and lowercase ASCII characters but leaves all
+	other Unicode characters unchanged.
+	*/
+	TUint16 iEntryOffset[1];	// offsets of each entry from TRomDir::iEntry; extend
+								// order of offsets is directories first, then files, lexicographic order within each group
+	};
+
+
+/**
+Gets a pointer to the start of the second part of the ROM directory,
+as described by the TRomDirSortInfo structure.
+
+@return The pointer to the start of the second part of the ROM directory.
+*/
+inline const TRomDirSortInfo* TRomDir::SortInfo() const
+	{ return (const TRomDirSortInfo*)( ((TLinAddr)&iEntry) + ( (iSize+sizeof(TUint32)-1) &~ (sizeof(TUint32)-1) )); }
+
+
+
+
+/**
+Gets the TRomEntry corresponding to the file or directory located at
+the specified index position within the sorted tables.
+
+@param aIndex The index of the entry within the sorted tables.
+              Note that for the purpose of this function, the two tables
+              are treated as one single table.
+              
+@return The required TRomEntry              
+*/
+inline const TRomEntry* TRomDir::SortedEntry(TInt aIndex) const
+	{
+	const TRomDirSortInfo* s = SortInfo();
+	return (const TRomEntry*)(((TLinAddr)&iEntry) + s->iEntryOffset[aIndex] * sizeof(TUint32));
+	}
+
+
+
+
+/**
+Gets the number of subdirectories in the directory.
+
+@return The number of subdirectories.
+*/
+inline TInt TRomDir::SubDirCount() const
+	{ return SortInfo()->iSubDirCount; }
+
+	
+	
+	
+/**
+Gets the number of files in the directory.
+
+@return The number of files.
+*/	
+inline TInt TRomDir::FileCount() const
+	{ return SortInfo()->iFileCount; }
+
+
+
+
+/**
+Gets the total number of files and subdirectories in the directory.
+
+@return The total number of files and subdirectories.
+*/	
+inline TInt TRomDir::EntryCount() const
+	{
+	const TRomDirSortInfo* s = SortInfo();
+	return s->iSubDirCount + s->iFileCount;
+	}
+
+
+
+
+//
+// Header of ROM image files under the new scheme. (dlls & exes)
+//
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagPrimary			=0x80000000u;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagVariant			=0x40000000u;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagExtension		=0x20000000u;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagDevice			=0x10000000u;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagsKernelMask		=0xf0000000u;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagSecondary		=0x08000000u;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagData				=0x04000000u;	// image has data and is not extension or variant
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagDataInit			=0x02000000u;	// image or non-EXE dependencies would require data initialisation
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagDataPresent		=0x01000000u;	// image or any dependencies have data
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagExeInTree		=0x00800000u;	// image depends on EXE
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagDll				=0x00000001u;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageFlagFixedAddressExe	=0x00000004u;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageABIMask				=0x00000018u;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageABI_GCC98r2			=0x00000000u;	// for ARM
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageABI_EABI				=0x00000008u;	// for ARM
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageEptMask				=0x000000e0u;	// entry point type
+
+/**
+@publishedPartner
+@released
+*/
+const TInt	  KRomImageEptShift				=5;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageEpt_Eka1				=0x00000000u;
+
+/**
+@publishedPartner
+@released
+*/
+const TUint32 KRomImageEpt_Eka2				=0x00000020u;
+
+/**
+Flag to indicate the image should not be code paged.
+@internalTechnology
+@released
+*/
+const TUint KRomImageFlagCodeUnpaged			=0x00000100u;
+
+
+/**
+Flag to indicate the image should be code paged.
+@internalTechnology
+@released
+*/
+const TUint KRomImageFlagCodePaged				=0x00000200u;
+
+
+/**
+@internalTechnology
+@released
+Flag to indicate when named symbol export data present in image
+*/
+const TUint KRomImageNmdExpData				=0x00000400u;
+
+/**
+@internalTechnology
+@released
+Flag to indicate debuggability of this image.
+*/
+const TUint KRomImageDebuggable				=0x00000800u;
+
+/**
+Flag to indicate the image will default to not be data paged,
+this can be overridden when creating chunks, threads and user heaps.
+@internalTechnology
+@released
+*/
+const TUint KRomImageFlagDataUnpaged			= 0x00001000u;
+
+/**
+Flag to indicate the image will default to be data paged,
+this can be overridden when creating chunks, threads and user heaps.
+@internalTechnology
+@released
+*/
+const TUint KRomImageFlagDataPaged			= 0x00002000u;
+
+/**
+Mask for the data paging flag bits.
+@internalTechnology
+@released
+*/
+const TUint KRomImageDataPagingMask	= KRomImageFlagDataUnpaged | KRomImageFlagDataPaged;
+
+/**
+@released
+Flag to indicate SMP safety of this image.
+*/
+const TUint KRomImageSMPSafe			=0x00004000u;
+
+class TDllRefTable;
+
+/**
+@publishedPartner
+@released
+
+The format of the header for a ROM file image.
+
+The structure of a file image is based on the native image file format,
+but this can be compressed in the ROM image, as the relocation information
+and the .idata section are discarded once the file is fixed up.
+
+The Import Address Table (IAT) is also removed and each reference to
+an IAT entry is converted into a reference to the associated Export Directory
+entry in the corresponding DLL.
+
+ROM file images have the following sections:
+
+@code
+The header (as described by this structure)
+.text  - code
+.rdata - constant (read-only) data
+.edata - the export directory
+.data  - initialised data that is copied to RAM when the executable runs.
+The DLL reference table (a TDllRefTable structure), which is a list of DLLs
+used by the executable.
+@endcode
+
+@see TRomImageHeader::iDllRefTable
+@see TDllRefTable
+*/
+class TRomImageHeader
+	{
+public:
+
+    /**
+    The UID1 for the file.
+    
+    @see TUidType
+    */
+	TUint32	iUid1;
+
+	
+    /**
+    The UID2 for the file.
+
+    @see TUidType
+    */
+	TUint32	iUid2;
+
+	
+    /**
+    The UID3 for the file.
+
+    @see TUidType
+    */
+	TUint32	iUid3;
+	
+	
+	/**
+	The checksum of the UIDs
+	*/
+	TUint32	iUidChecksum;
+	
+	
+	/**
+	The entrypoint of this executable, i.e. the offset within this file.
+	*/
+	TUint32 iEntryPoint;
+	
+	
+	/**
+	This executables code address.
+	*/
+	TUint32 iCodeAddress;
+
+
+	/**
+	This executables data address.
+	*/
+	TUint32 iDataAddress;
+
+	
+	/**
+	The size of the code.
+	
+	This includes the size of the constant data.
+	*/
+	TInt iCodeSize;
+	
+	
+	/**
+	The size of the executable code.
+	
+	This is the value of (iCodeSize - the size of the constant data).
+	*/
+	TInt iTextSize;
+	
+	
+	/**
+	The data size.
+	*/
+	TInt iDataSize;
+	
+	
+	/**
+	The size of the .bss (the zero-filled data)
+	*/
+	TInt iBssSize;
+	
+	
+	/**
+	The minimum size of the heap.
+	*/
+	TInt iHeapSizeMin;
+	
+	
+	/**
+	The maximum size of the heap.
+	*/
+	TInt iHeapSizeMax;
+	
+	
+	/**
+	The size of the stack.
+	*/
+	TInt iStackSize;
+	
+	
+	/**
+	The address of the DLL reference table.
+	
+	@see TDllRefTable
+	*/
+	TDllRefTable* iDllRefTable;
+	
+	
+	/**
+	The number of functions exported by this executable.
+	*/
+	TInt iExportDirCount;
+	
+	
+	/**
+	The address of the export directory, which is a simple list of functions
+	that can be indexed by ordinal.
+	*/
+	TUint32 iExportDir;
+	
+	
+	/**
+	Security information, details of which are internal to Symbian.
+	*/
+	SSecurityInfo iS;
+	
+	
+	/**
+	The version number of the tools used to generate this file image.
+	*/
+	TVersion iToolsVersion;
+	
+	
+	/**
+	Flags field.
+	*/
+	TUint32 iFlags;
+	
+	
+	/**
+	The priority of the process.
+	*/
+	TProcessPriority iPriority;
+	
+	
+	/**
+	The virtual base address of the data and .bss, where the process expects
+	its data chunk to be when it runs.
+	*/
+	TUint32 iDataBssLinearBase;
+	
+	
+	/**
+	The address of the TRomEntry for the next extension file.
+	
+	This field is only used if there is more than one extension.
+	The first extension is found using the TRomHeader.
+	
+	@see TRomEntry
+	@see TRomHeader
+	*/
+	TLinAddr iNextExtension;
+	
+	
+	/**
+	A number denoting the hardware Variant.
+	
+	It is used to determine whether this executable can run
+	on a given system.
+	*/
+	TUint32 iHardwareVariant;
+	
+	
+	/**
+	The total data size, including space reserved for DLLs
+	*/
+	TInt iTotalDataSize;	// data+bss + space reserved for DLLs
+	
+	
+	/**
+	The module version.
+	*/
+	TUint32 iModuleVersion;
+
+	/**
+	The address of the Exception Descriptor if present.
+	0 if no Exception descriptor
+	*/
+	TLinAddr iExceptionDescriptor;
+	};	
+	
+	
+	
+	
+//
+// Header for extension ROMs
+// Equivalent to TRomHeader
+//
+
+/**
+@publishedPartner
+@released
+
+The format of a ROM extension header.
+*/
+class TExtensionRomHeader
+	{	
+public:
+    
+    /**
+    The extension ROM image version number.
+    */
+	TVersion iVersion;
+	
+	
+	/**
+	The virtual address of the base of the extension ROM.
+	*/
+	TLinAddr iRomBase;
+	
+	
+	/**
+	The size of the extension ROM image.
+	*/
+	TUint32 iRomSize;
+	
+	
+	/**
+	The virtual address of the TRomRootDirList structure for
+	the combined kernel+extension ROM image.
+	
+	@see TRomRootDirList
+	*/
+	TLinAddr iRomRootDirectoryList;
+	
+	
+	/**
+	The date and time that the extension ROM image was built, in microseconds.
+	*/
+	TInt64 iTime;
+	
+	
+	/**
+	The extension ROM image checksum
+	*/
+	TUint iCheckSum;
+
+
+	//
+	/**
+	Copy of the kernel ROM image version number.
+	*/
+	TVersion iKernelVersion;
+	
+	
+	/**
+	Copy of the kernel ROM image build date & time.
+	*/
+	TInt64 iKernelTime;
+	
+	
+	/**
+	Copy of the kernel ROM image checksum.
+	*/
+	TUint iKernelCheckSum;
+	//
+
+
+	/**
+	The type of compression used for the image.
+	
+	This is a UID, or 0 if there is no compression.
+	*/
+	TUint32 iCompressionType;	// compression type used
+	
+	
+	/**
+	The size of the image after compression.
+	*/
+	TUint32 iCompressedSize;	// Size after compression
+	
+	
+	/**
+	The size of the image before compression.
+	*/
+	TUint32 iUncompressedSize;	// Size before compression
+	
+	
+	/**
+	The virtual address of the TRomExceptionSearchTable structure.
+
+	@see TRomExceptionSearchTable
+	*/
+	TLinAddr iRomExceptionSearchTable;
+
+	
+	/**
+	Reserved for future use.
+	*/
+	TUint32 iPad[32-15]; // sizeof(TExtensionRomHeader)=128
+	};
+
+
+
+
+
+/**
+@publishedPartner
+@released
+
+A list of DLLs that an executable needs in order to run.
+
+Each DLL referenced in this list has a pointer to a TRomImageHeader structure
+that describes that DLL. This allows the DLL loader to search
+a dependency chain, and ensure that all required DLLs are loaded.
+
+@see TRomImageHeader
+*/
+class TDllRefTable
+	{
+public:
+
+    /**
+    Flags field.
+    */
+	TUint16 iFlags;
+	
+	
+	/**
+	The number of referenced DLLs in this list.
+	*/
+	TUint16 iNumberOfEntries;
+	
+	
+	/**
+	A set of pointers to the TRomImageHeader structures for each referenced DLL.
+	*/
+	TRomImageHeader* iEntry[1];
+	};
+
+#endif
+