summaryrefslogtreecommitdiff
path: root/src/arch/arm
diff options
context:
space:
mode:
authorAli Saidi <Ali.Saidi@ARM.com>2010-08-25 19:10:43 -0500
committerAli Saidi <Ali.Saidi@ARM.com>2010-08-25 19:10:43 -0500
commitc0b54f579ccccd805ccc1f0b2c41b0b10899eecd (patch)
tree468355a62988a12682596237da5a9f9bc598dcd4 /src/arch/arm
parente1168e72ca8ae370a1989220a202347980c6a4d2 (diff)
downloadgem5-c0b54f579ccccd805ccc1f0b2c41b0b10899eecd.tar.xz
ARM: Limited implementation of dprintk.
Does not work with vfp arguments or arguments passed on the stack.
Diffstat (limited to 'src/arch/arm')
-rw-r--r--src/arch/arm/registers.hh1
-rw-r--r--src/arch/arm/system.cc5
-rw-r--r--src/arch/arm/system.hh20
-rw-r--r--src/arch/arm/utility.cc13
4 files changed, 37 insertions, 2 deletions
diff --git a/src/arch/arm/registers.hh b/src/arch/arm/registers.hh
index a568e4a9c..61e467e24 100644
--- a/src/arch/arm/registers.hh
+++ b/src/arch/arm/registers.hh
@@ -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;
diff --git a/src/arch/arm/system.cc b/src/arch/arm/system.cc
index ba973ea17..756f64eb7 100644
--- a/src/arch/arm/system.cc
+++ b/src/arch/arm/system.cc
@@ -41,17 +41,22 @@
*/
#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;
}
diff --git a/src/arch/arm/system.hh b/src/arch/arm/system.hh
index 9dfb66fb7..adf6d4f7b 100644
--- a/src/arch/arm/system.hh
+++ b/src/arch/arm/system.hh
@@ -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.
*
@@ -37,9 +49,17 @@
#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);
diff --git a/src/arch/arm/utility.cc b/src/arch/arm/utility.cc
index cecd459f3..3e574ccaf 100644
--- a/src/arch/arm/utility.cc
+++ b/src/arch/arm/utility.cc
@@ -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