From: John L. <mov...@us...> - 2002-06-04 14:27:21
|
Update of /cvsroot/oprofile/oprofile/pp In directory usw-pr-cvs1:/tmp/cvs-serv32281/pp Modified Files: Makefile.in demangle_symbol.cpp op_bfd.cpp op_bfd.h op_merge.cpp op_time.cpp op_to_source.cpp opp_symbol.h oprofpp.cpp oprofpp.h oprofpp_util.cpp samples_container.cpp Added Files: op_time_options.cpp op_time_options.h op_to_source_options.cpp op_to_source_options.h outsymbflag.h Log Message: Some more refactoring... --- NEW FILE: op_time_options.cpp --- /** * @file op_time_options.cpp * Options for summary tool * * @remark Copyright 2002 OProfile authors * @remark Read the file COPYING * * @author Philippe Elie <ph...@wa...> * @author John Levon <mo...@co...> */ #include "oprofpp.h" #include "opp_symbol.h" #include "op_time_options.h" #include "op_config.h" #include "popt_options.h" #include "file_manip.h" #include <list> using std::string; using std::vector; using std::list; namespace options { bool verbose; // FIXME string samplefile; string imagefile; string session; string counter_str("0"); string output_format; bool list_symbols; bool show_image_name; bool demangle; vector<string> path; vector<string> recursive_path; vector<string> exclude_symbols; bool reverse_sort; bool show_shared_libs; int sort_by_counter = -1; string samples_dir; OutSymbFlag output_format_flags; alt_filename_t alternate_filename; } namespace { option options_array[] = { option(options::session, "session", 's', "session to use", "name"), option(options::counter_str, "counter", 'c', "which counter to use", "counter_nr[,counter_nr]"), option(options::output_format, "output-format", 't', "choose the output format", "output-format strings"), option(options::list_symbols, "list-symbols", 'l', "list samples by symbol"), option(options::show_image_name, "show-image-name", 'n', "show the image name from where come symbols"), option(options::path, "path", 'p', "add path for retrieving image", "path_name[,path_name]"), option(options::recursive_path, "recursive-path", 'P', "add path for retrieving image recursively", "path_name[,path_name]"), option(options::reverse_sort, "reverse", 'r', "reverse sort order"), option(options::show_shared_libs, "show-shared-libs", 'k', "show details for shared libs. Only meaningfull if you have profiled with --separate-samples"), option(options::sort_by_counter, "sort", 'C', "which counter to use for sampels sort", "counter nr"), option(options::exclude_symbols, "exclude-symbol", 'e', "exclude these comma separated symbols", "symbol_name"), option(options::demangle, "demangle", 'd', "demangle GNU C++ symbol names") }; /// associate filename with directory name where filename exist. Filled /// through the -p/-P option to allow retrieving of image name when samples /// file name contains an incorrect location for the image such ram disk /// module at boot time. We need a multimap to warn against ambiguity between /// mutiple time found image name. // FIXME... /** * add_to_alternate_filename - * add all file name below path_name, optionnaly recursively, to the * the set of alternative filename used to retrieve image name when * a samples image name directory is not accurate */ void add_to_alternate_filename(vector<string> const & path_names, bool recursive) { vector<string>::const_iterator path; for (path = path_names.begin() ; path != path_names.end() ; ++path) { list<string> file_list; create_file_list(file_list, *path, "*", recursive); list<string>::const_iterator it; for (it = file_list.begin() ; it != file_list.end() ; ++it) { typedef alt_filename_t::value_type value_t; if (recursive) { value_t value(basename(*it), dirname(*it)); options::alternate_filename.insert(value); } else { value_t value(*it, *path); options::alternate_filename.insert(value); } } } } /** * handle_session_options - derive samples directory */ void handle_session_options(void) { /* * This should eventually be shared amongst all programs * to take session names. */ if (options::session.empty()) { options::samples_dir = OP_SAMPLES_DIR; return; } if (options::session[0] == '/') { options::samples_dir = options::session; return; } options::samples_dir = OP_SAMPLES_DIR + options::session; } } // namespace anon /** * get_options - process command line * @param argc program arg count * @param argv program arg array * * Process the arguments, fatally complaining on error. */ void get_options(int argc, char const * argv[]) { using namespace options; string file; parse_options(argc, argv, file); if (file.length()) session = file; handle_session_options(); if (output_format.empty()) { output_format = "hvspni"; } else { if (!list_symbols) { quit_error("op_time: --output-format can be used only with --list-symbols.\n"); } } if (exclude_symbols.size() && !list_symbols) { quit_error("op_time: --exclude-symbol can be used only with --list-symbols.\n"); } if (list_symbols) { OutSymbFlag fl = OutputSymbol::ParseOutputOption(output_format); if (fl == osf_none) { cerr << "op_time: invalid --output-format flags.\n"; OutputSymbol::ShowHelp(); exit(EXIT_FAILURE); } output_format_flags = fl; } if (show_image_name) output_format_flags = static_cast<OutSymbFlag>(output_format_flags | osf_image_name); add_to_alternate_filename(path, false); add_to_alternate_filename(recursive_path, true); } --- NEW FILE: op_time_options.h --- /** * @file op_time_options.h * Options for summary tool * * @remark Copyright 2002 OProfile authors * @remark Read the file COPYING * * @author Philippe Elie <ph...@wa...> * @author John Levon <mo...@co...> */ #ifndef OP_TIME_OPTIONS_H #define OP_TIME_OPTIONS_H #include <string> #include <vector> #include <map> #include "outsymbflag.h" typedef std::multimap<std::string, std::string> alt_filename_t; namespace options { // FIXME: totally fscking bogus !! not used extern std::string imagefile; extern std::string samplefile; extern bool verbose; extern std::string session; extern std::string counter_str; extern std::string output_format; extern bool list_symbols; extern bool show_image_name; extern std::vector<std::string> path; extern std::vector<std::string> recursive_path; extern bool reverse_sort; extern bool show_shared_libs; extern int sort_by_counter; extern std::string samples_dir; extern int counter; extern OutSymbFlag output_format_flags; extern bool demangle; extern std::vector<std::string> exclude_symbols; extern alt_filename_t alternate_filename; } /** * get_options - process command line * @param argc program arg count * @param argv program arg array * * Process the arguments, fatally complaining on error. */ void get_options(int argc, char const * argv[]); #endif // OP_TIME_OPTIONS_H --- NEW FILE: op_to_source_options.cpp --- /** * @file op_to_source_options.cpp * Annotated source output command line options * * @remark Copyright 2002 OProfile authors * @remark Read the file COPYING * * @author Philippe Elie <ph...@wa...> * @author John Levon <mo...@co...> */ #include "op_to_source_options.h" #include "popt_options.h" using std::vector; using std::string; using std::cerr; using std::endl; namespace options { int with_more_than_samples; int until_more_than_samples; int sort_by_counter = -1; string source_dir; string output_dir; string output_filter; string no_output_filter; bool assembly; bool source_with_assembly; string samplefile; string imagefile; bool verbose; bool demangle; vector<string> exclude_symbols; }; namespace { option options_array[] = { option(options::samplefile, "samples-file", 'f', "image sample file", "file"), option(options::imagefile, "image-file", 'i', "image file", "file"), option(options::verbose, "verbose", 'V', "verbose output"), option(options::demangle, "demangle", 'd', "demangle GNU C++ symbol names"), option(options::with_more_than_samples, "with-more-than-samples", 'w', "show all source file if the percent of samples in this file is more than argument", "[0-100]"), option(options::until_more_than_samples, "until-more-than-samples", 'm', "show all source files until the percent of samples specified is reached", "[0-100]"), option(options::sort_by_counter, "sort-by-counter", 'c', "sort by counter", "counter nr"), option(options::source_dir, "source-dir", '\0', "source directory", "directory name"), option(options::output_dir, "output-dir", '\0', "output directory", "directory name"), option(options::output_filter, "output", '\0', "output filename filter", "filter string"), option(options::no_output_filter, "no-output", '\0', "no output filename filter", "filter string"), option(options::assembly, "assembly", 'a', "output assembly code"), option(options::source_with_assembly, "source-with-assembly", 's', "output assembly code mixed with source"), option(options::exclude_symbols, "exclude-symbol", 'e', "exclude these comma separated symbols", "symbol_name"), }; } /** * get_options - process command line * @param argc program arg count * @param argv program arg array * * Process the arguments, fatally complaining on error. */ string const get_options(int argc, char const * argv[]) { string arg; parse_options(argc, argv, arg); if (options::with_more_than_samples && options::until_more_than_samples) { cerr << "op_to_source: --with-more-than-samples and " << "--until-more-than-samples can not be " << "specified together" << endl; exit(EXIT_FAILURE); } if (options::output_filter.empty()) options::output_filter = "*"; return arg; } --- NEW FILE: op_to_source_options.h --- /** * @file op_to_source_options.h * Command-line options for op_to_source * * @remark Copyright 2002 OProfile authors * @remark Read the file COPYING * * @author John Levon <mo...@co...> * @author Philippe Elie <ph...@wa...> */ #ifndef OP_TO_SOURCE_OPTIONS_H #define OP_TO_SOURCE_OPTIONS_H #include <string> #include <vector> // FIXME /// command line option values namespace options { extern int with_more_than_samples; extern int until_more_than_samples; extern int sort_by_counter; extern std::string source_dir; extern std::string output_dir; extern std::string output_filter; extern std::string no_output_filter; extern bool assembly; extern bool source_with_assembly; /** control the behavior of verbprintf() */ extern bool verbose; /** control the behavior of demangle_symbol() */ extern bool demangle; /** a sample filename */ extern std::string samplefile; /** an image filename */ extern std::string imagefile; /** the set of symbols to ignore */ extern std::vector<std::string> exclude_symbols; }; /** * get_options - process command line * @param argc program arg count * @param argv program arg array * @return an additional argument * * Process the arguments, fatally complaining on * error. This fills the values in the above options * namespace. */ std::string const get_options(int argc, char const **argv); #endif // OP_TO_SOURCE_OPTIONS_H --- NEW FILE: outsymbflag.h --- /** * @file outsymbflag.h * Output options * * @remark Copyright 2002 OProfile authors * @remark Read the file COPYING * * @author John Levon <mo...@co...> * @author Philippe Elie <ph...@wa...> */ #ifndef OUTSYMBFLAG_H #define OUTSYMBFLAG_H // FIXME /** * flags passed to the ctr of an OutputSymbol object. This also specify the * order of field output: lower enum tag ==> comes first in output order * Note than changing value of enum is not safe. See OutputSymbol and * the osf_repeat_mask use. So you can't reorder easily the output order * of field */ enum OutSymbFlag { osf_none = 0, osf_vma = 1 << 0, /// this four field can be repeated on output for each counter. osf_nr_samples = 1 << 1, osf_nr_samples_cumulated = 1 << 2, osf_percent = 1 << 3, osf_percent_cumulated = 1 << 4, /// used internally osf_repeat_mask = osf_nr_samples + osf_nr_samples_cumulated + osf_percent + osf_percent_cumulated, osf_symb_name = 1 << 5, osf_linenr_info = 1 << 6, osf_short_linenr_info = 1 << 7,// w/o path name osf_image_name = 1 << 8, osf_short_image_name = 1 << 9, // w/o path name /// only this field are showed in symbols samples details. osf_details = 1 << 10, // for oprofpp -L / -s /// only this field are showed in symbols samples details. osf_details_mask = osf_nr_samples + osf_nr_samples_cumulated + osf_percent + osf_percent_cumulated + osf_vma + osf_linenr_info + osf_short_linenr_info, osf_show_all_counters = 1 << 11,// for oprofpp -L // special format modifier: output all field selected separated by a // single space. This is intended to run post profile tools as // front-end of other tools which treat samples information. osf_header = 1 << 12 }; #endif // OUTSYMBFLAG_H Index: Makefile.in =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/Makefile.in,v retrieving revision 1.53 retrieving revision 1.54 diff -u -d -r1.53 -r1.54 --- Makefile.in 21 May 2002 23:49:16 -0000 1.53 +++ Makefile.in 4 Jun 2002 14:27:16 -0000 1.54 @@ -3,17 +3,17 @@ CXXFLAGS += @BFD_CXXFLAGS@ OPROFPP_SOURCES=samples_container.cpp sample_container_imp.cpp symbol_container_imp.cpp \ - oprofpp.cpp oprofpp_util.cpp opp_symbol.cpp demangle_symbol.cpp op_bfd.cpp samples_file.cpp -OP_TO_SOURCE_SOURCES=op_to_source.cpp op_bfd.cpp samples_file.cpp -OP_TIME_SOURCES=op_time.cpp op_bfd.cpp samples_file.cpp + oprofpp.cpp oprofpp_options.cpp oprofpp_util.cpp opp_symbol.cpp demangle_symbol.cpp op_bfd.cpp samples_file.cpp +OP_TO_SOURCE_SOURCES=op_to_source_options.cpp op_to_source.cpp op_bfd.cpp samples_file.cpp +OP_TIME_SOURCES=op_time_options.cpp op_time.cpp op_bfd.cpp samples_file.cpp OP_MERGE_SOURCES=op_merge.cpp op_bfd.cpp samples_file.cpp SOURCES=$(OPROFPP_SOURCES) $(OP_TO_SOURCE_SOURCES) $(OP_TIME_SOURCES) $(OP_MERGE_SOURCES) COMMON_OBJECTS=samples_container.o sample_container_imp.o symbol_container_imp.o \ oprofpp_util.o demangle_symbol.o op_bfd.o samples_file.o -OPROFPP_OBJECTS=oprofpp.o opp_symbol.o $(COMMON_OBJECTS) -OP_TO_SOURCE_OBJECTS=op_to_source.o $(COMMON_OBJECTS) -OP_TIME_OBJECTS=op_time.o opp_symbol.o $(COMMON_OBJECTS) +OPROFPP_OBJECTS=oprofpp_options.o oprofpp.o opp_symbol.o $(COMMON_OBJECTS) +OP_TO_SOURCE_OBJECTS=op_to_source_options.o op_to_source.o $(COMMON_OBJECTS) +OP_TIME_OBJECTS=op_time_options.o op_time.o opp_symbol.o $(COMMON_OBJECTS) OP_MERGE_OBJECTS=op_merge.o oprofpp_util.o op_bfd.o samples_file.o OBJECTS=$(OPROFPP_OBJECTS) $(OP_TO_SOURCE_OBJECTS) $(OP_TIME_OBJECTS) $(OP_MERGE_OBJECTS) Index: demangle_symbol.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/demangle_symbol.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- demangle_symbol.cpp 7 May 2002 01:34:05 -0000 1.4 +++ demangle_symbol.cpp 4 Jun 2002 14:27:16 -0000 1.5 @@ -23,13 +23,15 @@ // FIXME: all options should be in a public singleton // FIXME: this options should die IMO (then move this into libutil++) -extern bool demangle; +namespace options { + extern bool demangle; +}; using std::string; string const demangle_symbol(string const & name) { - if (!demangle) + if (!options::demangle) return name; // Do not try to strip leading underscore, this leads to many Index: op_bfd.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/op_bfd.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- op_bfd.cpp 22 May 2002 03:20:34 -0000 1.10 +++ op_bfd.cpp 4 Jun 2002 14:27:16 -0000 1.11 @@ -239,12 +239,12 @@ } bool op_bfd::get_linenr(symbol_index_t sym_idx, uint offset, - char const * & filename, unsigned int & linenr) const + string & filename, unsigned int & linenr) const { char const * functionname; bfd_vma pc; - filename = 0; + char const * cfilename = ""; linenr = 0; // take care about artificial symbol @@ -262,10 +262,10 @@ return false; bool ret = bfd_find_nearest_line(ibfd, section, bfd_syms, pc, - &filename, &functionname, &linenr); + &cfilename, &functionname, &linenr); - if (filename == NULL || ret == false) { - filename = ""; + if (cfilename == 0 || ret == false) { + cfilename = ""; linenr = 0; ret = false; } @@ -289,7 +289,7 @@ * info from 835 to 173. Most of the remaining are c++ inline functions * mainly from the STL library. Fix #529622 */ - if (/*ret == false || */linenr == 0) { + if (linenr == 0) { // FIXME: looking at debug info for all gcc version shows // than the same problems can -perhaps- occur for epilog code: // find a samples files with samples in epilog and try oprofpp @@ -305,7 +305,7 @@ for (size_t i = 1 ; i < max_search ; ++i) { bool ret = bfd_find_nearest_line(ibfd, section, bfd_syms, pc+i, - &filename, + &cfilename, &functionname, &linenr); @@ -323,9 +323,11 @@ // the first call, we don't need to recheck return value, we // know that the call will succeed. bfd_find_nearest_line(ibfd, section, bfd_syms, pc, - &filename, &functionname, &linenr); + &cfilename, &functionname, &linenr); } + filename = (cfilename) ? cfilename : ""; + return ret; } Index: op_bfd.h =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/op_bfd.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- op_bfd.h 22 May 2002 03:20:34 -0000 1.8 +++ op_bfd.h 4 Jun 2002 14:27:16 -0000 1.9 @@ -19,16 +19,17 @@ #include "op_types.h" -class opp_samples_files; class op_bfd; -/** all symbol vector indexation use this type */ +/// all symbol vector indexing uses this type typedef size_t symbol_index_t; symbol_index_t const nil_symbol_index = symbol_index_t(-1); -/** a symbol description from a bfd point of view. This duplicate +/** + * A symbol description from a bfd point of view. This duplicate * information pointed by an asymbol, we need this duplication in case - * the symbol is an artificial symbol */ + * the symbol is an artificial symbol + */ class op_bfd_symbol { friend class op_bfd; public: @@ -67,8 +68,10 @@ std::string symb_name; }; -/** Encapsulation of a bfd object. Simplify open/close of bfd, enumerating - * symbols and retrieving informations for symbols or vma. */ +/** + * Encapsulation of a bfd object. Simplifies open/close of bfd, enumerating + * symbols and retrieving informations for symbols or vma. + */ class op_bfd { public: /** @@ -76,12 +79,11 @@ * vmlinux file * @param filename the name of the image file * - * All error are fatal. - * + * All errors are fatal. */ op_bfd(bool is_kernel, std::string const & filename); - /** close an opended bfd image and free all related resource. */ + /// close an opened bfd image and free all related resources ~op_bfd(); /** @@ -90,13 +92,13 @@ * @param filename output parameter to store filename * @param linenr output parameter to store linenr. * - * retrieve the relevant finename:linenr information for the sym_idx - * at offset. If the lookup fail return false. In some case this + * Retrieve the relevant finename:linenr information for the sym_idx + * at offset. If the lookup fails, return false. In some cases this * function can retrieve the filename and return true but fail to * retrieve the linenr and so can return zero in linenr */ bool get_linenr(symbol_index_t sym_idx, uint offset, - char const * & filename, unsigned int & linenr) const; + string & filename, unsigned int & linenr) const; /** * @param sym_idx symbol index Index: op_merge.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/op_merge.cpp,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- op_merge.cpp 23 May 2002 02:21:53 -0000 1.19 +++ op_merge.cpp 4 Jun 2002 14:27:16 -0000 1.20 @@ -36,6 +36,14 @@ using std::endl; using std::ifstream; +/// FIXME: gross hack for now. not used +namespace options { + bool verbose; + string samplefile; + string imagefile; + vector<string> exclude_symbols; +} + static int counter; static option counter_opt(counter, "use-counter", 'c', "use counter", "counter nr"); Index: op_time.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/op_time.cpp,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- op_time.cpp 23 May 2002 02:21:53 -0000 1.50 +++ op_time.cpp 4 Jun 2002 14:27:16 -0000 1.51 @@ -24,7 +24,7 @@ #include "version.h" #include "op_libiberty.h" -#include "popt_options.h" +#include "op_time_options.h" #include "oprofpp.h" #include "samples_container.h" @@ -44,6 +44,9 @@ using std::pair; using std::setw; +// FIXME +static int counter; + /* TODO: if we have a quick read samples files format we can handle a great * part of complexity here by using samples_container_t to handle straight * op_time. Just create an artificial symbol that cover the whole samples @@ -73,9 +76,7 @@ string lib_name; }; -typedef multimap<string, image_name> map_t; -typedef pair<map_t::iterator, map_t::iterator> pair_it_t; - + /// comparator for sorted_map_t struct sort_by_counter_t { sort_by_counter_t(size_t index_) : index(index_) {} @@ -88,148 +89,10 @@ size_t index; }; +typedef multimap<string, image_name> map_t; +typedef pair<map_t::iterator, map_t::iterator> pair_it_t; +typedef multimap<counter_array_t, map_t::const_iterator, sort_by_counter_t> sorted_map_t; -typedef multimap<counter_array_t, map_t::const_iterator, sort_by_counter_t> - sorted_map_t; - -static string session; -static string counter_str("0"); -static string output_format; -static bool list_symbols; -static bool show_image_name; -static vector<string> path; -static vector<string> recursive_path; -static bool reverse_sort; -static bool show_shared_libs; -static int sort_by_counter = -1; -static string samples_dir; -static int counter; -static OutSymbFlag output_format_flags; - -static option session_opt(session, "session", 's', "session to use", "name"); -static option counter_str_opt(counter_str, "counter", 'c', "which counter to use", "counter_nr[,counter_nr]"); -static option output_format_opt(output_format, "output-format", 't', "choose the output format", "output-format strings"); -static option list_symbols_opt(list_symbols, "list-symbols", 'l', "list samples by symbol"); -static option show_image_name_opt(show_image_name, "show-image-name", 'n', "show the image name from where come symbols"); -static option path_opt(path, "path", 'p', "add path for retrieving image", "path_name[,path_name]"); -static option recursive_path_opt(recursive_path, "recursive-path", 'P', "add path for retrieving image recursively", "path_name[,path_name]"); -static option reverse_sort_opt(reverse_sort, "reverse", 'r', "reverse sort order"); -static option show_shared_libs_opt(show_shared_libs, "show-shared-libs", 'k', "show details for shared libs. Only meaningfull if you have profiled with --separate-samples"); -static option sort_by_counter_opt(sort_by_counter, "sort", 'C', "which counter to use for sampels sort", "counter nr"); -static option exclude_symbols_opt(exclude_symbols, "exclude-symbol", 'e', "exclude these comma separated symbols", "symbol_name"); -static option demangle_opt(demangle, "demangle", 'd', "demangle GNU C++ symbol names"); - -/// associate filename with directory name where filename exist. Filled -/// through the -p/-P option to allow retrieving of image name when samples -/// file name contains an incorrect location for the image such ram disk -/// module at boot time. We need a multimap to warn against ambiguity between -/// mutiple time found image name. -typedef multimap<string, string> alt_filename_t; -static alt_filename_t alternate_filename; - -/** - * add_to_alternate_filename - - * add all file name below path_name, optionnaly recursively, to the - * the set of alternative filename used to retrieve image name when - * a samples image name directory is not accurate - */ -void add_to_alternate_filename(vector<string> const & path_names, - bool recursive) -{ - vector<string>::const_iterator path; - for (path = path_names.begin() ; path != path_names.end() ; ++path) { - list<string> file_list; - create_file_list(file_list, *path, "*", recursive); - list<string>::const_iterator it; - for (it = file_list.begin() ; it != file_list.end() ; ++it) { - typedef alt_filename_t::value_type value_t; - if (recursive) { - value_t value(basename(*it), dirname(*it)); - alternate_filename.insert(value); - } else { - value_t value(*it, *path); - alternate_filename.insert(value); - } - } - } -} - -/** - * handle_session_options - derive samples directory - */ -static void handle_session_options(void) -{ -/* - * This should eventually be shared amongst all programs - * to take session names. - */ - if (session.empty()) { - samples_dir = OP_SAMPLES_DIR; - return; - } - - if (session[0] == '/') { - samples_dir = session; - return; - } - - samples_dir = OP_SAMPLES_DIR + session; -} - - -/** - * get_options - process command line - * @param argc program arg count - * @param argv program arg array - * - * Process the arguments, fatally complaining on error. - */ -static void get_options(int argc, char const * argv[]) -{ - string file; - parse_options(argc, argv, file); - - if (file.length()) - session = file; - - handle_session_options(); - - counter = counter_mask(counter_str); - - validate_counter(counter, sort_by_counter); - - if (output_format.empty()) { - output_format = "hvspni"; - } else { - if (!list_symbols) { - quit_error("op_time: --output-format can be used only with --list-symbols.\n"); - } - } - - if (exclude_symbols.size() && !list_symbols) { - quit_error("op_time: --exclude-symbol can be used only with --list-symbols.\n"); - } - - if (list_symbols) { - OutSymbFlag fl = - OutputSymbol::ParseOutputOption(output_format); - - if (fl == osf_none) { - cerr << "op_time: invalid --output-format flags.\n"; - OutputSymbol::ShowHelp(); - exit(EXIT_FAILURE); - } - - output_format_flags = fl; - } - - if (show_image_name) - output_format_flags = static_cast<OutSymbFlag>(output_format_flags | osf_image_name); - - add_to_alternate_filename(path, false); - - add_to_alternate_filename(recursive_path, true); -} /** * image_name - ctor from a sample file name @@ -291,7 +154,7 @@ for (i = 0 ; i < OP_MAX_COUNTERS ; ++i) { if ((counter & (1 << i)) != 0) { ostringstream s; - s << string(samples_dir) << "/" << *it + s << string(options::samples_dir) << "/" << *it << '#' << i; if (file_exist(s.str()) == true) { break; @@ -421,7 +284,7 @@ for ( ; p_it.first != p_it.second ; ++p_it.first) { for (int i = 0 ; i < OP_MAX_COUNTERS ; ++i) { ostringstream s; - s << string(samples_dir) << "/" + s << string(options::samples_dir) << "/" << p_it.first->second.samplefile_name << "#" << i; if (file_exist(s.str()) == false) @@ -456,7 +319,7 @@ * associate with an iterator to a image name e.g. insert one * item for each application */ - sort_by_counter_t compare(sort_by_counter); + sort_by_counter_t compare(options::sort_by_counter); sorted_map_t sorted_map(compare); for (it = files.begin(); it != files.end() ; ) { pair_it_t p_it = files.equal_range(it->first); @@ -478,7 +341,7 @@ * can't easily templatize the block on iterator type because we use * in one case begin()/end() and in another rbegin()/rend(), it's * worthwhile to try to factorize these two piece of code */ - if (reverse_sort) { + if (options::reverse_sort) { sorted_map_t::reverse_iterator s_it = sorted_map.rbegin(); for ( ; s_it != sorted_map.rend(); ++s_it) { map_t::const_iterator it = s_it->second; @@ -487,9 +350,9 @@ out_filename(it->first, temp, s_it->first, total_count); - if (show_shared_libs) { + if (options::show_shared_libs) { pair_it_t p_it = files.equal_range(it->first); - sort_by_counter_t compare(sort_by_counter); + sort_by_counter_t compare(options::sort_by_counter); sorted_map_t temp_map(compare); build_sorted_map_by_count(temp_map, p_it); @@ -509,9 +372,9 @@ out_filename(it->first, temp, s_it->first, total_count); - if (show_shared_libs) { + if (options::show_shared_libs) { pair_it_t p_it = files.equal_range(it->first); - sort_by_counter_t compare(sort_by_counter); + sort_by_counter_t compare(options::sort_by_counter); sorted_map_t temp_map(compare); build_sorted_map_by_count(temp_map, p_it); @@ -539,7 +402,7 @@ typedef alt_filename_t::const_iterator it_t; std::pair<it_t, it_t> p_it = - alternate_filename.equal_range(basename(image_name)); + options::alternate_filename.equal_range(basename(image_name)); if (p_it.first == p_it.second) { @@ -580,13 +443,13 @@ */ static void output_symbols_count(map_t& files, int counter) { - samples_container_t samples(false, output_format_flags, counter); + samples_container_t samples(false, options::output_format_flags, counter); map_t::iterator it_f; for (it_f = files.begin() ; it_f != files.end() ; ++it_f) { string filename = it_f->second.samplefile_name; - string samples_filename = string(samples_dir) + "/" + filename; + string samples_filename = string(options::samples_dir) + "/" + filename; string lib_name; string image_name = extract_app_name(filename, lib_name); @@ -618,23 +481,24 @@ // select the symbols vector<symbol_entry const *> symbols = - samples.select_symbols(sort_by_counter, 0.0, false); + samples.select_symbols(options::sort_by_counter, 0.0, false); OutputSymbol out(samples, counter); - out.SetFlag(output_format_flags); + out.SetFlag(options::output_format_flags); - out.Output(cout, symbols, reverse_sort == false); + out.Output(cout, symbols, options::reverse_sort == false); } -/** - * yet another main ... - */ int main(int argc, char const * argv[]) { get_options(argc, argv); - if (list_symbols && show_shared_libs) { + counter = counter_mask(options::counter_str); + + validate_counter(counter, options::sort_by_counter); + + if (options::list_symbols && options::show_shared_libs) { quit_error("You can't specifiy --show-shared-libs and " "--list-symbols together.\n"); } @@ -643,12 +507,12 @@ * files rather getting the whole directory. Code in op_merge can * be probably re-used */ list<string> file_list; - get_sample_file_list(file_list, samples_dir, "*#*"); + get_sample_file_list(file_list, options::samples_dir, "*#*"); map_t file_map; sort_file_list_by_name(file_map, file_list); - if (list_symbols) { + if (options::list_symbols) { output_symbols_count(file_map, counter); } else { output_files_count(file_map); Index: op_to_source.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/op_to_source.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- op_to_source.cpp 23 May 2002 02:21:53 -0000 1.9 +++ op_to_source.cpp 4 Jun 2002 14:27:16 -0000 1.10 @@ -19,8 +19,6 @@ #include <stdio.h> -#include "popt_options.h" - using std::vector; using std::string; using std::ostream; @@ -43,6 +41,7 @@ #include "file_manip.h" #include "filename_match.h" #include "op_events_desc.h" +#include "op_to_source_options.h" #include "version.h" @@ -775,65 +774,6 @@ //--------------------------------------------------------------------------- -static int with_more_than_samples; -static int until_more_than_samples; -static int sort_by_counter = -1; -static bool assembly; -static bool source_with_assembly; -static string source_dir; -static string output_dir; -static string output_filter; -static string no_output_filter; - -/* -k is reserved for --show-shared-libs */ -static option samplefile_opt(samplefile, "samples-file", 'f', "image sample file", "file"); -static option imagefile_opt(imagefile, "image-file", 'i', "image file", "file"); -static option verbose_opt(verbose, "verbose", 'V', "verbose output"); -static option demangle_opt(demangle, "demangle", 'd', "demangle GNU C++ symbol names"); -static option with_more_than_samples_opt(with_more_than_samples, "with-more-than-samples", 'w', "show all source file if the percent of samples in this file is more than argument", "[0-100]"); -static option until_more_than_sampels_opt(until_more_than_samples, "until-more-than-samples", 'm', "show all source files until the percent of samples specified is reached", "[0-100]"); -static option sort_by_counter_opt(sort_by_counter, "sort-by-counter", 'c', "sort by counter", "counter nr"); -static option source_dir_opt(source_dir, "source-dir", '\0', "source directory", "directory name"); -static option output_dir_opt(output_dir, "output-dir", '\0', "output directory", "directory name"); -static option output_filter_opt(output_filter, "output", '\0', "output filename filter", "filter string"); -static option no_output_filter_opt(no_output_filter, "no-output", '\0', "no output filename filter", "filter string"); -static option assembly_opt(assembly, "assembly", 'a', "output assembly code"); -static option source_with_asssembly_opt(source_with_assembly, "source-with-assembly", 's', "output assembly code mixed with source"); -static option exclude_symbols_opt(exclude_symbols, "exclude-symbol", 'e', "exclude these comma separated symbols", "symbol_name"); - -/** - * get_options - process command line - * @param argc program arg count - * @param argv program arg array - * @param image_name where to store the image filename - * @param sample_file ditto for sample filename - * @param counter where to put the counter command line argument - * - * Process the arguments, fatally complaining on error. - */ -static void get_options(int argc, char const * argv[], - string & image_name, string & sample_file, - int & counter) -{ - /* non-option file, either a sample or binary image file */ - string file; - - parse_options(argc, argv, file); - - if (with_more_than_samples && until_more_than_samples) { - fprintf(stderr, "op_to_source: --with-more-than-samples and -until-more-than-samples can not specified together\n"); - exit(EXIT_FAILURE); - } - - if (output_filter.empty()) - output_filter = "*"; - - opp_treat_options(file, image_name, sample_file, - counter, sort_by_counter); -} - -//--------------------------------------------------------------------------- - int main(int argc, char const * argv[]) { #if (__GNUC__ >= 3) @@ -852,34 +792,37 @@ * order */ int counter = -1; - get_options(argc, argv, image_name, sample_file, counter); + string const arg = get_options(argc, argv); - if (counter != -1 && sort_by_counter != -1 && - counter != (1 << sort_by_counter)) { + opp_treat_options(arg, image_name, sample_file, + counter, options::sort_by_counter); + + if (counter != -1 && options::sort_by_counter != -1 && + counter != (1 << options::sort_by_counter)) { cerr << "mismatch between --sort-by-counter and samples filename counter suffix.\n"; exit(EXIT_FAILURE); } try { bool do_until_more_than_samples = false; - int threshold_percent = with_more_than_samples; - if (until_more_than_samples) { - threshold_percent = until_more_than_samples; + int threshold_percent = options::with_more_than_samples; + if (options::until_more_than_samples) { + threshold_percent = options::until_more_than_samples; do_until_more_than_samples = true; } - if (source_with_assembly) - assembly = 1; + if (options::source_with_assembly) + options::assembly = true; output output(argc, argv, threshold_percent, do_until_more_than_samples, - sort_by_counter, - output_dir, - source_dir, - output_filter, - no_output_filter, - assembly, source_with_assembly, -1); + options::sort_by_counter, + options::output_dir, + options::source_dir, + options::output_filter, + options::no_output_filter, + options::assembly, options::source_with_assembly, -1); if (output.treat_input(image_name, sample_file) == false) return EXIT_FAILURE; Index: opp_symbol.h =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/opp_symbol.h,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- opp_symbol.h 22 May 2002 03:20:34 -0000 1.16 +++ opp_symbol.h 4 Jun 2002 14:27:16 -0000 1.17 @@ -19,6 +19,7 @@ #include <bfd.h> /* for bfd_vma */ #include "oprofpp.h" +#include "outsymbflag.h" class samples_container_t; class field_description; @@ -62,47 +63,6 @@ /// [first, last[ gives the range of sample_entry. sample_index_t first; sample_index_t last; -}; - -//--------------------------------------------------------------------------- -/** flags passed to the ctr of an OutputSymbol object. This also specify the - * order of field output: lower enum tag ==> comes first in output order - * Note than changing value of enum is not safe. See OutputSymbol and - * the osf_repeat_mask use. So you can't reorder easily the output order - * of field */ -enum OutSymbFlag { - osf_none = 0, - osf_vma = 1 << 0, - /// this four field can be repeated on output for each counter. - osf_nr_samples = 1 << 1, - osf_nr_samples_cumulated = 1 << 2, - osf_percent = 1 << 3, - osf_percent_cumulated = 1 << 4, - /// used internally - osf_repeat_mask = osf_nr_samples + osf_nr_samples_cumulated + - osf_percent + osf_percent_cumulated, -// osf_time = 1 << 5, // can be usefull, future. Do not use -// osf_time_cumulated = 1 << 6, // for now. FIXME is this usefull ? - osf_symb_name = 1 << 7, - // TODO: actually demangling is made when storing symb name in - // samples_container_t. We need perhaps to store raw name in symbol and - // defer demangling at output time. -// osf_demangle = 1 << 8, // provide demangle param name etc ? - osf_linenr_info = 1 << 9, - osf_short_linenr_info = 1 << 10,// w/o path name - osf_image_name = 1 << 11, - osf_short_image_name = 1 << 12, // w/o path name - osf_details = 1 << 13, // for oprofpp -L / -s - /// only this field are showed in symbols samples details. - osf_details_mask = osf_nr_samples + osf_nr_samples_cumulated + - osf_percent + osf_percent_cumulated + - osf_vma + osf_linenr_info + osf_short_linenr_info, - osf_show_all_counters = 1 << 14,// for oprofpp -L - // special format modifier: output all field selected separated by a - // single space. This is intended to run post profile tools as - // front-end of other tools which treat samples information. -// osf_raw_format = 1 << 15, // future - osf_header = 1 << 16 }; /** Index: oprofpp.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/oprofpp.cpp,v retrieving revision 1.66 retrieving revision 1.67 diff -u -d -r1.66 -r1.67 --- oprofpp.cpp 1 Jun 2002 17:13:07 -0000 1.66 +++ oprofpp.cpp 4 Jun 2002 14:27:16 -0000 1.67 @@ -16,7 +16,7 @@ #include "version.h" #include "oprofpp.h" -#include "popt_options.h" +#include "oprofpp_options.h" #include "op_libiberty.h" #include "op_fileio.h" #include "file_manip.h" @@ -30,106 +30,6 @@ using std::list; using std::ostringstream; -static string ctr_str; -static int sort_by_counter = -1; -static string gproffile; -static string symbol; -static bool list_symbols; -static bool output_linenr_info; -static bool reverse_sort; -static bool show_shared_libs; -static string output_format; -static bool list_all_symbols_details; - -static OutSymbFlag output_format_flags; - -static option samplefile_opt(samplefile, "samples-file", 'f', "image sample file", "file"); -static option imagefile_opt(imagefile, "image-file", 'i', "image file", "file"); -static option list_symbols_opt(list_symbols, "list-symbols", 'l', "list samples by symbol"); -static option gproffile_opt(gproffile, "dump-gprof-file", 'g', "dump gprof format file", "file"); -static option symbol_opt(symbol, "list-symbol", 's', "give detailed samples for a symbol", "symbol"); -static option demangle_opt(demangle, "demangle", 'd', "demangle GNU C++ symbol names"); -static option ctr_str_opt(ctr_str, "counter", 'c', "which counter to display", "counter number[,counter nr]"); -static option sort_by_counter_opt(sort_by_counter, "sort", 'C', "which counter to use for sampels sort", "counter nr"); -static option verbose_opt(verbose, "verbose", 'V', "verbose output"); -static option list_all_symbols_details_opt(list_all_symbols_details, "list-all-symbols-details", 'L', "list samples for all symbols"); -static option output_linenr_info_opt(output_linenr_info, "output-linenr-info", 'o', "output filename:linenr info"); -static option reverse_sort_opt(reverse_sort, "reverse", 'r', "reverse sort order"); -static option exclude_symbols_opt(exclude_symbols, "exclude-symbol", 'e', "exclude these comma separated symbols", "symbol_name"); -static option show_shared_libs_opt(show_shared_libs, "show-shared-libs", 'k', "show details for shared libs. Only meaningfull if you have profiled with --separate-samples"); -static option output_format_opt(output_format, "output-format", 't', "choose the output format", "output-format strings"); - -/** - * get_options - process command line - * @param argc program arg count - * @param argv program arg array - * @param image_file where to store the image filename - * @param sample_file ditto for sample filename - * @param counter where to put the counter command line argument - * - * Process the arguments, fatally complaining on - * error. Only a part of arguments analysing is - * made here. The filename checking is deferred to - * opp_treat_options(). - * - */ -static void opp_get_options(int argc, char const **argv, string & image_file, - string & sample_file, int & counter) -{ - /* non-option file, either a sample or binary image file */ - string file; - - parse_options(argc, argv, file); - - if (!list_all_symbols_details && !list_symbols && - gproffile.empty() && symbol.empty()) - quit_error("oprofpp: no mode specified. What do you want from me ?\n"); - - /* check only one major mode specified */ - if ((list_all_symbols_details + list_symbols + !gproffile.empty() + !symbol.empty()) > 1) - quit_error("oprofpp: must specify only one output type.\n"); - - if (output_linenr_info && !list_all_symbols_details && symbol.empty() && !list_symbols) - quit_error("oprofpp: cannot list debug info without -L, -l or -s option.\n"); - - if (show_shared_libs && (!symbol.empty() || !gproffile.empty())) { - quit_error("oprofpp: you cannot specify --show-shared-libs with --dump-gprof-file or --list-symbol output type.\n"); - } - - if (reverse_sort && !list_symbols) - quit_error("oprofpp: reverse sort can only be used with -l option.\n"); - - if (show_shared_libs) - output_format_flags = static_cast<OutSymbFlag>(output_format_flags | osf_image_name); - if (output_linenr_info) - output_format_flags = static_cast<OutSymbFlag>(output_format_flags | osf_linenr_info); - - if (output_format.empty()) { - output_format = "hvspn"; - } else { - if (!list_symbols && !list_all_symbols_details && symbol.empty()) { - quit_error("oprofpp: --output-format can be used only without --list-symbols or --list-all-symbols-details.\n"); - } - } - - if (list_symbols || list_all_symbols_details || !symbol.empty()) { - OutSymbFlag fl = - OutputSymbol::ParseOutputOption(output_format); - - if (fl == osf_none) { - cerr << "oprofpp: invalid --output-format flags.\n"; - OutputSymbol::ShowHelp(); - exit(EXIT_FAILURE); - } - - output_format_flags = static_cast<OutSymbFlag>(output_format_flags | fl); - } - - counter = counter_mask(ctr_str); - - opp_treat_options(file, image_file, sample_file, - counter, sort_by_counter); -} /** * do_list_symbols - list symbol samples for an image @@ -146,7 +46,7 @@ vector<symbol_entry const *> symbols = samples.select_symbols(sort_by_ctr, 0.0, false); - out.Output(cout, symbols, reverse_sort == 0); + out.Output(cout, symbols, options::reverse_sort == false); } /** @@ -180,9 +80,9 @@ */ static void do_list_symbol(samples_container_t & samples, OutputSymbol & out) { - symbol_entry const * symb = samples.find_symbol(symbol); + symbol_entry const * symb = samples.find_symbol(options::symbol); if (symb == 0) { - cerr << "oprofpp: symbol \"" << symbol + cerr << "oprofpp: symbol \"" << options::symbol << "\" not found in samples container file.\n"; return; } @@ -216,7 +116,6 @@ int sort_by_ctr) { static gmon_hdr hdr = { { 'g', 'm', 'o', 'n' }, GMON_VERSION, {0,0,0,},}; - FILE *fp; u32 start, end; uint j; u32 low_pc; @@ -224,7 +123,7 @@ u16 * hist; u32 histsize; - fp=op_open_file(gproffile.c_str(), "w"); + FILE * fp = op_open_file(options::gproffile.c_str(), "w"); op_write_file(fp,&hdr, sizeof(gmon_hdr)); @@ -290,8 +189,7 @@ */ static bool file_exist(string const & filename) { - ifstream in(filename.c_str()); - return in; + return ifstream(filename.c_str()); } /** @@ -303,33 +201,38 @@ string sample_file; int counter = 0; - opp_get_options(argc, argv, image_file, sample_file, counter); + string const arg = get_options(argc, argv); + + counter = counter_mask(options::ctr_str); + opp_treat_options(arg, image_file, sample_file, + counter, options::sort_by_counter); + // FIXME is this not a darining ? if (sample_file.find_first_of('/') == string::npos) sample_file = OP_SAMPLES_DIR + sample_file; - if (!gproffile.empty()) { + if (!options::gproffile.empty()) { opp_samples_files samples_files(sample_file, counter); check_mtime(samples_files, image_file); op_bfd abfd(samples_files.is_kernel(), image_file); samples_files.set_start_offset(abfd.get_start_offset()); - do_dump_gprof(abfd, samples_files, sort_by_counter); + do_dump_gprof(abfd, samples_files, options::sort_by_counter); return 0; } - bool add_zero_sample_symbols = list_all_symbols_details == 0; - output_format_flags = - static_cast<OutSymbFlag>(output_format_flags | osf_show_all_counters); - if (!symbol.empty() || list_all_symbols_details) - output_format_flags = - static_cast<OutSymbFlag>(output_format_flags | osf_details); + bool const add_zero_sample_symbols = options::list_all_symbols_details == false; + options::output_format_flags = + static_cast<OutSymbFlag>(options::output_format_flags | osf_show_all_counters); + if (!options::symbol.empty() || options::list_all_symbols_details) + options::output_format_flags = + static_cast<OutSymbFlag>(options::output_format_flags | osf_details); /* create the file list of samples files we will use (w/o the * #counter_nr suffix) */ list<string> filelist; - if (show_shared_libs) { + if (options::show_shared_libs) { string const dir = dirname(sample_file); string const name = basename(sample_file); @@ -337,7 +240,7 @@ } samples_container_t samples(add_zero_sample_symbols, - output_format_flags, counter); + options::output_format_flags, counter); filelist.push_front(sample_file); @@ -403,14 +306,14 @@ } OutputSymbol out(samples, counter); - out.SetFlag(output_format_flags); + out.SetFlag(options::output_format_flags); - if (list_symbols) - do_list_symbols(samples, out, sort_by_counter); - else if (!symbol.empty()) + if (options::list_symbols) + do_list_symbols(samples, out, options::sort_by_counter); + else if (!options::symbol.empty()) do_list_symbol(samples, out); - else if (list_all_symbols_details) - do_list_symbols_details(samples, out, sort_by_counter); + else if (options::list_all_symbols_details) + do_list_symbols_details(samples, out, options::sort_by_counter); return 0; } Index: oprofpp.h =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/oprofpp.h,v retrieving revision 1.67 retrieving revision 1.68 diff -u -d -r1.67 -r1.68 --- oprofpp.h 22 May 2002 03:20:34 -0000 1.67 +++ oprofpp.h 4 Jun 2002 14:27:16 -0000 1.68 @@ -52,6 +52,7 @@ * is non-zero */ void verbprintf(char const * args, ...) OP_VERBPRINTF_FORMAT; + /** * @param out output to this ostream * @param counter_nr counter number @@ -153,18 +154,6 @@ * in the samples file header */ void check_mtime(opp_samples_files const & samples, std::string image_name); - -/** control the behavior of verbprintf() */ -extern bool verbose; -/** control the behavior of demangle_symbol() */ -extern bool demangle; - -/** command line option specifying a sample filename */ -extern std::string samplefile; -/** command line option specifying an image filename */ -extern std::string imagefile; -/** command line option specifying the set of symbols to ignore */ -extern std::vector<std::string> exclude_symbols; //--------------------------------------------------------------------------- /** A simple container of counter. Can hold OP_MAX_COUNTERS counters */ Index: oprofpp_util.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/oprofpp_util.cpp,v retrieving revision 1.64 retrieving revision 1.65 diff -u -d -r1.64 -r1.65 --- oprofpp_util.cpp 1 Jun 2002 15:58:38 -0000 1.64 +++ oprofpp_util.cpp 4 Jun 2002 14:27:16 -0000 1.65 @@ -9,6 +9,8 @@ * @author John Levon <mo...@co...> */ +// FIXME: this entire file is screwed ! + // FIXME: printf -> ostream (and elsewhere) #include <cstdarg> #include <algorithm> @@ -18,6 +20,7 @@ #include <elf.h> #include "oprofpp.h" +#include "oprofpp_options.h" #include "op_libiberty.h" #include "op_file.h" #include "file_manip.h" @@ -36,11 +39,6 @@ using std::cerr; using std::endl; -bool verbose; -string samplefile; -string imagefile; -bool demangle; -vector<string> exclude_symbols; void op_print_event(ostream & out, int counter_nr, op_cpu cpu_type, u8 type, u8 um, u32 count) @@ -67,7 +65,7 @@ */ void verbprintf(char const * fmt, ...) { - if (verbose) { + if (options::verbose) { va_list va; va_start(va, fmt); @@ -114,8 +112,8 @@ */ bool is_excluded_symbol(string const & symbol) { - return std::find(exclude_symbols.begin(), exclude_symbols.end(), - symbol) != exclude_symbols.end(); + return std::find(options::exclude_symbols.begin(), options::exclude_symbols.end(), + symbol) != options::exclude_symbols.end(); } /** @@ -159,6 +157,7 @@ } } + /** * opp_treat_options - process command line options * @param file a filename passed on the command line, can be %NULL @@ -185,9 +184,11 @@ * post-condition: sample_file and image_file are setup */ void opp_treat_options(string const & file, - string & image_file, string & sample_file, - int & counter, int & sort_by_counter) + string & image_file, string & sample_file, + int & counter, int & sort_by_counter) { + using namespace options; + char * file_ctr_str; int temp_counter; @@ -263,6 +264,7 @@ validate_counter(counter, sort_by_counter); } + // FIXME: only use char arrays and pointers if you MUST. Otherwise std::string // and references everywhere please. Index: samples_container.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/pp/samples_container.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- samples_container.cpp 16 May 2002 21:42:15 -0000 1.10 +++ samples_container.cpp 4 Jun 2002 14:27:16 -0000 1.11 @@ -95,7 +95,7 @@ for (symbol_index_t i = 0 ; i < abfd.syms.size(); ++i) { u32 start, end; - char const * filename; + string filename; uint linenr; symbol_entry symb_entry; @@ -147,7 +147,7 @@ bool const need_linenr = (flags & (osf_linenr_info | osf_short_linenr_info)); for (u32 pos = start; pos < end ; ++pos) { - char const * filename; + string filename; sample_entry sample; uint linenr; |