Bladeren bron

Merged revisions 11421 via svnmerge from
http://svn.freepascal.org/svn/fpc/trunk

........
r11421 | yury | 2008-07-20 23:28:37 +0300 (Вс, 20 июл 2008) | 1 line

* 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: branches/fixes_2_2@11422 -

yury 17 jaren geleden
bovenliggende
commit
b619ec6e36
1 gewijzigde bestanden met toevoegingen van 13 en 1 verwijderingen
  1. 13 1
      compiler/ogcoff.pas

+ 13 - 1
compiler/ogcoff.pas

@@ -2113,7 +2113,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);
@@ -2248,6 +2249,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 }