"I am a person who works hard and plays hard."

Yuan Wei
Second Year Graduate Student Department of Computer Science
University of Virginia Charlottesville, VA 22903
Email: yw3f@cs.virginia.edu


Source Code Analysis

Main Page   Compound List   File List   Compound Members   File Members  

dlite.h File Reference

#include <stdio.h>
#include "host.h"
#include "misc.h"
#include "machine.h"
#include "regs.h"
#include "memory.h"
#include "eval.h"

Include dependency graph for dlite.h:

Include dependency graph

This graph shows which files directly or indirectly include this file:

Included by dependency graph

Go to the source code of this file.

Defines

Typedefs

Functions

Variables


Define Documentation

#define ACCESS_EXEC   0x04
 

Definition at line 197 of file dlite.h.

Referenced by __check_break(), bp_class_str(), dlite_break(), dlite_exec(), and dlite_rbreak().

#define ACCESS_READ   0x01
 

Definition at line 195 of file dlite.h.

Referenced by __check_break(), bp_class_str(), dlite_dbreak(), dlite_exec(), dlite_main(), dlite_rbreak(), ruu_dispatch(), and sim_main().

#define ACCESS_WRITE   0x02
 

Definition at line 196 of file dlite.h.

Referenced by __check_break(), bp_class_str(), dlite_dbreak(), dlite_exec(), dlite_main(), dlite_rbreak(), ruu_dispatch(), and sim_main().

#define dlite_check_break NPC,
ACCESS,
ADDR,
ICNT,
CYCLE   
 

Value:

((dlite_check || dlite_active)                                  \
   ? __check_break((NPC), (ACCESS), (ADDR), (ICNT), (CYCLE))            \
   : FALSE)

Definition at line 217 of file dlite.h.

Referenced by ruu_dispatch(), and sim_main().


Typedef Documentation

typedef char*(* dlite_mem_obj_t)(struct mem_t *mem, int is_write, md_addr_t addr, char *p, int nbytes)
 

Definition at line 155 of file dlite.h.

Referenced by dlite_init().

typedef char*(* dlite_mstate_obj_t)(FILE *stream, char *cmd, struct regs_t *regs, struct mem_t *mem)
 

Definition at line 164 of file dlite.h.

Referenced by dlite_init().

typedef char*(* dlite_reg_obj_t)(struct regs_t *regs, int is_write, enum md_reg_type rt, int reg, struct eval_value_t *val)
 

Definition at line 146 of file dlite.h.

Referenced by dlite_init().


Function Documentation

int __check_break md_addr_t    next_PC,
int    access,
md_addr_t    addr,
counter_t    icount,
counter_t    cycle
 

Definition at line 1815 of file dlite.c.

References ACCESS_EXEC, ACCESS_READ, ACCESS_WRITE, break_access, dlite_break_t::class, counter_t, FALSE, dlite_break_t::id, myfprintf(), dlite_break_t::next, panic(), pt_addr, pt_cycle, pt_inst, range_pos_t::ptype, dlite_break_t::range, range_cmp_range(), range_range_t::start, and TRUE.

01820 {
01821   struct dlite_break_t *bp;
01822 
01823   if (dlite_active)
01824     {
01825       /* single-stepping, break always */
01826       break_access = /* single step */0;
01827       return TRUE;
01828     }
01829   /* else, check for a breakpoint */
01830 
01831   for (bp=dlite_bps; bp != NULL; bp=bp->next)
01832     {
01833       switch (bp->range.start.ptype)
01834         {
01835         case pt_addr:
01836           if ((bp->class & ACCESS_EXEC)
01837               && !range_cmp_range(&bp->range, next_PC))
01838             {
01839               /* hit a code breakpoint */
01840               myfprintf(stdout,
01841                         "Stopping at code breakpoint #%d @ 0x%08p...\n",
01842                         bp->id, next_PC);
01843               break_access = ACCESS_EXEC;
01844               return TRUE;
01845             }
01846           if ((bp->class & ACCESS_READ)
01847               && ((access & ACCESS_READ)
01848                   && !range_cmp_range(&bp->range, addr)))
01849             {
01850               /* hit a read breakpoint */
01851               myfprintf(stdout,
01852                         "Stopping at read breakpoint #%d @ 0x%08p...\n",
01853                         bp->id, addr);
01854               break_access = ACCESS_READ;
01855               return TRUE;
01856             }
01857           if ((bp->class & ACCESS_WRITE)
01858               && ((access & ACCESS_WRITE)
01859                   && !range_cmp_range(&bp->range, addr)))
01860             {
01861               /* hit a write breakpoint */
01862               myfprintf(stdout,
01863                         "Stopping at write breakpoint #%d @ 0x%08p...\n",
01864                         bp->id, addr);
01865               break_access = ACCESS_WRITE;
01866               return TRUE;
01867             }
01868           break;
01869 
01870         case pt_inst:
01871           if (!range_cmp_range(&bp->range, icount))
01872             {
01873               /* hit a code breakpoint */
01874               fprintf(stdout,
01875                       "Stopping at inst count breakpoint #%d @ %.0f...\n",
01876                       bp->id, (double)icount);
01877               break_access = ACCESS_EXEC;
01878               return TRUE;
01879             }
01880           break;
01881 
01882         case pt_cycle:
01883           if (!range_cmp_range(&bp->range, cycle))
01884             {
01885               /* hit a code breakpoint */
01886               fprintf(stdout,
01887                       "Stopping at cycle count breakpoint #%d @ %.0f...\n",
01888                       bp->id, (double)cycle);
01889               break_access = ACCESS_EXEC;
01890               return TRUE;
01891             }
01892           break;
01893 
01894         default:
01895           panic("bogus range type");
01896         }
01897 
01898 
01899     }
01900 
01901   /* no matching breakpoint found */
01902   break_access = /* no break */0;
01903   return FALSE;
01904 }

