summaryrefslogtreecommitdiffstats
path: root/tester/covoar/Target_arm.cc
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2014-05-09 21:50:37 +1000
committerChris Johns <chrisj@rtems.org>2014-06-18 16:48:08 +1200
commit100f517ab37265acdf067e36b6860020ec8b2184 (patch)
tree2316c8b888e11dcbcfbfc66a0c1e31991ea20656 /tester/covoar/Target_arm.cc
parent4.11: Add ntp patch. (diff)
downloadrtems-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.cc87
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 );
+ }
+
+}