From: Philippe E. <ph...@us...> - 2003-02-19 21:08:23
|
Update of /cvsroot/oprofile/oprofile/daemon In directory sc8-pr-cvs1:/tmp/cvs-serv22188/daemon Modified Files: opd_image.c opd_image.h opd_kernel.c Log Message: fix thinko with --separate=kernel resulting in duplicate opening of the same samples file. Try it please. regards, Phil Index: opd_image.c =================================================================== RCS file: /cvsroot/oprofile/oprofile/daemon/opd_image.c,v retrieving revision 1.30 retrieving revision 1.31 diff -u -d -r1.30 -r1.31 --- opd_image.c 17 Feb 2003 15:42:16 -0000 1.30 +++ opd_image.c 19 Feb 2003 21:08:17 -0000 1.31 @@ -346,18 +346,26 @@ } -struct opd_image * opd_get_kernel_image(char const * name) +struct opd_image * opd_get_kernel_image(char const * name, + char const * app_name) { struct list_head * pos; struct opd_image * image; list_for_each(pos, &opd_images[HASH_KERNEL]) { image = list_entry(pos, struct opd_image, hash_list); - if (!strcmp(image->name, name)) + if (strcmp(image->name, name)) + continue; + if (!separate_kernel_samples) + return image; + if (!app_name && !image->app_name) + return image; + if (app_name && image->app_name && + !strcmp(app_name, image->app_name)) return image; } - return opd_add_kernel_image(name, 0); + return opd_add_kernel_image(name, app_name); } Index: opd_image.h =================================================================== RCS file: /cvsroot/oprofile/oprofile/daemon/opd_image.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- opd_image.h 11 Feb 2003 21:09:00 -0000 1.9 +++ opd_image.h 19 Feb 2003 21:08:17 -0000 1.10 @@ -56,7 +56,7 @@ void opd_init_images(void); struct opd_image * opd_add_kernel_image(char const * name, char const * app_name); -struct opd_image * opd_get_kernel_image(char const * name); +struct opd_image * opd_get_kernel_image(char const * name, char const * app_name); struct op_sample; Index: opd_kernel.c =================================================================== RCS file: /cvsroot/oprofile/oprofile/daemon/opd_kernel.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- opd_kernel.c 11 Feb 2003 21:09:00 -0000 1.15 +++ opd_kernel.c 19 Feb 2003 21:08:17 -0000 1.16 @@ -50,7 +50,7 @@ */ void opd_init_kernel_image(void) { - kernel_image = opd_get_kernel_image(vmlinux); + kernel_image = opd_get_kernel_image(vmlinux, 0); } /** @@ -217,7 +217,7 @@ } mod = opd_get_module(xstrdup(module_name)); - mod->image = opd_get_kernel_image(module_name); + mod->image = opd_get_kernel_image(module_name, 0); mod->start = start_address; mod->end = mod->start + module_size; @@ -325,7 +325,7 @@ strncpy(filename, cp2, (size_t)(cp3 - cp2)); filename[cp3-cp2] = '\0'; - mod->image = opd_get_kernel_image(filename); + mod->image = opd_get_kernel_image(filename, 0); free(filename); break; @@ -512,7 +512,7 @@ struct opd_image * image; struct opd_module * new_module; - image = opd_add_kernel_image(name, app_image->app_name); + image = opd_get_kernel_image(name, app_image->app_name); if (!image) { verbprintf("Can't create image for %s %s\n", name, app_image->app_name); @@ -543,7 +543,7 @@ { struct opd_module * module = opd_find_module(app_image, eip); if (module) { - verbprintf("Image (%s) offset 0x%Lx, counter %u\n", + verbprintf("Image (%s) offset 0x%llx, counter %u\n", module->image->name, eip, counter); opd_put_image_sample(module->image, eip - module->start, counter); |