Module Name: src Committed By: dyoung Date: Wed Jun 17 21:04:25 UTC 2009
Modified Files: src/sys/kern: kern_module.c subr_kobj.c src/sys/sys: kobj.h Log Message: Make kobj_stat() return ENOSYS instead of panicking ("not modular") on non-MODULAR kernels. Make a few kobj_stat() callers check for a non-zero return code and deal gracefully. To generate a diff of this commit: cvs rdiff -u -r1.48 -r1.49 src/sys/kern/kern_module.c cvs rdiff -u -r1.38 -r1.39 src/sys/kern/subr_kobj.c cvs rdiff -u -r1.11 -r1.12 src/sys/sys/kobj.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_module.c diff -u src/sys/kern/kern_module.c:1.48 src/sys/kern/kern_module.c:1.49 --- src/sys/kern/kern_module.c:1.48 Tue Jun 9 20:35:02 2009 +++ src/sys/kern/kern_module.c Wed Jun 17 21:04:25 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_module.c,v 1.48 2009/06/09 20:35:02 jnemeth Exp $ */ +/* $NetBSD: kern_module.c,v 1.49 2009/06/17 21:04:25 dyoung Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_module.c,v 1.48 2009/06/09 20:35:02 jnemeth Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_module.c,v 1.49 2009/06/17 21:04:25 dyoung Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -1072,7 +1072,8 @@ if (mod->mod_kobj == NULL) { continue; } - kobj_stat(mod->mod_kobj, &maddr, &msize); + if (kobj_stat(mod->mod_kobj, &maddr, &msize) != 0) + continue; if (addr < maddr || addr >= maddr + msize) { continue; } @@ -1112,12 +1113,11 @@ src = "unknown"; break; } - if (mod->mod_kobj != NULL) { - kobj_stat(mod->mod_kobj, &maddr, &msize); - } else { + if (mod->mod_kobj == NULL) { maddr = 0; msize = 0; - } + } else if (kobj_stat(mod->mod_kobj, &maddr, &msize) != 0) + continue; (*pr)("%16s %16lx %8ld %8s\n", mod->mod_info->mi_name, (long)maddr, (long)msize, src); } Index: src/sys/kern/subr_kobj.c diff -u src/sys/kern/subr_kobj.c:1.38 src/sys/kern/subr_kobj.c:1.39 --- src/sys/kern/subr_kobj.c:1.38 Tue May 26 08:34:23 2009 +++ src/sys/kern/subr_kobj.c Wed Jun 17 21:04:25 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_kobj.c,v 1.38 2009/05/26 08:34:23 jnemeth Exp $ */ +/* $NetBSD: subr_kobj.c,v 1.39 2009/06/17 21:04:25 dyoung Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -63,7 +63,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_kobj.c,v 1.38 2009/05/26 08:34:23 jnemeth Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_kobj.c,v 1.39 2009/06/17 21:04:25 dyoung Exp $"); #include "opt_modular.h" @@ -622,7 +622,7 @@ * * Return size and load address of an object. */ -void +int kobj_stat(kobj_t ko, vaddr_t *address, size_t *size) { @@ -632,6 +632,7 @@ if (size != NULL) { *size = ko->ko_size; } + return 0; } /* @@ -1126,11 +1127,11 @@ panic("not modular"); } -void +int kobj_stat(kobj_t ko, vaddr_t *base, size_t *size) { - panic("not modular"); + return ENOSYS; } int Index: src/sys/sys/kobj.h diff -u src/sys/sys/kobj.h:1.11 src/sys/sys/kobj.h:1.12 --- src/sys/sys/kobj.h:1.11 Tue May 26 08:34:22 2009 +++ src/sys/sys/kobj.h Wed Jun 17 21:04:25 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kobj.h,v 1.11 2009/05/26 08:34:22 jnemeth Exp $ */ +/* $NetBSD: kobj.h,v 1.12 2009/06/17 21:04:25 dyoung Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ int kobj_load_mem(kobj_t *, void *, ssize_t); int kobj_affix(kobj_t, const char *); void kobj_unload(kobj_t); -void kobj_stat(kobj_t, vaddr_t *, size_t *); +int kobj_stat(kobj_t, vaddr_t *, size_t *); int kobj_find_section(kobj_t, const char *, void **, size_t *); /* MI-MD interface. */