/* * trace.c for mdb */ #include "mdb.h" #include #include #include "proto.h" /* mdbtrace() * Call ptrace and check for error if debugging running process * Otherwise read 'core' file */ PUBLIC long mdbtrace(req, pid, addr, data) int req, pid; long addr, data; { long val; int i; int segment; #ifdef DEBUG if (debug) Printf("ptrace: req=%d pid=%d addr=%lx data=%lx\n", req, pid, addr, data); #endif if (corepid < 0) { errno = 0; /* Call normal ptrace and check for error */ val = ptrace(req, pid, addr, data); if (errno != 0) { do_error("mdb ptrace error "); mdb_error("\n"); } #ifdef DEBUG if (debug) Printf("ptrace: val=>%lx\n", val); #endif return val; } else return read_core(req, addr, data); } /* Used by disassembler */ PUBLIC u32_t peek_dword(addr) off_t addr; { return mdbtrace(T_GETINS, curpid, addr, 0L); }