epoc32/include/e32rom.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
     1 // Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // e32\include\e32rom.h
    15 // 
    16 //
    17 
    18 #ifndef __E32ROM_H__
    19 #define __E32ROM_H__
    20 #include <e32cmn.h>
    21 //
    22 
    23 #ifndef __SECURITY_INFO_DEFINED__
    24 #define __SECURITY_INFO_DEFINED__
    25 /**
    26 @internalTechnology
    27 */
    28 //This struct must be identical in size and offset to the one in e32cmn.h
    29 //Functions need not be duplicated.  But must be same structurally.
    30 struct SCapabilitySet
    31 	{
    32 	enum {ENCapW=2};
    33 	TUint32 iCaps[ENCapW];
    34 	inline const TUint32& operator[] (TInt aIndex) const { return iCaps[aIndex]; }
    35 	inline TUint32& operator[] (TInt aIndex) { return iCaps[aIndex]; }
    36 	};
    37 
    38 /**
    39 @internalTechnology
    40 */
    41 //This struct must be identical in size and offset to the one in e32cmn.h
    42 //Functions need not be duplicated.  But must be same structurally.
    43 struct SSecurityInfo
    44 	{
    45 	TUint32	iSecureId;
    46 	TUint32	iVendorId;
    47 	SCapabilitySet iCaps;	
    48 	};
    49 #endif
    50 
    51 /**
    52 @internalTechnology
    53 @prototype
    54 */
    55 struct SDemandPagingConfig
    56 	{
    57 	TUint16 iMinPages;
    58 	TUint16 iMaxPages;
    59 	TUint16 iYoungOldRatio;
    60 	TUint16 iSpare[3];
    61 	};
    62 
    63 /**
    64 @internalTechnology
    65 @prototype
    66 */
    67 struct SRomPageInfo
    68 	{
    69 	enum TAttributes
    70 		{
    71 		EPageable = 1<<0
    72 		};
    73 	enum TCompression
    74 		{
    75 		ENoCompression,
    76 		EBytePair,
    77 		};
    78 	TUint32 iDataStart;
    79 	TUint16 iDataSize;
    80 	TUint8  iCompressionType;
    81 	TUint8  iPagingAttributes;
    82 	};
    83 
    84 /**
    85 @publishedPartner
    86 @released
    87 
    88 Defines the size of the header for a ROM image.
    89 
    90 @see TRomHeader
    91 */
    92 const TUint KRomHeaderSize=0x200;
    93 //
    94 
    95 
    96 /**
    97 @publishedPartner
    98 @released
    99 
   100 The format of the header for a ROM image.
   101 
   102 This is retained as part of the ROM image.
   103 It is generated by the rombuild tool, and is used by the Bootstrap and
   104 the kernel.
   105 */
   106 class TRomHeader
   107 	{
   108 public:
   109 	enum { KDefaultDebugPort = -1 };
   110 	enum { KNumTraceMask = 8 };  // this is also defined in e23const.h
   111 
   112 __ASSERT_COMPILE(KNumTraceMask==KNumTraceMaskWords);
   113 
   114 public:
   115     /**
   116     Reserved for a small amount of Bootstrap code, if required.
   117     The first 4 bytes of the binary image typically contains
   118     a branch instruction which jumps to code at offset 0x100.
   119     */
   120 	TUint8 iJump[124]; 
   121 	
   122 	                                     
   123     /**
   124     The restart vector.
   125     */	                                     
   126 	TLinAddr iRestartVector;
   127 	
   128 	
   129 	/**
   130 	The date and time that the ROM image was built, in microseconds.
   131 	*/
   132 	TInt64 iTime;
   133 	
   134 	
   135 	/**
   136 	The high order 32 bits of the ROM image build date & time.
   137 	*/
   138 	TUint32 iTimeHi;
   139 	
   140 	
   141 	/**
   142 	The virtual address of the base of the ROM.
   143 	*/
   144 	TLinAddr iRomBase;
   145 	
   146 	
   147 	/**
   148 	The size of the ROM image, in bytes.
   149 	
   150 	This includes the second section for sectioned ROMs.
   151 	*/
   152 	TUint32 iRomSize;
   153 	
   154 	
   155 	/**
   156 	The virtual address of the TRomRootDirectoryList structure.
   157 
   158     @see TRomRootDirectoryList 
   159 	*/
   160 	TLinAddr iRomRootDirectoryList;
   161 	
   162 	
   163 	/**
   164 	The virtual address of kernel data, when in RAM.
   165 	*/
   166 	TLinAddr iKernDataAddress;
   167 	
   168 	
   169 	/**
   170 	The virtual address of the top of the kernel region, when in RAM.
   171 	*/
   172 	TLinAddr iKernelLimit;
   173 	
   174 	
   175 	/**
   176 	The virtual address of the primarys ROM file image header.
   177 
   178     @see TRomImageHeader 
   179 	*/
   180 	TLinAddr iPrimaryFile;
   181 	
   182 	
   183 	/**
   184 	The virtual address of the secondarys ROM file image header.
   185 	
   186 	@see TRomImageHeader 
   187 	*/
   188 	TLinAddr iSecondaryFile;
   189 	
   190 	
   191 	/**
   192 	A computed constant that causes the 32-bit checksum of the image to equal
   193 	the value specified by the "romchecksum" keyword.
   194 	*/
   195 	TUint iCheckSum;
   196 	
   197 	
   198 	/**
   199 	A unique number identifying the hardware for which this ROM image
   200 	has been built.
   201 
   202     Note that this is only used for testing purposes.
   203 	*/
   204 	TUint32 iHardware;
   205 	
   206 	
   207 	/**
   208 	A bitmask identifying which of the languages are supported by the ROM image,
   209 	as specified by the "languages" keyword.
   210 
   211     Note that this is only used for testing purposes.
   212 	*/
   213 	TInt64 iLanguage;
   214 	
   215 	
   216 	/**
   217 	Contains the flags that define the security options in force.
   218 	
   219 	@see TKernelConfigFlags
   220 	*/
   221 	TUint32 iKernelConfigFlags;
   222 
   223 	/**
   224 	The virtual address of the TRomExceptionSearchTable structure.
   225 
   226 	@see TRomExceptionSearchTable
   227 	*/
   228 	TLinAddr iRomExceptionSearchTable;
   229 	
   230 	/**
   231 	Current size of ROM header (Previously iUnused3)
   232 	If value is 0x69966996 then header size = 0x100
   233 	*/
   234 	TUint32 iRomHeaderSize;
   235 	
   236 	
   237 	/**
   238 	The virtual address of the ROM section header, if the ROM is sectioned.
   239 	
   240 	@see TRomSectionHeader
   241 	*/
   242 	TLinAddr iRomSectionHeader;
   243 	
   244 	
   245 	/**
   246 	The total supervisor data size, i.e. the amount of memory mapped for
   247 	the kernel data chunk.
   248 	*/
   249 	TInt iTotalSvDataSize;
   250 	
   251 	
   252 	/**
   253 	The virtual address of the TRomEntry for the Variant file.
   254 	
   255 	@see TRomEntry
   256 	*/
   257 	TLinAddr iVariantFile;
   258 
   259 	
   260 	/**
   261 	The virtual address of TRomEntry for the first extension file, if it exists.
   262 	
   263 	If there is more than one extension, then the next extension field in
   264 	the extensions TRomImageHeader points to the TRomEntry for
   265 	that next extension.
   266 	
   267     @see TRomImageHeader::iNextExtension
   268    	@see TRomImageHeader
   269 	@see TRomEntry
   270 	*/
   271 	TLinAddr iExtensionFile;
   272 	
   273 	
   274 	/**
   275 	The virtual adress of the first area to be relocated into RAM, as defined
   276 	using the "area" keyword.
   277 	*/
   278 	TLinAddr iRelocInfo;
   279 	
   280 	
   281 	/**
   282 	The old position of the kernel trace mask, see iTraceMask below
   283 	*/
   284 	TUint32  iOldTraceMask;		// The old location of the kernel tracemask
   285 	
   286 	
   287 	/**
   288 	The virtual address of the user data area.
   289 	*/
   290 	TLinAddr iUserDataAddress;	// non-MMU stuff
   291 
   292 	
   293 	/**
   294 	The total size of the user data.
   295 	*/
   296 	TInt iTotalUserDataSize;	// non-MMU stuff
   297 	
   298 	
   299 	/**
   300 	A value that is interpreted by the Bootstrap and kernel as the debug port
   301 	to be used.
   302 	*/
   303 	TUint32 iDebugPort;			// semantic is ASSP-specific
   304 	
   305 	
   306 	/**
   307 	The ROM version number.
   308 	*/
   309 	TVersion iVersion;
   310 	
   311 	
   312 	/**
   313 	The type of compression used for the image.
   314 	
   315 	This is a UID, or 0 if there is no compression.
   316 	*/
   317 	TUint32 iCompressionType;	// compression type used
   318 	
   319 	
   320 	/**
   321 	The size of the image after compression.
   322 	*/
   323 	TUint32 iCompressedSize;	// Size after compression
   324 	
   325 	
   326 	/**
   327 	The size of the image before compression.
   328 	*/
   329 	TUint32 iUncompressedSize;	// Size before compression
   330 	
   331 	
   332 	/**
   333 	*/
   334 	TUint32 iDisabledCapabilities[2];   // 2==SSecurityInfo::ENCapW
   335 
   336 
   337 	/**
   338 	The initial value for the kernel trace masks.
   339 	*/
   340 	TUint32  iTraceMask[KNumTraceMask];  // The kernel debug trace masks
   341 
   342 	/**
   343 	Initial values for fast-trace filter.
   344 	*/
   345 	TUint32 iInitialBTraceFilter[8];
   346 
   347 	/**
   348 	Initial value for size of fast-trace buffer.
   349 	*/
   350 	TInt iInitialBTraceBuffer;
   351 
   352 	/**
   353 	Initial value for size of fast-trace mode.
   354 	*/
   355 	TInt iInitialBTraceMode;
   356 
   357 	/**
   358 	Offset, in bytes from ROM start, for the start of the pageable ROM area.
   359 	*/
   360 	TInt iPageableRomStart;
   361 
   362 	/**
   363 	Size, in bytes, of the pageable ROM area.
   364 	*/
   365 	TInt iPageableRomSize;
   366 
   367 	/**
   368 	Offset, in bytes from ROM start, for the page index. (Array of SRomPageInfo objects.)
   369 	@internalTechnology
   370 	@prototype
   371 	*/
   372 	TInt iRomPageIndex;
   373 
   374 	/**
   375 	@internalTechnology
   376 	@prototype
   377 	*/
   378 	SDemandPagingConfig iDemandPagingConfig;
   379 
   380 	/**
   381 	@internalComponent
   382 	*/
   383 	TUint32 iSpare[40];   // spare : force size to be correct
   384 
   385 	};
   386 
   387 __ASSERT_COMPILE(sizeof(TRomHeader)==KRomHeaderSize);
   388 __ASSERT_COMPILE(SCapabilitySet::ENCapW==2); // TRomHeader::iDisabledCapabilities has hard coded 2 because h2inc.pl does not parse scoped identifiers
   389 
   390 
   391 
   392 
   393 /**
   394 @publishedPartner
   395 @released
   396 
   397 Contains information about a root directory.
   398 
   399 A variable number of these are contained in a TRomRootDirectoryList structure.
   400 
   401 @see TRomRootDirectoryList
   402 */
   403 class TRootDirInfo
   404 	{
   405 public:
   406     /**
   407     The hardware variant for this root directory entry.
   408     */
   409 	TUint iHardwareVariant;
   410 	
   411 	
   412 	/**
   413 	The virtual address of the root directory.
   414 	
   415 	@see TRomDir
   416 	*/
   417 	TLinAddr iAddressLin;
   418 	};
   419 
   420 
   421 
   422 
   423 /**
   424 @publishedPartner
   425 @released
   426 
   427 A structure that allows you to find the root directories for each hardware
   428 Variant supported by the ROM.
   429 
   430 Usually, there is only one Variant and one root directory. However, a ROM can
   431 have multiple root directories and directory trees, one for each hardware Variant
   432 supported by the ROM. This ensures that the file server only sees the files
   433 that are relevant to the hardware on which it is running. In this case, there
   434 are multiple entries in the table describing each root directory.
   435 */
   436 class TRomRootDirectoryList
   437 	{
   438 public:
   439     /**
   440     The number of root directory entries.
   441     */
   442 	TInt iNumRootDirs;
   443 	
   444 	
   445 	/**
   446 	The root directory entries.
   447 
   448     The number of entries is defined by iNumRootDirs.
   449 	*/
   450 	TRootDirInfo iRootDir[1];
   451 	};
   452 
   453 
   454 
   455 
   456 /**
   457 @publishedPartner
   458 @released
   459 
   460 The format of a ROM section header.
   461 */
   462 class TRomSectionHeader
   463 	{
   464 public:
   465 
   466     /**
   467     The ROM version number.
   468     */
   469 	TVersion iVersion;
   470 	
   471 	
   472 	/**
   473 	A computed constant that causes the 32-bit checksum of the upper
   474 	section to equal zero.
   475 
   476 	Upper sections checksum to zero so that the overall ROM checksum in
   477 	the TRomHeader is unaffected by changes to this section.
   478 	
   479 	@see TRomHeader
   480 	*/
   481 	TUint iCheckSum;
   482 	
   483 	
   484 	/**
   485 	The date and time that the ROM image was built, in microseconds.
   486 	*/
   487 	TInt64 iTime;
   488 
   489 	
   490 	/**
   491 	A bitmask identifying which of the languages are supported by the ROM image,
   492 	as specified by the "languages" keyword.
   493     */
   494 	TInt64 iLanguage;
   495 	};
   496 //
   497 
   498 
   499 
   500 
   501 /**
   502 @publishedPartner
   503 @released
   504 
   505 A structure that describes a file or a directory.
   506 */
   507 class TRomEntry
   508 	{
   509 public:
   510     
   511      
   512     /**
   513     The size of the file.
   514     */
   515 	TInt iSize;
   516 	
   517 	
   518 	/**
   519 	The virtual address of the file, or of a TRomDir structure if this entry
   520 	describes another directory.
   521 	
   522 	@see TRomDir
   523 	*/
   524 	TUint32 iAddressLin;
   525 
   526 
   527 	/**
   528 	Attributes.
   529 	*/
   530 	TUint8 iAtt;
   531 
   532 
   533 	/**
   534 	The length of the file or directory name.
   535 	*/
   536 	TUint8 iNameLength;
   537 
   538 
   539 	/**
   540 	A variable length field containing the file or directory name.
   541 	*/
   542 	TUint8 iName[2];
   543 	};
   544 
   545 
   546 
   547 
   548 /**
   549 @publishedPartner
   550 @released
   551 
   552 The size of the fixed part of a TRomEntry structure.
   553 */
   554 const TInt KRomEntrySize=(sizeof(TRomEntry)-2);
   555 
   556 
   557 
   558 
   559 //
   560 class TRomDirSortInfo;
   561 
   562 /**
   563 @publishedPartner
   564 @released
   565 
   566 A structure that describes the first part of a ROM directory.
   567 
   568 This part of a ROM directory is a sequence of variable length entries,
   569 each describing a file or a subdirectory, in the order that the members
   570 were specified in the original obey file; the variable length entries are
   571 the TRomEntry structures that follow the iSize member.
   572 
   573 This part of the ROM directory is followed by a structure defined
   574 by TRomDirSortInfo, which contains a pair of sorted tables suitable for
   575 a binary search.
   576 
   577 @see TRomDirSortInfo
   578 */
   579 class TRomDir
   580 	{
   581 public:
   582 	inline const TRomDirSortInfo* SortInfo() const;
   583 	inline const TRomEntry* SortedEntry(TInt aIndex) const;
   584 	inline TInt SubDirCount() const;
   585 	inline TInt FileCount() const;
   586 	inline TInt EntryCount() const;
   587 	TInt BinarySearch(const TDesC& aName, TInt aLengthLimit, TInt aMode, TBool aDir) const;
   588 	const TRomDir* FindLeafDir(const TDesC& aPath) const;
   589 public:
   590 
   591     /**
   592     The number of bytes occupied by the set of TRomEntry structures
   593     that follow this field.
   594     
   595     @see TRomDir::iEntry
   596     */
   597 	TInt iSize;
   598 
   599 	
   600 	/**
   601 	A variable number of entries, each of which describes a file or a directory.
   602 	
   603 	Each entry is 4-byte aligned, and may have padding to ensure that the entry
   604 	is 4-bye aligned.
   605 	*/
   606 	TRomEntry iEntry;
   607 	};
   608 
   609 
   610 
   611 
   612 /**
   613 @publishedPartner
   614 @released
   615 
   616 A structure that describes the second part of a ROM directory.
   617 
   618 It contains a pair of sorted tables suitable for
   619 a binary search. The sorted tables contain unsigned 16-bit scaled offsets,
   620 which point to the start of the corresponding TRomEntry in the TRomDir.
   621 
   622 @see TRomDir
   623 */
   624 class TRomDirSortInfo
   625 	{
   626 public:
   627 
   628 	/**
   629     The number of subdirectories in this directory.
   630 	*/
   631 	TUint16	iSubDirCount;		// number of subdirectories in this directory
   632 	
   633 	
   634 	/**
   635 	The number of files in this directory.
   636 	*/
   637 	TUint16 iFileCount;			// number of non-directory files in this directory
   638 	
   639 	
   640 	/**
   641 	The two sorted tables:
   642 	
   643 	1. First one is a table of 16-bit scaled offsets to the directory entries.
   644 	
   645 	2. Second one is a table of 16-bit scaled ofsets to the file entries.
   646 	   This table starts at offset 2*iSubDirCount from the start of the first table.
   647 	   
   648 	If the offset is X, then the corresponding TRomEntry is at address:
   649 	@code
   650 	4*X +(char*)address of the first TRomEntry
   651 	@endcode
   652 	For example, the first entry is at offset zero.
   653 	
   654 	The entries are sorted in the order of the UTF-8 representation of
   655 	the names in a case insensitive way (compare the C function stricmp()).
   656 	In effect, this folds upper and lowercase ASCII characters but leaves all
   657 	other Unicode characters unchanged.
   658 	*/
   659 	TUint16 iEntryOffset[1];	// offsets of each entry from TRomDir::iEntry; extend
   660 								// order of offsets is directories first, then files, lexicographic order within each group
   661 	};
   662 
   663 
   664 /**
   665 Gets a pointer to the start of the second part of the ROM directory,
   666 as described by the TRomDirSortInfo structure.
   667 
   668 @return The pointer to the start of the second part of the ROM directory.
   669 */
   670 inline const TRomDirSortInfo* TRomDir::SortInfo() const
   671 	{ return (const TRomDirSortInfo*)( ((TLinAddr)&iEntry) + ( (iSize+sizeof(TUint32)-1) &~ (sizeof(TUint32)-1) )); }
   672 
   673 
   674 
   675 
   676 /**
   677 Gets the TRomEntry corresponding to the file or directory located at
   678 the specified index position within the sorted tables.
   679 
   680 @param aIndex The index of the entry within the sorted tables.
   681               Note that for the purpose of this function, the two tables
   682               are treated as one single table.
   683               
   684 @return The required TRomEntry              
   685 */
   686 inline const TRomEntry* TRomDir::SortedEntry(TInt aIndex) const
   687 	{
   688 	const TRomDirSortInfo* s = SortInfo();
   689 	return (const TRomEntry*)(((TLinAddr)&iEntry) + s->iEntryOffset[aIndex] * sizeof(TUint32));
   690 	}
   691 
   692 
   693 
   694 
   695 /**
   696 Gets the number of subdirectories in the directory.
   697 
   698 @return The number of subdirectories.
   699 */
   700 inline TInt TRomDir::SubDirCount() const
   701 	{ return SortInfo()->iSubDirCount; }
   702 
   703 	
   704 	
   705 	
   706 /**
   707 Gets the number of files in the directory.
   708 
   709 @return The number of files.
   710 */	
   711 inline TInt TRomDir::FileCount() const
   712 	{ return SortInfo()->iFileCount; }
   713 
   714 
   715 
   716 
   717 /**
   718 Gets the total number of files and subdirectories in the directory.
   719 
   720 @return The total number of files and subdirectories.
   721 */	
   722 inline TInt TRomDir::EntryCount() const
   723 	{
   724 	const TRomDirSortInfo* s = SortInfo();
   725 	return s->iSubDirCount + s->iFileCount;
   726 	}
   727 
   728 
   729 
   730 
   731 //
   732 // Header of ROM image files under the new scheme. (dlls & exes)
   733 //
   734 /**
   735 @publishedPartner
   736 @released
   737 */
   738 const TUint32 KRomImageFlagPrimary			=0x80000000u;
   739 
   740 /**
   741 @publishedPartner
   742 @released
   743 */
   744 const TUint32 KRomImageFlagVariant			=0x40000000u;
   745 
   746 /**
   747 @publishedPartner
   748 @released
   749 */
   750 const TUint32 KRomImageFlagExtension		=0x20000000u;
   751 
   752 /**
   753 @publishedPartner
   754 @released
   755 */
   756 const TUint32 KRomImageFlagDevice			=0x10000000u;
   757 
   758 /**
   759 @publishedPartner
   760 @released
   761 */
   762 const TUint32 KRomImageFlagsKernelMask		=0xf0000000u;
   763 
   764 /**
   765 @publishedPartner
   766 @released
   767 */
   768 const TUint32 KRomImageFlagSecondary		=0x08000000u;
   769 
   770 /**
   771 @publishedPartner
   772 @released
   773 */
   774 const TUint32 KRomImageFlagData				=0x04000000u;	// image has data and is not extension or variant
   775 
   776 /**
   777 @publishedPartner
   778 @released
   779 */
   780 const TUint32 KRomImageFlagDataInit			=0x02000000u;	// image or non-EXE dependencies would require data initialisation
   781 
   782 /**
   783 @publishedPartner
   784 @released
   785 */
   786 const TUint32 KRomImageFlagDataPresent		=0x01000000u;	// image or any dependencies have data
   787 
   788 /**
   789 @publishedPartner
   790 @released
   791 */
   792 const TUint32 KRomImageFlagExeInTree		=0x00800000u;	// image depends on EXE
   793 
   794 /**
   795 @publishedPartner
   796 @released
   797 */
   798 const TUint32 KRomImageFlagDll				=0x00000001u;
   799 
   800 /**
   801 @publishedPartner
   802 @released
   803 */
   804 const TUint32 KRomImageFlagFixedAddressExe	=0x00000004u;
   805 
   806 /**
   807 @publishedPartner
   808 @released
   809 */
   810 const TUint32 KRomImageABIMask				=0x00000018u;
   811 
   812 /**
   813 @publishedPartner
   814 @released
   815 */
   816 const TUint32 KRomImageABI_GCC98r2			=0x00000000u;	// for ARM
   817 
   818 /**
   819 @publishedPartner
   820 @released
   821 */
   822 const TUint32 KRomImageABI_EABI				=0x00000008u;	// for ARM
   823 
   824 /**
   825 @publishedPartner
   826 @released
   827 */
   828 const TUint32 KRomImageEptMask				=0x000000e0u;	// entry point type
   829 
   830 /**
   831 @publishedPartner
   832 @released
   833 */
   834 const TInt	  KRomImageEptShift				=5;
   835 
   836 /**
   837 @publishedPartner
   838 @released
   839 */
   840 const TUint32 KRomImageEpt_Eka1				=0x00000000u;
   841 
   842 /**
   843 @publishedPartner
   844 @released
   845 */
   846 const TUint32 KRomImageEpt_Eka2				=0x00000020u;
   847 
   848 /**
   849 @internalTechnology
   850 @released
   851 */
   852 const TUint KRomImageFlagUnpaged			=0x00000100u;
   853 
   854 
   855 /**
   856 @internalTechnology
   857 @released
   858 */
   859 const TUint KRomImageFlagPaged				=0x00000200u;
   860 
   861 
   862 /**
   863 @internalTechnology
   864 @released
   865 Flag to indicate when named symbol export data present in image
   866 */
   867 const TUint KRomImageNmdExpData				=0x00000400u;
   868 
   869 /**
   870 @internalTechnology
   871 @released
   872 Flag to indicate debuggability of this image.
   873 */
   874 const TUint KRomImageDebuggable			=0x00000800u;
   875 
   876 class TDllRefTable;
   877 
   878 /**
   879 @publishedPartner
   880 @released
   881 
   882 The format of the header for a ROM file image.
   883 
   884 The structure of a file image is based on the native image file format,
   885 but this can be compressed in the ROM image, as the relocation information
   886 and the .idata section are discarded once the file is fixed up.
   887 
   888 The Import Address Table (IAT) is also removed and each reference to
   889 an IAT entry is converted into a reference to the associated Export Directory
   890 entry in the corresponding DLL.
   891 
   892 ROM file images have the following sections:
   893 
   894 @code
   895 The header (as described by this structure)
   896 .text  - code
   897 .rdata - constant (read-only) data
   898 .edata - the export directory
   899 .data  - initialised data that is copied to RAM when the executable runs.
   900 The DLL reference table (a TDllRefTable structure), which is a list of DLLs
   901 used by the executable.
   902 @endcode
   903 
   904 @see TRomImageHeader::iDllRefTable
   905 @see TDllRefTable
   906 */
   907 class TRomImageHeader
   908 	{
   909 public:
   910 
   911     /**
   912     The UID1 for the file.
   913     
   914     @see TUidType
   915     */
   916 	TUint32	iUid1;
   917 
   918 	
   919     /**
   920     The UID2 for the file.
   921 
   922     @see TUidType
   923     */
   924 	TUint32	iUid2;
   925 
   926 	
   927     /**
   928     The UID3 for the file.
   929 
   930     @see TUidType
   931     */
   932 	TUint32	iUid3;
   933 	
   934 	
   935 	/**
   936 	The checksum of the UIDs
   937 	*/
   938 	TUint32	iUidChecksum;
   939 	
   940 	
   941 	/**
   942 	The entrypoint of this executable, i.e. the offset within this file.
   943 	*/
   944 	TUint32 iEntryPoint;
   945 	
   946 	
   947 	/**
   948 	This executables code address.
   949 	*/
   950 	TUint32 iCodeAddress;
   951 
   952 
   953 	/**
   954 	This executables data address.
   955 	*/
   956 	TUint32 iDataAddress;
   957 
   958 	
   959 	/**
   960 	The size of the code.
   961 	
   962 	This includes the size of the constant data.
   963 	*/
   964 	TInt iCodeSize;
   965 	
   966 	
   967 	/**
   968 	The size of the executable code.
   969 	
   970 	This is the value of (iCodeSize - the size of the constant data).
   971 	*/
   972 	TInt iTextSize;
   973 	
   974 	
   975 	/**
   976 	The data size.
   977 	*/
   978 	TInt iDataSize;
   979 	
   980 	
   981 	/**
   982 	The size of the .bss (the zero-filled data)
   983 	*/
   984 	TInt iBssSize;
   985 	
   986 	
   987 	/**
   988 	The minimum size of the heap.
   989 	*/
   990 	TInt iHeapSizeMin;
   991 	
   992 	
   993 	/**
   994 	The maximum size of the heap.
   995 	*/
   996 	TInt iHeapSizeMax;
   997 	
   998 	
   999 	/**
  1000 	The size of the stack.
  1001 	*/
  1002 	TInt iStackSize;
  1003 	
  1004 	
  1005 	/**
  1006 	The address of the DLL reference table.
  1007 	
  1008 	@see TDllRefTable
  1009 	*/
  1010 	TDllRefTable* iDllRefTable;
  1011 	
  1012 	
  1013 	/**
  1014 	The number of functions exported by this executable.
  1015 	*/
  1016 	TInt iExportDirCount;
  1017 	
  1018 	
  1019 	/**
  1020 	The address of the export directory, which is a simple list of functions
  1021 	that can be indexed by ordinal.
  1022 	*/
  1023 	TUint32 iExportDir;
  1024 	
  1025 	
  1026 	/**
  1027 	Security information, details of which are internal to Symbian.
  1028 	*/
  1029 	SSecurityInfo iS;
  1030 	
  1031 	
  1032 	/**
  1033 	The version number of the tools used to generate this file image.
  1034 	*/
  1035 	TVersion iToolsVersion;
  1036 	
  1037 	
  1038 	/**
  1039 	Flags field.
  1040 	*/
  1041 	TUint32 iFlags;
  1042 	
  1043 	
  1044 	/**
  1045 	The priority of the process.
  1046 	*/
  1047 	TProcessPriority iPriority;
  1048 	
  1049 	
  1050 	/**
  1051 	The virtual base address of the data and .bss, where the process expects
  1052 	its data chunk to be when it runs.
  1053 	*/
  1054 	TUint32 iDataBssLinearBase;
  1055 	
  1056 	
  1057 	/**
  1058 	The address of the TRomEntry for the next extension file.
  1059 	
  1060 	This field is only used if there is more than one extension.
  1061 	The first extension is found using the TRomHeader.
  1062 	
  1063 	@see TRomEntry
  1064 	@see TRomHeader
  1065 	*/
  1066 	TLinAddr iNextExtension;
  1067 	
  1068 	
  1069 	/**
  1070 	A number denoting the hardware Variant.
  1071 	
  1072 	It is used to determine whether this executable can run
  1073 	on a given system.
  1074 	*/
  1075 	TUint32 iHardwareVariant;
  1076 	
  1077 	
  1078 	/**
  1079 	The total data size, including space reserved for DLLs
  1080 	*/
  1081 	TInt iTotalDataSize;	// data+bss + space reserved for DLLs
  1082 	
  1083 	
  1084 	/**
  1085 	The module version.
  1086 	*/
  1087 	TUint32 iModuleVersion;
  1088 
  1089 	/**
  1090 	The address of the Exception Descriptor if present.
  1091 	0 if no Exception descriptor
  1092 	*/
  1093 	TLinAddr iExceptionDescriptor;
  1094 	};	
  1095 	
  1096 	
  1097 	
  1098 	
  1099 //
  1100 // Header for extension ROMs
  1101 // Equivalent to TRomHeader
  1102 //
  1103 
  1104 /**
  1105 @publishedPartner
  1106 @released
  1107 
  1108 The format of a ROM extension header.
  1109 */
  1110 class TExtensionRomHeader
  1111 	{	
  1112 public:
  1113     
  1114     /**
  1115     The extension ROM image version number.
  1116     */
  1117 	TVersion iVersion;
  1118 	
  1119 	
  1120 	/**
  1121 	The virtual address of the base of the extension ROM.
  1122 	*/
  1123 	TLinAddr iRomBase;
  1124 	
  1125 	
  1126 	/**
  1127 	The size of the extension ROM image.
  1128 	*/
  1129 	TUint32 iRomSize;
  1130 	
  1131 	
  1132 	/**
  1133 	The virtual address of the TRomRootDirList structure for
  1134 	the combined kernel+extension ROM image.
  1135 	
  1136 	@see TRomRootDirList
  1137 	*/
  1138 	TLinAddr iRomRootDirectoryList;
  1139 	
  1140 	
  1141 	/**
  1142 	The date and time that the extension ROM image was built, in microseconds.
  1143 	*/
  1144 	TInt64 iTime;
  1145 	
  1146 	
  1147 	/**
  1148 	The extension ROM image checksum
  1149 	*/
  1150 	TUint iCheckSum;
  1151 
  1152 
  1153 	//
  1154 	/**
  1155 	Copy of the kernel ROM image version number.
  1156 	*/
  1157 	TVersion iKernelVersion;
  1158 	
  1159 	
  1160 	/**
  1161 	Copy of the kernel ROM image build date & time.
  1162 	*/
  1163 	TInt64 iKernelTime;
  1164 	
  1165 	
  1166 	/**
  1167 	Copy of the kernel ROM image checksum.
  1168 	*/
  1169 	TUint iKernelCheckSum;
  1170 	//
  1171 
  1172 
  1173 	/**
  1174 	The type of compression used for the image.
  1175 	
  1176 	This is a UID, or 0 if there is no compression.
  1177 	*/
  1178 	TUint32 iCompressionType;	// compression type used
  1179 	
  1180 	
  1181 	/**
  1182 	The size of the image after compression.
  1183 	*/
  1184 	TUint32 iCompressedSize;	// Size after compression
  1185 	
  1186 	
  1187 	/**
  1188 	The size of the image before compression.
  1189 	*/
  1190 	TUint32 iUncompressedSize;	// Size before compression
  1191 	
  1192 	
  1193 	/**
  1194 	The virtual address of the TRomExceptionSearchTable structure.
  1195 
  1196 	@see TRomExceptionSearchTable
  1197 	*/
  1198 	TLinAddr iRomExceptionSearchTable;
  1199 
  1200 	
  1201 	/**
  1202 	Reserved for future use.
  1203 	*/
  1204 	TUint32 iPad[32-15]; // sizeof(TExtensionRomHeader)=128
  1205 	};
  1206 
  1207 
  1208 
  1209 
  1210 
  1211 /**
  1212 @publishedPartner
  1213 @released
  1214 
  1215 A list of DLLs that an executable needs in order to run.
  1216 
  1217 Each DLL referenced in this list has a pointer to a TRomImageHeader structure
  1218 that describes that DLL. This allows the DLL loader to search
  1219 a dependency chain, and ensure that all required DLLs are loaded.
  1220 
  1221 @see TRomImageHeader
  1222 */
  1223 class TDllRefTable
  1224 	{
  1225 public:
  1226 
  1227     /**
  1228     Flags field.
  1229     */
  1230 	TUint16 iFlags;
  1231 	
  1232 	
  1233 	/**
  1234 	The number of referenced DLLs in this list.
  1235 	*/
  1236 	TUint16 iNumberOfEntries;
  1237 	
  1238 	
  1239 	/**
  1240 	A set of pointers to the TRomImageHeader structures for each referenced DLL.
  1241 	*/
  1242 	TRomImageHeader* iEntry[1];
  1243 	};
  1244 
  1245 #endif