* that don't have pointers to younger generations? */
boolean enable_page_protection = 1;
-/* Should we unmap a page and re-mmap it to have it zero filled? */
-#if defined(__FreeBSD__) || defined(__OpenBSD__)
-/* comment from cmucl-2.4.8: This can waste a lot of swap on FreeBSD
- * so don't unmap there.
- *
- * The CMU CL comment didn't specify a version, but was probably an
- * old version of FreeBSD (pre-4.0), so this might no longer be true.
- * OTOH, if it is true, this behavior might exist on OpenBSD too, so
- * for now we don't unmap there either. -- WHN 2001-04-07 */
-boolean gencgc_unmap_zero = 0;
-#else
-boolean gencgc_unmap_zero = 1;
-#endif
-
/* the minimum size (in bytes) for a large object*/
unsigned large_object_size = 4 * PAGE_BYTES;
/* Calculate the start address for the given page number. */
-inline void *
+static inline void *
page_address(int page_num)
{
return (heap_base + (page_num * PAGE_BYTES));
* assumes that all objects have been copied or promoted to an older
* generation. Bytes_allocated and the generation bytes_allocated
* counter are updated. The number of bytes freed is returned. */
-extern void i586_bzero(void *addr, int nbytes);
static int
free_oldspace(void)
{
&& (page_table[last_page].bytes_used != 0)
&& (page_table[last_page].gen == from_space));
- /* Zero pages from first_page to (last_page-1).
- *
- * FIXME: Why not use os_zero(..) function instead of
- * hand-coding this again? (Check other gencgc_unmap_zero
- * stuff too. */
- if (gencgc_unmap_zero) {
- void *page_start, *addr;
-
- page_start = (void *)page_address(first_page);
-
- os_invalidate(page_start, PAGE_BYTES*(last_page-first_page));
- addr = os_validate(page_start, PAGE_BYTES*(last_page-first_page));
- if (addr == NULL || addr != page_start) {
- /* Is this an error condition? I couldn't really tell from
- * the old CMU CL code, which fprintf'ed a message with
- * an exclamation point at the end. But I've never seen the
- * message, so it must at least be unusual..
- *
- * (The same condition is also tested for in gc_free_heap.)
- *
- * -- WHN 19991129 */
- lose("i586_bzero: page moved, 0x%08x ==> 0x%08x",
- page_start,
- addr);
- }
- } else {
- int *page_start;
-
- page_start = (int *)page_address(first_page);
- i586_bzero(page_start, PAGE_BYTES*(last_page-first_page));
- }
+ /* Zero pages from first_page to (last_page-1). */
+ memset(page_address(first_page), 0, PAGE_BYTES*(last_page-first_page));
first_page = last_page;
#include <stdio.h>
#include <errno.h>
-#include <strings.h>
+#include <string.h>
#include "sbcl.h"
#include "os.h"
* instead. See hpux-os.c for some useful restrictions on actual
* usage. */
+/* FIXME: this should be turned into a pure inline memset where it is used. */
void
os_zero(os_vm_address_t addr, os_vm_size_t length)
{
- os_vm_address_t block_start;
- os_vm_size_t block_size;
-
-#ifdef DEBUG
- fprintf(stderr,";;; os_zero: addr: 0x%08x, len: 0x%08x\n",addr,length);
-#endif
-
- block_start = os_round_up_to_page(addr);
-
- length -= block_start-addr;
- block_size = os_trunc_size_to_page(length);
-
- if (block_start > addr)
- bzero((char *)addr, block_start-addr);
- if (block_size < length)
- bzero((char *)block_start+block_size, length-block_size);
-
- if (block_size != 0) {
- /* Now deallocate and allocate the block so that it faults in
- * zero-filled. */
-
- os_invalidate(block_start, block_size);
- addr = os_validate(block_start, block_size);
-
- if (addr == NULL || addr != block_start)
- lose("os_zero: block moved! 0x%08x ==> 0x%08x",
- block_start,
- addr);
- }
+ memset(addr, 0, length);
}
os_vm_address_t
*/
#include <stdio.h>
-#include <strings.h>
+#include <string.h>
#include <sys/types.h>
#include <stdlib.h>
free(var);
}
}
- bzero(NameHash, sizeof(NameHash));
- bzero(ObjHash, sizeof(ObjHash));
+ memset(NameHash, 0, sizeof(NameHash));
+ memset(ObjHash, 0, sizeof(ObjHash));
tempcntr = 1;
for (var = perm; var != NULL; var = next) {
ret
.size GNAME(do_pending_interrupt),.-GNAME(do_pending_interrupt)
\f
-#ifdef LISP_FEATURE_GENCGC
-/* This is a fast bzero using the FPU. The first argument is the start
- * address which needs to be aligned on an 8 byte boundary, the second
- * argument is the number of bytes, which must be a nonzero multiple
- * of 8 bytes. */
-/* FIXME whether this is still faster than using the OS's bzero or
- * equivalent, we don't know */
- .text
- .globl GNAME(i586_bzero)
- .type GNAME(i586_bzero),@function
- .align align_4byte,0x90
-GNAME(i586_bzero):
- movl 4(%esp),%edx # Load the start address.
- movl 8(%esp),%eax # Load the number of bytes.
- fldz
-l1: fstl 0(%edx)
- addl $8,%edx
- subl $8,%eax
- jnz l1
- fstp %st(0)
- ret
- .size GNAME(i586_bzero),.-GNAME(i586_bzero)
-#endif
-\f
/*
* Allocate bytes and return the start of the allocated space
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.9.19"
+"0.8.9.20"