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:
parent
39743d35a3
commit
3f2b039c98
4 changed files with 13 additions and 23 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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__
|
||||
|
|
Loading…
Reference in a new issue