From owner-p4-projects@FreeBSD.ORG Tue May 11 08:49:49 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 214D416A4D0; Tue, 11 May 2004 08:49:49 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EEFFC16A4CE for ; Tue, 11 May 2004 08:49:48 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id C454B43D1F for ; Tue, 11 May 2004 08:49:48 -0700 (PDT) (envelope-from areisse@nailabs.com) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.10/8.12.10) with ESMTP id i4BFnmGe076477 for ; Tue, 11 May 2004 08:49:48 -0700 (PDT) (envelope-from areisse@nailabs.com) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id i4BFnm4O076474 for perforce@freebsd.org; Tue, 11 May 2004 08:49:48 -0700 (PDT) (envelope-from areisse@nailabs.com) Date: Tue, 11 May 2004 08:49:48 -0700 (PDT) Message-Id: <200405111549.i4BFnm4O076474@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to areisse@nailabs.com using -f From: Andrew Reisse To: Perforce Change Reviews Subject: PERFORCE change 52672 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 May 2004 15:49:49 -0000 http://perforce.freebsd.org/chv.cgi?CH=52672 Change 52672 by areisse@areisse_ibook on 2004/05/11 08:49:22 Use a different allocator if the linker is called before tasks are initialized. Affected files ... .. //depot/projects/trustedbsd/sedarwin73/apsl/cctools/ld/ld.h#3 edit Differences ... ==== //depot/projects/trustedbsd/sedarwin73/apsl/cctools/ld/ld.h#3 (text+ko) ==== @@ -361,3 +361,47 @@ #ifdef DEBUG __private_extern__ unsigned long debug; /* link-editor debugging */ #endif /* DEBUG */ + +#if (defined (KLD) && defined (RLD) && defined (__STATIC__)) + +#include +#include +#include + +extern int kth_started; + +static inline kern_return_t rkld_alloc (mach_port_t kport, size_t size, void **addr, int flags) +{ + if (kth_started) + return vm_allocate (kport, addr, size, flags); + else + { + *addr = kalloc (size); + return (*addr == 0); + } +} + +static inline kern_return_t rkld_free (mach_port_t kport, size_t size, void *addr) +{ + if (kth_started) + return vm_deallocate (kport, addr, size); + else + { + kfree (addr, size); + return 0; + } +} + +static inline kern_return_t rkld_protect (mach_port_t kport, void *addr, size_t size, int a, int b) +{ + if (kth_started) + return vm_protect (kport, addr, size, a, b); + else + return 0; +} + +#define vm_allocate(kport,addr,size,flags) rkld_alloc (kport, size, addr, flags) +#define vm_deallocate(kport,addr,size) rkld_free (kport, size, addr) +#define vm_protect(kport,addr,size,f1,f2) rkld_protect (kport, addr, size, f1, f2) + +#endif