Browse Source

* use mmap instead of brk

peter 26 years ago
parent
commit
be34b11e38
1 changed files with 25 additions and 67 deletions
  1. 25 67
      rtl/linux/syslinux.pp

+ 25 - 67
rtl/linux/syslinux.pp

@@ -186,75 +186,30 @@ end ['D0'];
 {$endif}
 
 
-{ ___fpc_brk_addr is defined and allocated in prt1.as }
-
-Function Get_Brk_addr : longint;assembler;
-{$ifdef i386}
-asm
-        movl    ___fpc_brk_addr,%eax
-end ['EAX'];
-{$else}
-asm
-        move.l  ___fpc_brk_addr,d0
-end ['D0'];
-{$endif}
-
-
-Procedure Set_brk_addr (NewAddr : longint);assembler;
-{$ifdef i386}
-asm
-        movl    NewAddr,%eax
-        movl    %eax,___fpc_brk_addr
-end ['EAX'];
-{$else}
-asm
-        move.l  NewAddr,d0
-        move.l  d0,___fpc_brk_addr
-end ['D0'];
-{$endif}
-
-{$ifdef i386}
-  {$ASMMODE ATT}
-{$endif}
-
-Function brk(Location : longint) : Longint;
-{ set end of data segment to location }
-var
-  t     : syscallregs;
-  dummy : longint;
-begin
-  t.reg2:=Location;
-  dummy:=syscall(syscall_nr_brk,t);
-  set_brk_addr(dummy);
-  brk:=dummy;
-end;
-
-
-Function init_brk : longint;
-begin
-  if Get_Brk_addr=0 then
-   begin
-     Set_brk_addr(brk(0));
-     if Get_brk_addr=0 then
-      exit(-1);
-   end;
-  init_brk:=0;
-end;
-
-
 Function sbrk(size : longint) : Longint;
+type
+  tmmapargs=packed record
+    address : longint;
+    size    : longint;
+    prot    : longint;
+    flags   : longint;
+    fd      : longint;
+    offset  : longint;
+  end;
 var
-  Temp  : longint;
+  t     : syscallregs;
+  mmapargs : tmmapargs;
 begin
-  if init_brk=0 then
-   begin
-     Temp:=Get_Brk_Addr+size;
-     if brk(temp)=-1 then
-      exit(-1);
-     if Get_brk_addr=temp then
-      exit(temp-size);
-   end;
-  exit(-1);
+  mmapargs.address:=0;
+  mmapargs.size:=Size;
+  mmapargs.prot:=3;
+  mmapargs.flags:=$22;
+  mmapargs.fd:=-1;
+  mmapargs.offset:=0;
+  t.reg2:=longint(@mmapargs);
+  Sbrk:=syscall(syscall_nr_mmap,t);
+  if ErrNo<>0 then
+   Sbrk:=0;
 end;
 
 
@@ -725,7 +680,10 @@ End.
 
 {
   $Log$
-  Revision 1.27  1999-09-10 15:40:35  peter
+  Revision 1.28  1999-10-28 09:50:06  peter
+    * use mmap instead of brk
+
+  Revision 1.27  1999/09/10 15:40:35  peter
     * fixed do_open flags to be > $100, becuase filemode can be upto 255
 
   Revision 1.26  1999/09/08 16:14:43  peter