From 22df9855d9adfb0e67d7ed8fb4ba41d503b48bef Mon Sep 17 00:00:00 2001 From: yury Date: Sun, 20 Jul 2008 20:28:37 +0000 Subject: [PATCH] * For some unknown reason WM 6.1 requires .idata section to be read only. Otherwise it refuses to load DLLs greater than 64KB. Earlier versions of WinCE load DLLs regardless of .idata flags. git-svn-id: trunk@11421 - --- compiler/ogcoff.pas | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/ogcoff.pas b/compiler/ogcoff.pas index c4f093027b..d2cdcffdaf 100644 --- a/compiler/ogcoff.pas +++ b/compiler/ogcoff.pas @@ -2120,7 +2120,8 @@ const pemagic : array[0..3] of byte = ( peoptheader : tcoffpeoptheader; textExeSec, dataExeSec, - bssExeSec : TExeSection; + bssExeSec, + idataExeSec : TExeSection; hassymbols : boolean; procedure UpdateDataDir(const secname:string;idx:longint); @@ -2258,6 +2259,17 @@ const pemagic : array[0..3] of byte = ( djoptheader.entry:=EntrySym.offset; FWriter.write(djoptheader,sizeof(djoptheader)); end; + + { For some unknown reason WM 6.1 requires .idata section to be read only. + Otherwise it refuses to load DLLs greater than 64KB. + Earlier versions of WinCE load DLLs regardless of .idata flags. } + if target_info.system in [system_arm_wince,system_i386_wince] then + begin + idataExeSec:=FindExeSection('.idata'); + if idataExeSec<>nil then + idataExeSec.SecOptions:=idataExeSec.SecOptions - [oso_write] + [oso_readonly]; + end; + { Section headers } ExeSectionList.ForEachCall(@ExeSectionList_write_header,nil); { Section data }