OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [binutils-2.20.1/] [gprof/] [symtab.h] - Rev 818

Compare with Previous | Blame | View Log

/* symtab.h
 
   Copyright 2000, 2001, 2002, 2004, 2007 Free Software Foundation, Inc.
 
   This file is part of GNU Binutils.
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
 
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
 
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */

#ifndef symtab_h
#define symtab_h
 
/* For a profile to be intelligible to a human user, it is necessary
   to map code-addresses into source-code information.  Source-code
   information can be any combination of: (i) function-name, (ii)
   source file-name, and (iii) source line number.
 
   The symbol table is used to map addresses into source-code
   information.  */
 
#define NBBS 10
 
/* Symbol-entry.  For each external in the specified file we gather
   its address, the number of calls and compute its share of cpu time.  */
typedef struct sym
  {
    /* Common information:
 
       In the symbol-table, fields ADDR and FUNC_NAME are guaranteed
       to contain valid information.  FILE may be 0, if unknown and
       LINE_NUM maybe 0 if unknown.  */
 
    bfd_vma addr;		/* Address of entry point.  */
    bfd_vma end_addr;		/* End-address.  */
    const char *name;		/* Name of function this sym is from.  */
    Source_File *file;		/* Source file symbol comes from.  */
    int line_num;		/* Source line number.  */
    unsigned int		/* Boolean fields:  */
      is_func:1,		/*  Is this a function entry point?  */
      is_static:1,		/*  Is this a local (static) symbol?  */
      is_bb_head:1,		/*  Is this the head of a basic-blk?  */
      mapped:1,			/*  This symbol was mapped to another name.  */
      has_been_placed:1;	/*  Have we placed this symbol?  */
    unsigned long ncalls;	/* How many times executed  */
    int nuses;			/* How many times this symbol appears in
				   a particular context.  */
    bfd_vma bb_addr[NBBS];	/* Address of basic-block start.  */
    unsigned long bb_calls[NBBS];/* How many times basic-block was called.  */
    struct sym *next;		/* For building chains of syms.  */
    struct sym *prev;		/* For building chains of syms.  */
 
    /* Profile specific information:  */
 
    /* Histogram specific information:  */
    struct
      {
	double time;		/* (Weighted) ticks in this routine.  */
	bfd_vma scaled_addr;	/* Scaled entry point.  */
      }
    hist;
 
    /* Call-graph specific information:  */
    struct
      {
	unsigned long self_calls; /* How many calls to self.  */
	double child_time;	/* Cumulative ticks in children.  */
	int index;		/* Index in the graph list.  */
	int top_order;		/* Graph call chain top-sort order.  */
	bfd_boolean print_flag;	/* Should this be printed?  */
	struct
	  {
	    double fract;	/* What % of time propagates.  */
	    double self;	/* How much self time propagates.  */
	    double child;	/* How much child time propagates.  */
	  }
	prop;
	struct
	  {
	    int num;		/* Internal number of cycle on.  */
	    struct sym *head;	/* Head of cycle.  */
	    struct sym *next;	/* Next member of cycle.  */
	  }
	cyc;
	struct arc *parents;	/* List of caller arcs.  */
	struct arc *children;	/* List of callee arcs.  */
      }
    cg;
  }
Sym;
 
/* Symbol-tables are always assumed to be sorted
   in increasing order of addresses.  */
typedef struct
  {
    unsigned int len;		/* # of symbols in this table.  */
    Sym *base;			/* First element in symbol table.  */
    Sym *limit;			/* Limit = base + len.  */
  }
Sym_Table;
 
extern Sym_Table symtab;	/* The symbol table.  */
 
extern void sym_init        (Sym *);
extern void symtab_finalize (Sym_Table *);
#ifdef DEBUG
extern Sym *dbg_sym_lookup  (Sym_Table *, bfd_vma);
#endif
extern Sym *sym_lookup      (Sym_Table *, bfd_vma);
extern void find_call       (Sym *, bfd_vma, bfd_vma);
 
#endif /* symtab_h */
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.