gprof.c

来自「基于4个mips核的noc设计」· C语言 代码 · 共 676 行 · 第 1/2 页

C
676
字号
		{		  sym_id_add (optarg, INCL_ARCS);		}	      else		{		  sym_id_add (optarg, INCL_GRAPH);		}	    }	  output_style |= STYLE_CALL_GRAPH;	  user_specified |= STYLE_CALL_GRAPH;	  break;	case 'r':	  output_style |= STYLE_FUNCTION_ORDER;	  user_specified |= STYLE_FUNCTION_ORDER;	  break;	case 'R':	  output_style |= STYLE_FILE_ORDER;	  user_specified |= STYLE_FILE_ORDER;	  function_mapping_file = optarg;	  break;	case 'Q':	  if (optarg)	    {	      if (strchr (optarg, '/'))		{		  sym_id_add (optarg, EXCL_ARCS);		}	      else		{		  sym_id_add (optarg, EXCL_GRAPH);		}	      output_style |= STYLE_CALL_GRAPH;	    }	  else	    {	      output_style &= ~STYLE_CALL_GRAPH;	    }	  user_specified |= STYLE_CALL_GRAPH;	  break;	case 's':	  output_style |= STYLE_SUMMARY_FILE;	  user_specified |= STYLE_SUMMARY_FILE;	  break;	case 't':	  bb_table_length = atoi (optarg);	  if (bb_table_length < 0)	    {	      bb_table_length = 0;	    }	  break;	case 'T':	  bsd_style_output = TRUE;	  break;	case 'v':	  /* This output is intended to follow the GNU standards document.  */	  printf (_("GNU gprof %s\n"), VERSION);	  printf (_("Based on BSD gprof, copyright 1983 Regents of the University of California.\n"));	  printf (_("\This program is free software.  This program has absolutely no warranty.\n"));	  done (0);	case 'w':	  output_width = atoi (optarg);	  if (output_width < 1)	    {	      output_width = 1;	    }	  break;	case 'x':	  bb_annotate_all_lines = TRUE;	  break;	case 'y':	  create_annotation_files = TRUE;	  break;	case 'z':	  ignore_zeros = FALSE;	  break;	case 'Z':	  if (optarg)	    {	      sym_id_add (optarg, EXCL_EXEC);	      output_style |= STYLE_EXEC_COUNTS;	    }	  else	    {	      output_style &= ~STYLE_EXEC_COUNTS;	    }	  user_specified |= STYLE_ANNOTATED_SOURCE;	  break;	case OPTION_DEMANGLE:	  demangle = TRUE;	  if (optarg != NULL)	    {	      enum demangling_styles style;	      style = cplus_demangle_name_to_style (optarg);	      if (style == unknown_demangling)		{		  fprintf (stderr,			   _("%s: unknown demangling style `%s'\n"),			   whoami, optarg);		  xexit (1);		}	      cplus_demangle_set_style (style);	   }	  break;	case OPTION_NO_DEMANGLE:	  demangle = FALSE;	  break;	default:	  usage (stderr, 1);	}    }  /* Don't allow both ordering options, they modify the arc data in-place.  */  if ((user_specified & STYLE_FUNCTION_ORDER)      && (user_specified & STYLE_FILE_ORDER))    {      fprintf (stderr,_("\%s: Only one of --function-ordering and --file-ordering may be specified.\n"),	       whoami);      done (1);    }  /* --sum implies --line, otherwise we'd lose b-b counts in gmon.sum */  if (output_style & STYLE_SUMMARY_FILE)    {      line_granularity = 1;    }  /* append value of GPROF_PATH to source search list if set: */  str = (char *) getenv ("GPROF_PATH");  if (str)    {      search_list_append (&src_search_list, str);    }  if (optind < argc)    {      a_out_name = argv[optind++];    }  if (optind < argc)    {      gmon_name = argv[optind++];    }  /*   * Turn off default functions:   */  for (sp = &default_excluded_list[0]; *sp; sp++)    {      sym_id_add (*sp, EXCL_TIME);      sym_id_add (*sp, EXCL_GRAPH);#ifdef __alpha__      sym_id_add (*sp, EXCL_FLAT);#endif    }  /*   * For line-by-line profiling, also want to keep those   * functions off the flat profile:   */  if (line_granularity)    {      for (sp = &default_excluded_list[0]; *sp; sp++)	{	  sym_id_add (*sp, EXCL_FLAT);	}    }  /*   * Read symbol table from core file:   */  core_init (a_out_name);  /*   * If we should ignore direct function calls, we need to load   * to core's text-space:   */  if (ignore_direct_calls)    {      core_get_text_space (core_bfd);    }  /*   * Create symbols from core image:   */  if (line_granularity)    {      core_create_line_syms (core_bfd);    }  else    {      core_create_function_syms (core_bfd);    }  /*   * Translate sym specs into syms:   */  sym_id_parse ();  if (file_format == FF_PROF)    {#ifdef PROF_SUPPORT_IMPLEMENTED      /*       * Get information about mon.out file(s):       */      do	{	  mon_out_read (gmon_name);	  if (optind < argc)	    {	      gmon_name = argv[optind];	    }	}      while (optind++ < argc);#else      fprintf (stderr,	       _("%s: sorry, file format `prof' is not yet supported\n"),	       whoami);      done (1);#endif    }  else    {      /*       * Get information about gmon.out file(s):       */      do	{	  gmon_out_read (gmon_name);	  if (optind < argc)	    {	      gmon_name = argv[optind];	    }	}      while (optind++ < argc);    }  /*   * If user did not specify output style, try to guess something   * reasonable:   */  if (output_style == 0)    {      if (gmon_input & (INPUT_HISTOGRAM | INPUT_CALL_GRAPH))	{	  output_style = STYLE_FLAT_PROFILE | STYLE_CALL_GRAPH;	}      else	{	  output_style = STYLE_EXEC_COUNTS;	}      output_style &= ~user_specified;    }  /*   * Dump a gmon.sum file if requested (before any other processing!):   */  if (output_style & STYLE_SUMMARY_FILE)    {      gmon_out_write (GMONSUM);    }  if (gmon_input & INPUT_HISTOGRAM)    {      hist_assign_samples ();    }  if (gmon_input & INPUT_CALL_GRAPH)    {      cg = cg_assemble ();    }  /* do some simple sanity checks: */  if ((output_style & STYLE_FLAT_PROFILE)      && !(gmon_input & INPUT_HISTOGRAM))    {      fprintf (stderr, _("%s: gmon.out file is missing histogram\n"), whoami);      done (1);    }  if ((output_style & STYLE_CALL_GRAPH) && !(gmon_input & INPUT_CALL_GRAPH))    {      fprintf (stderr,	       _("%s: gmon.out file is missing call-graph data\n"), whoami);      done (1);    }  /* output whatever user whishes to see: */  if (cg && (output_style & STYLE_CALL_GRAPH) && bsd_style_output)    {      cg_print (cg);		/* print the dynamic profile */    }  if (output_style & STYLE_FLAT_PROFILE)    {      hist_print ();		/* print the flat profile */    }  if (cg && (output_style & STYLE_CALL_GRAPH))    {      if (!bsd_style_output)	{	  cg_print (cg);	/* print the dynamic profile */	}      cg_print_index ();    }  if (output_style & STYLE_EXEC_COUNTS)    {      print_exec_counts ();    }  if (output_style & STYLE_ANNOTATED_SOURCE)    {      print_annotated_source ();    }  if (output_style & STYLE_FUNCTION_ORDER)    {      cg_print_function_ordering ();    }  if (output_style & STYLE_FILE_ORDER)    {      cg_print_file_ordering ();    }  return 0;}voiddone (status)     int status;{  exit (status);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?