ARM: Limited implementation of dprintk.
authorAli Saidi <Ali.Saidi@ARM.com>
Thu, 26 Aug 2010 00:10:43 +0000 (19:10 -0500)
committerAli Saidi <Ali.Saidi@ARM.com>
Thu, 26 Aug 2010 00:10:43 +0000 (19:10 -0500)
Does not work with vfp arguments or arguments passed on the stack.

src/arch/arm/registers.hh
src/arch/arm/system.cc
src/arch/arm/system.hh
src/arch/arm/utility.cc

index a568e4a9c3379669cb2b138eed3134f21b7212e2..61e467e24034a1d70150e3e19ed1996860861cd4 100644 (file)
@@ -79,6 +79,7 @@ const int TotalNumRegs = NumIntRegs + NumFloatRegs + NumMiscRegs;
 const int ReturnValueReg = 0;
 const int ReturnValueReg1 = 1;
 const int ReturnValueReg2 = 2;
+const int NumArgumentRegs = 4;
 const int ArgumentReg0 = 0;
 const int ArgumentReg1 = 1;
 const int ArgumentReg2 = 2;
index ba973ea170a432865c915e186f6598e7c784f37a..756f64eb7a2a297179585153de5505aafa6c5afa 100644 (file)
  */
 
 #include "arch/arm/system.hh"
+#include <iostream>
 
+using namespace std;
 using namespace ArmISA;
+using namespace Linux;
 
 ArmSystem::ArmSystem(Params *p)
     : System(p)
 {
+    debugPrintkEvent = addKernelFuncEvent<DebugPrintkEvent>("dprintk");
 
 }
 
 ArmSystem::~ArmSystem()
 {
+    delete debugPrintkEvent;
 }
 
 
index 9dfb66fb77f1ea5356874c14d5832e2f22ab63f8..adf6d4f7b5352f72a818eddff545162e79042421 100644 (file)
@@ -1,4 +1,16 @@
 /*
+ * Copyright (c) 2010 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) 2002-2005 The Regents of The University of Michigan
  * All rights reserved.
  *
 #include "params/ArmSystem.hh"
 #include "sim/sim_object.hh"
 #include "sim/system.hh"
+#include "kern/linux/events.hh"
 
 class ArmSystem : public System
 {
+  private:
+    /**
+     * PC based event to skip the dprink() call and emulate its
+     * functionality
+     */
+    Linux::DebugPrintkEvent *debugPrintkEvent;
+
   public:
     typedef ArmSystemParams Params;
     ArmSystem(Params *p);
index cecd459f3f773d93eca2df9c105018e421eab185..3e574ccafcf0f8088f4a9eeb83507c378ec80cf4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 ARM Limited
+ * Copyright (c) 2009-2010 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -59,7 +59,16 @@ initCPU(ThreadContext *tc, int cpuId)
 
 uint64_t getArgument(ThreadContext *tc, int number, bool fp) {
 #if FULL_SYSTEM
-    panic("getArgument() not implemented for ARM!\n");
+    if (number < NumArgumentRegs) {
+        if (fp)
+            panic("getArgument(): Floating point arguments not implemented\n");
+        else
+            return tc->readIntReg(number);
+    }
+    else {
+        panic("getArgument(): Argument index %d beyond max supported (%d).\n",
+              number, NumArgumentRegs - 1);
+    }
 #else
     panic("getArgument() only implemented for FULL_SYSTEM\n");
     M5_DUMMY_RETURN