summaryrefslogtreecommitdiff
path: root/src/kern/linux/events.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/kern/linux/events.hh')
-rw-r--r--src/kern/linux/events.hh52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/kern/linux/events.hh b/src/kern/linux/events.hh
index 3f5f2526f..b8aad9d79 100644
--- a/src/kern/linux/events.hh
+++ b/src/kern/linux/events.hh
@@ -1,4 +1,16 @@
/*
+ * Copyright (c) 2016 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder. You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
* Copyright (c) 2004-2006 The Regents of The University of Michigan
* All rights reserved.
*
@@ -44,6 +56,46 @@ class DebugPrintkEvent : public SkipFuncEvent
virtual void process(ThreadContext *xc);
};
+/**
+ * Dump the guest kernel's dmesg buffer to a file in gem5's output
+ * directory and print a warning.
+ *
+ * @warn This event uses Linux::dumpDmesg() and comes with the same
+ * limitations. Most importantly, the kernel's address mappings must
+ * be available to the translating proxy.
+ */
+class DmesgDumpEvent : public PCEvent
+{
+ protected:
+ std::string fname;
+
+ public:
+ DmesgDumpEvent(PCEventQueue *q, const std::string &desc, Addr addr,
+ const std::string &_fname)
+ : PCEvent(q, desc, addr), fname(_fname) {}
+ virtual void process(ThreadContext *xc);
+};
+
+/**
+ * Dump the guest kernel's dmesg buffer to a file in gem5's output
+ * directory and panic.
+ *
+ * @warn This event uses Linux::dumpDmesg() and comes with the same
+ * limitations. Most importantly, the kernel's address mappings must
+ * be available to the translating proxy.
+ */
+class KernelPanicEvent : public PCEvent
+{
+ protected:
+ std::string fname;
+
+ public:
+ KernelPanicEvent(PCEventQueue *q, const std::string &desc, Addr addr,
+ const std::string &_fname)
+ : PCEvent(q, desc, addr), fname(_fname) {}
+ virtual void process(ThreadContext *xc);
+};
+
/** A class to skip udelay() and related calls in the kernel.
* This class has two additional parameters that take the argument to udelay and
* manipulated it to come up with ns and eventually ticks to quiesce for.