cvs commit: src/lib/libc/stdlib malloc.c

Marcel Moolenaar marcel at FreeBSD.org
Fri Nov 28 10:03:25 PST 2003


marcel      2003/11/28 10:03:22 PST

  FreeBSD src repository

  Modified files:
    lib/libc/stdlib      malloc.c 
  Log:
  Do not adjust to the pagesize at runtime. Besides for the one-time
  initialization overhead, there's a problem in that we never call
  imalloc() and thus malloc_init() for zero-sized allocations. As a
  result, malloc(0) returns NULL when it's the first or only malloc in
  the program. Any non-zero allocation will initialize the malloc code
  with the side-effect that subsequent zero-sized allocations return a
  non-NULL pointer. This is because the pointer we return for zero-
  sized allocations is calculated from malloc_pageshift, which needs
  to be initialized at runtime on ia64.
  
  The result of the inconsistent behaviour described above is that
  configure scripts failed the test for a GNU compatible malloc. This
  resulted in a lot of broken ports.
  
  Other, even simpler, solutions were possible as well:
  1.  initialize malloc_pageshift with some non-zero value (say 13 for
      8KB pages) and keep the runtime adjustment.
  2.  Stop using malloc_pageshift to calculate ZEROSIZEPTR.
  
  Removal of the runtime adjustment was chosen because then ia64 is the
  same as any other platform. It is not to say that using a page size
  obtained at runtime is bad per se. It's that there's currently a high
  level of gratuity for its existence and the moment it causes problems
  is the moment you need to get rid of it. Hence, it's not unthinkable
  that this commit is (partially) reverted some time in the future when
  we do have a good reason for it and a good way to achieve it.
  
  Approved by: re@ (rwatson)
  Reported by: kris (portmgr@) -- may the ports be with you
  
  Revision  Changes    Path
  1.84      +2 -8      src/lib/libc/stdlib/malloc.c


More information about the cvs-src mailing list