From dcf580cf0fb86743deb47f1808cf3b726b2c5b71 Mon Sep 17 00:00:00 2001 From: CentOS Buildsys Date: Aug 06 2013 18:42:48 +0000 Subject: import oprofile-0.9.9-2.el7.src.rpm --- diff --git a/.oprofile.metadata b/.oprofile.metadata new file mode 100644 index 0000000..c91d9ef --- /dev/null +++ b/.oprofile.metadata @@ -0,0 +1 @@ +02a1f6609affb04a348dbddfdf8f03e66154f5be SOURCES/oprofile-0.9.9.tar.gz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/oprofile-0.4-guess2.patch b/SOURCES/oprofile-0.4-guess2.patch new file mode 100644 index 0000000..e956676 --- /dev/null +++ b/SOURCES/oprofile-0.4-guess2.patch @@ -0,0 +1,12 @@ +--- oprofile-0.4/gui/oprof_start_config.cpp.guess2 2002-10-01 18:32:31.000000000 -0400 ++++ oprofile-0.4/gui/oprof_start_config.cpp 2002-12-06 14:45:19.000000000 -0500 +@@ -98,8 +98,7 @@ + perror("oprof_start: Unable to determine OS release."); + } else { + string const version(info.release); +- string const vmlinux_path("/lib/modules/" + version +- + "/build/vmlinux"); ++ std::string const vmlinux_path("/usr/lib/debug/lib/modules/" + version + "/vmlinux"); + kernel_filename = vmlinux_path; + } + } diff --git a/SOURCES/oprofile-0.9.7-xen.patch b/SOURCES/oprofile-0.9.7-xen.patch new file mode 100644 index 0000000..0b2b241 --- /dev/null +++ b/SOURCES/oprofile-0.9.7-xen.patch @@ -0,0 +1,707 @@ +diff -up oprofile-0.9.7/daemon/init.c.xen oprofile-0.9.7/daemon/init.c +--- oprofile-0.9.7/daemon/init.c.xen 2011-07-04 22:25:04.000000000 -0400 ++++ oprofile-0.9.7/daemon/init.c 2011-11-28 16:25:07.577000010 -0500 +@@ -312,6 +312,8 @@ static void opd_26_init(void) + + opd_create_vmlinux(vmlinux, kernel_range); + opd_create_xen(xenimage, xen_range); ++ if (xen_passive_setup) ++ opd_create_passive(xen_passive_setup); + + opd_buf_size = opd_read_fs_int("/dev/oprofile/", "buffer_size", 1); + kernel_pointer_size = opd_read_fs_int("/dev/oprofile/", "pointer_size", 1); +diff -up oprofile-0.9.7/daemon/opd_kernel.c.xen oprofile-0.9.7/daemon/opd_kernel.c +--- oprofile-0.9.7/daemon/opd_kernel.c.xen 2011-07-04 22:25:04.000000000 -0400 ++++ oprofile-0.9.7/daemon/opd_kernel.c 2011-11-28 16:25:07.579000010 -0500 +@@ -34,11 +34,22 @@ static struct kernel_image vmlinux_image + + static struct kernel_image xen_image; + ++static struct kernel_image xen_image_anon; ++static struct kernel_image vmlinux_image_anon; ++ ++static LIST_HEAD(passive_vmlinux); ++static LIST_HEAD(passive_xen); ++static LIST_HEAD(passive_apps); ++static LIST_HEAD(passive_modules); ++static LIST_HEAD(passive_xen_anon); ++ + void opd_create_vmlinux(char const * name, char const * arg) + { + /* vmlinux is *not* on the list of modules */ + list_init(&vmlinux_image.list); + ++ list_init(&vmlinux_image_anon.list); ++ + /* for no vmlinux */ + if (no_vmlinux) { + vmlinux_image.name = "no-vmlinux"; +@@ -57,13 +68,22 @@ void opd_create_vmlinux(char const * nam + vmlinux_image.start, vmlinux_image.end); + exit(EXIT_FAILURE); + } ++ ++ vmlinux_image_anon.name = "vmlinux-unknown"; ++ vmlinux_image_anon.start = vmlinux_image.start; ++ vmlinux_image_anon.end = vmlinux_image.end; ++ + } + + void opd_create_xen(char const * name, char const * arg) + { ++ int stat; ++ + /* xen is *not* on the list of modules */ + list_init(&xen_image.list); + ++ list_init(&xen_image_anon.list); ++ + /* for no xen */ + if (no_xen) { + xen_image.name = "no-xen"; +@@ -72,18 +92,106 @@ void opd_create_xen(char const * name, c + + xen_image.name = xstrdup(name); + +- sscanf(arg, "%llx,%llx", &xen_image.start, &xen_image.end); ++ stat = sscanf(arg, "%llx,%llx", &xen_image.start, &xen_image.end); ++ ++ xen_image_anon.name = "xen-unknown"; ++ xen_image_anon.start = xen_image.start; ++ xen_image_anon.end = xen_image.end; + + verbprintf(vmisc, "xen_start = %llx, xen_end = %llx\n", + xen_image.start, xen_image.end); + +- if (!xen_image.start && !xen_image.end) { ++ if ( stat != 2 ) { + fprintf(stderr, "error: mis-parsed xen range: %llx-%llx\n", + xen_image.start, xen_image.end); + exit(EXIT_FAILURE); + } ++ + } + ++void opd_create_passive_domain(int id, char const * image_kernel, ++ char const * range, char const * image_xen) ++{ ++ char file[64]; ++ struct kernel_image * image; ++ int stat; ++ ++ image = xmalloc(sizeof(struct kernel_image)); ++ image->name = xstrdup(image_kernel); ++ image->start = image->end = 0; ++ stat = sscanf(range, "%llx,%llx", &image->start, &image->end); ++ image->id = id; ++ list_add(&image->list, &passive_vmlinux); ++ ++ if ( stat != 2 ) { ++ fprintf(stderr, "error: mis-parsed passive domain range for " ++ "domain %d: %llx-%llx\n", id, image->start, image->end); ++ exit(EXIT_FAILURE); ++ } ++ ++ image = xmalloc(sizeof(struct kernel_image)); ++ image->name = xstrdup(image_xen); ++ image->start = xen_image.start; ++ image->end = xen_image.end; ++ image->id = id; ++ list_add(&image->list, &passive_xen); ++ ++ sprintf(file, "domain%d-apps", id); ++ image = xmalloc(sizeof(struct kernel_image)); ++ image->name = xstrdup(file); ++ image->start = 0; ++ image->end = 0; ++ image->id = id; ++ list_add(&image->list, &passive_apps); ++ ++ sprintf(file, "domain%d-modules", id); ++ image = xmalloc(sizeof(struct kernel_image)); ++ image->name = xstrdup(file); ++ image->start = 0; ++ image->end = 0; ++ stat = sscanf(range, "%llx,%llx", &image->start, &image->end); ++ image->id = id; ++ list_add(&image->list, &passive_modules); ++ ++ sprintf(file, "domain%d-xen-unknown", id); ++ image = xmalloc(sizeof(struct kernel_image)); ++ image->name = xstrdup(file); ++ image->start = xen_image.start; ++ image->end = xen_image.end; ++ image->id = id; ++ list_add(&image->list, &passive_xen_anon); ++ ++} ++ ++void opd_create_passive(char const *setup_file) ++{ ++ FILE *fp; ++ int id=0; ++ char image_kernel[128+1]; ++ char range[128+1]; ++ char image_xen[128+1]; ++ int stat; ++ ++ image_kernel[0] = range[0] = image_xen[0] = 0; ++ ++ fp = fopen(setup_file, "r"); ++ ++ if (!fp) { ++ fprintf(stderr, "error: Could not open Xen passive domain " ++ "setup file %s\n", setup_file); ++ exit(EXIT_FAILURE); ++ } ++ ++ while (1) { ++ stat = fscanf(fp, "%d %128s %128s %128s", &id, image_kernel, range, ++ image_xen); ++ if ( stat != 4 ) ++ return; ++ opd_create_passive_domain(id, image_kernel, range, image_xen); ++ } ++ ++ fclose(fp); ++} + + /** + * Allocate and initialise a kernel image description +@@ -210,6 +318,75 @@ struct kernel_image * find_kernel_image( + struct list_head * pos; + struct kernel_image * image = &vmlinux_image; + ++ if (current_domain != COORDINATOR_DOMAIN) { ++ /* we rely on cpu_mode value (i.e. trans->in_kernel) ++ * to search the right image type: xen, kernel or user ++ * We cannot use address ranges since hypervisor does not ++ * share the same address space with fully virtualized guests, ++ * and thus address ranges can overlap */ ++ switch ( trans->in_kernel ) { ++ ++ /* user mode */ ++ case 1: ++ list_for_each(pos, &passive_apps) { ++ image = list_entry(pos, struct kernel_image, list); ++ if (image->id == current_domain) ++ return image; ++ } ++ return NULL; ++ ++ /* kernel mode */ ++ case 2: ++ list_for_each(pos, &passive_vmlinux) { ++ image = list_entry(pos, struct kernel_image, list); ++ if ( (image->id == current_domain) ++ && ( (image->start == 0 && image->end == 0) ++ || (image->start <= trans->pc ++ && image->end > trans->pc) ) ) ++ return image; ++ } ++ /* if not in kernel image range then it should be a module */ ++ list_for_each(pos, &passive_modules) { ++ image = list_entry(pos, struct kernel_image, list); ++ if (image->id == current_domain) ++ return image; ++ } ++ /* This should not happen if the kernel and user level ++ oprofile code are sane and in sync */ ++ return NULL; ++ ++ /* hypervisor mode */ ++ case 3: ++ list_for_each(pos, &passive_xen) { ++ image = list_entry(pos, struct kernel_image, list); ++ if (image->id == current_domain ++ && image->start <= trans->pc ++ && image->end > trans->pc) ++ return image; ++ } ++ list_for_each(pos, &passive_xen_anon) { ++ image = list_entry(pos, struct kernel_image, list); ++ if (image->id == current_domain) ++ return image; ++ } ++ return NULL; ++ ++ default: ++ printf("Unexpected error on passive mode: CPU mode is " ++ "%d for domain %d\n", trans->in_kernel, current_domain); ++ return NULL; ++ } ++ ++ ++ } ++ ++ if (xen_image.start <= trans->pc && xen_image.end > trans->pc) ++ return &xen_image; ++ ++ if (trans->in_kernel == 2) { ++ return &xen_image_anon; ++ } ++ + if (no_vmlinux) + return image; + +@@ -222,8 +399,5 @@ struct kernel_image * find_kernel_image( + return image; + } + +- if (xen_image.start <= trans->pc && xen_image.end > trans->pc) +- return &xen_image; +- +- return NULL; ++ return &vmlinux_image_anon; + } +diff -up oprofile-0.9.7/daemon/opd_kernel.h.xen oprofile-0.9.7/daemon/opd_kernel.h +--- oprofile-0.9.7/daemon/opd_kernel.h.xen 2011-07-04 22:25:04.000000000 -0400 ++++ oprofile-0.9.7/daemon/opd_kernel.h 2011-11-28 16:25:07.580000010 -0500 +@@ -23,8 +23,12 @@ struct transient; + /** create the kernel image */ + void opd_create_vmlinux(char const * name, char const * arg); + ++/** create Xen image */ + void opd_create_xen(char const * name, char const * arg); + ++/** create Xen passive domain images */ ++void opd_create_passive(char const *setup_file); ++ + /** opd_reread_module_info - parse /proc/modules for kernel modules */ + void opd_reread_module_info(void); + +@@ -33,6 +37,7 @@ struct kernel_image { + char * name; + vma_t start; + vma_t end; ++ int id; + struct list_head list; + }; + +diff -up oprofile-0.9.7/daemon/opd_sfile.c.xen oprofile-0.9.7/daemon/opd_sfile.c +--- oprofile-0.9.7/daemon/opd_sfile.c.xen 2011-07-04 22:25:04.000000000 -0400 ++++ oprofile-0.9.7/daemon/opd_sfile.c 2011-11-28 16:25:07.582000010 -0500 +@@ -240,7 +240,7 @@ struct sfile * sfile_find(struct transie + } + + /* we might need a kernel image start/end to hash on */ +- if (trans->in_kernel) { ++ else if (trans->in_kernel) { + ki = find_kernel_image(trans); + if (!ki) { + verbprintf(vsamples, "Lost kernel sample %llx\n", trans->pc); +diff -up oprofile-0.9.7/daemon/opd_trans.c.xen oprofile-0.9.7/daemon/opd_trans.c +--- oprofile-0.9.7/daemon/opd_trans.c.xen 2011-07-04 22:25:04.000000000 -0400 ++++ oprofile-0.9.7/daemon/opd_trans.c 2011-11-28 16:25:07.584000010 -0500 +@@ -31,6 +31,8 @@ + #include + #include + ++int32_t current_domain = COORDINATOR_DOMAIN; ++ + extern size_t kernel_pointer_size; + + +@@ -203,6 +205,9 @@ static void code_kernel_enter(struct tra + { + verbprintf(vmisc, "KERNEL_ENTER_SWITCH to kernel\n"); + trans->in_kernel = 1; ++ /* if in passive domain mode cpu mode should be incremented */ ++ if (current_domain != COORDINATOR_DOMAIN) ++ trans->in_kernel++; + clear_trans_current(trans); + /* subtlety: we must keep trans->cookie cached, + * even though it's meaningless for the kernel - +@@ -216,6 +221,9 @@ static void code_user_enter(struct trans + { + verbprintf(vmisc, "USER_ENTER_SWITCH to user-space\n"); + trans->in_kernel = 0; ++ /* if in passive domain mode cpu mode should be incremented */ ++ if (current_domain != COORDINATOR_DOMAIN) ++ trans->in_kernel++; + clear_trans_current(trans); + clear_trans_last(trans); + } +@@ -244,17 +252,34 @@ static void code_trace_begin(struct tran + static void code_xen_enter(struct transient * trans) + { + verbprintf(vmisc, "XEN_ENTER_SWITCH to xen\n"); +- trans->in_kernel = 1; ++ trans->in_kernel = 2; ++ /* if in passive domain mode cpu mode should be incremented */ ++ if (current_domain != COORDINATOR_DOMAIN) ++ trans->in_kernel++; + trans->current = NULL; + /* subtlety: we must keep trans->cookie cached, even though it's +- * meaningless for Xen - we won't necessarily get a cookie switch +- * on Xen exit. See comments in opd_sfile.c. It seems that we can +- * get away with in_kernel = 1 as long as we supply the correct +- * Xen image, and its address range in startup find_kernel_image +- * is modified to look in the Xen image also +- */ ++ * meaningless for Xen - same reason as for kernel */ + } + ++static void code_domain_switch(struct transient *trans) ++{ ++ /* While processing passive domain samples we ensure (in_kernel!=0) ++ * We do this in order to ignore cookies for passive domain samples ++ * But, we have to remember the kernel value for coordinator domain, ++ * so we do the safe thing: increment when leaving the coordinator ++ * domain and decrement when returning to it ++ */ ++ if (current_domain == COORDINATOR_DOMAIN) ++ trans->in_kernel++; ++ ++ trans->current = NULL; ++ current_domain = (int32_t) pop_buffer_value(trans); ++ ++ /* If returning to coordinator domain restore the kernel value */ ++ if (current_domain == COORDINATOR_DOMAIN) ++ trans->in_kernel--; ++} ++ + extern void code_spu_profiling(struct transient * trans); + extern void code_spu_ctx_switch(struct transient * trans); + +@@ -278,7 +303,7 @@ handler_t handlers[LAST_CODE + 1] = { + &code_spu_profiling, + &code_spu_ctx_switch, + #else +- &code_unknown, ++ &code_domain_switch, + &code_unknown, + #endif + &code_ibs_fetch_sample, +diff -up oprofile-0.9.7/daemon/opd_trans.h.xen oprofile-0.9.7/daemon/opd_trans.h +--- oprofile-0.9.7/daemon/opd_trans.h.xen 2011-07-04 22:25:04.000000000 -0400 ++++ oprofile-0.9.7/daemon/opd_trans.h 2011-11-28 16:25:07.585000010 -0500 +@@ -21,6 +21,10 @@ + + #include + ++#define COORDINATOR_DOMAIN -1 ++ ++extern int32_t current_domain; ++ + struct sfile; + struct anon_mapping; + +diff -up oprofile-0.9.7/daemon/oprofiled.c.xen oprofile-0.9.7/daemon/oprofiled.c +--- oprofile-0.9.7/daemon/oprofiled.c.xen 2011-07-04 22:25:04.000000000 -0400 ++++ oprofile-0.9.7/daemon/oprofiled.c 2011-11-28 16:25:07.587000010 -0500 +@@ -71,6 +71,7 @@ char * session_dir; + int no_xen; + char * xenimage; + char * xen_range; ++char * xen_passive_setup; + static char * verbose; + static char * binary_name_filter; + static char * events; +@@ -91,6 +92,7 @@ static struct poptOption options[] = { + { "xen-range", 0, POPT_ARG_STRING, &xen_range, 0, "Xen VMA range", "start-end", }, + { "xen-image", 0, POPT_ARG_STRING, &xenimage, 0, "Xen image", "file", }, + { "image", 0, POPT_ARG_STRING, &binary_name_filter, 0, "image name filter", "profile these comma separated image" }, ++ { "xen-passive-setup", 0, POPT_ARG_STRING, &xen_passive_setup, 0, "Xen passive domain setup file", "filename", }, + { "separate-lib", 0, POPT_ARG_INT, &separate_lib, 0, "separate library samples for each distinct application", "[0|1]", }, + { "separate-kernel", 0, POPT_ARG_INT, &separate_kernel, 0, "separate kernel samples for each distinct application", "[0|1]", }, + { "separate-thread", 0, POPT_ARG_INT, &separate_thread, 0, "thread-profiling mode", "[0|1]" }, +diff -up oprofile-0.9.7/daemon/oprofiled.h.xen oprofile-0.9.7/daemon/oprofiled.h +--- oprofile-0.9.7/daemon/oprofiled.h.xen 2011-07-04 22:25:04.000000000 -0400 ++++ oprofile-0.9.7/daemon/oprofiled.h 2011-11-28 16:25:07.588000010 -0500 +@@ -65,5 +65,6 @@ extern char * kernel_range; + extern int no_xen; + extern char * xenimage; + extern char * xen_range; ++extern char * xen_passive_setup; + + #endif /* OPROFILED_H */ +diff -up oprofile-0.9.7/doc/opcontrol.1.in.xen oprofile-0.9.7/doc/opcontrol.1.in +--- oprofile-0.9.7/doc/opcontrol.1.in.xen 2011-07-04 22:25:04.000000000 -0400 ++++ oprofile-0.9.7/doc/opcontrol.1.in 2011-11-28 16:25:07.590000010 -0500 +@@ -158,12 +158,41 @@ Xen image + .br + .TP + .BI "--active-domains=" +-List of domain ids participating in a multi-domain profiling session. If ++List of domain ids participating in a multi-domain profiling session. ++Each of the specified domains must run an instance of oprofile. The ++sequence of opcontrol commands in each domain must follow a given ++order which is specified in the oprofile user manual. If + more than one domain is specified in they should be separated using + commas. This option can only be used in domain 0 which is the only domain + that can coordinate a multi-domain profiling session. Including domain 0 in + the list of active domains is optional. (e.g. --active-domains=2,5,6 and +---active-domains=0,2,5,6 are equivalent) ++--active-domains=0,2,5,6 are equivalent). ++This option can only be specified ++if --start-daemon is also specified and it is only ++valid for the current run of the oprofile daemon; e.g. the list ++of active domains is not persistent. ++.br ++.TP ++.BI "--passive-domains=" or "--domains=" ++List of domain ids to be profiled, separated by commas. ++As opposed to the --active-domains option, the domains specified with this ++option do not need to run oprofile. This makes ++profiling multiple domains easier. However, with the passive-domains option, ++samples in user level processes and kernel modules cannot be ++mapped to specific symbols and are aggregated ++under a generic class. Both --active-domains and --passive-domains ++options can be specified in the same command, but the same domain cannot be ++specified in both options. This option can only be specified if either --start ++or --start-daemon is specified on the same command and it is only valid for ++the current run of the oprofile daemon; e.g. the list of passive domains is ++not persistent. ++.br ++.TP ++.BI "--passive-images=" or "--domains-images=" ++List of kernel images associated with the domains specified in the ++--passive-domains option, also separated by commas. The association ++between the images and domains is based on the order they are ++specified in both options. + .br + .SH OPTIONS (specific to System z) + .TP +diff -up oprofile-0.9.7/libpp/format_output.cpp.xen oprofile-0.9.7/libpp/format_output.cpp +--- oprofile-0.9.7/libpp/format_output.cpp.xen 2011-07-04 22:25:04.000000000 -0400 ++++ oprofile-0.9.7/libpp/format_output.cpp 2011-11-28 16:25:07.592000010 -0500 +@@ -287,8 +287,8 @@ string formatter::format_app_name(field_ + { + return get_image_name(f.symbol.app_name, + long_filenames +- ? image_name_storage::int_real_filename +- : image_name_storage::int_real_basename, ++ ? image_name_storage::int_filename ++ : image_name_storage::int_basename, + extra_found_images); + } + +diff -up oprofile-0.9.7/utils/opcontrol.xen oprofile-0.9.7/utils/opcontrol +--- oprofile-0.9.7/utils/opcontrol.xen 2011-07-20 15:36:48.000000000 -0400 ++++ oprofile-0.9.7/utils/opcontrol 2011-11-28 16:28:56.431000248 -0500 +@@ -236,9 +236,16 @@ opcontrol: usage: + buffer-size. + --cpu-buffer-size=num per-cpu buffer size in units (2.6 kernel) + Same rules as defined for buffer-size. +- --xen Xen image (for Xen only) +- --active-domains= List of domains in profiling session (for Xen) +- (list contains domain ids separated by commas) ++ --xen=file Xen image (for Xen only) ++ --active-domains=id[,ids] list of domains in multiple domain profiling session (Xen) ++ (detailed profiling of user level and kernel modules code) ++ (requires running oprofile on these domains) ++ --passive-domains=id[,ids] list of domains to be profiled (Xen). ++ or --domains=id[,ids] (coarse profiling of user level and kernel modules code) ++ (no need to run oprofile on these domains) ++ --passive-images=file[,files] list of kernel images associated with each passive domain ++ or ++ --domain-images=file[,files] + + System z specific options + +@@ -388,6 +395,9 @@ do_init() + SETUP_FILE="$SETUP_DIR/daemonrc" + SEC_SETUP_FILE="$SETUP_DIR/daemonrc_new" + ++ # location for passing info about passive domains to daemon ++ PASSIVE_SETUP_FILE="$SETUP_DIR/xendomain.setup" ++ + # initialize daemon vars + decide_oprofile_device_mount + CPUTYPE=`cat $MOUNT/cpu_type` +@@ -539,7 +549,7 @@ do_load_setup() + } + + +-check_valid_args() ++check_valid_vmlinux() + { + if test -z "$VMLINUX"; then + echo "No vmlinux file specified. You must specify the correct vmlinux file, e.g." >&2 +@@ -560,8 +570,12 @@ check_valid_args() + + echo "The specified vmlinux file \"$VMLINUX\" doesn't exist." >&2 + exit 1 ++} ++ + + # similar check for Xen image ++check_valid_xen() ++{ + if test -f "$XENIMAGE"; then + return + fi +@@ -622,6 +636,77 @@ get_image_range() + } + + ++set_passive_domain() ++{ ++ DOMAIN_ID=$1 ++ FILE_IMAGE=$2 ++ XEN_IMAGE=$3 ++ ++ if test "$FILE_IMAGE" = "none"; then ++ RANGE="0,0" ++ FILE_IMAGE="domain$DOMAIN_ID-kernel" ++ else ++ # Find VMA range for passive domain kernel image ++ range_info=`objdump -h $FILE_IMAGE 2>/dev/null | grep " .text "` ++ tmp1=`echo $range_info | awk '{print $4}'` ++ tmp_length=`echo $range_info | awk '{print $3}'` ++ tmp2=`objdump -h $FILE_IMAGE --adjust-vma=0x$tmp_length 2>/dev/null | grep " .text " | awk '{print $4}'` ++ ++ if test -z "$tmp1" -o -z "$tmp2"; then ++ echo "The specified file $FILE_IMAGE does not seem to be valid" >&2 ++ echo "Make sure you are using the non-compressed image file (e.g. vmlinux not vmlinuz)" >&2 ++ vecho "found start as \"$tmp1\", end as \"$tmp2\"" >&2 ++ exit 1 ++ fi ++ RANGE="`echo $tmp1`,`echo $tmp2`" ++ fi ++ echo " $DOMAIN_ID $FILE_IMAGE $RANGE $XEN_IMAGE" >> $PASSIVE_SETUP_FILE ++} ++ ++ ++set_passive_domain_config() ++{ ++ ++ create_dir "$SETUP_DIR" ++ ++ touch $PASSIVE_SETUP_FILE ++ chmod 644 $PASSIVE_SETUP_FILE ++ >$PASSIVE_SETUP_FILE ++ ++ NDOMAINS=`echo "$PASSIVE_DOMAINS" | awk -F',' '{print NF}'` ++ ++ if test -n "$PASSIVE_IMAGES"; then ++ NIMAGES=`echo "$PASSIVE_IMAGES" | awk -F',' '{print NF}'` ++ if [ $NDOMAINS != $NIMAGES ]; then ++ echo "# of passive domains and # of passive images doesn't match." >&2 ++ do_help ++ exit 1 ++ fi ++ ++ for (( i=1; i<=$NDOMAINS; i++ )); do ++ ID=`echo "$PASSIVE_DOMAINS" | awk -F"," '{print $'$i'}'` ++ FILE=`echo "$PASSIVE_IMAGES" | awk -F',' '{print $'$i'}'` ++ if test ! -f "$FILE"; then ++ echo "Image $FILE for passive domain $ID not found." >&2 ++ return 1 ++ fi ++ LNK_KERNEL=/boot/domain$ID-kernel ++ ln -sf $FILE $LNK_KERNEL ++ LNK_XEN=/boot/domain$ID-xen ++ ln -sf $XENIMAGE $LNK_XEN ++ set_passive_domain $ID $LNK_KERNEL $LNK_XEN ++ done ++ else ++ for (( i=1; i<=$NDOMAINS; i++ )); do ++ ID=`echo "$PASSIVE_DOMAINS" | awk -F"," '{print $'$i'}'` ++ LNK_XEN=/boot/domain$ID-xen ++ set_passive_domain $ID none $LNK_XEN ++ done ++ ++ fi ++} ++ ++ + # validate --separate= parameters. This function is called with IFS=, + # so on each argument is splitted + validate_separate_args() +@@ -932,10 +1017,20 @@ do_options() + DO_SETUP=yes + ;; + --active-domains) +- error_if_invalid_arg $arg $val ++ error_if_invalid_arg "$arg" "$val" + ACTIVE_DOMAINS=$val + DO_SETUP=yes + ;; ++ --passive-domains|--domains) ++ error_if_invalid_arg "$arg" "$val" ++ PASSIVE_DOMAINS=$val ++ DO_SETUP=yes ++ ;; ++ --passive-images|--domain-images) ++ error_if_invalid_arg "$arg" "$val" ++ PASSIVE_IMAGES=$val ++ DO_SETUP=yes ++ ;; + -i|--image) + error_if_invalid_arg "$arg" "$val" + if test "$val" = "all"; then +@@ -1366,6 +1461,16 @@ check_event_mapping_data() + exit 1 + fi + fi ++ ++ if test -n "$ACTIVE_DOMAINS" -a "$START_DAEMON" != "yes"; then ++ echo "Option \"--active-domains\" can only be used with option \"-start-daemon\"." >&2 ++ exit 1 ++ fi ++ ++ if test -n "$PASSIVE_DOMAINS" -a "$START_DAEMON" != "yes" -a "$START" != "yes"; then ++ echo "Option \"--passive-domains\" or "--domains" can only be used with option \"--start-daemon\" or \"--start\"." >&2 ++ exit 1 ++ fi + } + + +@@ -1404,6 +1509,15 @@ do_param_setup() + fi + fi + ++ if test -n "$PASSIVE_DOMAINS"; then ++ if test "$KERNEL_SUPPORT" = "yes"; then ++ echo $PASSIVE_DOMAINS >$MOUNT/passive_domains ++ set_passive_domain_config ++ else ++ echo "passive-domains not supported - ignored" >&2 ++ fi ++ fi ++ + if test $NOTE_SIZE != 0; then + set_param notesize $NOTE_SIZE + fi +@@ -1566,7 +1680,8 @@ do_start_daemon() + fi + + do_setup +- check_valid_args ++ check_valid_vmlinux ++ check_valid_xen + get_image_range "linux" + get_image_range "xen" + do_param_setup +@@ -1600,6 +1715,10 @@ do_start_daemon() + OPD_ARGS="$OPD_ARGS --image=$IMAGE_FILTER" + fi + ++ if ! test -z "$PASSIVE_DOMAINS"; then ++ OPD_ARGS="$OPD_ARGS --xen-passive-setup=$PASSIVE_SETUP_FILE" ++ fi ++ + if test -n "$VERBOSE"; then + OPD_ARGS="$OPD_ARGS --verbose=$VERBOSE" + fi +@@ -1805,6 +1924,8 @@ do_save_session() + fi + + hup_daemon ++ ++ rm -f /boot/domain-*-kernel /boot/domain-*-xen + } + + +@@ -1855,7 +1976,8 @@ do_operations() + fi + + if test "$SETUP" = "yes"; then +- check_valid_args ++ check_valid_vmlinux ++ check_valid_xen + do_save_setup + fi + diff --git a/SPECS/oprofile.spec b/SPECS/oprofile.spec new file mode 100644 index 0000000..286ca11 --- /dev/null +++ b/SPECS/oprofile.spec @@ -0,0 +1,726 @@ +Summary: System wide profiler +Name: oprofile +Version: 0.9.9 +Release: 2%{?dist} +License: GPLv2+ and LGPLv2+ +Group: Development/System +# +Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz +Requires: binutils +Requires: which +Requires(pre): shadow-utils +Requires(postun): shadow-utils +Patch10: oprofile-0.4-guess2.patch +Patch83: oprofile-0.9.7-xen.patch + +URL: http://oprofile.sf.net + +#If oprofile doesn't build on an arch, report it and will add ExcludeArch tag. +BuildRequires: qt-devel +BuildRequires: libxslt +BuildRequires: docbook-style-xsl +BuildRequires: docbook-utils +BuildRequires: elinks +BuildRequires: gtk2-devel +BuildRequires: automake +BuildRequires: libtool +BuildRequires: binutils-static +BuildRequires: popt-devel +BuildRequires: java-devel +BuildRequires: jpackage-utils +BuildRequires: java-1.7.0-openjdk-devel +BuildRequires: libpfm-devel >= 4.3.0 + +BuildRoot: %{_tmppath}/%{name}-root + +%description +OProfile is a profiling system for systems running Linux. The +profiling runs transparently during the background, and profile data +can be collected at any time. OProfile makes use of the hardware performance +counters provided on Intel P6, and AMD Athlon family processors, and can use +the RTC for profiling on other x86 processor types. + +See the HTML documentation for further details. + +%package devel +Summary: Header files and libraries for developing apps which will use oprofile +Group: Development/Libraries +Requires: oprofile = %{version}-%{release} +Provides: oprofile-static = %{version}-%{release} + +%description devel + +Header files and libraries for developing apps which will use oprofile. + +%package gui +Summary: GUI for oprofile +Group: Development/System +Requires: oprofile = %{version}-%{release} + +%description gui + +The oprof_start GUI for oprofile. + +%package jit +Summary: Libraries required for profiling Java and other JITed code +Group: Development/System +Requires: oprofile = %{version}-%{release} +#Requires: java >= 1.6 +#Requires: jpackage-utils + +%description jit +This package includes a base JIT support library, as well as a Java +agent library. + +%prep +%setup -q -n %{name}-%{version} +%patch10 -p1 -b .guess2 +%patch83 -p1 -b .xen + +./autogen.sh + +%build + +#The CXXFLAGS below is temporary to work around +# bugzilla #113909 +CXXFLAGS=-g; export CXXFLAGS + +%configure \ +--enable-gui=qt4 \ +--with-java=/usr/lib/jvm/java + +make CFLAGS="%{optflags}" + +%install +rm -rf %{buildroot} + +mkdir -p %{buildroot}%{_bindir} +mkdir -p %{buildroot}%{_mandir}/man1 + +make DESTDIR=%{buildroot} INSTALL="install -p" install + +# We want the manuals in the special doc dir, not the generic doc install dir. +# We build it in place and then move it away so it doesn't get installed +# twice. rpm can specify itself where the (versioned) docs go with the +# %%doc directive. +mkdir docs.installed +mv %{buildroot}%{_datadir}/doc/oprofile/* docs.installed/ + +mkdir -p %{buildroot}/etc/ld.so.conf.d +echo "%{_libdir}/oprofile" > %{buildroot}/etc/ld.so.conf.d/oprofile-%{_arch}.conf + +%pre +getent group oprofile >/dev/null || groupadd -r -g 16 oprofile +getent passwd oprofile >/dev/null || \ +useradd -g oprofile -d /var/lib/oprofile -M -r -u 16 -s /sbin/nologin \ + -c "Special user account to be used by OProfile" oprofile +exit 0 + +%postun +# do not try to remove existing oprofile user or group + +%files +%defattr(-,root,root) +%doc docs.installed/* +%doc COPYING + +%{_bindir}/ocount +%{_bindir}/ophelp +%{_bindir}/opimport +%{_bindir}/opannotate +%{_bindir}/opcontrol +%{_bindir}/opgprof +%{_bindir}/opreport +%{_bindir}/oprofiled +%{_bindir}/oparchive +%{_bindir}/opjitconv +%{_bindir}/op-check-perfevents +%{_bindir}/operf + +%{_mandir}/man1/* + +%{_datadir}/oprofile + +%files devel +%defattr(-,root,root) + +%{_includedir}/opagent.h + +%files gui +%defattr(-,root,root) + +%{_bindir}/oprof_start + +%post jit -p /sbin/ldconfig + +%postun jit -p /sbin/ldconfig + +%files jit +%defattr(-,root,root) + +%{_libdir}/oprofile +%{_sysconfdir}/ld.so.conf.d/* + +%changelog +* Tue Aug 06 2013 Will Cohen - 0.9.9-2 +- rhbz993994 Eliminate versioned doc pages. + +* Mon Jul 29 2013 Will Cohen - 0.9.9-1 +- Rebase on oprofile. +- Trim changelog entries + +* Mon Jul 15 2013 Will Cohen - 0.9.8-10 +- rhbz949028: Man page scan results for oprofile + +* Thu Feb 14 2013 Fedora Release Engineering - 0.9.8-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Wed Dec 19 2012 Will Cohen - 0.9.8-3 +- Use buildid support instead of crc checks. rhbz #877187 + +* Mon Oct 15 2012 Will Cohen - 0.9.8-2 +- Cleanup configure. +- Add libpfm-devel to the buildrequires. + +* Tue Sep 04 2012 Will Cohen - 0.9.8-1 +- Rebase on oprofile-0.9.8. + +* Fri Jul 20 2012 Fedora Release Engineering - 0.9.7-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu Apr 5 2012 Will Cohen - 0.9.7-4 +- Fix autogen.sh to avoid false match. + +* Wed Apr 4 2012 Will Cohen - 0.9.7-3 +- Use correct macros for /etc and /user/share. rhbz #226222 +- Consistently use macros for buildroot. +- Preserve timestamp for installed files. +- Remove the clean section. +- Fix the source location. +- Remove unneeded BuildRequires: binutils-devel +- Remove unneeded depends. +- Correct Buildreq to java-1.7.0-openjdk-devel. +- Fix macro-in-comment and macro-in-changelog +- Remove '.' from Summary lines +- Correct license GPLv2+ and LGPLv2+. +- Do not remove oprofile user or group. + +* Tue Jan 10 2012 Will Cohen - 0.9.7-2 +- Remove duplicate -r option in %%pre useradd Resolves: rhbz #772841 + +* Tue Nov 29 2011 Will Cohen - 0.9.7-1 +- Rebase on oprofile-0.9.7. + +* Tue Jun 07 2011 Will Cohen - 0.9.6-21 +- Correct CVE-2011-1760. Resolves: rhbz #701508 + +* Tue Apr 5 2011 Will Cohen - 0.9.6-20 +- Re-enable xenoprof patch. + +* Thu Mar 31 2011 Will Cohen - 0.9.6-19 +- Provide oprofile-static. + +* Tue Mar 15 2011 Will Cohen - 0.9.6-18 +- Clean up rpmlint complaints. + +* Tue Mar 15 2011 Will Cohen - 0.9.6-17 +- Correct oprofile user information. + +* Thu Mar 10 2011 Will Cohen - 0.9.6-16 +- Remove obsolete configure options. + +* Thu Mar 10 2011 Will Cohen - 0.9.6-15 +- Use QT4. + +* Fri Feb 25 2011 Will Cohen - 0.9.6-14 +- Add processors models for Intel westmere and core i7. + +* Wed Feb 09 2011 Will Cohen - 0.9.6-12 +- Eliminate illegal mutable use. + +* Tue Feb 08 2011 Fedora Release Engineering - 0.9.6-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Jan 6 2011 Will Cohen - 0.9.6-10 +- Corrections for i386/arch_perfmon filters. +- Make nehalem events available. +- Add AMD family 12/14/15h support. +- Add Intel westemere support. +- opcontrol numeric argument checking. + +* Wed Apr 21 2010 Will Cohen - 0.9.6-6 +- Bump version and rebuild. + +* Wed Apr 14 2010 Will Cohen - 0.9.6-5 +- Handle debuginfo section differences. rhbz554639 + +* Mon Apr 5 2010 Will Cohen - 0.9.6-3 +- Include Buildrequires for binutils-static. + +* Fri Dec 11 2009 Will Cohen - 0.9.6-2 +- Clean up oprofile.spec file. + +* Tue Nov 24 2009 Will Cohen - 0.9.6-1 +- Rebase on OProfile 0.9.6. + +* Wed Oct 21 2009 Will Cohen - 0.9.5-4 +- Switch to using ExcludeArch. + +* Wed Oct 7 2009 Will Cohen - 0.9.5-3 +- Allow timer mode to work. +- Correct location for addditional files in man pages. Resolves: rhbz #508669 + +* Fri Sep 4 2009 Will Cohen - 0.9.5-2 +- Bump version and rebuild. + +* Mon Aug 3 2009 Will Cohen - 0.9.5-1 +- Rebase on OProfile 0.9.5. + +* Sat Jul 25 2009 Fedora Release Engineering - 0.9.4-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Jul 16 2009 Will Cohen - 0.9.4-12 +- Add shadow-utils to requires. Resolves: rhbz #501357 +- Add LGPL license to provided java support. Resolves: rhbz #474666 +- Correct handling of --verbose. Resolves: rhbz #454969 + +* Mon May 11 2009 Will Cohen - 0.9.4-9 +- Assign specific UID and GID to oprofile. + +* Thu Apr 23 2009 Will Cohen - 0.9.4-7 +- Backport Intel Architecture Perfmon support. Resolves: rhbz #497230 + +* Wed Apr 8 2009 Will Cohen - 0.9.4-6 +- Test for basename declaration. + +* Wed Apr 8 2009 Will Cohen - 0.9.4-5 +- Bump version and rebuild. + +* Thu Feb 26 2009 Fedora Release Engineering - 0.9.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Sep 29 2008 Dennis Gilmore - 0.9.4-3 +- build sparcv9 not sparc + +* Mon Jul 21 2008 Will Cohen - 0.9.4-2 +- Correct oprofile.spec. + +* Fri Jul 18 2008 Will Cohen - 0.9.4-1 +- Update to orprofile 0.9.4. + +* Mon Jun 23 2008 Will Cohen - 0.9.3-18 +- Fix default location for vmlinux. rhbz #451539 + +* Fri Apr 04 2008 Will Cohen - 0.9.3-17 +- Use older qt3-devel. rhbz #440949 + +* Fri Feb 15 2008 Will Cohen - 0.9.3-16 +- Corrections for compilation with gcc-4.3. + +* Fri Jan 18 2008 Will Cohen - 0.9.3-15 +- Deal with xenoprof conlficts with cell. Resolves: rhbz #250852 + +* Fri Jan 18 2008 Will Cohen - 0.9.3-14 +- Bump format version. Check version properly. Resolves: rhbz #394571 + +* Fri Jan 18 2008 Will Cohen - 0.9.3-13 +- Disable profiling in hypervisor on 970MP to prevent lost interrupts. + Resolves: rhbz #391251 + +* Fri Jan 18 2008 Will Cohen - 0.9.3-12 +- Use more incluse set of kernel ranges. Resolves: rhbz #307111 + +* Fri Jan 18 2008 Will Cohen - 0.9.3-11 +- Update AMD family 10h events to match AMD documentation Resolves: rhbz #232956 + +* Mon Nov 12 2007 Will Cohen - 0.9.3-7 +- Should correct missing 'test' in patch. + +* Mon Oct 8 2007 Will Cohen - 0.9.3-5 +- Should be popt-devel to BuildRequires. + +* Mon Oct 8 2007 Will Cohen - 0.9.3-5 +- Add popt to BuildRequires. + +* Mon Oct 8 2007 Will Cohen - 0.9.3-4 +- Allow short forms of --list-events (-l) and --dump (-d). + Resolves: rhbz#234003. + +* Tue Aug 21 2007 Will Cohen - 0.9.3-3 +- rebuild + +* Wed Jul 25 2007 Will Cohen - 0.9.3-2 +- Re-enable xen patch. + +* Tue Jul 17 2007 Will Cohen - 0.9.3-1 +- Rebase on 0.9.3 release. +- Disable xen patch until fixed. + +* Mon May 21 2007 Will Cohen - 0.9.2-9 +- Fix up rpmlint complaints. + +* Wed Mar 21 2007 Will Cohen - 0.9.2-8 +- Add AMD family 10 support. Resolves: rhbz#232956. + +* Wed Mar 21 2007 Will Cohen - 0.9.2-7 +- Correct description for package. +- Correct backtrace documentation. Resolves: rhbz#214793. +- Correct race condition. Resolves: rhbz#220116. + + +* Fri Nov 3 2006 Will Cohen - 0.9.2-3 +- Add dist tag to build. + +* Fri Sep 22 2006 Will Cohen - 0.9.2-2 +- Rebase on 0.9.2 release. + +* Thu Aug 24 2006 Will Cohen +- Update xenoprof patch. + +* Wed Jul 19 2006 Jesse Keating - 0.9.1-15 +- rebuild +- remove silly release definition + +* Wed Jul 12 2006 Will Cohen +- Support for Intel Woodcrest. (#183081) + +* Wed Jul 12 2006 Jesse Keating - 0.9.1-13.1.1.1 +- rebuild + +* Mon Jul 10 2006 Will Cohen +- Add power6 support. (#196505) + +* Fri Jul 7 2006 Will Cohen +- Support for power5+. (#197728) +- Fix PPC64 events and groups. (#197895) + +* Wed Jun 07 2006 Will Cohen +- Put oprof_start in to oprofile-gui. + +* Wed Jun 07 2006 Will Cohen - 0.9.1-10.1.1 +- Bump version and rebuild. + +* Sat May 13 2006 Will Cohen - 0.9.1-9.1.1 +- Add xenoprof patch. + +* Fri Feb 10 2006 Jesse Keating - 0.9.1-8.1.1 +- bump again for double-long bug on ppc(64) + +* Fri Feb 10 2006 Will Cohen +- Complete path for which and dirname in opcontrol. + +* Tue Feb 07 2006 Jesse Keating - 0.9.1-7.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Thu Dec 22 2005 Jesse Keating +- rebuilt + +* Mon Dec 05 2005 Will Cohen +- Correct anon namespace issue. + +* Fri Nov 11 2005 Will Cohen +- Add alpha and sparcs to exclusivearch. + +* Tue Jul 26 2005 Will Cohen +- Rebase on OProfile 0.9.1. +- Add MIPS 24K files to manifest. + +* Wed Jun 08 2005 Will Cohen +- Rebase on OProfile 0.9. + +* Wed Apr 13 2005 Will Cohen +- Add which dependency. + +* Tue Apr 05 2005 Will Cohen +- Backport ppc64 patch for synthesizing dotted symbols. + +* Mon Mar 21 2005 Will Cohen +- Bump release. +- Rebase on 0.8.2 release. + +* Mon Mar 14 2005 Will Cohen +- Bump rebuild with gcc4. + +* Wed Feb 9 2005 Will Cohen +- Do not need -D_FORTIFY_SOURCE=2 + +* Wed Feb 9 2005 Will Cohen +- Rebuild for -D_FORTIFY_SOURCE=2 + +* Fri Oct 15 2004 Will Cohen +- Additional ppc64 support for ppc64/970. + +* Thu Oct 7 2004 Will Cohen +- Correct opcontrol check for Power 4/5. + +* Fri Oct 1 2004 Will Cohen +- Add support for Power 4/5 performance monitoring hardware. + +* Wed Sep 22 2004 Will Cohen +- Add logic to use preferred symbol names. + +* Wed Sep 15 2004 Will Cohen +- Clean up file manifests. + +* Mon Sep 13 2004 Will Cohen +- Rebase on 0.8.1 release. + +* Wed Jul 7 2004 Will Cohen +- Add oparchive patch. + +* Mon Jun 21 2004 Will Cohen +- bump version + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Thu May 20 2004 Will Cohen +- Eliminate AUTOMAKE and ACLOCAL definitions. +- Correct QTDIR and add oprof_start to file manifests. + +* Tue May 11 2004 Will Cohen +- Remove wildcards in the file manifests. +- Correct build directory. +- Use the 0.8 release tarball. + +* Tue Mar 23 2004 Will Cohen +- Bump version and rebuild. + +* Mon Mar 15 2004 Will Cohen +- Correct cvs checkin. + +* Thu Feb 19 2004 Will Cohen +- Use automake 1.6. + +* Wed Jan 21 2004 Will Cohen +- Rebase on 8.0 cvs snapshot. + +* Mon Dec 01 2003 Will Cohen +- Turn on debug info patch. + +* Mon Nov 24 2003 Will Cohen +- Rebase on 7.1 cvs snapshot. + +* Fri Sep 26 2003 Will Cohen +- Reenable separatedebug and filepos patch. + +* Thu Sep 4 2003 Will Cohen +- Limit to i386. +- Everything but x86_64. +- Turn on x86_64. + +* Mon Aug 11 2003 Will Cohen +- Add gtk2-devel to build requirements. + +* Thu Aug 07 2003 Will Cohen +- adapt to 0.7cvs. + +* Wed Jul 30 2003 Will Cohen +- handle sample files names with spaces. +- clean spec file. +- revise opcontrol --reset. + +* Fri Jul 25 2003 Will Cohen +- Restrict PATH in opcontrol. + +* Wed Jul 09 2003 Will Cohen +- Patch for testing code coverage. +- Better handling of 2.5 module information. + +* Fri Jun 27 2003 Will Cohen +- move to oprofile 0.5.4 pristine tarball. + +* Fri Jun 13 2003 Will Cohen +- Bitmask check. + +* Wed Jun 11 2003 Will Cohen +- Update AMD events. + +* Fri Jun 06 2003 Will Cohen +- Build for ppc64. + +* Thu Jun 05 2003 Will Cohen +- put in s390. +- Fix includes for asserts. +- Make sure elinks is available for html to txt conversion. + +* Fri May 23 2003 Will Cohen +- Avoid library name collisions. + +* Thu May 22 2003 Will Cohen +- Turn on ppc build. +- Turn off ppc build. +- Package op_list.h. + +* Mon May 19 2003 Will Cohen +- Correct typo. + +* Thu Apr 24 2003 Will Cohen +- check min event counts. +- revised op_to_source output to avoid changing line count. +- p4event events revised. +- hammer events revised. + +* Wed Apr 23 2003 Will Cohen +- re-enable ppc build. + +* Wed Apr 16 2003 Will Cohen +- Use /proc/ksym for module information. +- Correct separate debuginfo handling. +- Configure with --enable-abi. + +* Tue Apr 1 2003 Will Cohen +- Correct path finding for daemon and op_help. + +* Mon Mar 31 2003 Will Cohen +- Fix name collisons with /usr/lib/libdb.a. + +* Fri Mar 28 2003 Will Cohen +- clean up spec file. +- turn off ppc build. + +* Mon Mar 24 2003 Will Cohen +- getc instead of fgetc to improve performance. + +* Thu Mar 20 2003 Will Cohen +- produce oprofile-devel. + +* Thu Mar 13 2003 Will Cohen +- fix opvisualise patch format. + +* Wed Mar 12 2003 Will Cohen +- add cmoller changes to fix warnings in opvisualise. + +* Tue Mar 11 2003 Will Cohen +- setup to build on ppc. +- turn on op_visualise for ia64. +- remove unused patches. + +* Mon Mar 10 2003 Will Cohen +- re-enable op_visualise. + +* Fri Mar 7 2003 Will Cohen +- move to oprofile 0.5.1 pristine tarball. +- change libdb abi. + +* Fri Feb 14 2003 Will Cohen +- Requires binutils not perl. + +* Thu Feb 13 2003 Will Cohen +- correct x86_64 sys_lookup_dcookie. +- correct applications of patches. + +* Mon Feb 10 2003 Will Cohen +- rebuilt. +- handle stale locks +- opcontrol rtc patch +- update manpage info + +* Fri Feb 7 2003 Will Cohen +- turn on build for ppc64 +- change order op_visualise searches lib directories. +- revise oprofile-0.4-deprecate patch. +- utils/oprofile kernel range check, --save, and do_dump corrections. +- update gui to use "--separate=library". + +* Thu Feb 6 2003 Will Cohen +- Fix dumping. + +* Fri Jan 31 2003 Will Cohen +- Syscall value for x86_64. +- Update manpage and documentation. +- Revise utils/* to deprecate old. +- Include CPU_P4_HT2 in op_help.c +- Revise how CPU_TIMER_INT handled. +- Apply cookie patch for all archs. +- Correct autogen.sh location. + +* Mon Jan 27 2003 Will Cohen +- Add Hammer specific events. + +* Fri Jan 24 2003 Will Cohen +- Hack to get correct syscall for ia64. +- Hack to get get timer interupt data. +- Fix doc/Makefile.am. + +* Wed Jan 22 2003 Will Cohen +- Add patch for separate debug infomation. + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Thu Jan 16 2003 Will Cohen +- Add support for P4 HT. + +* Wed Jan 15 2003 Will Cohen +- Add support for x86_64. + +* Tue Jan 07 2003 Will Cohen +- Revise op_visualise patch to check opendir() results. + +* Mon Jan 06 2003 Will Cohen +- Patch to fix op_visualise seg fault on startup. + +* Thu Jan 02 2003 Will Cohen +- Correct argument type in daemon/oprofiled.c. +- Correct QTDIR. + +* Wed Dec 18 2002 Will Cohen +- Correct reporting of interrupts in oprof_start. + +* Wed Dec 18 2002 Will Cohen +- Rebuilt against new kernel + +* Fri Dec 13 2002 Will Cohen +- Use opcontrol in oprof_start. + +* Thu Dec 12 2002 Will Cohen +- Correct opvisualise problem. + +* Tue Dec 10 2002 Will Cohen +- Add opcontrol, op_dump, op_visualise, ia64 support, + and debugging information. + +* Fri Dec 06 2002 Will Cohen +- Change to use OProfile 0.4 release and kernel support. + +* Sat Nov 30 2002 Tim Powers 0.3-0.20021108.1 +- rebuild against current version of libbfd + +* Tue Aug 06 2002 Will Cohen +- Change to avoid assumption on executable name + +* Fri Aug 02 2002 Will Cohen +- Move to 0.4cvs sources. + +* Mon Jul 29 2002 Will Cohen +- localize nr_counter code +- add ia64 arch +- guess path to vmlinux. + +* Sun Jul 28 2002 Will Cohen +- adjust structure to fit ia64 oprofile module. + +* Thu Jul 25 2002 Will Cohen +- recognize ia64 cpu and events. + +* Tue Jul 23 2002 Will Cohen +- changes to turn of warning as error on ia64. + +* Tue Jul 23 2002 Will Cohen +- changes to allow compilation on ia64. + +* Mon Jul 22 2002 Will Cohen +- pick better Red Hat Linux default image file in /boot. + +* Sun Jul 14 2002 Will Cohen +- use older OProfile 0.2 kernel<->daemon API. + +* Thu Jul 11 2002 Will Cohen +- avoid oprof_start installing the oprofile module + +* Tue Jul 02 2002 Will Cohen +- avoid building and installing the oprofile module + +* Tue May 28 2002 Jeff Johnson +- create package.