summaryrefslogtreecommitdiffstats
path: root/covoar/TargetFactory.cc
diff options
context:
space:
mode:
authorJennifer Averett <Jennifer.Averett@OARcorp.com>2010-05-24 20:07:09 +0000
committerJennifer Averett <Jennifer.Averett@OARcorp.com>2010-05-24 20:07:09 +0000
commita518bc5b1a39e27a75bb5510ebf272c7658144b1 (patch)
tree5c8e7bcfb36f333f88f94673627addd5fcd7969d /covoar/TargetFactory.cc
parent2010-05-24 Jennifer Averett <Jennifer.Averett@OARcorp.com> (diff)
downloadrtems-testing-a518bc5b1a39e27a75bb5510ebf272c7658144b1.tar.bz2
2010-05-24 Jennifer Averett <Jennifer.Averett@OARcorp.com>
* covoar/05_ascending.gif, covoar/05_descending.gif, covoar/05_unsorted.gif, covoar/ConfigFile.cc, covoar/ConfigFile.h, covoar/CoverageFactory.cc, covoar/CoverageFactory.h, covoar/CoverageMap.cc, covoar/CoverageMap.h, covoar/CoverageMapBase.cc, covoar/CoverageMapBase.h, covoar/CoverageRanges.cc, covoar/CoverageRanges.h, covoar/CoverageReaderBase.cc, covoar/CoverageReaderBase.h, covoar/CoverageReaderQEMU.cc, covoar/CoverageReaderQEMU.h, covoar/CoverageReaderRTEMS.cc, covoar/CoverageReaderRTEMS.h, covoar/CoverageReaderSkyeye.cc, covoar/CoverageReaderSkyeye.h, covoar/CoverageReaderTSIM.cc, covoar/CoverageReaderTSIM.h, covoar/CoverageWriterBase.cc, covoar/CoverageWriterBase.h, covoar/CoverageWriterRTEMS.cc, covoar/CoverageWriterRTEMS.h, covoar/CoverageWriterSkyeye.cc, covoar/CoverageWriterSkyeye.h, covoar/CoverageWriterTSIM.cc, covoar/CoverageWriterTSIM.h, covoar/DesiredSymbols.cc, covoar/DesiredSymbols.h, covoar/ExecutableInfo.cc, covoar/ExecutableInfo.h, covoar/Explanations.cc, covoar/Explanations.h, covoar/Makefile, covoar/ObjdumpProcessor.cc, covoar/ObjdumpProcessor.h, covoar/ReportsBase.cc, covoar/ReportsBase.h, covoar/ReportsHtml.cc, covoar/ReportsHtml.h, covoar/ReportsText.cc, covoar/ReportsText.h, covoar/SymbolTable.cc, covoar/SymbolTable.h, covoar/TargetBase.cc, covoar/TargetBase.h, covoar/TargetFactory.cc, covoar/TargetFactory.h, covoar/Target_arm.cc, covoar/Target_arm.h, covoar/Target_i386.cc, covoar/Target_i386.h, covoar/Target_lm32.cc, covoar/Target_lm32.h, covoar/Target_m68k.cc, covoar/Target_m68k.h, covoar/Target_powerpc.cc, covoar/Target_powerpc.h, covoar/Target_sparc.cc, covoar/Target_sparc.h, covoar/TraceConverter.cc, covoar/TraceList.cc, covoar/TraceList.h, covoar/TraceReaderBase.cc, covoar/TraceReaderBase.h, covoar/TraceReaderLogQEMU.cc, covoar/TraceReaderLogQEMU.h, covoar/TraceWriterBase.cc, covoar/TraceWriterBase.h, covoar/TraceWriterQEMU.cc, covoar/TraceWriterQEMU.h, covoar/app_common.cc, covoar/app_common.h, covoar/configfile_test.cc, covoar/coverage_converter.cc, covoar/covmerge.cc, covoar/covoar.cc, covoar/covoar.css, covoar/filter.gif, covoar/qemu-dump-trace.c, covoar/qemu-log.h, covoar/qemu-traces.h, covoar/rtemscov_header.h, covoar/skyeye_header.h, covoar/table.js: New files.
Diffstat (limited to 'covoar/TargetFactory.cc')
-rw-r--r--covoar/TargetFactory.cc90
1 files changed, 90 insertions, 0 deletions
diff --git a/covoar/TargetFactory.cc b/covoar/TargetFactory.cc
new file mode 100644
index 0000000..f4f97cd
--- /dev/null
+++ b/covoar/TargetFactory.cc
@@ -0,0 +1,90 @@
+//
+// $Id$
+//
+
+//! @file TargetFactory.cc
+//! @brief TargetFactory Implementation
+//!
+//! This file contains the implementation of a factory for a
+//! instances of a family of classes derived from TargetBase.
+//!
+
+#include "TargetFactory.h"
+
+#include "Target_arm.h"
+#include "Target_i386.h"
+#include "Target_m68k.h"
+#include "Target_powerpc.h"
+#include "Target_lm32.h"
+#include "Target_sparc.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+namespace Target {
+
+ //!
+ //! @brief TargetBase Factory Table Entry
+ //!
+ //! This structure contains the @a name associated with the target
+ //! in the configuration structures. The table of names is scanned
+ //! to find a constructor helper.
+ //!
+ typedef struct {
+ //! This is the string found in configuration to match.
+ const char *theTarget;
+ //! This is the static wrapper for the constructor.
+ TargetBase *(*theCtor)(
+ std::string
+ );
+ } FactoryEntry_t;
+
+ //!
+ //! @brief TargetBase Factory Table
+ //!
+ //! This is the table of possible types we can construct
+ //! dynamically based upon user specified configuration information.
+ //! All must be derived from TargetBase.
+ //!
+ static FactoryEntry_t FactoryTable[] = {
+ { "arm", Target_arm_Constructor },
+ { "i386", Target_i386_Constructor },
+ { "lm32", Target_lm32_Constructor },
+ { "m68k", Target_m68k_Constructor },
+ { "powerpc", Target_powerpc_Constructor },
+ { "sparc", Target_sparc_Constructor },
+ { "TBD", NULL },
+ };
+
+ TargetBase* TargetFactory(
+ std::string targetName
+ )
+ {
+ size_t i;
+ std::string cpu;
+
+ i = targetName.find( '-' );
+ if ( i == targetName.npos )
+ cpu = targetName;
+ else
+ cpu = targetName.substr( 0, i );
+
+ // fprintf( stderr, "%s --> %s\n", targetName.c_str(), cpu.c_str());
+ // Iterate over the table trying to find an entry with a matching name
+ for ( i=0 ; i < sizeof(FactoryTable) / sizeof(FactoryEntry_t); i++ ) {
+ if ( !strcmp(FactoryTable[i].theTarget, cpu.c_str() ) )
+ return FactoryTable[i].theCtor( targetName );
+ }
+
+ fprintf(
+ stderr,
+ "ERROR!!! %s is not a known architecture!!!\n",
+ cpu.c_str()
+ );
+ fprintf( stderr, "-- fix me\n" );
+ exit( 1 );
+
+ return NULL;
+ }
+}