Przeglądaj źródła

* fix for 8801. mmap constants inconsistancy. Old constants are aliased for compat. non portable moved to OS specific units (merge)

git-svn-id: trunk@7265 -
marco 18 lat temu
rodzic
commit
fd6f6cf7e9

+ 2 - 0
rtl/bsd/ostypes.inc

@@ -322,7 +322,9 @@ Type
  
 CONST
  { Constansts for MMAP }
+{$ifdef FPC_IS_SYSTEM}
   MAP_PRIVATE   =2;
+{$endif}
   MAP_ANONYMOUS =$1000;
 
     {*************************************************************************}

+ 13 - 0
rtl/freebsd/freebsd.pas

@@ -185,6 +185,19 @@ Type
   function kse_release(timeout: PTimeSpec): cInt; extdecl;
   function kse_switchin(tmbx: PKseThrMailBox; flags: cInt): cInt; extdecl;
 
+Const
+ MAP_FILE         = $0000;  { map from file (default) }
+ MAP_ANON         = $1000;  { allocated from memory, swap space }
+   
+ MAP_RENAME       = $0020; { Sun: rename private pages to file }
+ MAP_NORESERVE    = $0040; { Sun: don't reserve needed swap area }
+ //  MAP_INHERIT      = $0080; { region is retained after exec. not anymore in 5.x? }
+ //  MAP_NOEXTEND     = $0100; { for MAP_FILE, don't change file size. not anymore in 5.x? }
+ MAP_HASSEMAPHORE = $0200; { region may contain semaphores }
+ MAP_STACK        = $0400; { region grows down, like a stack }
+ MAP_NOSYNC       = $0800; { page to but do not sync underlying file}
+ MAP_NOCORE       = $20000;{ dont include these pages in a coredump}
+
 implementation
 
 Uses

+ 6 - 0
rtl/linux/linux.pp

@@ -160,6 +160,12 @@ const
   KD_TEXT0        = 2;    {obsolete}
   KD_TEXT1        = 3;    {obsolete}
 
+  MAP_GROWSDOWN  = $100;       { stack-like segment }
+  MAP_DENYWRITE  = $800;       { ETXTBSY }
+  MAP_EXECUTABLE = $1000;      { mark it as an executable }
+  MAP_LOCKED     = $2000;      { pages are locked }
+  MAP_NORESERVE  = $4000;      { don't check for reservations }
+
 type
   TCloneFunc = function(args:pointer):longint;cdecl;
 

+ 2 - 0
rtl/linux/ostypes.inc

@@ -236,7 +236,9 @@ CONST
   S_IFSOCK= 49152; { socket }
 
   { Constansts for MMAP }
+ {$IFDEF FPC_IS_SYSTEM}
   MAP_PRIVATE   =2;
+ {$ENDIF}
   MAP_ANONYMOUS =$20;
 
 

+ 2 - 0
rtl/solaris/ostypes.inc

@@ -234,7 +234,9 @@ Const
 
 Const
  { Constansts for MMAP }
+ {$ifdef FPC_IS_SYSTEM}
   MAP_PRIVATE   =2;
+ {$endif}
   MAP_ANONYMOUS =$100;
 
 type

+ 19 - 0
rtl/unix/baseunix.pp

@@ -47,6 +47,25 @@ Uses UnixType;
 
 {$i genfunch.inc}
 
+{ Fairly portable constants. I'm not going to waste time to duplicate and alias
+them anywhere}
+
+Const
+  MAP_FAILED    = pointer(-1);  { mmap() has failed }
+  MAP_SHARED    =  $1;          { Share changes }
+  MAP_PRIVATE   =  $2;          { Changes are private }
+  MAP_TYPE      =  $f;          { Mask for type of mapping }
+  MAP_FIXED     = $10;          { Interpret addr exactly }
+
+// MAP_ANON(YMOUS) is OS dependant but used in the RTL and in ostypes.inc
+// Under BSD without -YMOUS, so alias it:
+  MAP_ANON	= MAP_ANONYMOUS;
+
+  PROT_READ     =  $1;          { page can be read }
+  PROT_WRITE    =  $2;          { page can be written }
+  PROT_EXEC     =  $4;          { page can be executed }
+  PROT_NONE     =  $0;          { page can not be accessed }
+
 implementation
 
 {$ifdef hassysctl}

+ 13 - 34
rtl/unix/unix.pp

@@ -146,46 +146,25 @@ Function  GetHostName:String;
      Memory functions
 ***************************}
 
-const
-  PROT_READ  = $1;             { page can be read }
-  PROT_WRITE = $2;             { page can be written }
-  PROT_EXEC  = $4;             { page can be executed }
-  PROT_NONE  = $0;             { page can not be accessed }
-
-  MAP_FAILED    = pointer(-1); { mmap() has failed }
-  MAP_SHARED    = $1;          { Share changes }
-//  MAP_PRIVATE   = $2;          { Changes are private }
-  MAP_TYPE      = $f;          { Mask for type of mapping }
-  MAP_FIXED     = $10;         { Interpret addr exactly }
-//  MAP_ANONYMOUS = $20;         { don't use a file }
+Const
+// The portable MAP_* and PROT_ constants are exported from unit Unix for compability.
+
+  PROT_READ  = baseunix.PROT_READ;             { page can be read }
+  PROT_WRITE = baseunix.PROT_WRITE;             { page can be written }
+  PROT_EXEC  = baseunix.PROT_EXEC;             { page can be executed }
+  PROT_NONE  = baseunix.PROT_NONE;             { page can not be accessed }
+
+  MAP_FAILED    = baseunix.MAP_FAILED;	      { mmap() failed }
+  MAP_SHARED    = baseunix.MAP_SHARED;        { Share changes }
+  MAP_PRIVATE   = baseunix.MAP_PRIVATE;       { Changes are private }
+  MAP_TYPE      = baseunix.MAP_TYPE;          { Mask for type of mapping }
+  MAP_FIXED     = baseunix.MAP_FIXED;         { Interpret addr exactly }
 
 { Flags to `msync'.  }
   MS_ASYNC        = 1;               { Sync memory asynchronously.  }
   MS_SYNC         = 4;               { Synchronous memory sync.  }
   MS_INVALIDATE   = 2;               { Invalidate the caches.  }
 
-{$ifdef Linux}
-  MAP_GROWSDOWN  = $100;       { stack-like segment }
-  MAP_DENYWRITE  = $800;       { ETXTBSY }
-  MAP_EXECUTABLE = $1000;      { mark it as an executable }
-  MAP_LOCKED     = $2000;      { pages are locked }
-  MAP_NORESERVE  = $4000;      { don't check for reservations }
-{$else}
-  {$ifdef FreeBSD}
-  // FreeBSD defines MAP_COPY=MAP_PRIVATE=$2;
-  MAP_FILE         = $0000;  { map from file (default) }
-  MAP_ANON         = $1000;  { allocated from memory, swap space }
-
-  MAP_RENAME       = $0020; { Sun: rename private pages to file }
-  MAP_NORESERVE    = $0040; { Sun: don't reserve needed swap area }
-  MAP_INHERIT      = $0080; { region is retained after exec }
-  MAP_NOEXTEND     = $0100; { for MAP_FILE, don't change file size }
-  MAP_HASSEMAPHORE = $0200; { region may contain semaphores }
-  MAP_STACK        = $0400; { region grows down, like a stack }
-  MAP_NOSYNC       = $0800; { page to but do not sync underlying file}
-  MAP_NOCORE       = $20000;{ dont include these pages in a coredump}
-  {$endif}
-{$endif}
 {**************************
     Utility functions
 ***************************}