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 + -
显示快捷键?