Kinetis Bootloader Host  2.0.0
Host Tools for Kinetis devices
ConversionController.h
1 /*
2  * File: ConversionController.h
3  *
4  * Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
5  * See included license file for license details.
6  */
7 #if !defined(_ConversionController_h_)
8 #define _ConversionController_h_
9 
10 #include <iostream>
11 #include <fstream>
12 #include <string>
13 #include <stdexcept>
14 #include "smart_ptr.h"
15 #include "ElftosbLexer.h"
16 #include "ElftosbAST.h"
17 #include "EvalContext.h"
18 #include "Value.h"
19 #include "SourceFile.h"
20 #include "Operation.h"
21 #include "DataSource.h"
22 #include "DataTarget.h"
23 #include "OutputSection.h"
24 #include "BootImage.h"
25 #include "OptionDictionary.h"
26 #include "BootImageGenerator.h"
27 #include "Keyblob.h"
28 
29 namespace elftosb
30 {
49 {
50 public:
53 
55  virtual ~ConversionController();
56 
58 
59  void setCommandFilePath(const std::string &path);
61 
63  void addExternalFilePath(const std::string &path);
65 
67 
68  void run();
70 
74 
76 
77  virtual bool hasSourceFile(const std::string &name);
79 
81  virtual SourceFile *getSourceFile(const std::string &name);
82 
86 
88  inline EvalContext &getEvalContext() { return m_context; }
89 protected:
91 
92  void parseCommandFile();
93  void processOptions(ListASTNode *options);
94  void processConstants(ListASTNode *constants);
95  void processSources(ListASTNode *sources);
96  void processKeyblob(ExprASTNode *idExpr, ListASTNode *entires);
97  void processSections(ListASTNode *sections);
99  uint32_t sectionID,
100  OptionDictionary *optionsDict);
102 
104 
113  OperationSequence *convertEraseStatement(EraseStatementASTNode *statement);
114  OperationSequence *convertMemEnableStatement(MemEnableStatementASTNode *statement);
119 
121 
122  Value *convertAssignmentNodeToValue(ASTNode *node, std::string &ident);
123  SourceFile *getSourceFromName(std::string *sourceName, int line);
126  std::string *substituteVariables(const std::string *message);
127  DataSource *createIVTDataSource(IVTConstASTNode *ivtNode);
129 
131 
132  void testLexer(ElftosbLexer &lexer);
133  void printIntConstExpr(const std::string &ident, IntConstExprASTNode *expr);
135 
136 protected:
137  typedef std::map<std::string, SourceFile *> source_map_t;
138  typedef std::vector<std::string> path_vector_t;
139  typedef std::vector<OutputSection *> section_vector_t;
140  typedef std::vector<std::string> source_name_vector_t;
141  typedef std::vector<Keyblob *> keyblob_vector_t;
142 
146  source_map_t m_sources;
147  path_vector_t m_externPaths;
149  section_vector_t m_outputSections;
150  source_name_vector_t m_failedSources;
151  keyblob_vector_t m_keyblobs;
154 };
155 
160 extern bool g_enableHABSupport;
161 
162 }; // namespace elftosb
163 
164 #endif // _ConversionController_h_
smart_ptr< CommandFileASTNode > m_ast
Root of the abstract syntax tree.
Definition: ConversionController.h:144
Abstract base class for data sources.
Definition: apps/elftosb/common/DataSource.h:33
OperationSequence * convertOneStatement(StatementASTNode *statement)
Definition: ConversionController.cpp:714
OperationSequence * convertKeywrapStatement(KeywrapStatementASTNode *statement)
Definition: ConversionController.cpp:1042
Ordered sequence of operations.
Definition: Operation.h:323
void processConstants(ListASTNode *constants)
Definition: ConversionController.cpp:269
virtual SourceFile * getDefaultSourceFile()
Returns the default source file, or NULL if none is set.
Definition: ConversionController.cpp:88
Definition: ElftosbAST.h:329
void processOptions(ListASTNode *options)
Definition: ConversionController.cpp:236
Definition: ElftosbAST.h:1420
OperationSequence * convertIfStatement(IfStatementASTNode *statement)
Definition: ConversionController.cpp:1180
Definition: ElftosbAST.h:882
void handleMessageStatement(MessageStatementASTNode *statement)
Definition: ConversionController.cpp:1403
std::vector< Keyblob * > keyblob_vector_t
List of keyblobs.
Definition: ConversionController.h:141
Node for a constant IVT structure as used by HAB4.
Definition: ElftosbAST.h:691
DataTarget * createTargetFromNode(ASTNode *targetNode)
Definition: ConversionController.cpp:1737
BootImage * generateOutput(BootImageGenerator *generator)
Uses a BootImageGenerator object to create the final output boot image.
Definition: ConversionController.cpp:1536
virtual bool hasSourceFile(const std::string &name)
Returns true if a source file with the name name exists.
Definition: ConversionController.cpp:73
Definition: ElftosbAST.h:1394
void setCommandFilePath(const std::string &path)
Specify the command file that controls the conversion process.
Definition: ConversionController.cpp:60
Definition: ElftosbAST.h:900
std::vector< OutputSection * > section_vector_t
List of output sections.
Definition: ConversionController.h:139
path_vector_t m_externPaths
Paths provided on the command line by the user.
Definition: ConversionController.h:147
std::vector< std::string > path_vector_t
List of file paths.
Definition: ConversionController.h:138
Concrete implementation of OptionContext.
Definition: OptionDictionary.h:27
OperationSequence * convertModeStatement(ModeStatementASTNode *statement)
Definition: ConversionController.cpp:1127
OutputSection * convertDataSection(DataSectionContentsASTNode *dataSection, uint32_t sectionID, OptionDictionary *optionsDict)
Definition: ConversionController.cpp:590
void run()
Process input files.
Definition: ConversionController.cpp:115
SourceFile * m_defaultSource
Source to use when one isn&#39;t provided.
Definition: ConversionController.h:148
Context for evaluating AST tree and expressions.
Definition: EvalContext.h:28
Simple, standard smart pointer class.
Definition: apps/elftosb/common/smart_ptr.h:18
Statement to print a message to the elftosb user.
Definition: ElftosbAST.h:1003
void testLexer(ElftosbLexer &lexer)
Definition: ConversionController.cpp:1885
section_vector_t m_outputSections
List of output sections the user wants.
Definition: ConversionController.h:149
void parseCommandFile()
Definition: ConversionController.cpp:176
source_name_vector_t m_failedSources
List of sources that failed to open successfully.
Definition: ConversionController.h:150
void processSources(ListASTNode *sources)
Definition: ConversionController.cpp:302
OperationSequence * convertEncryptStatement(EncryptStatementASTNode *statement)
Definition: ConversionController.cpp:1084
keyblob_vector_t m_keyblobs
List of keyblobs the user defines.
Definition: ConversionController.h:151
Definition: BootImage.h:13
std::map< std::string, SourceFile * > source_map_t
Map from source name to object.
Definition: ConversionController.h:137
Abstract base class for a source file containing executable code.
Definition: apps/elftosb/common/SourceFile.h:33
Definition: ElftosbAST.h:1448
Abstract interface for a manager of source files.
Definition: EvalContext.h:34
Abstract base class for the target address or range of data.
Definition: apps/elftosb/common/DataTarget.h:34
Abstract base class for values of arbitrary types.
Definition: apps/elftosb/common/Value.h:20
OperationSequence * convertFromStatement(FromStatementASTNode *statement)
Definition: ConversionController.cpp:1003
OperationSequence * convertResetStatement(ResetStatementASTNode *statement)
Creates a Reset Operation object and returns an OperationSequence containing it.
Definition: ConversionController.cpp:1167
AST node for a call statement.
Definition: ElftosbAST.h:1080
Value * convertAssignmentNodeToValue(ASTNode *node, std::string &ident)
Definition: ConversionController.cpp:625
Statement to insert a ROM_ERASE_CMD command.
Definition: ElftosbAST.h:960
ConversionController()
Default constructor.
Definition: ConversionController.cpp:36
OperationSequence * convertStatementList(ListASTNode *statements)
Definition: ConversionController.cpp:684
Node representing a raw binary section definition.
Definition: ElftosbAST.h:836
OperationSequence * convertCallStatement(CallStatementASTNode *statement)
Definition: ConversionController.cpp:914
Keyblob specification.
Definition: Keyblob.h:27
Manages the entire elftosb file conversion process.
Definition: ConversionController.h:48
virtual SourceFile * getSourceFile(const std::string &name)
Gets the requested source file.
Definition: ConversionController.cpp:78
EvalContext & getEvalContext()
Returns a reference to the context used for expression evaluation.
Definition: ConversionController.h:88
void addExternalFilePath(const std::string &path)
Specify the path of a file provided by the user from outside the command file.
Definition: ConversionController.cpp:68
void processKeyblob(ExprASTNode *idExpr, ListASTNode *entires)
Definition: ConversionController.cpp:420
std::vector< std::string > source_name_vector_t
List of source names.
Definition: ConversionController.h:140
EvalContext m_context
Evaluation context for expressions.
Definition: ConversionController.h:145
Abstract base class for all boot image format classes.
Definition: BootImage.h:25
Keyblob * m_encryptKeyblob
Keyblob used for OTFAD encryption.
Definition: ConversionController.h:153
Statement to insert a ROM_MEM_ENABLE_CMD command.
Definition: ElftosbAST.h:1160
Abstract base class for all expression AST nodes.
Definition: ElftosbAST.h:231
Statement to insert a ROM_MODE_CMD command.
Definition: ElftosbAST.h:932
Keyblob * m_keywrapKeyblob
Keyblob used for keywrapping.
Definition: ConversionController.h:152
smart_ptr< std::string > m_commandFilePath
Path to command file.
Definition: ConversionController.h:143
DataSource * createSourceFromNode(ASTNode *dataNode)
Definition: ConversionController.cpp:1568
OperationSequence * convertLoadStatement(LoadStatementASTNode *statement)
Definition: ConversionController.cpp:810
Abstract base class for generators of specific boot image formats.
Definition: BootImageGenerator.h:33
virtual ~ConversionController()
Destructor.
Definition: ConversionController.cpp:47
AST node for a load statement.
Definition: ElftosbAST.h:1040
AST node that contains other AST nodes.
Definition: ElftosbAST.h:107
Statement to insert a ROM_RESET_CMD command.
Definition: ElftosbAST.h:1138
Base class for data model of sections of the output file.
Definition: OutputSection.h:20
source_map_t m_sources
Map of source names to file objects.
Definition: ConversionController.h:146
SourceFile * getSourceFromName(std::string *sourceName, int line)
Definition: ConversionController.cpp:1841
void printIntConstExpr(const std::string &ident, IntConstExprASTNode *expr)
Definition: ConversionController.cpp:1917
std::string * substituteVariables(const std::string *message)
Definition: ConversionController.cpp:1449
The base class for all AST node classes.
Definition: ElftosbAST.h:33
Lexical scanner class for elftosb command files.
Definition: ElftosbLexer.h:62