Reduce mmap calls in vfprintf.c (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 12 Aug 2016 22:07:46 +0000 (18:07 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 12 Aug 2016 22:07:46 +0000 (18:07 -0400)
It turns out that the work_buffer path gets called a lot, including by
bash.  I saw a lot of mmaps in a few traces.  I think we can put that 1k on
the stack, since it's right near the magic number of 1/4 of a minimum
stack size.  We'll see.

This also fixes the other mmap, which should have been asking for
MAP_ANONYMOUS.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tools/compilers/gcc-glibc/glibc-2.19-akaros/stdio-common/vfprintf.c

index 200e98d..ec83c87 100644 (file)
@@ -248,16 +248,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
   const UCHAR_T *end_of_spec;
 
   /* Buffer intermediate results.  */
-  /* AKAROS mmap work_buf */
-  //CHAR_T work_buffer[1000];
-  CHAR_T *work_buffer = mmap(0, PGSIZE, PROT_WRITE | PROT_READ, MAP_PRIVATE,
-                             -1, 0);
-
-  if (work_buffer == MAP_FAILED) {
-    write(2, failmsg, sizeof(failmsg));
-    exit(-1);
-  }
-
+  CHAR_T work_buffer[1000];
   CHAR_T *workstart = NULL;
   CHAR_T *workend;
 
@@ -2067,8 +2058,6 @@ all_done:
   _IO_funlockfile (s);
   _IO_cleanup_region_end (0);
 
-  /* AKAROS */
-  munmap(work_buffer, PGSIZE);
   return done;
 }
 \f
@@ -2297,7 +2286,7 @@ buffered_vfprintf (_IO_FILE *s, const CHAR_T *format,
   CHAR_T *buf;
 
   buf = mmap(0, ROUNDUP(_IO_BUFSIZ, PGSIZE), PROT_WRITE | PROT_READ,
-             MAP_PRIVATE, -1, 0);
+             MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
   if (buf == MAP_FAILED) {
     write(2, failmsg, sizeof(failmsg));
     exit(-1);