Add special heap allocator for FreeBSD, much like the one used for
authorChris Hanson <org/chris-hanson/cph>
Mon, 31 Jan 2000 03:32:45 +0000 (03:32 +0000)
committerChris Hanson <org/chris-hanson/cph>
Mon, 31 Jan 2000 03:32:45 +0000 (03:32 +0000)
Linux, but with small differences.

v7/src/microcode/config.h
v7/src/microcode/ux.c

index 82c35ba1fabbb13cdc4c22ea97bb15e2bc97f3a9..e9517e469725daae69380094caf8e6c5dd144f08 100644 (file)
@@ -1,8 +1,8 @@
 /* -*-C-*-
 
-$Id: config.h,v 9.100 1999/01/02 06:11:34 cph Exp $
+$Id: config.h,v 9.101 2000/01/31 03:32:45 cph Exp $
 
-Copyright (c) 1987-1999 Massachusetts Institute of Technology
+Copyright (c) 1987-2000 Massachusetts Institute of Technology
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -433,6 +433,12 @@ extern void * linux_heap_malloc (unsigned long);
 #define HEAP_FREE(address)
 #endif
 
+#ifdef __FreeBSD__
+extern void * freebsd_heap_malloc (unsigned long);
+#define HEAP_MALLOC freebsd_heap_malloc
+#define HEAP_FREE(address)
+#endif
+
 /* !WINNT_RAW_ADDRESSES  is useful only for Windows 3.1, which we no
    longer support -- so define it always.  */
 #ifdef WINNT
index 1bc105853976710fcbbb3e5d0e9efe47de7d5ed2..faff93a99fafe6c43e11f337255cfa910e6524ca 100644 (file)
@@ -1,8 +1,8 @@
 /* -*-C-*-
 
-$Id: ux.c,v 1.17 1999/01/02 06:11:34 cph Exp $
+$Id: ux.c,v 1.18 2000/01/31 03:32:37 cph Exp $
 
-Copyright (c) 1990-1999 Massachusetts Institute of Technology
+Copyright (c) 1990-2000 Massachusetts Institute of Technology
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -647,3 +647,30 @@ linux_heap_malloc (unsigned long requested_length)
 }
 
 #endif /* __linux */
+
+#ifdef __FreeBSD__
+
+#include <sys/mman.h>
+
+void *
+freebsd_heap_malloc (unsigned long requested_length)
+{
+  unsigned long ps = (getpagesize ());
+  char * p = ((char *) ps);
+  void * addr;
+  while (p < 0x04000000)
+    {
+      addr
+       = (mmap (p,
+                (((requested_length + (ps - 1)) / ps) * ps),
+                (PROT_EXEC | PROT_READ | PROT_WRITE),
+                (MAP_PRIVATE | MAP_ANON | MAP_FIXED),
+                (-1), 0));
+      if (addr != MAP_FAILED)
+       return (addr);
+      p += ps;
+    }
+  return (0);
+}
+
+#endif /* __FreeBSD__ */