Author: brooks
Date: Thu Jan 21 18:17:19 2016
New Revision: 294523
URL: https://svnweb.freebsd.org/changeset/base/294523

Log:
  Replace the last non-optional use of sbrk() in the tree with mmap().
  
  All gmon want's is a region of memory without the overhead of malloc().
  Just mapping some pages with mmap is an easy way to accomplish this.
  
  Approved by:  jhb, cem, emaste
  Obtained from:        CheriBSD (bf33e1e70b368ababde74aa3ac70d108c8a52c69)
  Sponsored by: DARPA, AFRL
  Differential Revision:        https://reviews.freebsd.org/D5005

Modified:
  head/lib/libc/gmon/gmon.c

Modified: head/lib/libc/gmon/gmon.c
==============================================================================
--- head/lib/libc/gmon/gmon.c   Thu Jan 21 18:02:31 2016        (r294522)
+++ head/lib/libc/gmon/gmon.c   Thu Jan 21 18:17:19 2016        (r294523)
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/time.h>
 #include <sys/gmon.h>
+#include <sys/mman.h>
 #include <sys/sysctl.h>
 
 #include <err.h>
@@ -50,14 +51,6 @@ __FBSDID("$FreeBSD$");
 
 #include "libc_private.h"
 
-#if defined(__i386__) || defined(__sparc64__) || defined(__amd64__) || 
(defined(__powerpc__) && !defined(__powerpc64__))
-extern char *minbrk __asm (".minbrk");
-#elif defined(__powerpc64__)
-extern char *minbrk __asm ("_minbrk");
-#else
-extern char *minbrk __asm ("minbrk");
-#endif
-
 struct gmonparam _gmonparam = { GMON_PROF_OFF };
 
 static int     s_scale;
@@ -94,8 +87,9 @@ monstartup(u_long lowpc, u_long highpc)
                p->tolimit = MAXARCS;
        p->tossize = p->tolimit * sizeof(struct tostruct);
 
-       cp = sbrk(p->kcountsize + p->fromssize + p->tossize);
-       if (cp == (char *)-1) {
+       cp = mmap(NULL, p->kcountsize + p->fromssize + p->tossize,
+           PROT_READ | PROT_WRITE, MAP_ANON, -1, 0);
+       if (cp == MAP_FAILED) {
                ERR("monstartup: out of memory\n");
                return;
        }
@@ -108,7 +102,6 @@ monstartup(u_long lowpc, u_long highpc)
        cp += p->kcountsize;
        p->froms = (u_short *)cp;
 
-       minbrk = sbrk(0);
        p->tos[0].link = 0;
 
        o = p->highpc - p->lowpc;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to