diff options
author | Chris Johns <chrisj@rtems.org> | 2014-05-09 21:50:37 +1000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2014-06-18 16:48:08 +1200 |
commit | 100f517ab37265acdf067e36b6860020ec8b2184 (patch) | |
tree | 2316c8b888e11dcbcfbfc66a0c1e31991ea20656 /tester/covoar/Target_arm.cc | |
parent | 4.11: Add ntp patch. (diff) | |
download | rtems-tools-100f517ab37265acdf067e36b6860020ec8b2184.tar.bz2 |
covoar: Merger the covoar source from rtems-testing.git.
Use waf to build covoar.
Diffstat (limited to 'tester/covoar/Target_arm.cc')
-rw-r--r-- | tester/covoar/Target_arm.cc | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/tester/covoar/Target_arm.cc b/tester/covoar/Target_arm.cc new file mode 100644 index 0000000..a2b65c8 --- /dev/null +++ b/tester/covoar/Target_arm.cc @@ -0,0 +1,87 @@ +/*! @file Target_arm.cc + * @brief Target_arm Implementation + * + * This file contains the implementation of the base class for + * functions supporting target unique functionallity. + */ +#include "Target_arm.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +namespace Target { + + Target_arm::Target_arm( std::string targetName ): + TargetBase( targetName ) + { + branchInstructions.push_back("bcc"); + branchInstructions.push_back("bcs"); + branchInstructions.push_back("beq"); + branchInstructions.push_back("bge"); + branchInstructions.push_back("bgt"); + branchInstructions.push_back("bhi"); + branchInstructions.push_back("bl-hi"); + branchInstructions.push_back("bl-lo"); + branchInstructions.push_back("ble"); + branchInstructions.push_back("bls"); + branchInstructions.push_back("blt"); + branchInstructions.push_back("bmi"); + branchInstructions.push_back("bne"); + branchInstructions.push_back("bpl"); + branchInstructions.push_back("bvc"); + branchInstructions.push_back("bvs"); + + branchInstructions.sort(); + + } + + Target_arm::~Target_arm() + { + } + + bool Target_arm::isNopLine( + const char* const line, + int& size + ) + { + if (!strcmp( &line[strlen(line)-3], "nop")) { + size = 4; + return true; + } + + // On ARM, there are literal tables at the end of methods. + // We need to avoid them. + if (!strncmp( &line[strlen(line)-10], ".byte", 5)) { + size = 1; + return true; + } + if (!strncmp( &line[strlen(line)-13], ".short", 6)) { + size = 2; + return true; + } + if (!strncmp( &line[strlen(line)-16], ".word", 5)) { + size = 4; + return true; + } + + return false; + + } + + bool Target_arm::isBranch( + const char* instruction + ) + { + fprintf( stderr, "DETERMINE BRANCH INSTRUCTIONS FOR THIS ARCHITECTURE! -- fix me\n" ); + exit( -1 ); + } + + TargetBase *Target_arm_Constructor( + std::string targetName + ) + { + return new Target_arm( targetName ); + } + +} |