mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-23 12:09:49 +00:00
* alpha.c (alpha_find_call): Warning fixes.
* mips.c (mips_find_call): Likewise. * sparc.c (sparc_find_call): Likewise. * basic_blocks.c: Warning fixes. Eliminate DEFUN. * call_graph.c: Likewise. * cg_arcs.c: Likewise. * cg_dfn.cp: Likewise. * gprof.c: Likewise. * gprof.h: Likewise. * hist.c: Likewise. * search_list.c: Likewise. * source.c: Likewise. * source.h: Likewise. * sym_ids.c: Likewise. * symtab.c: Likewise. * symtab.h: Likewise. * utils.c: Likewise. * cg_print.c: Likewise. (struct function_map, symbol_map, symbol_map_count): Move declaration to.. * corefile: ..here. * corefile.c: Warning fixes. Eliminate DEFUN. (struct function_map): Remove declaration. * gmon_io.c: Warning fixes. Eliminate DEFUN. (gmon_io_read_64): Make static. (gmon_io_write_64): Likewise. (gmon_read_raw_arc): Likewise. (gmon_write_raw_arc): Likewise. (gmon_io_write_8): Don't pass char, pass int param. * gmon_io.h (gmon_io_write_8): Likewise. and a few copyright dates that should have been done previously.
This commit is contained in:
parent
48fa4a5def
commit
1355568ab4
@ -1,5 +1,36 @@
|
||||
2002-02-01 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* alpha.c (alpha_find_call): Warning fixes.
|
||||
* mips.c (mips_find_call): Likewise.
|
||||
* sparc.c (sparc_find_call): Likewise.
|
||||
* basic_blocks.c: Warning fixes. Eliminate DEFUN.
|
||||
* call_graph.c: Likewise.
|
||||
* cg_arcs.c: Likewise.
|
||||
* cg_dfn.cp: Likewise.
|
||||
* gprof.c: Likewise.
|
||||
* gprof.h: Likewise.
|
||||
* hist.c: Likewise.
|
||||
* search_list.c: Likewise.
|
||||
* source.c: Likewise.
|
||||
* source.h: Likewise.
|
||||
* sym_ids.c: Likewise.
|
||||
* symtab.c: Likewise.
|
||||
* symtab.h: Likewise.
|
||||
* utils.c: Likewise.
|
||||
* cg_print.c: Likewise.
|
||||
(struct function_map, symbol_map, symbol_map_count): Move
|
||||
declaration to..
|
||||
* corefile: ..here.
|
||||
* corefile.c: Warning fixes. Eliminate DEFUN.
|
||||
(struct function_map): Remove declaration.
|
||||
* gmon_io.c: Warning fixes. Eliminate DEFUN.
|
||||
(gmon_io_read_64): Make static.
|
||||
(gmon_io_write_64): Likewise.
|
||||
(gmon_read_raw_arc): Likewise.
|
||||
(gmon_write_raw_arc): Likewise.
|
||||
(gmon_io_write_8): Don't pass char, pass int param.
|
||||
* gmon_io.h (gmon_io_write_8): Likewise.
|
||||
|
||||
* Makefile.am: Run "make dep-am"
|
||||
* Makefile.in: Regenerate.
|
||||
|
||||
|
@ -84,7 +84,7 @@ alpha_find_call (parent, p_lowpc, p_highpc)
|
||||
bfd_vma p_highpc;
|
||||
{
|
||||
bfd_vma pc, dest_pc;
|
||||
unsigned long insn;
|
||||
unsigned int insn;
|
||||
Sym *child;
|
||||
|
||||
if (indirect_child.name == NULL)
|
||||
@ -110,7 +110,7 @@ alpha_find_call (parent, p_lowpc, p_highpc)
|
||||
DBG (CALLDEBUG, printf (_("[find_call] %s: 0x%lx to 0x%lx\n"),
|
||||
parent->name, (unsigned long) p_lowpc,
|
||||
(unsigned long) p_highpc));
|
||||
for (pc = (p_lowpc + 3) & ~3; pc < p_highpc; pc += 4)
|
||||
for (pc = (p_lowpc + 3) & ~(bfd_vma) 3; pc < p_highpc; pc += 4)
|
||||
{
|
||||
insn = bfd_get_32 (core_bfd, ((unsigned char *) core_text_space
|
||||
+ pc - core_text_sect->vma));
|
||||
|
@ -2,7 +2,7 @@
|
||||
of basic-block info to/from gmon.out; computing and formatting of
|
||||
basic-block related statistics.
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -32,6 +32,11 @@
|
||||
#include "symtab.h"
|
||||
#include "sym_ids.h"
|
||||
|
||||
static int cmp_bb PARAMS ((const PTR, const PTR));
|
||||
static int cmp_ncalls PARAMS ((const PTR, const PTR));
|
||||
static void fskip_string PARAMS ((FILE *));
|
||||
static void annotate_with_count PARAMS ((char *, unsigned int, int, PTR));
|
||||
|
||||
/* Default option values: */
|
||||
boolean bb_annotate_all_lines = false;
|
||||
unsigned long bb_min_calls = 1;
|
||||
@ -47,7 +52,9 @@ static long num_lines_executed;
|
||||
number, and address (in that order). */
|
||||
|
||||
static int
|
||||
DEFUN (cmp_bb, (lp, rp), const void *lp AND const void *rp)
|
||||
cmp_bb (lp, rp)
|
||||
const PTR lp;
|
||||
const PTR rp;
|
||||
{
|
||||
int r;
|
||||
const Sym *left = *(const Sym **) lp;
|
||||
@ -76,7 +83,9 @@ DEFUN (cmp_bb, (lp, rp), const void *lp AND const void *rp)
|
||||
/* Helper for sorting. Order basic blocks in decreasing number of
|
||||
calls, ties are broken in increasing order of line numbers. */
|
||||
static int
|
||||
DEFUN (cmp_ncalls, (lp, rp), const void *lp AND const void *rp)
|
||||
cmp_ncalls (lp, rp)
|
||||
const PTR lp;
|
||||
const PTR rp;
|
||||
{
|
||||
const Sym *left = *(const Sym **) lp;
|
||||
const Sym *right = *(const Sym **) rp;
|
||||
@ -96,7 +105,8 @@ DEFUN (cmp_ncalls, (lp, rp), const void *lp AND const void *rp)
|
||||
|
||||
/* Skip over variable length string. */
|
||||
static void
|
||||
DEFUN (fskip_string, (fp), FILE * fp)
|
||||
fskip_string (fp)
|
||||
FILE *fp;
|
||||
{
|
||||
int ch;
|
||||
|
||||
@ -111,7 +121,9 @@ DEFUN (fskip_string, (fp), FILE * fp)
|
||||
of file IFP and is provided for formatting error-messages only. */
|
||||
|
||||
void
|
||||
DEFUN (bb_read_rec, (ifp, filename), FILE * ifp AND const char *filename)
|
||||
bb_read_rec (ifp, filename)
|
||||
FILE *ifp;
|
||||
const char *filename;
|
||||
{
|
||||
int nblocks, b;
|
||||
bfd_vma addr, ncalls;
|
||||
@ -199,9 +211,11 @@ DEFUN (bb_read_rec, (ifp, filename), FILE * ifp AND const char *filename)
|
||||
is the name of OFP and is provided for producing error-messages
|
||||
only. */
|
||||
void
|
||||
DEFUN (bb_write_blocks, (ofp, filename), FILE * ofp AND const char *filename)
|
||||
bb_write_blocks (ofp, filename)
|
||||
FILE *ofp;
|
||||
const char *filename;
|
||||
{
|
||||
int nblocks = 0;
|
||||
unsigned int nblocks = 0;
|
||||
Sym *sym;
|
||||
int i;
|
||||
|
||||
@ -227,7 +241,7 @@ DEFUN (bb_write_blocks, (ofp, filename), FILE * ofp AND const char *filename)
|
||||
for (i = 0; i < NBBS && sym->bb_addr[i]; i++)
|
||||
{
|
||||
if (gmon_io_write_vma (ofp, sym->bb_addr[i])
|
||||
|| gmon_io_write_vma (ofp, sym->bb_calls[i]))
|
||||
|| gmon_io_write_vma (ofp, (bfd_vma) sym->bb_calls[i]))
|
||||
{
|
||||
perror (filename);
|
||||
done (1);
|
||||
@ -242,10 +256,10 @@ DEFUN (bb_write_blocks, (ofp, filename), FILE * ofp AND const char *filename)
|
||||
<filename>:<line-number>: (<function-name>:<bb-addr): <ncalls> */
|
||||
|
||||
void
|
||||
DEFUN_VOID (print_exec_counts)
|
||||
print_exec_counts ()
|
||||
{
|
||||
Sym **sorted_bbs, *sym;
|
||||
int i, j, len;
|
||||
unsigned int i, j, len;
|
||||
|
||||
if (first_output)
|
||||
first_output = false;
|
||||
@ -309,12 +323,15 @@ DEFUN_VOID (print_exec_counts)
|
||||
that starts the basic-block. */
|
||||
|
||||
static void
|
||||
DEFUN (annotate_with_count, (buf, width, line_num, arg),
|
||||
char *buf AND int width AND int line_num AND void *arg)
|
||||
annotate_with_count (buf, width, line_num, arg)
|
||||
char *buf;
|
||||
unsigned int width;
|
||||
int line_num;
|
||||
PTR arg;
|
||||
{
|
||||
Source_File *sf = arg;
|
||||
Sym *b;
|
||||
int i;
|
||||
unsigned int i;
|
||||
static unsigned long last_count;
|
||||
unsigned long last_print = (unsigned long) -1;
|
||||
|
||||
@ -335,7 +352,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg),
|
||||
char *p;
|
||||
unsigned long ncalls;
|
||||
int ncalls_set;
|
||||
int len;
|
||||
unsigned int len;
|
||||
|
||||
++num_executable_lines;
|
||||
|
||||
@ -411,7 +428,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg),
|
||||
|
||||
if (! ncalls_set)
|
||||
{
|
||||
int c;
|
||||
unsigned int c;
|
||||
|
||||
for (c = 0; c < width; c++)
|
||||
buf[c] = ' ';
|
||||
@ -438,7 +455,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg),
|
||||
}
|
||||
else
|
||||
{
|
||||
int c;
|
||||
unsigned int c;
|
||||
|
||||
strcpy (buf + width - len, tmpbuf);
|
||||
for (c = 0; c < width - len; ++c)
|
||||
@ -452,7 +469,7 @@ DEFUN (annotate_with_count, (buf, width, line_num, arg),
|
||||
regarding that source file are printed. */
|
||||
|
||||
void
|
||||
DEFUN_VOID (print_annotated_source)
|
||||
print_annotated_source ()
|
||||
{
|
||||
Sym *sym, *line_stats, *new_line;
|
||||
Source_File *sf;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* basic_blocks.h
|
||||
Copyright 2000 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* call_graph.c - Create call graphs.
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -30,9 +30,11 @@
|
||||
#include "gmon_out.h"
|
||||
#include "sym_ids.h"
|
||||
|
||||
extern void
|
||||
DEFUN (cg_tally, (from_pc, self_pc, count),
|
||||
bfd_vma from_pc AND bfd_vma self_pc AND unsigned long count)
|
||||
void
|
||||
cg_tally (from_pc, self_pc, count)
|
||||
bfd_vma from_pc;
|
||||
bfd_vma self_pc;
|
||||
unsigned long count;
|
||||
{
|
||||
Sym *parent;
|
||||
Sym *child;
|
||||
@ -78,7 +80,9 @@ DEFUN (cg_tally, (from_pc, self_pc, count),
|
||||
for formatting error-messages only. */
|
||||
|
||||
void
|
||||
DEFUN (cg_read_rec, (ifp, filename), FILE * ifp AND CONST char *filename)
|
||||
cg_read_rec (ifp, filename)
|
||||
FILE *ifp;
|
||||
const char *filename;
|
||||
{
|
||||
bfd_vma from_pc, self_pc;
|
||||
unsigned int count;
|
||||
@ -105,7 +109,9 @@ DEFUN (cg_read_rec, (ifp, filename), FILE * ifp AND CONST char *filename)
|
||||
only. */
|
||||
|
||||
void
|
||||
DEFUN (cg_write_arcs, (ofp, filename), FILE * ofp AND const char *filename)
|
||||
cg_write_arcs (ofp, filename)
|
||||
FILE *ofp;
|
||||
const char *filename;
|
||||
{
|
||||
Arc *arc;
|
||||
Sym *sym;
|
||||
|
@ -28,6 +28,14 @@
|
||||
#include "utils.h"
|
||||
#include "sym_ids.h"
|
||||
|
||||
static int cmp_topo PARAMS ((const PTR, const PTR));
|
||||
static void propagate_time PARAMS ((Sym *));
|
||||
static void cycle_time PARAMS ((void));
|
||||
static void cycle_link PARAMS ((void));
|
||||
static void inherit_flags PARAMS ((Sym *));
|
||||
static void propagate_flags PARAMS ((Sym **));
|
||||
static int cmp_total PARAMS ((const PTR, const PTR));
|
||||
|
||||
Sym *cycle_header;
|
||||
unsigned int num_cycles;
|
||||
Arc **arcs;
|
||||
@ -38,7 +46,9 @@ unsigned int numarcs;
|
||||
* range covered by CHILD.
|
||||
*/
|
||||
Arc *
|
||||
DEFUN (arc_lookup, (parent, child), Sym * parent AND Sym * child)
|
||||
arc_lookup (parent, child)
|
||||
Sym *parent;
|
||||
Sym *child;
|
||||
{
|
||||
Arc *arc;
|
||||
|
||||
@ -67,8 +77,10 @@ DEFUN (arc_lookup, (parent, child), Sym * parent AND Sym * child)
|
||||
* Add (or just increment) an arc:
|
||||
*/
|
||||
void
|
||||
DEFUN (arc_add, (parent, child, count),
|
||||
Sym * parent AND Sym * child AND unsigned long count)
|
||||
arc_add (parent, child, count)
|
||||
Sym *parent;
|
||||
Sym *child;
|
||||
unsigned long count;
|
||||
{
|
||||
static unsigned int maxarcs = 0;
|
||||
Arc *arc, **newarcs;
|
||||
@ -134,7 +146,9 @@ DEFUN (arc_add, (parent, child, count),
|
||||
|
||||
|
||||
static int
|
||||
DEFUN (cmp_topo, (lp, rp), const PTR lp AND const PTR rp)
|
||||
cmp_topo (lp, rp)
|
||||
const PTR lp;
|
||||
const PTR rp;
|
||||
{
|
||||
const Sym *left = *(const Sym **) lp;
|
||||
const Sym *right = *(const Sym **) rp;
|
||||
@ -144,7 +158,8 @@ DEFUN (cmp_topo, (lp, rp), const PTR lp AND const PTR rp)
|
||||
|
||||
|
||||
static void
|
||||
DEFUN (propagate_time, (parent), Sym * parent)
|
||||
propagate_time (parent)
|
||||
Sym *parent;
|
||||
{
|
||||
Arc *arc;
|
||||
Sym *child;
|
||||
@ -228,7 +243,7 @@ DEFUN (propagate_time, (parent), Sym * parent)
|
||||
* its members.
|
||||
*/
|
||||
static void
|
||||
DEFUN_VOID (cycle_time)
|
||||
cycle_time ()
|
||||
{
|
||||
Sym *member, *cyc;
|
||||
|
||||
@ -252,7 +267,7 @@ DEFUN_VOID (cycle_time)
|
||||
|
||||
|
||||
static void
|
||||
DEFUN_VOID (cycle_link)
|
||||
cycle_link ()
|
||||
{
|
||||
Sym *sym, *cyc, *member;
|
||||
Arc *arc;
|
||||
@ -340,7 +355,8 @@ DEFUN_VOID (cycle_link)
|
||||
* fractions from parents.
|
||||
*/
|
||||
static void
|
||||
DEFUN (inherit_flags, (child), Sym * child)
|
||||
inherit_flags (child)
|
||||
Sym *child;
|
||||
{
|
||||
Sym *head, *parent, *member;
|
||||
Arc *arc;
|
||||
@ -418,7 +434,8 @@ DEFUN (inherit_flags, (child), Sym * child)
|
||||
* and while we're here, sum time for functions.
|
||||
*/
|
||||
static void
|
||||
DEFUN (propagate_flags, (symbols), Sym ** symbols)
|
||||
propagate_flags (symbols)
|
||||
Sym **symbols;
|
||||
{
|
||||
int index;
|
||||
Sym *old_head, *child;
|
||||
@ -518,7 +535,9 @@ DEFUN (propagate_flags, (symbols), Sym ** symbols)
|
||||
* first. All else being equal, compare by names.
|
||||
*/
|
||||
static int
|
||||
DEFUN (cmp_total, (lp, rp), const PTR lp AND const PTR rp)
|
||||
cmp_total (lp, rp)
|
||||
const PTR lp;
|
||||
const PTR rp;
|
||||
{
|
||||
const Sym *left = *(const Sym **) lp;
|
||||
const Sym *right = *(const Sym **) rp;
|
||||
@ -575,7 +594,7 @@ DEFUN (cmp_total, (lp, rp), const PTR lp AND const PTR rp)
|
||||
* time bottom up and flags top down.
|
||||
*/
|
||||
Sym **
|
||||
DEFUN_VOID (cg_assemble)
|
||||
cg_assemble ()
|
||||
{
|
||||
Sym *parent, **time_sorted_syms, **top_sorted_syms;
|
||||
unsigned int index;
|
||||
|
@ -34,6 +34,12 @@ typedef struct
|
||||
}
|
||||
DFN_Stack;
|
||||
|
||||
static boolean is_numbered PARAMS ((Sym *));
|
||||
static boolean is_busy PARAMS ((Sym *));
|
||||
static void find_cycle PARAMS ((Sym *));
|
||||
static void pre_visit PARAMS ((Sym *));
|
||||
static void post_visit PARAMS ((Sym *));
|
||||
|
||||
DFN_Stack *dfn_stack = NULL;
|
||||
int dfn_maxdepth = 0;
|
||||
int dfn_depth = 0;
|
||||
@ -44,7 +50,8 @@ int dfn_counter = DFN_NAN;
|
||||
* Is CHILD already numbered?
|
||||
*/
|
||||
static boolean
|
||||
DEFUN (is_numbered, (child), Sym * child)
|
||||
is_numbered (child)
|
||||
Sym *child;
|
||||
{
|
||||
return child->cg.top_order != DFN_NAN && child->cg.top_order != DFN_BUSY;
|
||||
}
|
||||
@ -54,7 +61,8 @@ DEFUN (is_numbered, (child), Sym * child)
|
||||
* Is CHILD already busy?
|
||||
*/
|
||||
static boolean
|
||||
DEFUN (is_busy, (child), Sym * child)
|
||||
is_busy (child)
|
||||
Sym *child;
|
||||
{
|
||||
if (child->cg.top_order == DFN_NAN)
|
||||
{
|
||||
@ -71,7 +79,8 @@ DEFUN (is_busy, (child), Sym * child)
|
||||
* depth-first number).
|
||||
*/
|
||||
static void
|
||||
DEFUN (find_cycle, (child), Sym * child)
|
||||
find_cycle (child)
|
||||
Sym *child;
|
||||
{
|
||||
Sym *head = 0;
|
||||
Sym *tail;
|
||||
@ -194,7 +203,8 @@ DEFUN (find_cycle, (child), Sym * child)
|
||||
* the stack and mark it busy.
|
||||
*/
|
||||
static void
|
||||
DEFUN (pre_visit, (parent), Sym * parent)
|
||||
pre_visit (parent)
|
||||
Sym *parent;
|
||||
{
|
||||
++dfn_depth;
|
||||
|
||||
@ -218,7 +228,8 @@ DEFUN (pre_visit, (parent), Sym * parent)
|
||||
* and number functions if PARENT is head of a cycle.
|
||||
*/
|
||||
static void
|
||||
DEFUN (post_visit, (parent), Sym * parent)
|
||||
post_visit (parent)
|
||||
Sym *parent;
|
||||
{
|
||||
Sym *member;
|
||||
|
||||
@ -252,7 +263,8 @@ DEFUN (post_visit, (parent), Sym * parent)
|
||||
* Given this PARENT, depth first number its children.
|
||||
*/
|
||||
void
|
||||
DEFUN (cg_dfn, (parent), Sym * parent)
|
||||
cg_dfn (parent)
|
||||
Sym *parent;
|
||||
{
|
||||
Arc *arc;
|
||||
|
||||
|
142
gprof/cg_print.c
142
gprof/cg_print.c
@ -28,15 +28,30 @@
|
||||
#include "cg_print.h"
|
||||
#include "hist.h"
|
||||
#include "utils.h"
|
||||
#include "corefile.h"
|
||||
|
||||
/* Return value of comparison functions used to sort tables. */
|
||||
#define LESSTHAN -1
|
||||
#define EQUALTO 0
|
||||
#define GREATERTHAN 1
|
||||
|
||||
static void order_and_dump_functions_by_arcs PARAMS ((Arc **, unsigned long,
|
||||
int, Arc **,
|
||||
unsigned long *));
|
||||
static void print_header PARAMS ((void));
|
||||
static void print_cycle PARAMS ((Sym *));
|
||||
static int cmp_member PARAMS ((Sym *, Sym *));
|
||||
static void sort_members PARAMS ((Sym *));
|
||||
static void print_members PARAMS ((Sym *));
|
||||
static int cmp_arc PARAMS ((Arc *, Arc *));
|
||||
static void sort_parents PARAMS ((Sym *));
|
||||
static void print_parents PARAMS ((Sym *));
|
||||
static void sort_children PARAMS ((Sym *));
|
||||
static void print_children PARAMS ((Sym *));
|
||||
static void print_line PARAMS ((Sym *));
|
||||
static int cmp_name PARAMS ((const PTR, const PTR));
|
||||
static int cmp_arc_count PARAMS ((const PTR, const PTR));
|
||||
static int cmp_fun_nuses PARAMS ((const PTR, const PTR));
|
||||
static void order_and_dump_functions_by_arcs
|
||||
PARAMS ((Arc **, unsigned long, int, Arc **, unsigned long *));
|
||||
|
||||
/* Declarations of automatically generated functions to output blurbs. */
|
||||
extern void bsd_callg_blurb PARAMS ((FILE * fp));
|
||||
extern void fsf_callg_blurb PARAMS ((FILE * fp));
|
||||
@ -45,7 +60,7 @@ double print_time = 0.0;
|
||||
|
||||
|
||||
static void
|
||||
DEFUN_VOID (print_header)
|
||||
print_header ()
|
||||
{
|
||||
if (first_output)
|
||||
first_output = false;
|
||||
@ -94,7 +109,8 @@ DEFUN_VOID (print_header)
|
||||
/* Print a cycle header. */
|
||||
|
||||
static void
|
||||
DEFUN (print_cycle, (cyc), Sym * cyc)
|
||||
print_cycle (cyc)
|
||||
Sym *cyc;
|
||||
{
|
||||
char buf[BUFSIZ];
|
||||
|
||||
@ -117,7 +133,9 @@ DEFUN (print_cycle, (cyc), Sym * cyc)
|
||||
CG.PROP.SELF+CG.PROP.CHILD, secondary key is NCALLS+CG.SELF_CALLS. */
|
||||
|
||||
static int
|
||||
DEFUN (cmp_member, (left, right), Sym * left AND Sym * right)
|
||||
cmp_member (left, right)
|
||||
Sym *left;
|
||||
Sym *right;
|
||||
{
|
||||
double left_time = left->cg.prop.self + left->cg.prop.child;
|
||||
double right_time = right->cg.prop.self + right->cg.prop.child;
|
||||
@ -142,7 +160,8 @@ DEFUN (cmp_member, (left, right), Sym * left AND Sym * right)
|
||||
/* Sort members of a cycle. */
|
||||
|
||||
static void
|
||||
DEFUN (sort_members, (cyc), Sym * cyc)
|
||||
sort_members (cyc)
|
||||
Sym *cyc;
|
||||
{
|
||||
Sym *todo, *doing, *prev;
|
||||
|
||||
@ -169,7 +188,8 @@ DEFUN (sort_members, (cyc), Sym * cyc)
|
||||
/* Print the members of a cycle. */
|
||||
|
||||
static void
|
||||
DEFUN (print_members, (cyc), Sym * cyc)
|
||||
print_members (cyc)
|
||||
Sym *cyc;
|
||||
{
|
||||
Sym *member;
|
||||
|
||||
@ -203,7 +223,9 @@ DEFUN (print_members, (cyc), Sym * cyc)
|
||||
arc count as minor key. */
|
||||
|
||||
static int
|
||||
DEFUN (cmp_arc, (left, right), Arc * left AND Arc * right)
|
||||
cmp_arc (left, right)
|
||||
Arc *left;
|
||||
Arc *right;
|
||||
{
|
||||
Sym *left_parent = left->parent;
|
||||
Sym *left_child = left->child;
|
||||
@ -289,7 +311,8 @@ DEFUN (cmp_arc, (left, right), Arc * left AND Arc * right)
|
||||
|
||||
|
||||
static void
|
||||
DEFUN (sort_parents, (child), Sym * child)
|
||||
sort_parents (child)
|
||||
Sym * child;
|
||||
{
|
||||
Arc *arc, *detached, sorted, *prev;
|
||||
|
||||
@ -322,7 +345,8 @@ DEFUN (sort_parents, (child), Sym * child)
|
||||
|
||||
|
||||
static void
|
||||
DEFUN (print_parents, (child), Sym * child)
|
||||
print_parents (child)
|
||||
Sym *child;
|
||||
{
|
||||
Sym *parent;
|
||||
Arc *arc;
|
||||
@ -376,7 +400,8 @@ DEFUN (print_parents, (child), Sym * child)
|
||||
|
||||
|
||||
static void
|
||||
DEFUN (sort_children, (parent), Sym * parent)
|
||||
sort_children (parent)
|
||||
Sym *parent;
|
||||
{
|
||||
Arc *arc, *detached, sorted, *prev;
|
||||
|
||||
@ -409,7 +434,8 @@ DEFUN (sort_children, (parent), Sym * parent)
|
||||
|
||||
|
||||
static void
|
||||
DEFUN (print_children, (parent), Sym * parent)
|
||||
print_children (parent)
|
||||
Sym *parent;
|
||||
{
|
||||
Sym *child;
|
||||
Arc *arc;
|
||||
@ -448,7 +474,8 @@ DEFUN (print_children, (parent), Sym * parent)
|
||||
|
||||
|
||||
static void
|
||||
DEFUN (print_line, (np), Sym * np)
|
||||
print_line (np)
|
||||
Sym *np;
|
||||
{
|
||||
char buf[BUFSIZ];
|
||||
|
||||
@ -481,7 +508,8 @@ DEFUN (print_line, (np), Sym * np)
|
||||
/* Print dynamic call graph. */
|
||||
|
||||
void
|
||||
DEFUN (cg_print, (timesortsym), Sym ** timesortsym)
|
||||
cg_print (timesortsym)
|
||||
Sym ** timesortsym;
|
||||
{
|
||||
unsigned int index;
|
||||
Sym *parent;
|
||||
@ -532,7 +560,9 @@ DEFUN (cg_print, (timesortsym), Sym ** timesortsym)
|
||||
|
||||
|
||||
static int
|
||||
DEFUN (cmp_name, (left, right), const PTR left AND const PTR right)
|
||||
cmp_name (left, right)
|
||||
const PTR left;
|
||||
const PTR right;
|
||||
{
|
||||
const Sym **npp1 = (const Sym **) left;
|
||||
const Sym **npp2 = (const Sym **) right;
|
||||
@ -542,7 +572,7 @@ DEFUN (cmp_name, (left, right), const PTR left AND const PTR right)
|
||||
|
||||
|
||||
void
|
||||
DEFUN_VOID (cg_print_index)
|
||||
cg_print_index ()
|
||||
{
|
||||
unsigned int index;
|
||||
unsigned int nnames, todo, i, j;
|
||||
@ -656,7 +686,9 @@ DEFUN_VOID (cg_print_index)
|
||||
We want to sort in descending order. */
|
||||
|
||||
static int
|
||||
DEFUN (cmp_arc_count, (left, right), const PTR left AND const PTR right)
|
||||
cmp_arc_count (left, right)
|
||||
const PTR left;
|
||||
const PTR right;
|
||||
{
|
||||
const Arc **npp1 = (const Arc **) left;
|
||||
const Arc **npp2 = (const Arc **) right;
|
||||
@ -673,7 +705,9 @@ DEFUN (cmp_arc_count, (left, right), const PTR left AND const PTR right)
|
||||
We want to sort in descending order. */
|
||||
|
||||
static int
|
||||
DEFUN (cmp_fun_nuses, (left, right), const PTR left AND const PTR right)
|
||||
cmp_fun_nuses (left, right)
|
||||
const PTR left;
|
||||
const PTR right;
|
||||
{
|
||||
const Sym **npp1 = (const Sym **) left;
|
||||
const Sym **npp2 = (const Sym **) right;
|
||||
@ -755,7 +789,7 @@ DEFUN (cmp_fun_nuses, (left, right), const PTR left AND const PTR right)
|
||||
of function ordering). */
|
||||
|
||||
void
|
||||
DEFUN_VOID (cg_print_function_ordering)
|
||||
cg_print_function_ordering ()
|
||||
{
|
||||
unsigned long index, used, unused, scratch_index;
|
||||
unsigned long unplaced_arc_count, high_arc_count, scratch_arc_count;
|
||||
@ -960,18 +994,18 @@ DEFUN_VOID (cg_print_function_ordering)
|
||||
free (unplaced_arcs);
|
||||
}
|
||||
|
||||
/* Place functions based on the arcs in ARCS with NUMARCS entries;
|
||||
/* Place functions based on the arcs in THE_ARCS with ARC_COUNT entries;
|
||||
place unused arcs into UNPLACED_ARCS/UNPLACED_ARC_COUNT.
|
||||
|
||||
If ALL is nonzero, then place all functions referenced by ARCS,
|
||||
else only place those referenced in the top 99% of the arcs in ARCS. */
|
||||
If ALL is nonzero, then place all functions referenced by THE_ARCS,
|
||||
else only place those referenced in the top 99% of the arcs in THE_ARCS. */
|
||||
|
||||
#define MOST 0.99
|
||||
static void
|
||||
order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
order_and_dump_functions_by_arcs (the_arcs, arc_count, all,
|
||||
unplaced_arcs, unplaced_arc_count)
|
||||
Arc **arcs;
|
||||
unsigned long numarcs;
|
||||
Arc **the_arcs;
|
||||
unsigned long arc_count;
|
||||
int all;
|
||||
Arc **unplaced_arcs;
|
||||
unsigned long *unplaced_arc_count;
|
||||
@ -989,27 +1023,27 @@ order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
if (! all)
|
||||
{
|
||||
total_arcs = 0;
|
||||
for (index = 0; index < numarcs; index++)
|
||||
total_arcs += arcs[index]->count;
|
||||
for (index = 0; index < arc_count; index++)
|
||||
total_arcs += the_arcs[index]->count;
|
||||
}
|
||||
else
|
||||
total_arcs = 0;
|
||||
|
||||
tmp_arcs = 0;
|
||||
|
||||
for (index = 0; index < numarcs; index++)
|
||||
for (index = 0; index < arc_count; index++)
|
||||
{
|
||||
Sym *sym1, *sym2;
|
||||
Sym *child, *parent;
|
||||
|
||||
tmp_arcs += arcs[index]->count;
|
||||
tmp_arcs += the_arcs[index]->count;
|
||||
|
||||
/* Ignore this arc if it's already been placed. */
|
||||
if (arcs[index]->has_been_placed)
|
||||
if (the_arcs[index]->has_been_placed)
|
||||
continue;
|
||||
|
||||
child = arcs[index]->child;
|
||||
parent = arcs[index]->parent;
|
||||
child = the_arcs[index]->child;
|
||||
parent = the_arcs[index]->parent;
|
||||
|
||||
/* If we're not using all arcs, and this is a rarely used
|
||||
arc, then put it on the unplaced_arc list. Similarly
|
||||
@ -1017,7 +1051,7 @@ order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
if ((! all && (double)tmp_arcs / (double)total_arcs > MOST)
|
||||
|| child->has_been_placed || parent->has_been_placed)
|
||||
{
|
||||
unplaced_arcs[(*unplaced_arc_count)++] = arcs[index];
|
||||
unplaced_arcs[(*unplaced_arc_count)++] = the_arcs[index];
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1027,7 +1061,7 @@ order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
algorithm can use it to place function chains. */
|
||||
if (parent->next && parent->prev && child->next && child->prev)
|
||||
{
|
||||
unplaced_arcs[(*unplaced_arc_count)++] = arcs[index];
|
||||
unplaced_arcs[(*unplaced_arc_count)++] = the_arcs[index];
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1082,7 +1116,7 @@ order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
{
|
||||
/* Couldn't find anywhere to attach the functions,
|
||||
put the arc on the unplaced arc list. */
|
||||
unplaced_arcs[(*unplaced_arc_count)++] = arcs[index];
|
||||
unplaced_arcs[(*unplaced_arc_count)++] = the_arcs[index];
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1107,7 +1141,7 @@ order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
&& sym2 == parent)
|
||||
{
|
||||
/* This would tie two ends together. */
|
||||
unplaced_arcs[(*unplaced_arc_count)++] = arcs[index];
|
||||
unplaced_arcs[(*unplaced_arc_count)++] = the_arcs[index];
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1119,7 +1153,7 @@ order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
/* parent-prev and child-next */
|
||||
parent->prev = child;
|
||||
child->next = parent;
|
||||
arcs[index]->has_been_placed = 1;
|
||||
the_arcs[index]->has_been_placed = 1;
|
||||
}
|
||||
}
|
||||
else if (parent->prev)
|
||||
@ -1130,7 +1164,7 @@ order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
/* parent-next and child-prev */
|
||||
parent->next = child;
|
||||
child->prev = parent;
|
||||
arcs[index]->has_been_placed = 1;
|
||||
the_arcs[index]->has_been_placed = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1142,27 +1176,27 @@ order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
/* parent-prev and child-next. */
|
||||
parent->prev = child;
|
||||
child->next = parent;
|
||||
arcs[index]->has_been_placed = 1;
|
||||
the_arcs[index]->has_been_placed = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* parent-next and child-prev. */
|
||||
parent->next = child;
|
||||
child->prev = parent;
|
||||
arcs[index]->has_been_placed = 1;
|
||||
the_arcs[index]->has_been_placed = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Dump the chains of functions we've made. */
|
||||
for (index = 0; index < numarcs; index++)
|
||||
for (index = 0; index < arc_count; index++)
|
||||
{
|
||||
Sym *sym;
|
||||
if (arcs[index]->parent->has_been_placed
|
||||
|| arcs[index]->child->has_been_placed)
|
||||
if (the_arcs[index]->parent->has_been_placed
|
||||
|| the_arcs[index]->child->has_been_placed)
|
||||
continue;
|
||||
|
||||
sym = arcs[index]->parent;
|
||||
sym = the_arcs[index]->parent;
|
||||
|
||||
/* If this symbol isn't attached to any other
|
||||
symbols, then we've got a rarely used arc.
|
||||
@ -1188,14 +1222,14 @@ order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
/* If we want to place all the arcs, then output
|
||||
those which weren't placed by the main algorithm. */
|
||||
if (all)
|
||||
for (index = 0; index < numarcs; index++)
|
||||
for (index = 0; index < arc_count; index++)
|
||||
{
|
||||
Sym *sym;
|
||||
if (arcs[index]->parent->has_been_placed
|
||||
|| arcs[index]->child->has_been_placed)
|
||||
if (the_arcs[index]->parent->has_been_placed
|
||||
|| the_arcs[index]->child->has_been_placed)
|
||||
continue;
|
||||
|
||||
sym = arcs[index]->parent;
|
||||
sym = the_arcs[index]->parent;
|
||||
|
||||
sym->has_been_placed = 1;
|
||||
printf ("%s\n", sym->name);
|
||||
@ -1206,19 +1240,11 @@ order_and_dump_functions_by_arcs (arcs, numarcs, all,
|
||||
on profiling information. This uses the function placement
|
||||
code for the bulk of its work. */
|
||||
|
||||
struct function_map
|
||||
{
|
||||
char *function_name;
|
||||
char *file_name;
|
||||
};
|
||||
|
||||
void
|
||||
DEFUN_VOID (cg_print_file_ordering)
|
||||
cg_print_file_ordering ()
|
||||
{
|
||||
unsigned long scratch_arc_count, index;
|
||||
Arc **scratch_arcs;
|
||||
extern struct function_map *symbol_map;
|
||||
extern unsigned int symbol_map_count;
|
||||
char *last;
|
||||
|
||||
scratch_arc_count = 0;
|
||||
|
@ -36,15 +36,14 @@ int min_insn_size;
|
||||
int offset_to_code;
|
||||
|
||||
/* For mapping symbols to specific .o files during file ordering. */
|
||||
struct function_map
|
||||
{
|
||||
char *function_name;
|
||||
char *file_name;
|
||||
};
|
||||
|
||||
struct function_map *symbol_map;
|
||||
unsigned int symbol_map_count;
|
||||
|
||||
static void read_function_mappings PARAMS ((const char *));
|
||||
static int core_sym_class PARAMS ((asymbol *));
|
||||
static boolean get_src_info
|
||||
PARAMS ((bfd_vma, const char **, const char **, int *));
|
||||
|
||||
extern void i386_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
|
||||
extern void alpha_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
|
||||
extern void vax_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
|
||||
@ -53,7 +52,8 @@ extern void sparc_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
|
||||
extern void mips_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
|
||||
|
||||
static void
|
||||
DEFUN (read_function_mappings, (filename), const char *filename)
|
||||
read_function_mappings (filename)
|
||||
const char *filename;
|
||||
{
|
||||
FILE *file = fopen (filename, "r");
|
||||
char dummy[1024];
|
||||
@ -139,19 +139,20 @@ DEFUN (read_function_mappings, (filename), const char *filename)
|
||||
|
||||
|
||||
void
|
||||
DEFUN (core_init, (a_out_name), const char *a_out_name)
|
||||
core_init (aout_name)
|
||||
const char *aout_name;
|
||||
{
|
||||
core_bfd = bfd_openr (a_out_name, 0);
|
||||
core_bfd = bfd_openr (aout_name, 0);
|
||||
|
||||
if (!core_bfd)
|
||||
{
|
||||
perror (a_out_name);
|
||||
perror (aout_name);
|
||||
done (1);
|
||||
}
|
||||
|
||||
if (!bfd_check_format (core_bfd, bfd_object))
|
||||
{
|
||||
fprintf (stderr, _("%s: %s: not in a.out format\n"), whoami, a_out_name);
|
||||
fprintf (stderr, _("%s: %s: not in a.out format\n"), whoami, aout_name);
|
||||
done (1);
|
||||
}
|
||||
|
||||
@ -163,7 +164,7 @@ DEFUN (core_init, (a_out_name), const char *a_out_name)
|
||||
if (!core_text_sect)
|
||||
{
|
||||
fprintf (stderr, _("%s: can't find .text section in %s\n"),
|
||||
whoami, a_out_name);
|
||||
whoami, aout_name);
|
||||
done (1);
|
||||
}
|
||||
}
|
||||
@ -174,7 +175,7 @@ DEFUN (core_init, (a_out_name), const char *a_out_name)
|
||||
core_num_syms = bfd_get_symtab_upper_bound (core_bfd);
|
||||
if (core_num_syms < 0)
|
||||
{
|
||||
fprintf (stderr, "%s: %s: %s\n", whoami, a_out_name,
|
||||
fprintf (stderr, "%s: %s: %s\n", whoami, aout_name,
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
done (1);
|
||||
}
|
||||
@ -184,7 +185,7 @@ DEFUN (core_init, (a_out_name), const char *a_out_name)
|
||||
|
||||
if (core_num_syms < 0)
|
||||
{
|
||||
fprintf (stderr, "%s: %s: %s\n", whoami, a_out_name,
|
||||
fprintf (stderr, "%s: %s: %s\n", whoami, aout_name,
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
done (1);
|
||||
}
|
||||
@ -214,9 +215,10 @@ DEFUN (core_init, (a_out_name), const char *a_out_name)
|
||||
/* Read in the text space of an a.out file. */
|
||||
|
||||
void
|
||||
DEFUN (core_get_text_space, (core_bfd), bfd * core_bfd)
|
||||
core_get_text_space (cbfd)
|
||||
bfd *cbfd;
|
||||
{
|
||||
core_text_space = (PTR) malloc (core_text_sect->_raw_size);
|
||||
core_text_space = (PTR) malloc ((unsigned int) core_text_sect->_raw_size);
|
||||
|
||||
if (!core_text_space)
|
||||
{
|
||||
@ -225,8 +227,8 @@ DEFUN (core_get_text_space, (core_bfd), bfd * core_bfd)
|
||||
done (1);
|
||||
}
|
||||
|
||||
if (!bfd_get_section_contents (core_bfd, core_text_sect, core_text_space,
|
||||
0, core_text_sect->_raw_size))
|
||||
if (!bfd_get_section_contents (cbfd, core_text_sect, core_text_space,
|
||||
(bfd_vma) 0, core_text_sect->_raw_size))
|
||||
{
|
||||
bfd_perror ("bfd_get_section_contents");
|
||||
free (core_text_space);
|
||||
@ -239,8 +241,10 @@ DEFUN (core_get_text_space, (core_bfd), bfd * core_bfd)
|
||||
|
||||
|
||||
void
|
||||
DEFUN (find_call, (parent, p_lowpc, p_highpc),
|
||||
Sym * parent AND bfd_vma p_lowpc AND bfd_vma p_highpc)
|
||||
find_call (parent, p_lowpc, p_highpc)
|
||||
Sym *parent;
|
||||
bfd_vma p_lowpc;
|
||||
bfd_vma p_highpc;
|
||||
{
|
||||
switch (bfd_get_arch (core_bfd))
|
||||
{
|
||||
@ -283,7 +287,8 @@ DEFUN (find_call, (parent, p_lowpc, p_highpc),
|
||||
't' -> symbol is a local (static) name. */
|
||||
|
||||
static int
|
||||
DEFUN (core_sym_class, (sym), asymbol * sym)
|
||||
core_sym_class (sym)
|
||||
asymbol *sym;
|
||||
{
|
||||
symbol_info syminfo;
|
||||
const char *name;
|
||||
@ -366,9 +371,11 @@ DEFUN (core_sym_class, (sym), asymbol * sym)
|
||||
/* Get whatever source info we can get regarding address ADDR. */
|
||||
|
||||
static boolean
|
||||
DEFUN (get_src_info, (addr, filename, name, line_num),
|
||||
bfd_vma addr AND const char **filename AND const char **name
|
||||
AND int *line_num)
|
||||
get_src_info (addr, filename, name, line_num)
|
||||
bfd_vma addr;
|
||||
const char **filename;
|
||||
const char **name;
|
||||
int *line_num;
|
||||
{
|
||||
const char *fname = 0, *func_name = 0;
|
||||
int l = 0;
|
||||
@ -398,10 +405,11 @@ DEFUN (get_src_info, (addr, filename, name, line_num),
|
||||
One symbol per function is entered. */
|
||||
|
||||
void
|
||||
core_create_function_syms (core_bfd)
|
||||
bfd *core_bfd ATTRIBUTE_UNUSED;
|
||||
core_create_function_syms (cbfd)
|
||||
bfd *cbfd ATTRIBUTE_UNUSED;
|
||||
{
|
||||
bfd_vma min_vma = ~0, max_vma = 0;
|
||||
bfd_vma min_vma = ~(bfd_vma) 0;
|
||||
bfd_vma max_vma = 0;
|
||||
int class;
|
||||
long i, found, skip;
|
||||
unsigned int j;
|
||||
@ -560,7 +568,7 @@ core_create_function_syms (core_bfd)
|
||||
sym_init (symtab.limit);
|
||||
symtab.limit->name = "<hicore>";
|
||||
symtab.limit->addr = max_vma + 1;
|
||||
symtab.limit->end_addr = ~0;
|
||||
symtab.limit->end_addr = ~(bfd_vma) 0;
|
||||
++symtab.limit;
|
||||
|
||||
symtab.len = symtab.limit - symtab.base;
|
||||
@ -571,11 +579,12 @@ core_create_function_syms (core_bfd)
|
||||
One symbol per line of source code is entered. */
|
||||
|
||||
void
|
||||
DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
|
||||
core_create_line_syms (cbfd)
|
||||
bfd *cbfd;
|
||||
{
|
||||
char *prev_name, *prev_filename;
|
||||
int prev_name_len, prev_filename_len;
|
||||
bfd_vma vma, min_vma = ~0, max_vma = 0;
|
||||
unsigned int prev_name_len, prev_filename_len;
|
||||
bfd_vma vma, min_vma = ~(bfd_vma) 0, max_vma = 0;
|
||||
bfd_vma offset;
|
||||
Sym *prev, dummy, *sentinel, *sym;
|
||||
const char *filename;
|
||||
@ -585,7 +594,7 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
|
||||
/* Create symbols for functions as usual. This is necessary in
|
||||
cases where parts of a program were not compiled with -g. For
|
||||
those parts we still want to get info at the function level. */
|
||||
core_create_function_syms (core_bfd);
|
||||
core_create_function_syms (cbfd);
|
||||
|
||||
/* Pass 1 - counter number of symbols. */
|
||||
|
||||
@ -605,7 +614,7 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
|
||||
|
||||
for (offset = 0; offset < core_text_sect->_raw_size; offset += min_insn_size)
|
||||
{
|
||||
int len;
|
||||
unsigned int len;
|
||||
|
||||
vma = core_text_sect->vma + offset;
|
||||
|
||||
@ -718,13 +727,13 @@ DEFUN (core_create_line_syms, (core_bfd), bfd * core_bfd)
|
||||
}
|
||||
|
||||
/* Update sentinels. */
|
||||
sentinel = sym_lookup (&symtab, 0);
|
||||
sentinel = sym_lookup (&symtab, (bfd_vma) 0);
|
||||
|
||||
if (strcmp (sentinel->name, "<locore>") == 0
|
||||
&& min_vma <= sentinel->end_addr)
|
||||
sentinel->end_addr = min_vma - 1;
|
||||
|
||||
sentinel = sym_lookup (&symtab, ~0);
|
||||
sentinel = sym_lookup (&symtab, ~(bfd_vma) 0);
|
||||
|
||||
if (strcmp (sentinel->name, "<hicore>") == 0 && max_vma >= sentinel->addr)
|
||||
sentinel->addr = max_vma + 1;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* corefile.h
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -21,6 +21,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#ifndef corefile_h
|
||||
#define corefile_h
|
||||
|
||||
struct function_map
|
||||
{
|
||||
char *function_name;
|
||||
char *file_name;
|
||||
};
|
||||
|
||||
extern struct function_map *symbol_map;
|
||||
extern unsigned int symbol_map_count;
|
||||
|
||||
extern bfd *core_bfd; /* BFD for core-file. */
|
||||
extern int core_num_syms; /* # of entries in symbol-table. */
|
||||
extern asymbol **core_syms; /* Symbol table in a.out. */
|
||||
|
@ -34,11 +34,20 @@
|
||||
#include "hist.h"
|
||||
#include "libiberty.h"
|
||||
|
||||
static int gmon_io_read_64 PARAMS ((FILE *, BFD_HOST_U_64_BIT *));
|
||||
static int gmon_io_write_64 PARAMS ((FILE *, BFD_HOST_U_64_BIT));
|
||||
static int gmon_read_raw_arc
|
||||
PARAMS ((FILE *, bfd_vma *, bfd_vma *, unsigned long *));
|
||||
static int gmon_write_raw_arc
|
||||
PARAMS ((FILE *, bfd_vma, bfd_vma, unsigned long));
|
||||
|
||||
int gmon_input = 0;
|
||||
int gmon_file_version = 0; /* 0 == old (non-versioned) file format. */
|
||||
|
||||
int
|
||||
DEFUN (gmon_io_read_32, (ifp, valp), FILE * ifp AND unsigned int *valp)
|
||||
gmon_io_read_32 (ifp, valp)
|
||||
FILE *ifp;
|
||||
unsigned int *valp;
|
||||
{
|
||||
char buf[4];
|
||||
|
||||
@ -48,8 +57,10 @@ DEFUN (gmon_io_read_32, (ifp, valp), FILE * ifp AND unsigned int *valp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN (gmon_io_read_64, (ifp, valp), FILE * ifp AND BFD_HOST_U_64_BIT *valp)
|
||||
static int
|
||||
gmon_io_read_64 (ifp, valp)
|
||||
FILE *ifp;
|
||||
BFD_HOST_U_64_BIT *valp;
|
||||
{
|
||||
char buf[8];
|
||||
|
||||
@ -60,7 +71,9 @@ DEFUN (gmon_io_read_64, (ifp, valp), FILE * ifp AND BFD_HOST_U_64_BIT *valp)
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN (gmon_io_read_vma, (ifp, valp), FILE * ifp AND bfd_vma *valp)
|
||||
gmon_io_read_vma (ifp, valp)
|
||||
FILE *ifp;
|
||||
bfd_vma *valp;
|
||||
{
|
||||
unsigned int val32;
|
||||
BFD_HOST_U_64_BIT val64;
|
||||
@ -88,7 +101,10 @@ DEFUN (gmon_io_read_vma, (ifp, valp), FILE * ifp AND bfd_vma *valp)
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN (gmon_io_read, (ifp, buf, n), FILE * ifp AND char *buf AND size_t n)
|
||||
gmon_io_read (ifp, buf, n)
|
||||
FILE *ifp;
|
||||
char *buf;
|
||||
size_t n;
|
||||
{
|
||||
if (fread (buf, 1, n, ifp) != n)
|
||||
return 1;
|
||||
@ -96,29 +112,35 @@ DEFUN (gmon_io_read, (ifp, buf, n), FILE * ifp AND char *buf AND size_t n)
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN (gmon_io_write_32, (ofp, val), FILE * ofp AND unsigned int val)
|
||||
gmon_io_write_32 (ofp, val)
|
||||
FILE *ofp;
|
||||
unsigned int val;
|
||||
{
|
||||
char buf[4];
|
||||
|
||||
bfd_put_32 (core_bfd, val, buf);
|
||||
bfd_put_32 (core_bfd, (bfd_vma) val, buf);
|
||||
if (fwrite (buf, 1, 4, ofp) != 4)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN (gmon_io_write_64, (ofp, val), FILE * ofp AND BFD_HOST_U_64_BIT val)
|
||||
static int
|
||||
gmon_io_write_64 (ofp, val)
|
||||
FILE *ofp;
|
||||
BFD_HOST_U_64_BIT val;
|
||||
{
|
||||
char buf[8];
|
||||
|
||||
bfd_put_64 (core_bfd, val, buf);
|
||||
bfd_put_64 (core_bfd, (bfd_vma) val, buf);
|
||||
if (fwrite (buf, 1, 8, ofp) != 8)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN (gmon_io_write_vma, (ofp, val), FILE * ofp AND bfd_vma val)
|
||||
gmon_io_write_vma (ofp, val)
|
||||
FILE *ofp;
|
||||
bfd_vma val;
|
||||
{
|
||||
|
||||
switch (bfd_arch_bits_per_address (core_bfd))
|
||||
@ -142,7 +164,9 @@ DEFUN (gmon_io_write_vma, (ofp, val), FILE * ofp AND bfd_vma val)
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN (gmon_io_write_8, (ofp, val), FILE * ofp AND unsigned char val)
|
||||
gmon_io_write_8 (ofp, val)
|
||||
FILE *ofp;
|
||||
unsigned int val;
|
||||
{
|
||||
char buf[1];
|
||||
|
||||
@ -153,15 +177,22 @@ DEFUN (gmon_io_write_8, (ofp, val), FILE * ofp AND unsigned char val)
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN (gmon_io_write, (ofp, buf, n), FILE * ofp AND char *buf AND size_t n)
|
||||
gmon_io_write (ofp, buf, n)
|
||||
FILE *ofp;
|
||||
char *buf;
|
||||
size_t n;
|
||||
{
|
||||
if (fwrite (buf, 1, n, ofp) != n)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN (gmon_read_raw_arc, (ifp, fpc, spc, cnt), FILE * ifp AND bfd_vma * fpc AND bfd_vma * spc AND unsigned long * cnt)
|
||||
static int
|
||||
gmon_read_raw_arc (ifp, fpc, spc, cnt)
|
||||
FILE *ifp;
|
||||
bfd_vma *fpc;
|
||||
bfd_vma *spc;
|
||||
unsigned long *cnt;
|
||||
{
|
||||
BFD_HOST_U_64_BIT cnt64;
|
||||
unsigned int cnt32;
|
||||
@ -192,8 +223,12 @@ DEFUN (gmon_read_raw_arc, (ifp, fpc, spc, cnt), FILE * ifp AND bfd_vma * fpc AND
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN (gmon_write_raw_arc, (ofp, fpc, spc, cnt), FILE * ofp AND bfd_vma fpc AND bfd_vma spc AND unsigned long cnt)
|
||||
static int
|
||||
gmon_write_raw_arc (ofp, fpc, spc, cnt)
|
||||
FILE *ofp;
|
||||
bfd_vma fpc;
|
||||
bfd_vma spc;
|
||||
unsigned long cnt;
|
||||
{
|
||||
|
||||
if (gmon_io_write_vma (ofp, fpc)
|
||||
@ -221,7 +256,8 @@ DEFUN (gmon_write_raw_arc, (ofp, fpc, spc, cnt), FILE * ofp AND bfd_vma fpc AND
|
||||
}
|
||||
|
||||
void
|
||||
DEFUN (gmon_out_read, (filename), const char *filename)
|
||||
gmon_out_read (filename)
|
||||
const char *filename;
|
||||
{
|
||||
FILE *ifp;
|
||||
struct gmon_hdr ghdr;
|
||||
@ -538,7 +574,8 @@ DEFUN (gmon_out_read, (filename), const char *filename)
|
||||
|
||||
|
||||
void
|
||||
DEFUN (gmon_out_write, (filename), const char *filename)
|
||||
gmon_out_write (filename)
|
||||
const char *filename;
|
||||
{
|
||||
FILE *ofp;
|
||||
struct gmon_hdr ghdr;
|
||||
@ -555,7 +592,7 @@ DEFUN (gmon_out_write, (filename), const char *filename)
|
||||
/* Write gmon header. */
|
||||
|
||||
memcpy (&ghdr.cookie[0], GMON_MAGIC, 4);
|
||||
bfd_put_32 (core_bfd, GMON_VERSION, (bfd_byte *) ghdr.version);
|
||||
bfd_put_32 (core_bfd, (bfd_vma) GMON_VERSION, (bfd_byte *) ghdr.version);
|
||||
|
||||
if (fwrite (&ghdr, sizeof (ghdr), 1, ofp) != 1)
|
||||
{
|
||||
@ -652,7 +689,7 @@ DEFUN (gmon_out_write, (filename), const char *filename)
|
||||
|| hz != hertz())
|
||||
{
|
||||
if (gmon_io_write_32 (ofp, GMONVERSION)
|
||||
|| gmon_io_write_32 (ofp, hz))
|
||||
|| gmon_io_write_32 (ofp, (unsigned int) hz))
|
||||
{
|
||||
perror (filename);
|
||||
done (1);
|
||||
@ -671,7 +708,8 @@ DEFUN (gmon_out_write, (filename), const char *filename)
|
||||
/* Dump the samples. */
|
||||
for (i = 0; i < hist_num_bins; ++i)
|
||||
{
|
||||
bfd_put_16 (core_bfd, hist_sample[i], (bfd_byte *) & raw_bin_count[0]);
|
||||
bfd_put_16 (core_bfd, (bfd_vma) hist_sample[i],
|
||||
(bfd_byte *) &raw_bin_count[0]);
|
||||
if (fwrite (&raw_bin_count[0], sizeof (raw_bin_count), 1, ofp) != 1)
|
||||
{
|
||||
perror (filename);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* gmon_io.h
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -51,7 +51,7 @@ extern int gmon_io_read_32 PARAMS ((FILE *ifp, unsigned int *valp));
|
||||
extern int gmon_io_read PARAMS ((FILE *ifp, char *buf, size_t n));
|
||||
extern int gmon_io_write_vma PARAMS ((FILE *ifp, bfd_vma val));
|
||||
extern int gmon_io_write_32 PARAMS ((FILE *ifp, unsigned int val));
|
||||
extern int gmon_io_write_8 PARAMS ((FILE *ifp, unsigned char val));
|
||||
extern int gmon_io_write_8 PARAMS ((FILE *ifp, unsigned int val));
|
||||
extern int gmon_io_write PARAMS ((FILE *ifp, char *buf, size_t n));
|
||||
|
||||
extern void gmon_out_read PARAMS ((const char *));
|
||||
|
@ -33,6 +33,9 @@
|
||||
#include "sym_ids.h"
|
||||
#include "demangle.h"
|
||||
|
||||
static void usage PARAMS ((FILE *, int)) ATTRIBUTE_NORETURN;
|
||||
int main PARAMS ((int, char **));
|
||||
|
||||
const char *whoami;
|
||||
const char *function_mapping_file;
|
||||
const char *a_out_name = A_OUTNAME;
|
||||
@ -142,7 +145,9 @@ static struct option long_options[] =
|
||||
|
||||
|
||||
static void
|
||||
DEFUN (usage, (stream, status), FILE * stream AND int status)
|
||||
usage (stream, status)
|
||||
FILE *stream;
|
||||
int status;
|
||||
{
|
||||
fprintf (stream, _("\
|
||||
Usage: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n\
|
||||
@ -166,7 +171,9 @@ Usage: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n\
|
||||
|
||||
|
||||
int
|
||||
DEFUN (main, (argc, argv), int argc AND char **argv)
|
||||
main (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
char **sp, *str;
|
||||
Sym **cg = 0;
|
||||
|
@ -126,6 +126,6 @@ extern File_Format file_format; /* requested file format */
|
||||
|
||||
extern boolean first_output; /* no output so far? */
|
||||
|
||||
extern void done PARAMS ((int status));
|
||||
extern void done PARAMS ((int status)) ATTRIBUTE_NORETURN;
|
||||
|
||||
#endif /* gprof_h */
|
||||
|
30
gprof/hist.c
30
gprof/hist.c
@ -1,6 +1,6 @@
|
||||
/* hist.c - Histogram related operations.
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -34,6 +34,9 @@
|
||||
#define UNITS_TO_CODE (offset_to_code / sizeof(UNIT))
|
||||
|
||||
static void scale_and_align_entries PARAMS ((void));
|
||||
static void print_header PARAMS ((int));
|
||||
static void print_line PARAMS ((Sym *, double));
|
||||
static int cmp_time PARAMS ((const PTR, const PTR));
|
||||
|
||||
/* Declarations of automatically generated functions to output blurbs. */
|
||||
extern void flat_blurb PARAMS ((FILE * fp));
|
||||
@ -77,7 +80,9 @@ SItab[] =
|
||||
is provided for formatting error messages only. */
|
||||
|
||||
void
|
||||
DEFUN (hist_read_rec, (ifp, filename), FILE * ifp AND const char *filename)
|
||||
hist_read_rec (ifp, filename)
|
||||
FILE * ifp;
|
||||
const char *filename;
|
||||
{
|
||||
bfd_vma n_lowpc, n_highpc;
|
||||
int i, ncnt, profrate;
|
||||
@ -152,7 +157,9 @@ DEFUN (hist_read_rec, (ifp, filename), FILE * ifp AND const char *filename)
|
||||
of OFP and is provided for formatting error-messages only. */
|
||||
|
||||
void
|
||||
DEFUN (hist_write_hist, (ofp, filename), FILE * ofp AND const char *filename)
|
||||
hist_write_hist (ofp, filename)
|
||||
FILE * ofp;
|
||||
const char *filename;
|
||||
{
|
||||
UNIT count;
|
||||
int i;
|
||||
@ -173,7 +180,7 @@ DEFUN (hist_write_hist, (ofp, filename), FILE * ofp AND const char *filename)
|
||||
|
||||
for (i = 0; i < hist_num_bins; ++i)
|
||||
{
|
||||
bfd_put_16 (core_bfd, hist_sample[i], (bfd_byte *) & count[0]);
|
||||
bfd_put_16 (core_bfd, (bfd_vma) hist_sample[i], (bfd_byte *) &count[0]);
|
||||
|
||||
if (fwrite (&count[0], sizeof (count), 1, ofp) != 1)
|
||||
{
|
||||
@ -255,7 +262,7 @@ scale_and_align_entries ()
|
||||
cases, above). */
|
||||
|
||||
void
|
||||
DEFUN_VOID (hist_assign_samples)
|
||||
hist_assign_samples ()
|
||||
{
|
||||
bfd_vma bin_low_pc, bin_high_pc;
|
||||
bfd_vma sym_low_pc, sym_high_pc;
|
||||
@ -344,7 +351,8 @@ DEFUN_VOID (hist_assign_samples)
|
||||
/* Print header for flag histogram profile. */
|
||||
|
||||
static void
|
||||
DEFUN (print_header, (prefix), const char prefix)
|
||||
print_header (prefix)
|
||||
int prefix;
|
||||
{
|
||||
char unit[64];
|
||||
|
||||
@ -383,7 +391,9 @@ DEFUN (print_header, (prefix), const char prefix)
|
||||
|
||||
|
||||
static void
|
||||
DEFUN (print_line, (sym, scale), Sym * sym AND double scale)
|
||||
print_line (sym, scale)
|
||||
Sym *sym;
|
||||
double scale;
|
||||
{
|
||||
if (ignore_zeros && sym->ncalls == 0 && sym->hist.time == 0)
|
||||
return;
|
||||
@ -420,7 +430,9 @@ DEFUN (print_line, (sym, scale), Sym * sym AND double scale)
|
||||
lexicographic order of the function names. */
|
||||
|
||||
static int
|
||||
DEFUN (cmp_time, (lp, rp), const PTR lp AND const PTR rp)
|
||||
cmp_time (lp, rp)
|
||||
const PTR lp;
|
||||
const PTR rp;
|
||||
{
|
||||
const Sym *left = *(const Sym **) lp;
|
||||
const Sym *right = *(const Sym **) rp;
|
||||
@ -447,7 +459,7 @@ DEFUN (cmp_time, (lp, rp), const PTR lp AND const PTR rp)
|
||||
/* Print the flat histogram profile. */
|
||||
|
||||
void
|
||||
DEFUN_VOID (hist_print)
|
||||
hist_print ()
|
||||
{
|
||||
Sym **time_sorted_syms, *top_dog, *sym;
|
||||
unsigned int index;
|
||||
|
@ -74,7 +74,7 @@ mips_find_call (parent, p_lowpc, p_highpc)
|
||||
DBG (CALLDEBUG,
|
||||
printf (_("[find_call] 0x%lx: jal"), (unsigned long) pc));
|
||||
offset = (op & 0x03ffffff) << 2;
|
||||
dest_pc = (pc & ~0xfffffff) | offset;
|
||||
dest_pc = (pc & ~(bfd_vma) 0xfffffff) | offset;
|
||||
if (dest_pc >= s_lowpc && dest_pc <= s_highpc)
|
||||
{
|
||||
child = sym_lookup (&symtab, dest_pc);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* search-list.c
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -25,12 +25,13 @@
|
||||
|
||||
|
||||
void
|
||||
DEFUN (search_list_append, (list, paths),
|
||||
Search_List * list AND const char *paths)
|
||||
search_list_append (list, paths)
|
||||
Search_List *list;
|
||||
const char *paths;
|
||||
{
|
||||
Search_List_Elem *new_el;
|
||||
const char *beg, *colon;
|
||||
int len;
|
||||
unsigned int len;
|
||||
|
||||
colon = paths - 1;
|
||||
do
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* source.c - Keep track of source files.
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -35,7 +35,8 @@ Source_File *first_src_file = 0;
|
||||
|
||||
|
||||
Source_File *
|
||||
DEFUN (source_file_lookup_path, (path), const char *path)
|
||||
source_file_lookup_path (path)
|
||||
const char *path;
|
||||
{
|
||||
Source_File *sf;
|
||||
|
||||
@ -62,7 +63,8 @@ DEFUN (source_file_lookup_path, (path), const char *path)
|
||||
|
||||
|
||||
Source_File *
|
||||
DEFUN (source_file_lookup_name, (filename), const char *filename)
|
||||
source_file_lookup_name (filename)
|
||||
const char *filename;
|
||||
{
|
||||
const char *fname;
|
||||
Source_File *sf;
|
||||
@ -89,10 +91,11 @@ DEFUN (source_file_lookup_name, (filename), const char *filename)
|
||||
|
||||
|
||||
FILE *
|
||||
DEFUN (annotate_source, (sf, max_width, annote, arg),
|
||||
Source_File * sf AND int max_width
|
||||
AND void (*annote) PARAMS ((char *buf, int w, int l, void *arg))
|
||||
AND void *arg)
|
||||
annotate_source (sf, max_width, annote, arg)
|
||||
Source_File *sf;
|
||||
unsigned int max_width;
|
||||
void (*annote) PARAMS ((char *, unsigned int, int, void *));
|
||||
void *arg;
|
||||
{
|
||||
static boolean first_file = true;
|
||||
int i, line_num, nread;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* source.h
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -53,8 +53,8 @@ extern Source_File *source_file_lookup_name PARAMS ((const char *));
|
||||
Returns a pointer to the output file (which maybe stdout) such
|
||||
that summary statistics can be printed. If the returned file
|
||||
is not stdout, it should be closed when done with it. */
|
||||
extern FILE *annotate_source PARAMS ((Source_File * sf, int max_width,
|
||||
void (*annote) (char *b, int w, int l,
|
||||
void *arg),
|
||||
void *arg));
|
||||
extern FILE *annotate_source
|
||||
PARAMS ((Source_File *sf, unsigned int max_width,
|
||||
void (*annote) (char *, unsigned int, int, PTR arg),
|
||||
PTR arg));
|
||||
#endif /* source_h */
|
||||
|
@ -38,7 +38,7 @@ sparc_find_call (parent, p_lowpc, p_highpc)
|
||||
bfd_vma p_highpc;
|
||||
{
|
||||
bfd_vma pc, dest_pc;
|
||||
unsigned long insn;
|
||||
unsigned int insn;
|
||||
Sym *child;
|
||||
|
||||
if (core_text_space == 0)
|
||||
@ -56,7 +56,7 @@ sparc_find_call (parent, p_lowpc, p_highpc)
|
||||
DBG (CALLDEBUG, printf ("[find_call] %s: 0x%lx to 0x%lx\n",
|
||||
parent->name, (unsigned long) p_lowpc,
|
||||
(unsigned long) p_highpc));
|
||||
for (pc = (p_lowpc + 3) & ~3; pc < p_highpc; pc += 4)
|
||||
for (pc = (p_lowpc + 3) & ~(bfd_vma) 3; pc < p_highpc; pc += 4)
|
||||
{
|
||||
insn = bfd_get_32 (core_bfd, ((unsigned char *) core_text_space
|
||||
+ pc - core_text_sect->vma));
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* sym_ids.c
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -46,6 +46,12 @@ struct sym_id
|
||||
}
|
||||
*id_list;
|
||||
|
||||
static void parse_spec PARAMS ((char *, Sym *));
|
||||
static void parse_id PARAMS ((struct sym_id *));
|
||||
static boolean match PARAMS ((Sym *, Sym *));
|
||||
static void extend_match PARAMS ((struct match *, Sym *, Sym_Table *, boolean));
|
||||
|
||||
|
||||
Sym_Table syms[NUM_TABLES];
|
||||
|
||||
#ifdef DEBUG
|
||||
@ -74,8 +80,9 @@ static Source_File non_existent_file =
|
||||
|
||||
|
||||
void
|
||||
DEFUN (sym_id_add, (spec, which_table),
|
||||
const char *spec AND Table_Id which_table)
|
||||
sym_id_add (spec, which_table)
|
||||
const char *spec;
|
||||
Table_Id which_table;
|
||||
{
|
||||
struct sym_id *id;
|
||||
int len = strlen (spec);
|
||||
@ -103,7 +110,9 @@ DEFUN (sym_id_add, (spec, which_table),
|
||||
FILENAME not containing a dot can be specified by FILENAME. */
|
||||
|
||||
static void
|
||||
DEFUN (parse_spec, (spec, sym), char *spec AND Sym * sym)
|
||||
parse_spec (spec, sym)
|
||||
char *spec;
|
||||
Sym *sym;
|
||||
{
|
||||
char *colon;
|
||||
|
||||
@ -158,7 +167,8 @@ DEFUN (parse_spec, (spec, sym), char *spec AND Sym * sym)
|
||||
by parse_spec(). */
|
||||
|
||||
static void
|
||||
DEFUN (parse_id, (id), struct sym_id *id)
|
||||
parse_id (id)
|
||||
struct sym_id *id;
|
||||
{
|
||||
char *slash;
|
||||
|
||||
@ -207,7 +217,9 @@ DEFUN (parse_id, (id), struct sym_id *id)
|
||||
/* Return TRUE iff PATTERN matches SYM. */
|
||||
|
||||
static boolean
|
||||
DEFUN (match, (pattern, sym), Sym * pattern AND Sym * sym)
|
||||
match (pattern, sym)
|
||||
Sym *pattern;
|
||||
Sym *sym;
|
||||
{
|
||||
return (pattern->file ? pattern->file == sym->file : true)
|
||||
&& (pattern->line_num ? pattern->line_num == sym->line_num : true)
|
||||
@ -219,8 +231,11 @@ DEFUN (match, (pattern, sym), Sym * pattern AND Sym * sym)
|
||||
|
||||
|
||||
static void
|
||||
DEFUN (extend_match, (m, sym, tab, second_pass),
|
||||
struct match *m AND Sym * sym AND Sym_Table * tab AND boolean second_pass)
|
||||
extend_match (m, sym, tab, second_pass)
|
||||
struct match *m;
|
||||
Sym *sym;
|
||||
Sym_Table *tab;
|
||||
boolean second_pass;
|
||||
{
|
||||
if (m->prev_match != sym - 1)
|
||||
{
|
||||
@ -255,7 +270,7 @@ DEFUN (extend_match, (m, sym, tab, second_pass),
|
||||
requests---you get what you ask for! */
|
||||
|
||||
void
|
||||
DEFUN_VOID (sym_id_parse)
|
||||
sym_id_parse ()
|
||||
{
|
||||
Sym *sym, *left, *right;
|
||||
struct sym_id *id;
|
||||
@ -354,12 +369,14 @@ DEFUN_VOID (sym_id_parse)
|
||||
very big (the user has to type them!), so a linear search is probably
|
||||
tolerable. */
|
||||
boolean
|
||||
DEFUN (sym_id_arc_is_present, (symtab, from, to),
|
||||
Sym_Table * symtab AND Sym * from AND Sym * to)
|
||||
sym_id_arc_is_present (sym_tab, from, to)
|
||||
Sym_Table *sym_tab;
|
||||
Sym *from;
|
||||
Sym *to;
|
||||
{
|
||||
Sym *sym;
|
||||
|
||||
for (sym = symtab->base; sym < symtab->limit; ++sym)
|
||||
for (sym = sym_tab->base; sym < sym_tab->limit; ++sym)
|
||||
{
|
||||
if (from->addr >= sym->addr && from->addr <= sym->end_addr
|
||||
&& arc_lookup (sym, to))
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* sym_ids.h
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* symtab.c
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -26,13 +26,16 @@
|
||||
#include "cg_arcs.h"
|
||||
#include "corefile.h"
|
||||
|
||||
static int cmp_addr PARAMS ((const PTR, const PTR));
|
||||
|
||||
Sym_Table symtab;
|
||||
|
||||
|
||||
/* Initialize a symbol (so it's empty). */
|
||||
|
||||
void
|
||||
DEFUN (sym_init, (sym), Sym * sym)
|
||||
sym_init (sym)
|
||||
Sym *sym;
|
||||
{
|
||||
memset (sym, 0, sizeof (*sym));
|
||||
|
||||
@ -56,10 +59,12 @@ DEFUN (sym_init, (sym), Sym * sym)
|
||||
the global symbol survives. */
|
||||
|
||||
static int
|
||||
DEFUN (cmp_addr, (lp, rp), const PTR lp AND const PTR rp)
|
||||
cmp_addr (lp, rp)
|
||||
const PTR lp;
|
||||
const PTR rp;
|
||||
{
|
||||
Sym *left = (Sym *) lp;
|
||||
Sym *right = (Sym *) rp;
|
||||
const Sym *left = (const Sym *) lp;
|
||||
const Sym *right = (const Sym *) rp;
|
||||
|
||||
if (left->addr > right->addr)
|
||||
return 1;
|
||||
@ -74,7 +79,8 @@ DEFUN (cmp_addr, (lp, rp), const PTR lp AND const PTR rp)
|
||||
|
||||
|
||||
void
|
||||
DEFUN (symtab_finalize, (tab), Sym_Table * tab)
|
||||
symtab_finalize (tab)
|
||||
Sym_Table *tab;
|
||||
{
|
||||
Sym *src, *dst;
|
||||
bfd_vma prev_addr;
|
||||
@ -171,7 +177,9 @@ DEFUN (symtab_finalize, (tab), Sym_Table * tab)
|
||||
#ifdef DEBUG
|
||||
|
||||
Sym *
|
||||
DEFUN (dbg_sym_lookup, (symtab, address), Sym_Table * symtab AND bfd_vma address)
|
||||
dbg_sym_lookup (sym_tab, address)
|
||||
Sym_Table *sym_tab;
|
||||
bfd_vma address;
|
||||
{
|
||||
long low, mid, high;
|
||||
Sym *sym;
|
||||
@ -179,8 +187,8 @@ DEFUN (dbg_sym_lookup, (symtab, address), Sym_Table * symtab AND bfd_vma address
|
||||
fprintf (stderr, "[dbg_sym_lookup] address 0x%lx\n",
|
||||
(unsigned long) address);
|
||||
|
||||
sym = symtab->base;
|
||||
for (low = 0, high = symtab->len - 1; low != high;)
|
||||
sym = sym_tab->base;
|
||||
for (low = 0, high = sym_tab->len - 1; low != high;)
|
||||
{
|
||||
mid = (high + low) >> 1;
|
||||
|
||||
@ -210,7 +218,9 @@ DEFUN (dbg_sym_lookup, (symtab, address), Sym_Table * symtab AND bfd_vma address
|
||||
/* Look up an address in the symbol-table that is sorted by address.
|
||||
If address does not hit any symbol, 0 is returned. */
|
||||
Sym *
|
||||
DEFUN (sym_lookup, (symtab, address), Sym_Table * symtab AND bfd_vma address)
|
||||
sym_lookup (sym_tab, address)
|
||||
Sym_Table *sym_tab;
|
||||
bfd_vma address;
|
||||
{
|
||||
long low, high;
|
||||
long mid = -1;
|
||||
@ -219,11 +229,11 @@ DEFUN (sym_lookup, (symtab, address), Sym_Table * symtab AND bfd_vma address)
|
||||
int probes = 0;
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (!symtab->len)
|
||||
if (!sym_tab->len)
|
||||
return 0;
|
||||
|
||||
sym = symtab->base;
|
||||
for (low = 0, high = symtab->len - 1; low != high;)
|
||||
sym = sym_tab->base;
|
||||
for (low = 0, high = sym_tab->len - 1; low != high;)
|
||||
{
|
||||
DBG (LOOKUPDEBUG, ++probes);
|
||||
mid = (high + low) / 2;
|
||||
@ -240,7 +250,7 @@ DEFUN (sym_lookup, (symtab, address), Sym_Table * symtab AND bfd_vma address)
|
||||
{
|
||||
DBG (LOOKUPDEBUG,
|
||||
printf ("[sym_lookup] %d probes (symtab->len=%u)\n",
|
||||
probes, symtab->len - 1));
|
||||
probes, sym_tab->len - 1));
|
||||
return &sym[mid];
|
||||
}
|
||||
}
|
||||
@ -261,7 +271,7 @@ DEFUN (sym_lookup, (symtab, address), Sym_Table * symtab AND bfd_vma address)
|
||||
else
|
||||
{
|
||||
DBG (LOOKUPDEBUG, printf ("[sym_lookup] %d (%u) probes, fall off\n",
|
||||
probes, symtab->len - 1));
|
||||
probes, sym_tab->len - 1));
|
||||
return &sym[mid + 1];
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* symtab.h
|
||||
|
||||
Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
@ -113,6 +113,9 @@ extern Sym_Table symtab; /* The symbol table. */
|
||||
|
||||
extern void sym_init PARAMS ((Sym *));
|
||||
extern void symtab_finalize PARAMS ((Sym_Table *));
|
||||
#ifdef DEBUG
|
||||
extern Sym *dbg_sym_lookup PARAMS ((Sym_Table *, bfd_vma));
|
||||
#endif
|
||||
extern Sym *sym_lookup PARAMS ((Sym_Table *, bfd_vma));
|
||||
extern void find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
|
||||
|
||||
|
@ -22,13 +22,15 @@
|
||||
#include "source.h"
|
||||
#include "symtab.h"
|
||||
#include "cg_arcs.h"
|
||||
#include "utils.h"
|
||||
|
||||
|
||||
/*
|
||||
* Print name of symbol. Return number of characters printed.
|
||||
*/
|
||||
int
|
||||
DEFUN (print_name_only, (self), Sym * self)
|
||||
print_name_only (self)
|
||||
Sym *self;
|
||||
{
|
||||
const char *name = self->name;
|
||||
const char *filename;
|
||||
@ -87,7 +89,8 @@ DEFUN (print_name_only, (self), Sym * self)
|
||||
|
||||
|
||||
void
|
||||
DEFUN (print_name, (self), Sym * self)
|
||||
print_name (self)
|
||||
Sym *self;
|
||||
{
|
||||
print_name_only (self);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user