1 /* 2 * Copyright (c) 1983, 1998 Regents of the University of California. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms are permitted 6 * provided that: (1) source distributions retain this entire copyright 7 * notice and comment, and (2) distributions including binaries display 8 * the following acknowledgement: ``This product includes software 9 * developed by the University of California, Berkeley and its contributors'' 10 * in the documentation or other materials provided with the distribution 11 * and in all advertising materials mentioning features or use of this 12 * software. Neither the name of the University nor the names of its 13 * contributors may be used to endorse or promote products derived 14 * from this software without specific prior written permission. 15 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 16 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 18 */ 19 #include <demangle.h> 20 #include "gprof.h" 21 #include "cg_arcs.h" 22 #include "symtab.h" 23 24 25 /* 26 * Print name of symbol. Return number of characters printed. 27 */ 28 int 29 DEFUN (print_name_only, (self), Sym * self) 30 { 31 const char *name = self->name; 32 const char *filename; 33 char *demangled = 0; 34 char buf[PATH_MAX]; 35 int size = 0; 36 37 if (name) 38 { 39 if (!bsd_style_output) 40 { 41 if (name[0] == '_' && name[1] && discard_underscores) 42 { 43 name++; 44 } 45 if (demangle) 46 { 47 demangled = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS); 48 if (demangled) 49 { 50 name = demangled; 51 } 52 } 53 } 54 printf ("%s", name); 55 size = strlen (name); 56 if (line_granularity && self->file) 57 { 58 filename = self->file->name; 59 if (!print_path) 60 { 61 filename = strrchr (filename, '/'); 62 if (filename) 63 { 64 ++filename; 65 } 66 else 67 { 68 filename = self->file->name; 69 } 70 } 71 sprintf (buf, " (%s:%d)", filename, self->line_num); 72 printf ("%s", buf); 73 size += strlen (buf); 74 } 75 if (demangled) 76 { 77 free (demangled); 78 } 79 DBG (DFNDEBUG, printf ("{%d} ", self->cg.top_order)); 80 DBG (PROPDEBUG, printf ("%4.0f%% ", 100.0 * self->cg.prop.fract)); 81 } 82 return size; 83 } 84 85 86 void 87 DEFUN (print_name, (self), Sym * self) 88 { 89 print_name_only (self); 90 91 if (self->cg.cyc.num != 0) 92 { 93 printf (_(" <cycle %d>"), self->cg.cyc.num); 94 } 95 if (self->cg.index != 0) 96 { 97 if (self->cg.print_flag) 98 { 99 printf (" [%d]", self->cg.index); 100 } 101 else 102 { 103 printf (" (%d)", self->cg.index); 104 } 105 } 106 } 107