summaryrefslogblamecommitdiffstats
path: root/tester/covoar/TargetBase.h
blob: e566c15b40c3a7a15cf3c4ab89e30295401f8398 (plain) (tree)








































































































































                                                                             
                                                                              

                       
                                                          





















                                                                             
/*! @file TargetBase.h
 *  @brief TargetBase Specification
 *
 *  This file contains the specification of the TargetBase class.
 */

#ifndef __TARGETBASE_H__
#define __TARGETBASE_H__

#include <list>
#include <string>
#include <stdint.h>

namespace Target {

  /*! @class TargetBase
   *
   *  This class is the base class for all Target classes.  Each
   *  target class contains routines that are specific to the target
   *  in question.
   */
  class TargetBase {

  public:

    /*!
     *  This method constructs an TargetBase instance.
     *
     *  @param[in] targetName specifies the desired target
     */
    TargetBase(
      std::string targetName
    );

    /*!
     *  This method destructs an TargetBase instance.
     */
    virtual ~TargetBase();

    /*!
     *  This method returns the program name for addr2line.
     *
     *  @return Returns the target specific addr2line program name
     */
    const char* getAddr2line( void ) const;

    /*!
     *  This method returns the CPU name.
     *
     *  @return Returns the target cpu name
     */
    const char* getCPU( void ) const;

    /*!
     *  This method returns the program name for objdump.
     *
     *  @return Returns the target specific objdump program name
     */
    const char* getObjdump( void ) const;

    /*!
     *  This method returns the target name.
     *
     *  @return Returns the target name
     */
    const char* getTarget( void ) const;

    /*!
     *  This method determines whether the specified line from a 
     *  objdump file is a nop instruction.
     *
     *  @param[in] line contains the object dump line to check
     *  @param[out] size is set to the size in bytes of the nop
     *
     *  @return Returns TRUE if the instruction is a nop, FALSE otherwise.
     */
    virtual bool isNopLine(
      const char* const line,
      int&              size
    ) = 0;


    /*!
     *  This method determins if the objdump line contains a
     *  branch instruction.
     *
     *  @param[in] line contains the object dump line to check
     *  @param[out] size is set to the size in bytes of the nop
     *
     *  @return Returns TRUE if the instruction is a branch, FALSE otherwise.
     */
    bool isBranchLine(
      const char* const line
    );

    
    /*!
     *  This method determines if the specified line from an
     *  objdump file is a branch instruction.
     */
    bool isBranch(
      const char* const instruction
    );

    /*!
     *  This method returns the bit set by Qemu in the trace record
     *  when a branch is taken.
     */
    virtual uint8_t qemuTakenBit(void);

    /*!
     *  This method returns the bit set by Qemu in the trace record
     *  when a branch is taken.
     */
    virtual uint8_t qemuNotTakenBit(void);

  protected:

    /*!
     * This member variable contains the target name string.
     */
    std::string    targetName_m;

    /*!
     * This member variable indicates either the column that the instruction
     * starts in the object dump file, when the objdump has no tabs; or the
     * number of tabs to find the instruction.
     */
    int objdumpInstructionLocation;

    /*!
     *  This member variable indicates whether or not the objdump has
     *  tabs as delemeters.
     */
    bool objdumpHasTabs;

    /*!
     * This member variable is an array of all conditional branch instructions
     * for this target.
     */
    std::list <std::string> conditionalBranchInstructions;

  private:

    /*!
     * This member variable contains the name of the host program
     * which reports the source line for the specified program address.
     */
    std::string addr2line_m;

    /*!
     * This member variable contains the name of the target cpu architecture.
     */
    std::string cpu_m;

    /*!
     * This member variable contains the name of the host program
     * which disassembles an executable or library.
     */
    std::string objdump_m;
  };
}
#endif