import gdb-2000-02-02 snapshot
[external/binutils.git] / gprof / vax.c
index 9d7fa83..33fdf43 100644 (file)
  */
 #include "gprof.h"
 #include "cg_arcs.h"
-#include "core.h"
+#include "corefile.h"
 #include "hist.h"
 #include "symtab.h"
-#include "vax.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:
@@ -30,7 +54,7 @@ Sym indirectchild;
 
 
 static operandenum
-operandmode (modep)
+vax_operandmode (modep)
      struct modebyte *modep;
 {
   long usesreg = modep->regfield;
@@ -68,10 +92,11 @@ operandmode (modep)
       return usesreg != PC ? longdispdef : longreldef;
     }
   /* NOTREACHED */
+  abort ();
 }
 
 static char *
-operandname (mode)
+vax_operandname (mode)
      operandenum mode;
 {
 
@@ -121,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:
@@ -155,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;
@@ -189,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;
@@ -223,7 +250,8 @@ find_call (parent, p_lowpc, p_highpc)
       p_highpc = s_highpc;
     }
   DBG (CALLDEBUG, printf ("[findcall] %s: 0x%lx to 0x%lx\n",
-                         parent->name, p_lowpc, p_highpc));
+                         parent->name, (unsigned long) p_lowpc,
+                         (unsigned long) p_highpc));
   for (instructp = (unsigned char *) core_text_space + p_lowpc;
        instructp < (unsigned char *) core_text_space + p_highpc;
        instructp += length)
@@ -238,7 +266,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:
@@ -247,11 +275,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,8 +297,8 @@ find_call (parent, p_lowpc, p_highpc)
               *      [are there others that we miss?,
               *       e.g. arrays of pointers to functions???]
               */
-             arc_add (parent, &indirectchild, (long) 0);
-             length += operandlength (
+             arc_add (parent, &indirectchild, (unsigned long) 0);
+             length += vax_operandlength (
                                  (struct modebyte *) (instructp + length));
              continue;
            case byterel:
@@ -281,24 +309,26 @@ 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)
                {
                  child = sym_lookup (&symtab, destpc);
                  DBG (CALLDEBUG,
-                      printf ("[findcall]\tdestpc 0x%lx", destpc);
+                      printf ("[findcall]\tdestpc 0x%lx",
+                              (unsigned long) destpc);
                       printf (" child->name %s", child->name);
-                      printf (" child->addr 0x%lx\n", child->addr);
+                      printf (" child->addr 0x%lx\n",
+                              (unsigned long) child->addr);
                    );
                  if (child->addr == destpc)
                    {
                      /*
                       *    a hit
                       */
-                     arc_add (parent, child, (long) 0);
-                     length += operandlength ((struct modebyte *)
-                                              (instructp + length));
+                     arc_add (parent, child, (unsigned long) 0);
+                     length += vax_operandlength ((struct modebyte *)
+                                                  (instructp + length));
                      continue;
                    }
                  goto botched;