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