X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fbase%2Fmisc.cc;h=65cb133568b521ceedd80c50869f5297d1790ae0;hb=4ab68fc999458617dbcfc91131404a1996e75482;hp=991a337368caf0aa726b4d5ff8601a03d35b0d38;hpb=4ed184eadefb16627f2807cb3dc7886bb1b920d1;p=gem5.git diff --git a/src/base/misc.cc b/src/base/misc.cc index 991a33736..65cb13356 100644 --- a/src/base/misc.cc +++ b/src/base/misc.cc @@ -28,99 +28,103 @@ * Authors: Nathan Binkert */ +#include #include #include +#include #include "base/cprintf.hh" #include "base/hostinfo.hh" #include "base/misc.hh" #include "base/output.hh" #include "base/trace.hh" -#include "sim/host.hh" -#include "sim/root.hh" +#include "base/types.hh" +#include "base/varargs.hh" +#include "sim/core.hh" using namespace std; -void -__panic(const string &format, cp::ArgList &args, const char *func, - const char *file, int line) -{ - string fmt = "panic: " + format; - switch (fmt[fmt.size() - 1]) { - case '\n': - case '\r': - break; - default: - fmt += "\n"; - } - - fmt += " @ cycle %d\n[%s:%s, line %d]\n"; - - args.append(curTick); - args.append(func); - args.append(file); - args.append(line); - args.dump(cerr, fmt); +bool want_warn = true; +bool want_info = true; +bool want_hack = true; - delete &args; - - abort(); -} +bool warn_verbose = false; +bool info_verbose = false; +bool hack_verbose = false; void -__fatal(const string &format, cp::ArgList &args, const char *func, - const char *file, int line) +__exit_message(const char *prefix, int code, + const char *func, const char *file, int line, + const char *fmt, CPRINTF_DEFINITION) { - string fmt = "fatal: " + format; + CPrintfArgsList args(VARARGS_ALLARGS); - switch (fmt[fmt.size() - 1]) { + string format = prefix; + format += ": "; + format += fmt; + switch (format[format.size() - 1]) { case '\n': case '\r': break; default: - fmt += "\n"; + format += "\n"; } - - fmt += " @ cycle %d\n[%s:%s, line %d]\n"; - fmt += "Memory Usage: %ld KBytes\n"; - - args.append(curTick); - args.append(func); - args.append(file); - args.append(line); - args.append(memUsage()); - args.dump(cerr, fmt); - - delete &args; - - exit(1); + + uint32_t crc = crc32(0, (const Bytef*)fmt, strlen(fmt)); + + format += " @ cycle %d\n[%s:%s, line %d]\n"; + format += "Memory Usage: %ld KBytes\n"; + format += "For more information see: http://www.m5sim.org/%s/%x\n"; + + args.push_back(curTick); + args.push_back(func); + args.push_back(file); + args.push_back(line); + args.push_back(memUsage()); + args.push_back(prefix); + args.push_back(crc); + + ccprintf(cerr, format.c_str(), args); + + if (code < 0) + abort(); + else + exit(code); } void -__warn(const string &format, cp::ArgList &args, const char *func, - const char *file, int line) +__base_message(std::ostream &stream, const char *prefix, bool verbose, + const char *func, const char *file, int line, + const char *fmt, CPRINTF_DEFINITION) { - string fmt = "warn: " + format; + CPrintfArgsList args(VARARGS_ALLARGS); - switch (fmt[fmt.size() - 1]) { + string format = prefix; + format += ": "; + format += fmt; + switch (format[format.size() - 1]) { case '\n': case '\r': break; default: - fmt += "\n"; + format += "\n"; + } + + uint32_t crc = crc32(0, (const Bytef*)fmt, strlen(fmt)); + + if (verbose) { + format += " @ cycle %d\n[%s:%s, line %d]\n"; + args.push_back(curTick); + args.push_back(func); + args.push_back(file); + args.push_back(line); } -#ifdef VERBOSE_WARN - fmt += " @ cycle %d\n[%s:%s, line %d]\n"; - args.append(curTick); - args.append(func); - args.append(file); - args.append(line); -#endif - - args.dump(cerr, fmt); - if (simout.isFile(*outputStream)) - args.dump(*outputStream, fmt); + if (strcmp(prefix, "warn") == 0) { + format += "For more information see: http://www.m5sim.org/%s/%x\n"; + args.push_back(prefix); + args.push_back(crc); + } - delete &args; + ccprintf(stream, format.c_str(), args); }