From c0b54f579ccccd805ccc1f0b2c41b0b10899eecd Mon Sep 17 00:00:00 2001 From: Ali Saidi Date: Wed, 25 Aug 2010 19:10:43 -0500 Subject: ARM: Limited implementation of dprintk. Does not work with vfp arguments or arguments passed on the stack. --- src/arch/arm/registers.hh | 1 + src/arch/arm/system.cc | 5 +++++ src/arch/arm/system.hh | 20 ++++++++++++++++++++ src/arch/arm/utility.cc | 13 +++++++++++-- 4 files changed, 37 insertions(+), 2 deletions(-) (limited to 'src/arch/arm') 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 +using namespace std; using namespace ArmISA; +using namespace Linux; ArmSystem::ArmSystem(Params *p) : System(p) { + debugPrintkEvent = addKernelFuncEvent("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 -- cgit v1.2.3