Module Name: src Committed By: maxv Date: Sun Jul 6 15:22:31 UTC 2014
Modified Files: src/sys/kern: subr_kobj.c Log Message: Use a macro instead of always putting __func__ and __LINE__. To generate a diff of this commit: cvs rdiff -u -r1.46 -r1.47 src/sys/kern/subr_kobj.c 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/subr_kobj.c diff -u src/sys/kern/subr_kobj.c:1.46 src/sys/kern/subr_kobj.c:1.47 --- src/sys/kern/subr_kobj.c:1.46 Fri Aug 9 05:10:14 2013 +++ src/sys/kern/subr_kobj.c Sun Jul 6 15:22:31 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_kobj.c,v 1.46 2013/08/09 05:10:14 matt Exp $ */ +/* $NetBSD: subr_kobj.c,v 1.47 2014/07/06 15:22:31 maxv 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.46 2013/08/09 05:10:14 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_kobj.c,v 1.47 2014/07/06 15:22:31 maxv Exp $"); #include "opt_modular.h" @@ -80,9 +80,12 @@ __KERNEL_RCSID(0, "$NetBSD: subr_kobj.c, #include <uvm/uvm_extern.h> +#define kobj_error(_kobj, ...) \ + kobj_out(__func__, __LINE__, _kobj, __VA_ARGS__) + static int kobj_relocate(kobj_t, bool); static int kobj_checksyms(kobj_t, bool); -static void kobj_error(const char *, int, kobj_t, const char *, ...) +static void kobj_out(const char *, int, kobj_t, const char *, ...) __printflike(4, 5); static void kobj_jettison(kobj_t); static void kobj_free(kobj_t, void *, size_t); @@ -179,25 +182,24 @@ kobj_load(kobj_t ko) */ error = ko->ko_read(ko, (void **)&hdr, sizeof(*hdr), 0, true); if (error != 0) { - kobj_error(__func__, __LINE__, ko, "read failed %d", error); + kobj_error(ko, "read failed %d", error); goto out; } if (memcmp(hdr->e_ident, ELFMAG, SELFMAG) != 0) { - kobj_error(__func__, __LINE__, ko, "not an ELF object"); + kobj_error(ko, "not an ELF object"); error = ENOEXEC; goto out; } if (hdr->e_ident[EI_VERSION] != EV_CURRENT || hdr->e_version != EV_CURRENT) { - kobj_error(__func__, __LINE__, ko, - "unsupported file version %d", hdr->e_ident[EI_VERSION]); + kobj_error(ko, "unsupported file version %d", + hdr->e_ident[EI_VERSION]); error = ENOEXEC; goto out; } if (hdr->e_type != ET_REL) { - kobj_error(__func__, __LINE__, ko, "unsupported file type %d", - hdr->e_type); + kobj_error(ko, "unsupported file type %d", hdr->e_type); error = ENOEXEC; goto out; } @@ -210,8 +212,7 @@ kobj_load(kobj_t ko) #error not defined #endif default: - kobj_error(__func__, __LINE__, ko, "unsupported machine %d", - hdr->e_machine); + kobj_error(ko, "unsupported machine %d", hdr->e_machine); error = ENOEXEC; goto out; } @@ -227,14 +228,14 @@ kobj_load(kobj_t ko) ko->ko_shdrsz = hdr->e_shnum * hdr->e_shentsize; if (ko->ko_shdrsz == 0 || hdr->e_shoff == 0 || hdr->e_shentsize != sizeof(Elf_Shdr)) { - kobj_error(__func__, __LINE__, ko, "bad sizes"); + kobj_error(ko, "bad sizes"); error = ENOEXEC; goto out; } error = ko->ko_read(ko, (void **)&shdr, ko->ko_shdrsz, hdr->e_shoff, true); if (error != 0) { - kobj_error(__func__, __LINE__, ko, "read failed %d", error); + kobj_error(ko, "read failed %d", error); goto out; } ko->ko_shdr = shdr; @@ -271,21 +272,19 @@ kobj_load(kobj_t ko) } } if (ko->ko_nprogtab == 0) { - kobj_error(__func__, __LINE__, ko, "file has no contents"); + kobj_error(ko, "file has no contents"); error = ENOEXEC; goto out; } if (nsym != 1) { /* Only allow one symbol table for now */ - kobj_error(__func__, __LINE__, ko, - "file has no valid symbol table"); + kobj_error(ko, "file has no valid symbol table"); error = ENOEXEC; goto out; } if (symstrindex < 0 || symstrindex > hdr->e_shnum || shdr[symstrindex].sh_type != SHT_STRTAB) { - kobj_error(__func__, __LINE__, ko, - "file has invalid symbol strings"); + kobj_error(ko, "file has invalid symbol strings"); error = ENOEXEC; goto out; } @@ -298,7 +297,7 @@ kobj_load(kobj_t ko) sizeof(*ko->ko_progtab), KM_SLEEP); if (ko->ko_progtab == NULL) { error = ENOMEM; - kobj_error(__func__, __LINE__, ko, "out of memory"); + kobj_error(ko, "out of memory"); goto out; } } @@ -307,7 +306,7 @@ kobj_load(kobj_t ko) sizeof(*ko->ko_reltab), KM_SLEEP); if (ko->ko_reltab == NULL) { error = ENOMEM; - kobj_error(__func__, __LINE__, ko, "out of memory"); + kobj_error(ko, "out of memory"); goto out; } } @@ -316,12 +315,12 @@ kobj_load(kobj_t ko) sizeof(*ko->ko_relatab), KM_SLEEP); if (ko->ko_relatab == NULL) { error = ENOMEM; - kobj_error(__func__, __LINE__, ko, "out of memory"); + kobj_error(ko, "out of memory"); goto out; } } if (symtabindex == -1) { - kobj_error(__func__, __LINE__, ko, "lost symbol table index"); + kobj_error(ko, "lost symbol table index"); goto out; } @@ -330,14 +329,14 @@ kobj_load(kobj_t ko) */ ko->ko_symcnt = shdr[symtabindex].sh_size / sizeof(Elf_Sym); if (ko->ko_symcnt == 0) { - kobj_error(__func__, __LINE__, ko, "no symbol table"); + kobj_error(ko, "no symbol table"); goto out; } error = ko->ko_read(ko, (void **)&ko->ko_symtab, ko->ko_symcnt * sizeof(Elf_Sym), shdr[symtabindex].sh_offset, true); if (error != 0) { - kobj_error(__func__, __LINE__, ko, "read failed %d", error); + kobj_error(ko, "read failed %d", error); goto out; } @@ -346,13 +345,13 @@ kobj_load(kobj_t ko) */ ko->ko_strtabsz = shdr[symstrindex].sh_size; if (ko->ko_strtabsz == 0) { - kobj_error(__func__, __LINE__, ko, "no symbol strings"); + kobj_error(ko, "no symbol strings"); goto out; } error = ko->ko_read(ko, (void *)&ko->ko_strtab, ko->ko_strtabsz, shdr[symstrindex].sh_offset, true); if (error != 0) { - kobj_error(__func__, __LINE__, ko, "read failed %d", error); + kobj_error(ko, "read failed %d", error); goto out; } @@ -362,7 +361,7 @@ kobj_load(kobj_t ko) error = kobj_renamespace(ko->ko_symtab, ko->ko_symcnt, &ko->ko_strtab, &ko->ko_strtabsz); if (error != 0) { - kobj_error(__func__, __LINE__, ko, "renamespace failed %d", + kobj_error(ko, "renamespace failed %d", error); goto out; } @@ -377,8 +376,7 @@ kobj_load(kobj_t ko) shdr[hdr->e_shstrndx].sh_size, shdr[hdr->e_shstrndx].sh_offset, true); if (error != 0) { - kobj_error(__func__, __LINE__, ko, "read failed %d", - error); + kobj_error(ko, "read failed %d", error); goto out; } } @@ -408,7 +406,7 @@ kobj_load(kobj_t ko) * can get the bounds and gdb can associate offsets with modules. */ if (mapsize == 0) { - kobj_error(__func__, __LINE__, ko, "no text/data/bss"); + kobj_error(ko, "no text/data/bss"); goto out; } if (ko->ko_type == KT_MEMORY) { @@ -417,7 +415,7 @@ kobj_load(kobj_t ko) mapbase = uvm_km_alloc(module_map, round_page(mapsize), 0, UVM_KMF_WIRED | UVM_KMF_EXEC); if (mapbase == 0) { - kobj_error(__func__, __LINE__, ko, "out of memory"); + kobj_error(ko, "out of memory"); error = ENOMEM; goto out; } @@ -442,9 +440,8 @@ kobj_load(kobj_t ko) addr = (void *)(shdr[i].sh_offset + (vaddr_t)ko->ko_source); if (((vaddr_t)addr & alignmask) != 0) { - kobj_error(__func__, __LINE__, ko, - "section %d not aligned", - i); + kobj_error(ko, + "section %d not aligned", i); goto out; } } else { @@ -459,14 +456,13 @@ kobj_load(kobj_t ko) error = ko->ko_read(ko, &addr, shdr[i].sh_size, shdr[i].sh_offset, false); if (error != 0) { - kobj_error(__func__, __LINE__, ko, - "read failed %d", error); + kobj_error(ko, "read failed %d", + error); goto out; } } else if (ko->ko_type == KT_MEMORY && shdr[i].sh_size != 0) { - kobj_error(__func__, __LINE__, ko, - "non-loadable BSS " + kobj_error(ko, "non-loadable BSS " "section in pre-loaded module"); error = EINVAL; goto out; @@ -506,8 +502,8 @@ kobj_load(kobj_t ko) ko->ko_reltab[rl].size, shdr[i].sh_offset, true); if (error != 0) { - kobj_error(__func__, __LINE__, ko, - "read failed %d", error); + kobj_error(ko, "read failed %d", + error); goto out; } } @@ -528,8 +524,8 @@ kobj_load(kobj_t ko) shdr[i].sh_size, shdr[i].sh_offset, true); if (error != 0) { - kobj_error(__func__, __LINE__, ko, - "read failed %d", error); + kobj_error(ko, "read failed %d", + error); goto out; } } @@ -599,8 +595,8 @@ kobj_unload(kobj_t ko) error = kobj_machdep(ko, (void *)ko->ko_address, ko->ko_size, false); if (error != 0) - kobj_error(__func__, __LINE__, ko, - "machine dependent deinit failed %d", error); + kobj_error(ko, "machine dependent deinit failed %d", + error); } if (ko->ko_address != 0 && ko->ko_type != KT_MEMORY) { uvm_km_free(module_map, ko->ko_address, round_page(ko->ko_size), @@ -692,8 +688,8 @@ kobj_affix(kobj_t ko, const char *name) error = kobj_machdep(ko, (void *)ko->ko_address, ko->ko_size, true); if (error != 0) - kobj_error(__func__, __LINE__, ko, - "machine dependent init failed %d", error); + kobj_error(ko, "machine dependent init failed %d", + error); ko->ko_loaded = true; } @@ -800,7 +796,7 @@ kobj_sym_lookup(kobj_t ko, uintptr_t sym switch (ELF_ST_BIND(sym->st_info)) { case STB_LOCAL: /* Local, but undefined? huh? */ - kobj_error(__func__, __LINE__, ko, "local symbol undefined"); + kobj_error(ko, "local symbol undefined"); return 0; case STB_GLOBAL: @@ -809,15 +805,14 @@ kobj_sym_lookup(kobj_t ko, uintptr_t sym /* Force a lookup failure if the symbol name is bogus. */ if (*symbol == 0) { - kobj_error(__func__, __LINE__, ko, "bad symbol name"); + kobj_error(ko, "bad symbol name"); return 0; } return (uintptr_t)sym->st_value; case STB_WEAK: - kobj_error(__func__, __LINE__, ko, - "weak symbols not supported"); + kobj_error(ko, "weak symbols not supported"); return 0; default: @@ -877,8 +872,8 @@ kobj_checksyms(kobj_t ko, bool undefined if (ksyms_getval_unlocked(NULL, name, &rval, KSYMS_EXTERN) != 0) { if (undefined) { - kobj_error(__func__, __LINE__, ko, - "symbol `%s' not found", name); + kobj_error(ko, "symbol `%s' not found", + name); error = ENOEXEC; } continue; @@ -906,8 +901,8 @@ kobj_checksyms(kobj_t ko, bool undefined strncmp(name, "__stop_link_set_", 16)) { continue; } - kobj_error(__func__, __LINE__, ko, - "global symbol `%s' redefined", name); + kobj_error(ko, "global symbol `%s' redefined", + name); error = ENOEXEC; } @@ -997,12 +992,12 @@ kobj_relocate(kobj_t ko, bool local) } /* - * kobj_error: + * kobj_out: * * Utility function: log an error. */ static void -kobj_error(const char *fname, int lnum, kobj_t ko, const char *fmt, ...) +kobj_out(const char *fname, int lnum, kobj_t ko, const char *fmt, ...) { va_list ap; @@ -1021,15 +1016,15 @@ kobj_read_mem(kobj_t ko, void **basep, s int error; if (ko->ko_memsize != -1 && off + size > ko->ko_memsize) { - kobj_error(__func__, __LINE__, ko, "preloaded object short"); + kobj_error(ko, "preloaded object short"); error = EINVAL; base = NULL; } else if (allocate) { base = (uint8_t *)ko->ko_source + off; error = 0; } else if ((uint8_t *)base != (uint8_t *)ko->ko_source + off) { - kobj_error(__func__, __LINE__, ko, "object not aligned"); - kobj_error(__func__, __LINE__, ko, "source=%p base=%p off=%d " + kobj_error(ko, "object not aligned"); + kobj_error(ko, "source=%p base=%p off=%d " "size=%zu", ko->ko_source, base, (int)off, size); error = EINVAL; } else {