diff options
author | Ian Lance Taylor <ian@airs.com> | 1998-02-03 19:52:41 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1998-02-03 19:52:41 +0000 |
commit | c3de2a19e8e6b333525efb65de2e83791c73a378 (patch) | |
tree | 2c0cdd285d1d194c9223323e775aad85f83324a0 /gprof/vax.c | |
parent | 37379a256bf9e85add0024d7e13f43aa0eba4282 (diff) | |
download | gdb-c3de2a19e8e6b333525efb65de2e83791c73a378.zip gdb-c3de2a19e8e6b333525efb65de2e83791c73a378.tar.gz gdb-c3de2a19e8e6b333525efb65de2e83791c73a378.tar.bz2 |
Tue Feb 3 14:25:25 1998 Brent Baccala <baccala@freesoft.org>
Make it possible to build a cross gprof, although a few cases are
still not handled:
* configure.in: Don't set MY_TARGET.
* gprof.h: Don't include MACHINE_H. Don't define FOPEN_RB or
FOPEN_WB; just get them from sysdep.h.
* core.h (min_insn_size, offset_to_code): Declare.
* core.c (MIN_INSN_SIZE): Don't define.
(min_insn_size, offset_to_code): New variables.
(core_init): Initialize min_insn_size and offset_to_code.
(find_call): New function.
(core_create_line_syms): Don't use min_dist. Set is_static in
pass 2.
* hist.c (UNITS_TO_CODE): Define.
* gprof.c (default_excluded_list): Add "__mcount_internal".
* gmon.h: Change TARGET_alpha to __alpha__.
* hertz.h: Ifdef MACH, define hertz as HZ.
* alpha.c (alpha_Instruction): Rename from Instruction. Change
all references.
(alpha_find_call): Rename from find_call.
* alpha.h: Remove.
* dummy.c, dummy.h: Remove.
* i386.c (i386_iscall): Rename from iscall. Change all
references. Check for call instruction, not jump or lcall.
(i386_find_call): Rename from find_call. Correct for VMA.
Correct call destination computation. Don't dereference symbol if
it is NULL.
* i386.h: Remove.
* ns532.c, ns532.h: Remove.
* sparc.c (CALL): Define.
(sparc_find_call): Rename from find_call.
* sparc.h: Remove.
* tahoe.c: Include cg_arcs.h, core.h, hist.h, and symtab.h. Don't
include time_host.h.
(CALLF, PC): Define.
(enum tahoe_opermodes, tahoe_operandenum): Define. Rename all
references to opermodes or operandenum to these.
(tahoe_operandmode): Rename from operandmode. Call abort if
switch does not return.
(tahoe_operandname): Rename from operandname. Call abort if
switch does not return.
(tahoe_operandlength): Rename from operandlength. Call abort if
switch does not return.
(tahoe_reladdr): Rename from reladdr.
(tahoe_find_call): Rename from find_call. Use core_text_space
rather than textspace.
* tahoe.h: Remove.
* vax.c (CALLS, PC): Define.
(enum opermodes, operandenum, struct modebyte): Define.
(vax_operandmode): Rename from operandmode. Call abort if switch
does not return.
(vax_operandname): Rename from operandname. Call abort if switch
does not return.
(vax_operandlength): Rename from operandlength. Call abort if
switch does not return.
(vax_reladdr): Rename from reladdr.
(vax_find_call): Rename from find_call.
* vax.h: Remove.
* Makefile.am (AUTOMAKE_OPTIONS): Set to cygnus.
(MY_TARGET): Remove.
(INCLUDES): Remove -DTARGET_$(MY_TARGET) and -DMACHINE_H=
\"$(MY_TARGET).h\".
(gprof_SOURCES): Add i386.c, alpha.c, vax.c, tahoe.c, sparc.c.
(gprof_DEPENDENCIES): Remove $(MY_TARGET).o.
(gprof_LDADD): Likewise.
(noinst_HEADERS): Remove alpha.h, i386.h, ns532.h, sparc.h,
tahoe.h, vax.h, dummy.h.
(EXTRA_DIST): Remove alpha.c, i386.c, ns532.c, sparc.c, tahoe.c,
vax.c, dummy.c.
($(OBJECTS)): Don't depend upon $(MY_TARGET).h.
($(MY_TARGET).o): Remove target.
(i386.o, alpha.o, vax.o, tahoe.o, sparc.o): New targets.
* configure, Makefile.in, aclocal.m4: Rebuild.
Diffstat (limited to 'gprof/vax.c')
-rw-r--r-- | gprof/vax.c | 62 |
1 files changed, 45 insertions, 17 deletions
diff --git a/gprof/vax.c b/gprof/vax.c index 6a1034c..020409c 100644 --- a/gprof/vax.c +++ b/gprof/vax.c @@ -22,6 +22,31 @@ #include "hist.h" #include "symtab.h" + /* + * opcode of the `calls' instruction + */ +#define CALLS 0xfb + + /* + * register for pc relative addressing + */ +#define PC 0xf + +enum opermodes + { + literal, indexed, reg, regdef, autodec, autoinc, autoincdef, + bytedisp, bytedispdef, worddisp, worddispdef, longdisp, longdispdef, + immediate, absolute, byterel, bytereldef, wordrel, wordreldef, + longrel, longreldef + }; +typedef enum opermodes operandenum; + +struct modebyte + { + unsigned int regfield:4; + unsigned int modefield:4; + }; + /* * A symbol to be the child of indirect calls: */ @@ -29,7 +54,7 @@ Sym indirectchild; static operandenum -operandmode (modep) +vax_operandmode (modep) struct modebyte *modep; { long usesreg = modep->regfield; @@ -67,10 +92,11 @@ operandmode (modep) return usesreg != PC ? longdispdef : longreldef; } /* NOTREACHED */ + abort (); } static char * -operandname (mode) +vax_operandname (mode) operandenum mode; { @@ -120,14 +146,15 @@ operandname (mode) return "long relative deferred"; } /* NOTREACHED */ + abort (); } static long -operandlength (modep) +vax_operandlength (modep) struct modebyte *modep; { - switch (operandmode (modep)) + switch (vax_operandmode (modep)) { case literal: case reg: @@ -154,16 +181,17 @@ operandlength (modep) case longreldef: return 5; case indexed: - return 1 + operandlength ((struct modebyte *) ((char *) modep) + 1); + return 1 + vax_operandlength ((struct modebyte *) ((char *) modep) + 1); } /* NOTREACHED */ + abort (); } static bfd_vma -reladdr (modep) +vax_reladdr (modep) struct modebyte *modep; { - operandenum mode = operandmode (modep); + operandenum mode = vax_operandmode (modep); char *cp; short *sp; long *lp; @@ -188,7 +216,7 @@ reladdr (modep) void -find_call (parent, p_lowpc, p_highpc) +vax_find_call (parent, p_lowpc, p_highpc) Sym *parent; bfd_vma p_lowpc; bfd_vma p_highpc; @@ -237,7 +265,7 @@ find_call (parent, p_lowpc, p_highpc) DBG (CALLDEBUG, printf ("[findcall]\t0x%x:calls", instructp - (unsigned char *) core_text_space)); - firstmode = operandmode ((struct modebyte *) (instructp + length)); + firstmode = vax_operandmode ((struct modebyte *) (instructp + length)); switch (firstmode) { case literal: @@ -246,11 +274,11 @@ find_call (parent, p_lowpc, p_highpc) default: goto botched; } - length += operandlength ((struct modebyte *) (instructp + length)); - mode = operandmode ((struct modebyte *) (instructp + length)); + length += vax_operandlength ((struct modebyte *) (instructp + length)); + mode = vax_operandmode ((struct modebyte *) (instructp + length)); DBG (CALLDEBUG, - printf ("\tfirst operand is %s", operandname (firstmode)); - printf ("\tsecond operand is %s\n", operandname (mode))); + printf ("\tfirst operand is %s", vax_operandname (firstmode)); + printf ("\tsecond operand is %s\n", vax_operandname (mode))); switch (mode) { case regdef: @@ -269,7 +297,7 @@ find_call (parent, p_lowpc, p_highpc) * e.g. arrays of pointers to functions???] */ arc_add (parent, &indirectchild, (long) 0); - length += operandlength ( + length += vax_operandlength ( (struct modebyte *) (instructp + length)); continue; case byterel: @@ -280,7 +308,7 @@ find_call (parent, p_lowpc, p_highpc) * check that this is the address of * a function. */ - destpc = reladdr ((struct modebyte *) (instructp + length)) + destpc = vax_reladdr ((struct modebyte *) (instructp + length)) - (bfd_vma) core_text_space; if (destpc >= s_lowpc && destpc <= s_highpc) { @@ -296,8 +324,8 @@ find_call (parent, p_lowpc, p_highpc) * a hit */ arc_add (parent, child, (long) 0); - length += operandlength ((struct modebyte *) - (instructp + length)); + length += vax_operandlength ((struct modebyte *) + (instructp + length)); continue; } goto botched; |