diff options
author | Jennifer Averett <Jennifer.Averett@OARcorp.com> | 2010-05-24 20:07:09 +0000 |
---|---|---|
committer | Jennifer Averett <Jennifer.Averett@OARcorp.com> | 2010-05-24 20:07:09 +0000 |
commit | a518bc5b1a39e27a75bb5510ebf272c7658144b1 (patch) | |
tree | 5c8e7bcfb36f333f88f94673627addd5fcd7969d /covoar/TargetFactory.cc | |
parent | 2010-05-24 Jennifer Averett <Jennifer.Averett@OARcorp.com> (diff) | |
download | rtems-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.cc | 90 |
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; + } +} |