void dlite_init dlite_reg_obj_t    reg_obj,
dlite_mem_obj_t    mem_obj,
dlite_mstate_obj_t    mstate_obj
 

Definition at line 2195 of file dlite.c.

References dlite_mem_obj_t, dlite_mstate_obj_t, dlite_reg_obj_t, eval_new(), f_dlite_mem_obj, f_dlite_mstate_obj, and f_dlite_reg_obj.

Referenced by sim_load_prog().

02198 {
02199   /* architected state accessors */
02200   f_dlite_reg_obj = reg_obj;
02201   f_dlite_mem_obj = mem_obj;
02202   f_dlite_mstate_obj = mstate_obj;
02203 
02204   /* instantiate the expression evaluator */
02205   dlite_evaluator = eval_new(ident_evaluator, NULL);
02206 }

void dlite_main md_addr_t    regs_PC,
md_addr_t    next_PC,
counter_t    cycle,
struct regs_t   regs,
struct mem_t   mem
 

Definition at line 2255 of file dlite.c.

References ACCESS_READ, ACCESS_WRITE, break_access, counter_t, dlite_active, dlite_exec(), DLITE_PROMPT, dlite_return, dlite_status(), FALSE, and TRUE.

Referenced by ruu_dispatch(), and sim_main().

02260 {
02261   char buf[512], *err_str;
02262   int dbreak = (break_access & (ACCESS_READ|ACCESS_WRITE)) != 0;
02263   static char cmd[512] = "";
02264 
02265   dlite_active = TRUE;
02266   dlite_return = FALSE;
02267   dlite_status(regs_PC, next_PC, cycle, dbreak, regs, mem);
02268 
02269   while (dlite_active && !dlite_return)
02270     {
02271       fprintf(stdout, DLITE_PROMPT);
02272       fflush(stdout);
02273       fgets(buf, 512, stdin);
02274 
02275       /* chop */
02276       if (buf[strlen(buf)-1] == '\n')
02277         buf[strlen(buf)-1] = '\0';
02278 
02279       if (buf[0] != '\0')
02280         {
02281           /* use this command */
02282           strcpy(cmd, buf);
02283         }
02284       /* else, use last command */
02285 
02286       err_str = dlite_exec(cmd, regs, mem);
02287       if (err_str)
02288         fprintf(stdout, "Dlite: error: %s\n", err_str);
02289     }
02290 }

char* dlite_mem_obj struct mem_t   mem,
int    is_write,
md_addr_t    addr,
char *    p,
int    nbytes
 

Definition at line 887 of file dlite.c.

References FALSE, mem_access(), mem_cmd, Read, and Write.

00892 {
00893   enum mem_cmd cmd;
00894 
00895   if (!is_write)
00896     cmd = Read;
00897   else
00898     cmd = Write;
00899 
00900 #if 0
00901   char *errstr;
00902   errstr = mem_valid(cmd, addr, nbytes, /* !declare */FALSE);
00903   if (errstr)
00904     return errstr;
00905 #endif
00906 
00907   /* else, no error, access memory */
00908   mem_access(mem, cmd, addr, p, nbytes);
00909 
00910   /* no error */
00911   return NULL;
00912 }

char* dlite_mstate_obj FILE *    stream,
char *    cmd,
struct regs_t   regs,
struct mem_t   mem
 

Definition at line 916 of file dlite.c.

00920 {
00921   /* nada */
00922   fprintf(stream, "No machine state.\n");
00923 
00924   /* no error */
00925   return NULL;
00926 }


Variable Documentation

int dlite_active
 

Definition at line 203 of file dlite.h.

Referenced by dlite_cont(), dlite_main(), and dlite_step().

int dlite_check
 

Definition at line 206 of file dlite.h.

Referenced by delete_break(), and set_break().

md_addr_t dlite_fastbreak
 

Definition at line 200 of file dlite.h.



UVa CS Department of Computer Science
School of Engineering, University of Virginia
151 Engineer's Way, P.O. Box 400740
Charlottesville, Virginia 22904-4740

(434) 982-2200  Fax: (434) 982-2214