Does not work with vfp arguments or arguments passed on the stack.
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;
*/
#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;
}
/*
+ * 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);
/*
- * 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
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