From: Philippe E. <ph...@us...> - 2007-11-16 16:18:33
|
Update of /cvsroot/oprofile/oprofile/libpp In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv23755/libpp Modified Files: Tag: JIT_SUPPORT arrange_profiles.cpp callgraph_container.cpp filename_spec.cpp filename_spec.h parse_filename.cpp parse_filename.h profile_spec.cpp Log Message: jitted code was not properly located when using archive: profile spec Index: arrange_profiles.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/libpp/arrange_profiles.cpp,v retrieving revision 1.42.2.3 retrieving revision 1.42.2.4 diff -u -p -d -r1.42.2.3 -r1.42.2.4 --- arrange_profiles.cpp 29 Oct 2007 19:52:21 -0000 1.42.2.3 +++ arrange_profiles.cpp 16 Nov 2007 16:18:32 -0000 1.42.2.4 @@ -546,14 +546,15 @@ add_to_profile_sample_files(profile_samp */ profile_sample_files & find_profile_sample_files(list<profile_sample_files> & files, - parsed_filename const & parsed) + parsed_filename const & parsed, + extra_images const & extra) { list<profile_sample_files>::iterator it; list<profile_sample_files>::iterator const end = files.end(); for (it = files.begin(); it != end; ++it) { if (!it->sample_filename.empty()) { parsed_filename psample_filename = - parse_filename(it->sample_filename); + parse_filename(it->sample_filename, extra); if (psample_filename.lib_image == parsed.lib_image && psample_filename.image == parsed.image && psample_filename.profile_spec_equal(parsed)) @@ -563,7 +564,8 @@ find_profile_sample_files(list<profile_s list<string>::const_iterator cit; list<string>::const_iterator const cend = it->cg_files.end(); for (cit = it->cg_files.begin(); cit != cend; ++cit) { - parsed_filename pcg_filename = parse_filename(*cit); + parsed_filename pcg_filename = + parse_filename(*cit, extra); if (pcg_filename.lib_image == parsed.lib_image && pcg_filename.image == parsed.image && pcg_filename.profile_spec_equal(parsed)) @@ -583,11 +585,12 @@ find_profile_sample_files(list<profile_s * on the normal list of profiles otherwise. */ void -add_to_profile_set(profile_set & set, parsed_filename const & parsed, bool merge_by_lib) +add_to_profile_set(profile_set & set, parsed_filename const & parsed, + bool merge_by_lib, extra_images const & extra) { if (parsed.image == parsed.lib_image && !merge_by_lib) { profile_sample_files & sample_files = - find_profile_sample_files(set.files, parsed); + find_profile_sample_files(set.files, parsed, extra); add_to_profile_sample_files(sample_files, parsed); return; } @@ -599,7 +602,8 @@ add_to_profile_set(profile_set & set, pa if (it->lib_image == parsed.lib_image && !merge_by_lib && parsed.jit_dumpfile_exists == false) { profile_sample_files & sample_files = - find_profile_sample_files(it->files, parsed); + find_profile_sample_files(it->files, parsed, + extra); add_to_profile_sample_files(sample_files, parsed); return; } @@ -608,7 +612,7 @@ add_to_profile_set(profile_set & set, pa profile_dep_set depset; depset.lib_image = parsed.lib_image; profile_sample_files & sample_files = - find_profile_sample_files(depset.files, parsed); + find_profile_sample_files(depset.files, parsed, extra); add_to_profile_sample_files(sample_files, parsed); set.deps.push_back(depset); } @@ -619,21 +623,22 @@ add_to_profile_set(profile_set & set, pa * will have ensured the profile "fits", so now it's just a matter of * finding which sample file list it needs to go on. */ -void add_profile(profile_class & pclass, parsed_filename const & parsed, bool merge_by_lib) +void add_profile(profile_class & pclass, parsed_filename const & parsed, + bool merge_by_lib, extra_images const & extra) { list<profile_set>::iterator it = pclass.profiles.begin(); list<profile_set>::iterator const end = pclass.profiles.end(); for (; it != end; ++it) { if (it->image == parsed.image) { - add_to_profile_set(*it, parsed, merge_by_lib); + add_to_profile_set(*it, parsed, merge_by_lib, extra); return; } } profile_set set; set.image = parsed.image; - add_to_profile_set(set, parsed, merge_by_lib); + add_to_profile_set(set, parsed, merge_by_lib, extra); pclass.profiles.push_back(set); } @@ -650,7 +655,7 @@ arrange_profiles(list<string> const & fi list<string>::const_iterator const end = files.end(); for (; it != end; ++it) { - parsed_filename parsed = parse_filename(*it); + parsed_filename parsed = parse_filename(*it, extra); if (parsed.lib_image.empty()) parsed.lib_image = parsed.image; @@ -664,7 +669,7 @@ arrange_profiles(list<string> const & fi profile_class & pclass = find_class(temp_classes, parsed, merge_by); - add_profile(pclass, parsed, merge_by.lib); + add_profile(pclass, parsed, merge_by.lib, extra); } profile_classes classes; Index: callgraph_container.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/libpp/callgraph_container.cpp,v retrieving revision 1.37.2.2 retrieving revision 1.37.2.3 diff -u -p -d -r1.37.2.2 -r1.37.2.3 --- callgraph_container.cpp 29 Oct 2007 19:52:24 -0000 1.37.2.2 +++ callgraph_container.cpp 16 Nov 2007 16:18:32 -0000 1.37.2.3 @@ -450,7 +450,8 @@ void callgraph_container::populate(list< for (it = cg_files.begin(); it != end; ++it) { cverb << vdebug << "samples file : " << *it << endl; - parsed_filename caller_file = parse_filename(*it); + parsed_filename caller_file = + parse_filename(*it, extra_found_images); string const app_name = caller_file.image; image_error error; @@ -469,7 +470,8 @@ void callgraph_container::populate(list< image_format_failure, false, extra_found_images); - parsed_filename callee_file = parse_filename(*it); + parsed_filename callee_file = + parse_filename(*it, extra_found_images); extra_found_images.find_image_path(callee_file.cg_image, error, false); Index: filename_spec.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/libpp/filename_spec.cpp,v retrieving revision 1.7 retrieving revision 1.7.2.1 diff -u -p -d -r1.7 -r1.7.2.1 --- filename_spec.cpp 7 Aug 2005 11:15:51 -0000 1.7 +++ filename_spec.cpp 16 Nov 2007 16:18:32 -0000 1.7.2.1 @@ -13,14 +13,16 @@ #include "filename_spec.h" #include "parse_filename.h" #include "generic_spec.h" +#include "locate_images.h" using namespace std; -filename_spec::filename_spec(string const & filename) +filename_spec::filename_spec(string const & filename, + extra_images const & extra) { - set_sample_filename(filename); + set_sample_filename(filename, extra); } @@ -54,9 +56,10 @@ bool filename_spec::match(filename_spec } -void filename_spec::set_sample_filename(string const & filename) +void filename_spec::set_sample_filename(string const & filename, + extra_images const & extra) { - parsed_filename parsed = parse_filename(filename); + parsed_filename parsed = parse_filename(filename, extra); image = parsed.image; lib_image = parsed.lib_image; Index: filename_spec.h =================================================================== RCS file: /cvsroot/oprofile/oprofile/libpp/filename_spec.h,v retrieving revision 1.5 retrieving revision 1.5.6.1 diff -u -p -d -r1.5 -r1.5.6.1 --- filename_spec.h 7 May 2004 15:18:14 -0000 1.5 +++ filename_spec.h 16 Nov 2007 16:18:32 -0000 1.5.6.1 @@ -17,6 +17,7 @@ #include "generic_spec.h" class profile_spec; +class extra_images; /** * A class to split and store components of a sample filename. @@ -30,20 +31,24 @@ class filename_spec public: /** * @param filename the samples filename + * @param extra extra binary image location * * build a filename_spec from a samples filename */ - filename_spec(std::string const & filename); + filename_spec(std::string const & filename, + extra_images const & extra); filename_spec(); /** * @param filename a sample filename + * @param extra extra binary image location * * setup filename spec according to the samples filename. PP:3.19 to * 3.25 */ - void set_sample_filename(std::string const & filename); + void set_sample_filename(std::string const & filename, + extra_images const & extra); /** * @param rhs right hand side of the match operator Index: parse_filename.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/libpp/parse_filename.cpp,v retrieving revision 1.9.2.2 retrieving revision 1.9.2.3 diff -u -p -d -r1.9.2.2 -r1.9.2.3 --- parse_filename.cpp 4 Oct 2007 22:03:17 -0000 1.9.2.2 +++ parse_filename.cpp 16 Nov 2007 16:18:32 -0000 1.9.2.3 @@ -17,6 +17,7 @@ #include "parse_filename.h" #include "file_manip.h" #include "string_manip.h" +#include "locate_images.h" using namespace std; @@ -107,7 +108,8 @@ string const parse_anon(string const & s * * where /name/ denote a unique path component */ -parsed_filename parse_filename(string const & filename) +parsed_filename parse_filename(string const & filename, + extra_images const & extra_found_images) { struct stat st; @@ -177,7 +179,10 @@ parsed_filename parse_filename(string co string jitdump = filename_spec.substr(0,pos) + ".jo"; // if a jitdump file exists, we point to this file if (!stat(jitdump.c_str(), &st)) { - result.lib_image = jitdump; + // later code assume an optionnal prefix path + // is stripped from the lib_image. + result.lib_image = + extra_found_images.strip_path_prefix(jitdump); result.jit_dumpfile_exists = true; } else { result.lib_image = parse_anon(path[i], path[i - 1]); Index: parse_filename.h =================================================================== RCS file: /cvsroot/oprofile/oprofile/libpp/parse_filename.h,v retrieving revision 1.3.6.1 retrieving revision 1.3.6.2 diff -u -p -d -r1.3.6.1 -r1.3.6.2 --- parse_filename.h 4 Oct 2007 22:03:17 -0000 1.3.6.1 +++ parse_filename.h 16 Nov 2007 16:18:32 -0000 1.3.6.2 @@ -13,6 +13,8 @@ #include <string> +class extra_images; + /** * a convenience class to store result of parse_filename() */ @@ -49,6 +51,7 @@ std::ostream & operator<<(std::ostream & /** * parse a sample filename * @param filename in: a sample filename + * @param extra_found_images binary image location * * filename is split into constituent parts, the lib_image is optional * and can be empty on successfull call. All other error are fatal. @@ -56,6 +59,7 @@ std::ostream & operator<<(std::ostream & * * all errors throw an std::invalid_argument exception */ -parsed_filename parse_filename(std::string const & filename); +parsed_filename parse_filename(std::string const & filename, + extra_images const & extra_found_images); #endif /* !PARSE_FILENAME_H */ Index: profile_spec.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/libpp/profile_spec.cpp,v retrieving revision 1.30.2.4 retrieving revision 1.30.2.5 diff -u -p -d -r1.30.2.4 -r1.30.2.5 --- profile_spec.cpp 15 Nov 2007 20:57:29 -0000 1.30.2.4 +++ profile_spec.cpp 16 Nov 2007 16:18:32 -0000 1.30.2.5 @@ -371,7 +371,7 @@ bool valid_candidate(string const & base if (sub.rfind(suf) == (sub.size()-suf.size())) return false; - filename_spec file_spec(filename); + filename_spec file_spec(filename, spec.extra_found_images); if (spec.match(file_spec)) { if (exclude_dependent && file_spec.is_dependent()) return false; |