change the way dprintf works so the cache accesses required to fulfill the dprintf aren't show in between the Cycle: name:

printing and the actual formatted string being printed

--HG--
extra : convert_revision : 8876ba938ba971f854bab490c9af10db039a2e83
This commit is contained in:
Ali Saidi 2007-05-01 18:14:16 -04:00
parent 39743d35a3
commit 3f2b039c98
4 changed files with 13 additions and 23 deletions

View file

@ -37,6 +37,7 @@
#include "kern/system_events.hh"
#include "sim/system.hh"
#include <sstream>
namespace Linux {
@ -44,13 +45,11 @@ void
DebugPrintkEvent::process(ThreadContext *tc)
{
if (DTRACE(DebugPrintf)) {
if (!raw) {
StringWrap name(tc->getSystemPtr()->name() + ".dprintk");
DPRINTFN("");
}
std::stringstream ss;
TheISA::Arguments args(tc);
Printk(args);
Printk(ss, args);
StringWrap name(tc->getSystemPtr()->name() + ".dprintk");
DPRINTFN("%s", ss.str());
}
SkipFuncEvent::process(tc);
}

View file

@ -38,13 +38,9 @@ namespace Linux {
class DebugPrintkEvent : public SkipFuncEvent
{
private:
bool raw;
public:
DebugPrintkEvent(PCEventQueue *q, const std::string &desc, Addr addr,
bool r = false)
: SkipFuncEvent(q, desc, addr), raw(r) {}
DebugPrintkEvent(PCEventQueue *q, const std::string &desc, Addr addr)
: SkipFuncEvent(q, desc, addr) {}
virtual void process(ThreadContext *xc);
};

View file

@ -32,22 +32,18 @@
#include <sys/types.h>
#include <algorithm>
#include "base/trace.hh"
#include "arch/arguments.hh"
#include "base/trace.hh"
#include "kern/linux/printk.hh"
using namespace std;
void
Printk(TheISA::Arguments args)
Printk(stringstream &out, TheISA::Arguments args)
{
std::ostream &out = Trace::output();
char *p = (char *)args++;
ios::fmtflags saved_flags = out.flags();
char old_fill = out.fill();
int old_precision = out.precision();
while (*p) {
switch (*p) {
case '%': {
@ -258,8 +254,5 @@ Printk(TheISA::Arguments args)
}
}
out.flags(saved_flags);
out.fill(old_fill);
out.precision(old_precision);
}

View file

@ -34,8 +34,10 @@
#include "arch/isa_specific.hh"
#include <sstream>
class TheISA::Arguments;
void Printk(TheISA::Arguments args);
void Printk(std::stringstream &out, TheISA::Arguments args);
#endif // __PRINTK_HH__