nativetrace.hh revision 8271
15647Sgblack@eecs.umich.edu/* 25647Sgblack@eecs.umich.edu * Copyright (c) 2006 The Regents of The University of Michigan 35647Sgblack@eecs.umich.edu * All rights reserved. 45647Sgblack@eecs.umich.edu * 55647Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 65647Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 75647Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 85647Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 95647Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 105647Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 115647Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 125647Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 135647Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 145647Sgblack@eecs.umich.edu * this software without specific prior written permission. 155647Sgblack@eecs.umich.edu * 165647Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 175647Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185647Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195647Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 205647Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215647Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225647Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235647Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245647Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255647Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265647Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275647Sgblack@eecs.umich.edu * 285647Sgblack@eecs.umich.edu * Authors: Gabe Black 295647Sgblack@eecs.umich.edu */ 305647Sgblack@eecs.umich.edu 315647Sgblack@eecs.umich.edu#ifndef __ARCH_ARM_NATIVETRACE_HH__ 325647Sgblack@eecs.umich.edu#define __ARCH_ARM_NATIVETRACE_HH__ 335647Sgblack@eecs.umich.edu 345647Sgblack@eecs.umich.edu#include "base/types.hh" 355647Sgblack@eecs.umich.edu#include "cpu/nativetrace.hh" 365647Sgblack@eecs.umich.edu#include "params/ArmNativeTrace.hh" 375647Sgblack@eecs.umich.edu 385647Sgblack@eecs.umich.edunamespace Trace { 395647Sgblack@eecs.umich.edu 405647Sgblack@eecs.umich.educlass ArmNativeTrace : public NativeTrace 415647Sgblack@eecs.umich.edu{ 425647Sgblack@eecs.umich.edu public: 435647Sgblack@eecs.umich.edu enum StateID { 445647Sgblack@eecs.umich.edu STATE_R0, 455647Sgblack@eecs.umich.edu STATE_R1, 465647Sgblack@eecs.umich.edu STATE_R2, 475647Sgblack@eecs.umich.edu STATE_R3, 485647Sgblack@eecs.umich.edu STATE_R4, 495647Sgblack@eecs.umich.edu STATE_R5, 505647Sgblack@eecs.umich.edu STATE_R6, 515647Sgblack@eecs.umich.edu STATE_R7, 525647Sgblack@eecs.umich.edu STATE_R8, 535647Sgblack@eecs.umich.edu STATE_R9, 545647Sgblack@eecs.umich.edu STATE_R10, 555647Sgblack@eecs.umich.edu STATE_R11, 565647Sgblack@eecs.umich.edu STATE_FP = STATE_R11, 575647Sgblack@eecs.umich.edu STATE_R12, 585648Sgblack@eecs.umich.edu STATE_R13, 595647Sgblack@eecs.umich.edu STATE_SP = STATE_R13, 605654Sgblack@eecs.umich.edu STATE_R14, 615647Sgblack@eecs.umich.edu STATE_LR = STATE_R14, 625654Sgblack@eecs.umich.edu STATE_R15, 636046Sgblack@eecs.umich.edu STATE_PC = STATE_R15, 645647Sgblack@eecs.umich.edu STATE_CPSR, 655648Sgblack@eecs.umich.edu STATE_F0, STATE_F1, STATE_F2, STATE_F3, STATE_F4, STATE_F5, STATE_F6, 665648Sgblack@eecs.umich.edu STATE_F7, STATE_F8, STATE_F9, STATE_F10, STATE_F11, STATE_F12, 675647Sgblack@eecs.umich.edu STATE_F13, STATE_F14, STATE_F15, STATE_F16, STATE_F17, STATE_F18, 685647Sgblack@eecs.umich.edu STATE_F19, STATE_F20, STATE_F21, STATE_F22, STATE_F23, STATE_F24, 695647Sgblack@eecs.umich.edu STATE_F25, STATE_F26, STATE_F27, STATE_F28, STATE_F29, STATE_F30, 705647Sgblack@eecs.umich.edu STATE_F31, STATE_FPSCR, 715647Sgblack@eecs.umich.edu STATE_NUMVALS 725647Sgblack@eecs.umich.edu }; 735647Sgblack@eecs.umich.edu 745647Sgblack@eecs.umich.edu protected: 755647Sgblack@eecs.umich.edu struct ThreadState { 765648Sgblack@eecs.umich.edu bool changed[STATE_NUMVALS]; 775647Sgblack@eecs.umich.edu uint64_t state[2][STATE_NUMVALS]; 785648Sgblack@eecs.umich.edu uint64_t *newState; 795648Sgblack@eecs.umich.edu uint64_t *oldState; 805648Sgblack@eecs.umich.edu int current; 815648Sgblack@eecs.umich.edu void update(NativeTrace *parent); 825648Sgblack@eecs.umich.edu void update(ThreadContext *tc); 835648Sgblack@eecs.umich.edu 845648Sgblack@eecs.umich.edu ThreadState() 855648Sgblack@eecs.umich.edu { 865648Sgblack@eecs.umich.edu for (int i = 0; i < STATE_NUMVALS; i++) { 875648Sgblack@eecs.umich.edu changed[i] = false; 885648Sgblack@eecs.umich.edu state[0][i] = state[1][i] = 0; 895648Sgblack@eecs.umich.edu current = 0; 905648Sgblack@eecs.umich.edu newState = state[0]; 915648Sgblack@eecs.umich.edu oldState = state[1]; 925648Sgblack@eecs.umich.edu } 935648Sgblack@eecs.umich.edu } 945648Sgblack@eecs.umich.edu }; 955648Sgblack@eecs.umich.edu 965648Sgblack@eecs.umich.edu ThreadState nState, mState; 975648Sgblack@eecs.umich.edu 985648Sgblack@eecs.umich.edu bool stopOnPCError; 995648Sgblack@eecs.umich.edu 1005648Sgblack@eecs.umich.edu public: 1015648Sgblack@eecs.umich.edu typedef ArmNativeTraceParams Params; 1025648Sgblack@eecs.umich.edu 1035648Sgblack@eecs.umich.edu const Params * 1045648Sgblack@eecs.umich.edu params() const 1055648Sgblack@eecs.umich.edu { 1065648Sgblack@eecs.umich.edu return dynamic_cast<const Params *>(_params); 1075648Sgblack@eecs.umich.edu } 1085648Sgblack@eecs.umich.edu 1095648Sgblack@eecs.umich.edu ArmNativeTrace(const Params *p) : 1105648Sgblack@eecs.umich.edu NativeTrace(p), stopOnPCError(p->stop_on_pc_error) 1115648Sgblack@eecs.umich.edu {} 1125648Sgblack@eecs.umich.edu 1135648Sgblack@eecs.umich.edu void check(NativeTraceRecord *record); 1145648Sgblack@eecs.umich.edu}; 1155648Sgblack@eecs.umich.edu 1165648Sgblack@eecs.umich.edu} // namespace Trace 1175648Sgblack@eecs.umich.edu 1185648Sgblack@eecs.umich.edu#endif // __ARCH_ARM_NATIVETRACE_HH__ 1195648Sgblack@eecs.umich.edu