34a35
> #include <string>
38a40
> #include "base/traceflags.hh"
42,43d43
< #include "base/traceflags.hh"
<
46c46,47
< typedef std::vector<bool> FlagVec;
---
> std::ostream &output();
> void setOutput(const std::string &filename);
48c49,54
< extern FlagVec flags;
---
> extern bool enabled;
> typedef std::vector<bool> FlagVec;
> extern FlagVec flags;
> inline bool IsOn(int t) { return flags[t]; }
> bool changeFlag(const char *str, bool value);
> void dumpStatus();
50c56,57
< extern std::ostream *dprintf_stream;
---
> extern ObjectMatch ignore;
> extern const std::string DefaultName;
52,56c59,61
< inline bool
< IsOn(int t)
< {
< return flags[t];
< }
---
> void dprintf(Tick when, const std::string &name, const char *format,
> CPRINTF_DECLARATION);
> void dump(Tick when, const std::string &name, const void *data, int len);
58c63
< extern bool enabled;
---
> /* namespace Trace */ }
60,161d64
< void dump(const uint8_t *data, int count);
<
< class Record
< {
< protected:
< Tick cycle;
<
< Record(Tick _cycle)
< : cycle(_cycle)
< {
< }
<
< public:
< virtual ~Record() {}
<
< virtual void dump(std::ostream &) = 0;
< };
<
< class PrintfRecord : public Record
< {
< private:
< const std::string &name;
< const char *format;
< CPrintfArgsList args;
<
< public:
< PrintfRecord(Tick cycle, const std::string &_name, const char *_format,
< CPRINTF_DECLARATION)
< : Record(cycle), name(_name), format(_format),
< args(VARARGS_ALLARGS)
< {
< }
<
< virtual ~PrintfRecord();
<
< virtual void dump(std::ostream &);
< };
<
< class DataRecord : public Record
< {
< private:
< const std::string &name;
< uint8_t *data;
< int len;
<
< public:
< DataRecord(Tick cycle, const std::string &name,
< const void *_data, int _len);
< virtual ~DataRecord();
<
< virtual void dump(std::ostream &);
< };
<
< class Log
< {
< private:
< int size; // number of records in log
< Record **buffer; // array of 'size' Record ptrs (circular buf)
< Record **nextRecPtr; // next slot to use in buffer
< Record **wrapRecPtr; // &buffer[size], for quick wrap check
<
< public:
< Log();
< ~Log();
<
< void init(int _size);
<
< void append(Record *); // append trace record to log
< void dump(std::ostream &); // dump contents to stream
< };
<
< extern Log theLog;
<
< extern ObjectMatch ignore;
<
< inline void
< dprintf(Tick when, const std::string &name, const char *format,
< CPRINTF_DECLARATION)
< {
< if (!name.empty() && ignore.match(name))
< return;
<
< theLog.append(new Trace::PrintfRecord(when, name, format,
< VARARGS_ALLARGS));
< }
<
< inline void
< dataDump(Tick when, const std::string &name, const void *data, int len)
< {
< theLog.append(new Trace::DataRecord(when, name, data, len));
< }
<
< extern const std::string DefaultName;
<
< };
<
< inline std::ostream &
< DebugOut()
< {
< return *Trace::dprintf_stream;
< }
<
189c92
< Trace::dataDump(curTick, name(), data, count); \
---
> Trace::dump(curTick, name(), data, count); \
201a105,108
> #define DDUMPN(data, count) do { \
> Trace::dump(curTick, name(), data, count); \
> } while (0)
>
212a120
> #define DDUMP(x, data, count) do {} while (0)
214a123
> #define DDUMPN(data, count) do {} while (0)
217d125
< #define DDUMP(x, data, count) do {} while (0)