diff options
Diffstat (limited to 'src/arch/arm/nativetrace.cc')
-rw-r--r-- | src/arch/arm/nativetrace.cc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/arch/arm/nativetrace.cc b/src/arch/arm/nativetrace.cc index 01f3205eb..e426d6611 100644 --- a/src/arch/arm/nativetrace.cc +++ b/src/arch/arm/nativetrace.cc @@ -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) 2006 The Regents of The University of Michigan * All rights reserved. * @@ -113,6 +125,14 @@ Trace::ArmNativeTrace::check(NativeTraceRecord *record) nState.update(this); mState.update(tc); + // If a syscall just happened native trace needs another tick + if ((mState.oldState[STATE_PC] == nState.oldState[STATE_PC]) && + (mState.newState[STATE_PC] - 4 == nState.newState[STATE_PC])) { + DPRINTF(ExecRegDelta, "Advancing to match PCs after syscall\n"); + nState.update(this); + + } + bool errorFound = false; // Regular int regs for (int i = 0; i < STATE_NUMVALS; i++) { |