ROSE  0.9.6a
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
binaryInstruction.C
Go to the documentation of this file.
1 /******************************************************************************************************************************
2  * NOTE: For any given IR class, please keep all its parts as close together as possible. Its bad enough that we're
3  * defining classes in a non-C-like language -- and it's painful when a definition is scattered all over this file. We
4  * already have four places to look to get the definition of an IR class:
5  * (1) here, in this source file, built with ROSETTA functions
6  * (2) additional declarations between HEADER_* markers in ../Grammar/BinaryInstruction.code (which we can't
7  * even parse as a C++ file, making IDEs useless there).
8  * (3) function definitions between SOURCE_* markers in ../Grammar/BinaryInstruction.code, which for some
9  * reason are not next to the corresponding HEADER_ markers. Please migrate these definitions to *.C files
10  * whenever you have an opportunity, so that IDEs can see the definitions.
11  * (4) Doxygen documentation in ../../../docs/testDoxygen directory since doxygen can't parse the IR classes
12  * from this source file. Documented entities are marked with a "DOXYGEN" comment here to make it more
13  * obvious when documentation is present.
14  *
15  * NOTE: First part of the file is for classes describing instructions. Middle part is for classes describing binary
16  * containers (organized by container type: ELF, DOS, PE, ...) Last part is the base classes. Unlike C++, the classes
17  * defined in this file need to be defined from the most specific (derived classes) to the most general (base class).
18  *
19  * NOTE: Please use three blank lines between IR node definitions to help make this file more readable. Unless those IR
20  * nodes are so closely related to one another that it's better to keep them close.
21  *-----------------------------------------------------------------------------------------------------------------------------*/
22 
23 #include "ROSETTA_macros.h"
24 #include "grammar.h"
25 #include "terminal.h"
26 
27 void
28 Grammar::setUpBinaryInstructions()
29 {
30  /**************************************************************************************************************************
31  * Instructions.
32  * Base class (SgAsmInstruction) and various subclasses, one per architecture.
33  **************************************************************************************************************************/
34 
35  NEW_TERMINAL_MACRO(AsmArmInstruction, "AsmArmInstruction", "AsmArmInstructionTag");
36  AsmArmInstruction.setFunctionPrototype("HEADER_BINARY_ARM_INSTRUCTION", "../Grammar/BinaryInstruction.code");
37  AsmArmInstruction.setDataPrototype("ArmInstructionKind", "kind", "= arm_unknown_instruction",
38  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
39  AsmArmInstruction.setDataPrototype("ArmInstructionCondition", "condition", "= arm_cond_unknown",
40  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
41  AsmArmInstruction.setDataPrototype("int", "positionOfConditionInMnemonic", "= -1",
42  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
43  AsmArmInstruction.setPredeclarationString("HEADER_BINARY_ARM_INSTRUCTION_PREDECLARATION",
44  "../Grammar/BinaryInstruction.code");
45 
46 
47 
48  NEW_TERMINAL_MACRO(Asmx86Instruction, "Asmx86Instruction", "Asmx86InstructionTag");
49  Asmx86Instruction.setFunctionPrototype("HEADER_BINARY_X86_INSTRUCTION", "../Grammar/BinaryInstruction.code");
50  Asmx86Instruction.setDataPrototype("X86InstructionKind", "kind", "= x86_unknown_instruction",
51  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
52  Asmx86Instruction.setDataPrototype("X86InstructionSize", "baseSize", "= x86_insnsize_none",
53  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
54  Asmx86Instruction.setDataPrototype("X86InstructionSize", "operandSize", "= x86_insnsize_none",
55  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
56  Asmx86Instruction.setDataPrototype("X86InstructionSize", "addressSize", "= x86_insnsize_none",
57  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
58  Asmx86Instruction.setDataPrototype("bool", "lockPrefix", "= false",
59  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
60  Asmx86Instruction.setDataPrototype("X86RepeatPrefix", "repeatPrefix", "= x86_repeat_none",
61  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
62  Asmx86Instruction.setDataPrototype("X86BranchPrediction", "branchPrediction", "= x86_branch_prediction_none",
63  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
64  Asmx86Instruction.setDataPrototype("X86SegmentRegister", "segmentOverride", "= x86_segreg_none",
65  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
66  Asmx86Instruction.setPredeclarationString("HEADER_BINARY_X86_INSTRUCTION_PREDECLARATION",
67  "../Grammar/BinaryInstruction.code");
68 
69 
70 
71  NEW_TERMINAL_MACRO(AsmPowerpcInstruction, "AsmPowerpcInstruction", "AsmPowerpcInstructionTag");
72  AsmPowerpcInstruction.setFunctionPrototype("HEADER_BINARY_POWERPC_INSTRUCTION", "../Grammar/BinaryInstruction.code");
73  AsmPowerpcInstruction.setDataPrototype("PowerpcInstructionKind", "kind", "= powerpc_unknown_instruction",
74  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
75  AsmPowerpcInstruction.setPredeclarationString("HEADER_BINARY_POWERPC_INSTRUCTION_PREDECLARATION",
76  "../Grammar/BinaryInstruction.code");
77 
78 
79 
80  NEW_TERMINAL_MACRO(AsmMipsInstruction, "AsmMipsInstruction", "AsmMipsInstructionTag");
81  AsmMipsInstruction.setFunctionPrototype("HEADER_BINARY_MIPS_INSTRUCTION", "../Grammar/BinaryInstruction.code");
82  AsmMipsInstruction.setDataPrototype("MipsInstructionKind", "kind", "= mips_unknown_instruction",
83  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
84  AsmMipsInstruction.setPredeclarationString("HEADER_BINARY_MIPS_INSTRUCTION_PREDECLARATION",
85  "../Grammar/BinaryInstruction.code");
86 
87 
88 
89  NEW_NONTERMINAL_MACRO(AsmInstruction,
90  Asmx86Instruction | AsmArmInstruction | AsmPowerpcInstruction | AsmMipsInstruction,
91  "AsmInstruction", "AsmInstructionTag", true);
92  AsmInstruction.setPredeclarationString("HEADER_BINARY_INSTRUCTION_PREDECLARATION", "../Grammar/BinaryInstruction.code");
93  AsmInstruction.setFunctionPrototype("HEADER_BINARY_INSTRUCTION", "../Grammar/BinaryInstruction.code");
94  AsmInstruction.setFunctionSource("SOURCE_BINARY_INSTRUCTION", "../Grammar/BinaryInstruction.code");
95  AsmInstruction.setDataPrototype("std::string", "mnemonic", "= \"\"",
96  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
97  AsmInstruction.setDataPrototype("SgUnsignedCharList", "raw_bytes", "",
98  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
99  AsmInstruction.setDataPrototype("SgAsmOperandList*", "operandList", "= NULL",
100  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE, COPY_DATA);
101  AsmInstruction.setDataPrototype("SgAsmStatementPtrList", "sources", "",
102  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
103 
104 
105 
106  /**************************************************************************************************************************
107  * Instruction Expressions
108  * Related functions and documentation can be found in src/frontend/Disassemblers/Expressions.C
109  **************************************************************************************************************************/
110 
111  NEW_TERMINAL_MACRO(AsmOperandList, "AsmOperandList", "AsmOperandListTag");
112  AsmOperandList.setFunctionPrototype("HEADER_BINARY_OPERAND_LIST", "../Grammar/BinaryInstruction.code");
113  AsmOperandList.setFunctionSource("SOURCE_BINARY_OPERAND_LIST", "../Grammar/BinaryInstruction.code");
114  AsmOperandList.setDataPrototype("SgAsmExpressionPtrList", "operands", "",
115  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
116 
117 
118 
119  // Binary expressions
120  NEW_TERMINAL_MACRO(AsmBinaryAdd, "AsmBinaryAdd", "AsmBinaryAddTag");
121  NEW_TERMINAL_MACRO(AsmBinarySubtract, "AsmBinarySubtract", "AsmBinarySubtractTag");
122  NEW_TERMINAL_MACRO(AsmBinaryMultiply, "AsmBinaryMultiply", "AsmBinaryMultiplyTag");
123  NEW_TERMINAL_MACRO(AsmBinaryDivide, "AsmBinaryDivide", "AsmBinaryDivideTag");
124  NEW_TERMINAL_MACRO(AsmBinaryMod, "AsmBinaryMod", "AsmBinaryModTag");
125  NEW_TERMINAL_MACRO(AsmBinaryAddPreupdate, "AsmBinaryAddPreupdate", "AsmBinaryAddPreupdateTag");
126  NEW_TERMINAL_MACRO(AsmBinarySubtractPreupdate, "AsmBinarySubtractPreupdate", "AsmBinarySubtractPreupdateTag");
127  NEW_TERMINAL_MACRO(AsmBinaryAddPostupdate, "AsmBinaryAddPostupdate", "AsmBinaryAddPostupdateTag");
128  NEW_TERMINAL_MACRO(AsmBinarySubtractPostupdate, "AsmBinarySubtractPostupdate", "AsmBinarySubtractPostupdateTag");
129  NEW_TERMINAL_MACRO(AsmBinaryLsl, "AsmBinaryLsl", "AsmBinaryLslTag");
130  NEW_TERMINAL_MACRO(AsmBinaryLsr, "AsmBinaryLsr", "AsmBinaryLsrTag");
131  NEW_TERMINAL_MACRO(AsmBinaryAsr, "AsmBinaryAsr", "AsmBinaryAsrTag");
132  NEW_TERMINAL_MACRO(AsmBinaryRor, "AsmBinaryRor", "AsmBinaryRorTag");
133  NEW_NONTERMINAL_MACRO(AsmBinaryExpression,
134  AsmBinaryAdd | AsmBinarySubtract | AsmBinaryMultiply |
135  AsmBinaryDivide | AsmBinaryMod | AsmBinaryAddPreupdate |
136  AsmBinarySubtractPreupdate | AsmBinaryAddPostupdate | AsmBinarySubtractPostupdate |
137  AsmBinaryLsl | AsmBinaryLsr | AsmBinaryAsr |
138  AsmBinaryRor,
139  "AsmBinaryExpression", "AsmBinaryExpressionTag", false);
140  AsmBinaryExpression.setDataPrototype("SgAsmExpression*", "lhs", "= NULL",
141  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
142  AsmBinaryExpression.setDataPrototype("SgAsmExpression*", "rhs", "= NULL",
143  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
144 
145 
146 
147  // Unary expressions
148  NEW_TERMINAL_MACRO(AsmUnaryPlus , "AsmUnaryPlus", "AsmUnaryPlusTag");
149  NEW_TERMINAL_MACRO(AsmUnaryMinus, "AsmUnaryMinus", "AsmUnaryMinusTag");
150  NEW_TERMINAL_MACRO(AsmUnaryRrx, "AsmUnaryRrx", "AsmUnaryRrxTag");
151  NEW_TERMINAL_MACRO(AsmUnaryArmSpecialRegisterList, "AsmUnaryArmSpecialRegisterList", "AsmUnaryArmSpecialRegisterListTag");
152  NEW_NONTERMINAL_MACRO(AsmUnaryExpression,
153  AsmUnaryPlus | AsmUnaryMinus | AsmUnaryRrx | AsmUnaryArmSpecialRegisterList,
154  "AsmUnaryExpression", "AsmUnaryExpressionTag", false);
155  AsmUnaryExpression.setDataPrototype("SgAsmExpression*", "operand", "= NULL",
156  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
157 
158 
159 
160  // References to registers
161  NEW_TERMINAL_MACRO(Asmx86RegisterReferenceExpression,
162  "Asmx86RegisterReferenceExpression", "Asmx86RegisterReferenceExpressionTag");
163  Asmx86RegisterReferenceExpression.setFunctionPrototype("HEADER_BINARY_X86_REGISTER_REFERENCE_EXPRESSION",
164  "../Grammar/BinaryInstruction.code");
165  Asmx86RegisterReferenceExpression.setFunctionSource("SOURCE_BINARY_X86_REGISTER_REFERENCE_EXPRESSION",
166  "../Grammar/BinaryInstruction.code");
167 
168 
169 
170  NEW_TERMINAL_MACRO(AsmArmRegisterReferenceExpression ,
171  "AsmArmRegisterReferenceExpression", "AsmArmRegisterReferenceExpressionTag");
172  AsmArmRegisterReferenceExpression.setFunctionPrototype("HEADER_BINARY_ARM_REGISTER_REFERENCE_EXPRESSION",
173  "../Grammar/BinaryInstruction.code");
174  AsmArmRegisterReferenceExpression.setDataPrototype("unsigned", "psr_mask", "=0",
175  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
176 
177 
178 
179  NEW_TERMINAL_MACRO(AsmPowerpcRegisterReferenceExpression,
180  "AsmPowerpcRegisterReferenceExpression", "AsmPowerpcRegisterReferenceExpressionTag");
181 
182 
183 
184 
185  NEW_TERMINAL_MACRO(AsmMipsRegisterReferenceExpression,
186  "AsmMipsRegisterReferenceExpression", "AsmMipsRegisterReferenceExpressionTag");
187 
188 
189 
190 
191  NEW_NONTERMINAL_MACRO(AsmRegisterReferenceExpression ,
192  Asmx86RegisterReferenceExpression | AsmArmRegisterReferenceExpression |
193  AsmPowerpcRegisterReferenceExpression | AsmMipsRegisterReferenceExpression,
194  "AsmRegisterReferenceExpression", "AsmRegisterReferenceExpressionTag" , false);
195  AsmRegisterReferenceExpression.setDataPrototype("RegisterDescriptor", "descriptor", "",
196  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
197 
198 
199 
200  NEW_TERMINAL_MACRO(AsmIntegerValueExpression, "AsmIntegerValueExpression", "AsmIntegerValueExpressionTag");
201  AsmIntegerValueExpression.setFunctionPrototype("HEADER_INTEGER_VALUE_EXPRESSION", "../Grammar/BinaryInstruction.code");
202  AsmIntegerValueExpression.setDataPrototype("SgNode*", "base_node", "=NULL",
203  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
204  AsmIntegerValueExpression.setDataPrototype("uint64_t", "relative_value", "=NULL",
205  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
206  AsmIntegerValueExpression.setDataPrototype("size_t", "significant_bits", "=0",
207  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
208 
209 
210  // Floating point constants (FIXME: These use x86 nomenclature and will likely be changed. [Robb P. Matzke 2013-02-13])
211  NEW_TERMINAL_MACRO(AsmSingleFloatValueExpression, "AsmSingleFloatValueExpression", "AsmSingleFloatValueExpressionTag");
212  AsmSingleFloatValueExpression.setFunctionPrototype("HEADER_SINGLE_FLOAT_VALUE_EXPRESSION",
213  "../Grammar/BinaryInstruction.code");
214  AsmSingleFloatValueExpression.setFunctionSource("SOURCE_SINGLE_FLOAT_VALUE_EXPRESSION", "../Grammar/BinaryInstruction.code");
215  AsmSingleFloatValueExpression.setAutomaticGenerationOfConstructor(false); // we need to set the "p_type" member
216  AsmSingleFloatValueExpression.setDataPrototype("float", "value", "= 0.0F",
217  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
218 
219 
220 
221  NEW_TERMINAL_MACRO(AsmDoubleFloatValueExpression, "AsmDoubleFloatValueExpression", "AsmDoubleFloatValueExpressionTag");
222  AsmDoubleFloatValueExpression.setFunctionPrototype("HEADER_DOUBLE_FLOAT_VALUE_EXPRESSION",
223  "../Grammar/BinaryInstruction.code");
224  AsmDoubleFloatValueExpression.setFunctionSource("SOURCE_DOUBLE_FLOAT_VALUE_EXPRESSION", "../Grammar/BinaryInstruction.code");
225  AsmDoubleFloatValueExpression.setAutomaticGenerationOfConstructor(false); // we need to set the "p_type" member
226  AsmDoubleFloatValueExpression.setDataPrototype("double", "value", "= 0.0",
227  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
228 
229 
230 
231 
232 
233  // Values that are addresses or references to data will have symbols in a function symbol table. All other
234  // values are assumed to be literals and will not have associated symbols.
235  NEW_NONTERMINAL_MACRO(AsmValueExpression,
236  AsmIntegerValueExpression | AsmSingleFloatValueExpression | AsmDoubleFloatValueExpression,
237  "AsmValueExpression", "AsmValueExpressionTag", false);
238  AsmValueExpression.setDataPrototype("SgAsmValueExpression*", "unfolded_expression_tree", "= NULL",
239  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
240  AsmValueExpression.setDataPrototype("unsigned short", "bit_offset", "= 0", // DOXYGEN
241  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
242  AsmValueExpression.setDataPrototype("unsigned short", "bit_size", "= 0", // DOXYGEN
243  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
244  AsmValueExpression.setDataPrototype("SgSymbol*", "symbol", "= NULL",
245  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
246 
247 
248  // References to memory
249  NEW_TERMINAL_MACRO(AsmMemoryReferenceExpression, "AsmMemoryReferenceExpression", "AsmMemoryReferenceExpressionTag");
250  AsmMemoryReferenceExpression.setDataPrototype("SgAsmExpression*", "address", "= NULL",
251  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
252  AsmMemoryReferenceExpression.setDataPrototype("SgAsmExpression*", "segment", "= NULL",
253  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
254 
255 
256 
257  NEW_TERMINAL_MACRO(AsmControlFlagsExpression, "AsmControlFlagsExpression", "AsmControlFlagsExpressionTag");
258  AsmControlFlagsExpression.setDataPrototype("unsigned long", "bit_flags", "= 0",
259  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
260 
261 
262 
263  NEW_TERMINAL_MACRO(AsmCommonSubExpression, "AsmCommonSubExpression", "AsmCommonSubExpressionTag");
264  AsmCommonSubExpression.setDataPrototype("SgAsmExpression*", "subexpression", "= 0",
265  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
266 
267 
268 
269  // Lists of expressions
270  NEW_TERMINAL_MACRO(AsmExprListExp, "AsmExprListExp", "AsmExprListExpTag");
271  AsmExprListExp.setDataPrototype("SgAsmExpressionPtrList", "expressions", "",
272  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
273 
274 
275 
276  // Top-level expression
277  // FIXME: p_replacement is only set by RoseBin_IDAPRO_buildTree::resolveRecursivelyExpression() and appears to be used only
278  // in a couple of files in src/midend/binaryAnalsyses (and elsewhere only for converting a SgAsmExpression to a
279  // string). It seems to hold the name of a function, such as "_malloc" or "malloc@plt" for branch instructions. It
280  // should be possible to obtain the function name by looking up the instruction at the branch target and then
281  // following parent links in the AST until we reach the SgAsmFunction node, which has a get_name() method.
282  // [RPM 2009-07-16].
283  NEW_NONTERMINAL_MACRO(AsmExpression,
284  AsmValueExpression | AsmBinaryExpression | AsmUnaryExpression |
285  AsmMemoryReferenceExpression | AsmRegisterReferenceExpression | AsmControlFlagsExpression |
286  AsmCommonSubExpression | AsmExprListExp,
287  "AsmExpression", "AsmExpressionTag", false);
288  AsmExpression.setDataPrototype("SgAsmType*", "type", "= NULL",
289  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
290  AsmExpression.setDataPrototype("std::string", "replacement", "= \"\"",
291  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
292  AsmExpression.setDataPrototype("std::string", "comment", "= \"\"",
293  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
294 
295 
296 
297  /**************************************************************************************************************************
298  * Data types
299  * These are attached to the SgAsmNode object (the root for the IR used for binaries)
300  **************************************************************************************************************************/
301 
302  NEW_TERMINAL_MACRO(AsmTypeByte, "AsmTypeByte", "AsmTypeByteTag");
303  AsmTypeByte.setFunctionPrototype("HEADER_BINARY_TYPE_BYTE", "../Grammar/BinaryInstruction.code");
304  AsmTypeByte.setFunctionSource("SOURCE_BINARY_TYPE_BYTE", "../Grammar/BinaryInstruction.code");
305  AsmTypeByte.setDataPrototype("static $CLASSNAME*", "builtin_type", "",
306  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL || TYPE_TRAVERSAL,
307  NO_DELETE, NO_COPY_DATA); // FIXME: Should that be '|' rather than '||'? [RPM 2011-09-26]
308 
309  NEW_TERMINAL_MACRO(AsmTypeWord, "AsmTypeWord", "AsmTypeWordTag");
310  AsmTypeWord.setFunctionPrototype("HEADER_BINARY_TYPE_WORD", "../Grammar/BinaryInstruction.code");
311  AsmTypeWord.setFunctionSource("SOURCE_BINARY_TYPE_WORD", "../Grammar/BinaryInstruction.code");
312  AsmTypeWord.setDataPrototype("static $CLASSNAME*", "builtin_type", "",
313  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL || TYPE_TRAVERSAL,
314  NO_DELETE, NO_COPY_DATA);
315 
316  NEW_TERMINAL_MACRO(AsmTypeDoubleWord, "AsmTypeDoubleWord", "AsmTypeDoubleWordTag");
317  AsmTypeDoubleWord.setFunctionPrototype("HEADER_BINARY_TYPE_DOUBLE_WORD", "../Grammar/BinaryInstruction.code");
318  AsmTypeDoubleWord.setFunctionSource("SOURCE_BINARY_TYPE_DOUBLE_WORD", "../Grammar/BinaryInstruction.code");
319  AsmTypeDoubleWord.setDataPrototype("static $CLASSNAME*", "builtin_type", "",
320  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL || TYPE_TRAVERSAL,
321  NO_DELETE, NO_COPY_DATA);
322 
323  NEW_TERMINAL_MACRO(AsmTypeQuadWord, "AsmTypeQuadWord", "AsmTypeQuadWordTag");
324  AsmTypeQuadWord.setFunctionPrototype("HEADER_BINARY_TYPE_QUAD_WORD", "../Grammar/BinaryInstruction.code");
325  AsmTypeQuadWord.setFunctionSource("SOURCE_BINARY_TYPE_QUAD_WORD", "../Grammar/BinaryInstruction.code");
326  AsmTypeQuadWord.setDataPrototype("static $CLASSNAME*", "builtin_type", "",
327  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL || TYPE_TRAVERSAL,
328  NO_DELETE, NO_COPY_DATA);
329 
330  NEW_TERMINAL_MACRO(AsmTypeDoubleQuadWord, "AsmTypeDoubleQuadWord", "AsmTypeDoubleQuadWordTag");
331  AsmTypeDoubleQuadWord.setFunctionPrototype("HEADER_BINARY_TYPE_DOUBLE_QUAD_WORD", "../Grammar/BinaryInstruction.code");
332  AsmTypeDoubleQuadWord.setFunctionSource("SOURCE_BINARY_TYPE_DOUBLE_QUAD_WORD", "../Grammar/BinaryInstruction.code");
333  AsmTypeDoubleQuadWord.setDataPrototype("static $CLASSNAME*", "builtin_type", "",
334  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL || TYPE_TRAVERSAL,
335  NO_DELETE, NO_COPY_DATA);
336 
337  NEW_TERMINAL_MACRO(AsmTypeSingleFloat, "AsmTypeSingleFloat", "AsmTypeSingleFloatTag");
338  AsmTypeSingleFloat.setFunctionPrototype("HEADER_BINARY_TYPE_SINGLE_FLOAT", "../Grammar/BinaryInstruction.code");
339  AsmTypeSingleFloat.setFunctionSource("SOURCE_BINARY_TYPE_SINGLE_FLOAT", "../Grammar/BinaryInstruction.code");
340  AsmTypeSingleFloat.setDataPrototype("static $CLASSNAME*", "builtin_type", "",
341  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL || TYPE_TRAVERSAL,
342  NO_DELETE, NO_COPY_DATA);
343 
344  NEW_TERMINAL_MACRO(AsmTypeDoubleFloat, "AsmTypeDoubleFloat", "AsmTypeDoubleFloatTag");
345  AsmTypeDoubleFloat.setFunctionPrototype("HEADER_BINARY_TYPE_DOUBLE_FLOAT", "../Grammar/BinaryInstruction.code");
346  AsmTypeDoubleFloat.setFunctionSource("SOURCE_BINARY_TYPE_DOUBLE_FLOAT", "../Grammar/BinaryInstruction.code");
347  AsmTypeDoubleFloat.setDataPrototype("static $CLASSNAME*", "builtin_type", "",
348  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL || TYPE_TRAVERSAL,
349  NO_DELETE, NO_COPY_DATA);
350 
351  NEW_TERMINAL_MACRO(AsmType80bitFloat, "AsmType80bitFloat", "AsmType80bitFloatTag");
352  AsmType80bitFloat.setFunctionPrototype("HEADER_BINARY_TYPE_80bit_FLOAT", "../Grammar/BinaryInstruction.code");
353  AsmType80bitFloat.setFunctionSource("SOURCE_BINARY_TYPE_80bit_FLOAT", "../Grammar/BinaryInstruction.code");
354  AsmType80bitFloat.setDataPrototype("static $CLASSNAME*", "builtin_type", "",
355  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL || TYPE_TRAVERSAL,
356  NO_DELETE, NO_COPY_DATA);
357 
358  NEW_TERMINAL_MACRO(AsmType128bitFloat, "AsmType128bitFloat", "AsmType128bitFloatTag");
359  AsmType128bitFloat.setFunctionPrototype("HEADER_BINARY_TYPE_128bit_FLOAT", "../Grammar/BinaryInstruction.code");
360  AsmType128bitFloat.setFunctionSource("SOURCE_BINARY_TYPE_128bit_FLOAT", "../Grammar/BinaryInstruction.code");
361  AsmType128bitFloat.setDataPrototype("static $CLASSNAME*", "builtin_type", "",
362  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL || TYPE_TRAVERSAL,
363  NO_DELETE, NO_COPY_DATA);
364 
365  NEW_TERMINAL_MACRO(AsmTypeVector, "AsmTypeVector", "AsmTypeVectorTag");
366  AsmTypeVector.setFunctionPrototype("HEADER_BINARY_TYPE_VECTOR", "../Grammar/BinaryInstruction.code");
367  AsmTypeVector.setFunctionSource("SOURCE_BINARY_TYPE_VECTOR", "../Grammar/BinaryInstruction.code");
368  AsmTypeVector.setDataPrototype("int", "elementCount", "= 0",
369  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
370  AsmTypeVector.setDataPrototype("SgAsmType*", "elementType", "= NULL",
371  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
372 
373  NEW_NONTERMINAL_MACRO(AsmType,
374  AsmTypeByte | AsmTypeWord | AsmTypeDoubleWord |
375  AsmTypeQuadWord | AsmTypeDoubleQuadWord | AsmType80bitFloat |
376  AsmType128bitFloat | AsmTypeSingleFloat | AsmTypeDoubleFloat |
377  AsmTypeVector,
378  "AsmType", "AsmTypeTag", false);
379 
380 
381 
382  /**************************************************************************************************************************
383  * Collections of Instructions
384  **************************************************************************************************************************/
385 
386  // A function is a collection of blocks holding instructions (basic blocks) or static data. Instructions might have
387  // references to addresses or data which are described by symbols (not to be confused with the binary's symbol table) in
388  // the function's symbol table (the SgAsmFunction::symbol_table member).
389  NEW_TERMINAL_MACRO(AsmFunction, "AsmFunction", "AsmFunctionTag");
390  AsmFunction.setFunctionPrototype("HEADER_BINARY_FUNCTION_DECLARATION", "../Grammar/BinaryInstruction.code");
391  AsmFunction.setFunctionSource("SOURCE_BINARY_FUNCTION_DECLARATION", "../Grammar/BinaryInstruction.code");
392  AsmFunction.setDataPrototype("std::string", "name", "= \"\"",
393  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
394  AsmFunction.setDataPrototype("unsigned", "reason", "= SgAsmFunction::FUNC_NONE", /*bit flags*/
395  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
396  AsmFunction.setDataPrototype("SgAsmFunction::function_kind_enum", "function_kind", "= SgAsmFunction::e_unknown",
397  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
398  AsmFunction.setDataPrototype("SgAsmFunction::MayReturn", "may_return", "= SgAsmFunction::RET_UNKNOWN",
399  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
400  AsmFunction.setDataPrototype("std::string", "name_md5", "= \"\"",
401  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
402  AsmFunction.setDataPrototype("SgAsmStatementPtrList", "statementList", "",
403  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
404  AsmFunction.setDataPrototype("SgAsmStatementPtrList", "dest", "",
405  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
406  AsmFunction.setDataPrototype("rose_addr_t", "entry_va", "= 0", /*entry point virtual address*/
407  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
408  AsmFunction.setDataPrototype("SgSymbolTable*", "symbol_table", "= NULL",
409  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, DEF_DELETE, NO_COPY_DATA);
410  AsmFunction.setDataPrototype("size_t", "cached_vertex", "= (size_t)(-1)", // see BinaryAnalysis::FunctionCall
411  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
412 
413 
414 
415  // Instruction basic block. One entry point (first instruction) and one exit point (last instruction). However,
416  // SgAsmBlock is also used for other things, such as collections of functions.
417  NEW_TERMINAL_MACRO(AsmBlock, "AsmBlock", "AsmBlockTag");
418  AsmBlock.setFunctionPrototype("HEADER_BINARY_BLOCK", "../Grammar/BinaryInstruction.code");
419  AsmBlock.setFunctionSource("SOURCE_BINARY_BLOCK", "../Grammar/BinaryInstruction.code");
420  AsmBlock.setDataPrototype("rose_addr_t", "next_block_true_address", "= 0", // [tps 05Apr07] needed for the control_flow_graph
421  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
422  AsmBlock.setDataPrototype("rose_addr_t", "next_block_false_address", "= 0",
423  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
424  AsmBlock.setDataPrototype("rose_addr_t", "id", "= 0",
425  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
426  AsmBlock.setDataPrototype("unsigned", "reason", "= SgAsmBlock::BLK_NONE", // why this block exists
427  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
428  AsmBlock.setDataPrototype("SgAsmStatementPtrList", "statementList", "", //in order of execution
429  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
430  AsmBlock.setDataPrototype("SgAsmIntegerValuePtrList", "successors", "",
431  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
432  AsmBlock.setDataPrototype("bool", "successors_complete", "= false",
433  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
434  AsmBlock.setDataPrototype("SgAsmBlock*", "immediate_dominator", "=NULL",
435  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
436  AsmBlock.setDataPrototype("size_t", "cached_vertex", "= (size_t)(-1)", // see BinaryAnalysis::ControlFlow
437  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
438  AsmBlock.setDataPrototype("double", "code_likelihood", "= 0.0",
439  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
440 
441 
442 
443  // Represents static data in an executable. For now, we don't associate any type with the data because ROSE's data type
444  // infrastructure (source or binary) is not capable of representing the information we need: multiple interpretations of
445  // overlapping parts of memory (i.e., two or more types for the same bytes); arbitrary offsets and padding in structured
446  // types; size-specific integers and floating-point types; regions of unknown type; ease of improving type information by
447  // filling in more details as the type is discovered; etc.
448  NEW_TERMINAL_MACRO(AsmStaticData, "AsmStaticData", "AsmStaticDataTag");
449  AsmStaticData.setFunctionPrototype("HEADER_STATIC_DATA", "../Grammar/BinaryInstruction.code");
450  AsmStaticData.setDataPrototype("SgUnsignedCharList", "raw_bytes", "",
451  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
452 
453 
454 
455  // Declaration-like nodes that encapsulate multiple instructions. Binary ASTs have two sides: the container side that
456  // corresponds to the ELF/PE/etc. file formats, and the interpretation side that corresponds to instructions and data from
457  // multiple sources (specimen + dynamic libraries) organized into multiple SgAsmInterpretation where each interpretation
458  // makes a coherent binary entity such as the DOS part of a PE executable. The declaration-like nodes that follow appear
459  // on the interpretation side of the AST. We may add other declaration nodes to the container side of the AST at a later
460  // time.
461  //
462  // These interpretation-side declaration-like nodes are used by the projects/BinaryDataStructureRecognition even if they
463  // aren't used internally by ROSE.
464  NEW_TERMINAL_MACRO(AsmSynthesizedDataStructureDeclaration,
465  "AsmSynthesizedDataStructureDeclaration", "AsmSynthesizedDataStructureDeclarationTag");
466  AsmSynthesizedDataStructureDeclaration.setFunctionPrototype("HEADER_BINARY_DATA_STRUCTURE",
467  "../Grammar/BinaryInstruction.code");
468  AsmSynthesizedDataStructureDeclaration.setFunctionSource("SOURCE_BINARY_DATA_STRUCTURE",
469  "../Grammar/BinaryInstruction.code");
470 #if 0
471  // DQ (3/15/2007): I can't seem to get this to compile so I will leave it out for now!
472  // Binaries have some easily resolved data structures so we use this to represent these
473  AsmDataStructureDeclaration.setDataPrototype("std::list<SgAsmDeclaration*>","declarationList","",
474  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL,
475  NO_DELETE, COPY_DATA);
476 #endif
477 
478 
479 
480  NEW_TERMINAL_MACRO(AsmSynthesizedFieldDeclaration, "AsmSynthesizedFieldDeclaration", "AsmSynthesizedFieldDeclarationTag");
481  // These are used as data members in AsmDataStructureDeclaration
482  AsmSynthesizedFieldDeclaration.setDataPrototype("std::string","name","= \"\"",
483  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
484  // Not clear if we want to store the offset explicitly
485  AsmSynthesizedFieldDeclaration.setDataPrototype("uint64_t","offset","= 0",
486  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
487 
488 
489 
490  // DQ (9/2/2013): We may later wish to change "AsmFunction" to "AsmSynthesizedFunction", since functions are
491  // philosophically a synthesized concept within a binary (except where Binary API standards must be followed to permit
492  // seperate compilation).
493  // RPM (9/18/2013): On the other hand, most things on the interpretation side of the AST will be synthesized: basic
494  // blocks, functions, code vs. data, thunk tables, trampolines, exception handling structures, data types, CFG structures
495  // like switch statements, ... do users want or need "synthesized" in all those node type names?
496  NEW_NONTERMINAL_MACRO(AsmSynthesizedDeclaration,
497  AsmSynthesizedDataStructureDeclaration | AsmFunction | AsmSynthesizedFieldDeclaration,
498  "AsmSynthesizedDeclaration", "AsmSynthesizedDeclarationTag", false );
499  AsmSynthesizedDeclaration.setFunctionPrototype("HEADER_BINARY_DECLARATION", "../Grammar/BinaryInstruction.code");
500 
501 
502 
503  NEW_NONTERMINAL_MACRO(AsmStatement,
504  AsmSynthesizedDeclaration | AsmBlock | AsmInstruction | AsmStaticData,
505  "AsmStatement", "AsmStatementTag", false);
506  AsmStatement.setDataPrototype("rose_addr_t", "address", "= 0",
507  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
508  AsmStatement.setDataPrototype("std::string", "comment", "= \"\"",
509  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, COPY_DATA);
510 
511 
512 
513  /*************************************************************************************************************************
514  * Binary Interpretations
515  * Some file formats have more than one thing in them: PE files have a DOS and Windows executable both in the same file;
516  * Apple OS X files can have multiple architectures represented in a single file, etc. The interpretation is the root of
517  * an AST that represents a single, coherent sub-part of the file.
518  *************************************************************************************************************************/
519 
520  NEW_TERMINAL_MACRO(AsmInterpretationList, "AsmInterpretationList", "AsmInterpretationListTag");
521  AsmInterpretationList.setDataPrototype("SgAsmInterpretationPtrList", "interpretations", "",
522  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
523 
524 
525 
526  NEW_TERMINAL_MACRO(AsmInterpretation, "AsmInterpretation", "AsmInterpretationTag");
527  AsmInterpretation.setFunctionPrototype("HEADER_INTERPRETATION", "../Grammar/BinaryInstruction.code");
528  AsmInterpretation.setPredeclarationString("HEADER_INTERPRETATION_PREDECLARATION", "../Grammar/BinaryInstruction.code");
529  AsmInterpretation.setAutomaticGenerationOfConstructor(false);
530  AsmInterpretation.setDataPrototype("SgAsmGenericHeaderList*", "headers", "= NULL",
531  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
532  AsmInterpretation.setDataPrototype("SgAsmBlock*", "global_block", "= NULL",
533  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
534 
535 
536 
537  /*************************************************************************************************************************
538  * ELF File Header
539  *************************************************************************************************************************/
540 
541  NEW_TERMINAL_MACRO(AsmElfFileHeader, "AsmElfFileHeader", "AsmElfFileHeaderTag");
542  AsmElfFileHeader.setFunctionPrototype("HEADER_ELF_HEADER", "../Grammar/BinaryInstruction.code");
543  AsmElfFileHeader.setFunctionSource("SOURCE_ELF_HEADER", "../Grammar/BinaryInstruction.code");
544  AsmElfFileHeader.setDataPrototype("unsigned char", "e_ident_file_class", "= 0",
545  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
546  AsmElfFileHeader.setDataPrototype("unsigned char", "e_ident_data_encoding", "= 0",
547  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
548  AsmElfFileHeader.setDataPrototype("unsigned char", "e_ident_file_version", "= 0",
549  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
550  AsmElfFileHeader.setDataPrototype("SgUnsignedCharList", "e_ident_padding", "",
551  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
552  AsmElfFileHeader.setDataPrototype("unsigned long", "e_type", "= 0",
553  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
554  AsmElfFileHeader.setDataPrototype("unsigned long", "e_machine", "= 0",
555  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
556  AsmElfFileHeader.setDataPrototype("unsigned long", "e_flags", "= 0",
557  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
558  AsmElfFileHeader.setDataPrototype("unsigned long", "e_ehsize", "= 0",
559  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
560  AsmElfFileHeader.setDataPrototype("unsigned long", "phextrasz", "= 0",
561  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
562  AsmElfFileHeader.setDataPrototype("unsigned long", "e_phnum", "= 0",
563  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
564  AsmElfFileHeader.setDataPrototype("unsigned long", "shextrasz", "= 0",
565  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
566  AsmElfFileHeader.setDataPrototype("unsigned long", "e_shnum", "= 0",
567  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
568  AsmElfFileHeader.setDataPrototype("unsigned long", "e_shstrndx", "= 0",
569  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
570  AsmElfFileHeader.setDataPrototype("SgAsmElfSectionTable*", "section_table", "= NULL",
571  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
572  AsmElfFileHeader.setDataPrototype("SgAsmElfSegmentTable*", "segment_table", "= NULL",
573  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
574 
575 
576 
577  /*************************************************************************************************************************
578  * ELF Section Tables
579  * The ELF Section Table is itself a section. The entries of the table are stored with the section they describe rather
580  * than storing them all in the SgAsmSectionTable node. We can reconstruct the ELF Section Table since sections have
581  * unique ID numbers that are their original indices in the ELF Section Table.
582  *************************************************************************************************************************/
583 
584  NEW_TERMINAL_MACRO(AsmElfSectionTable, "AsmElfSectionTable", "AsmElfSectionTableTag");
585  AsmElfSectionTable.setFunctionPrototype("HEADER_ELF_SECTION_TABLE", "../Grammar/BinaryInstruction.code");
586 
587 
588 
589  NEW_TERMINAL_MACRO(AsmElfSectionTableEntry, "AsmElfSectionTableEntry", "AsmElfSectionTableEntryTag");
590  AsmElfSectionTableEntry.setFunctionPrototype("HEADER_ELF_SECTION_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
591  AsmElfSectionTableEntry.setFunctionSource("SOURCE_ELF_SECTION_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
592  AsmElfSectionTableEntry.setDataPrototype("unsigned", "sh_name", "= 0",
593  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
594  AsmElfSectionTableEntry.setDataPrototype("SgAsmElfSectionTableEntry::SectionType", "sh_type", "= SHT_PROGBITS",
595  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
596  AsmElfSectionTableEntry.setDataPrototype("unsigned long", "sh_link", "= 0",
597  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
598  AsmElfSectionTableEntry.setDataPrototype("unsigned long", "sh_info", "= 0",
599  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
600  AsmElfSectionTableEntry.setDataPrototype("uint64_t", "sh_flags", "= 0",
601  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
602  AsmElfSectionTableEntry.setDataPrototype("rose_addr_t", "sh_addr", "= 0",
603  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
604  AsmElfSectionTableEntry.setDataPrototype("rose_addr_t", "sh_offset", "= 0",
605  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
606  AsmElfSectionTableEntry.setDataPrototype("rose_addr_t", "sh_size", "= 0",
607  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
608  AsmElfSectionTableEntry.setDataPrototype("rose_addr_t", "sh_addralign", "= 0",
609  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
610  AsmElfSectionTableEntry.setDataPrototype("rose_addr_t", "sh_entsize", "= 0",
611  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
612  AsmElfSectionTableEntry.setDataPrototype("SgUnsignedCharList", "extra", "",
613  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
614 
615 
616 
617  /*************************************************************************************************************************
618  * ELF Segment Tables
619  * The ELF Segment Table is an ELF Section that has entries describing the various segments of the ELF file. Each segment
620  * is also an SgAsmElfSection and the entries of the ELF Segment Table are associated with the SgAsmElfSection they
621  * describe. The ELF Segment Table can be reconstructed by traversing the AST and finding the SgAsmElfSegmentTableEntry
622  * nodes.
623  *************************************************************************************************************************/
624 
625  NEW_TERMINAL_MACRO(AsmElfSegmentTable, "AsmElfSegmentTable", "AsmElfSegmentTableTag");
626  AsmElfSegmentTable.setFunctionPrototype("HEADER_ELF_SEGMENT_TABLE", "../Grammar/BinaryInstruction.code");
627 
628 
629 
630  NEW_TERMINAL_MACRO(AsmElfSegmentTableEntryList, "AsmElfSegmentTableEntryList", "AsmElfSegmentTableEntryListTag");
631  AsmElfSegmentTableEntryList.setDataPrototype("SgAsmElfSegmentTableEntryPtrList", "entries", "",
632  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
633 
634 
635 
636  NEW_TERMINAL_MACRO(AsmElfSegmentTableEntry, "AsmElfSegmentTableEntry", "AsmElfSegmentTableEntryTag");
637  AsmElfSegmentTableEntry.setFunctionPrototype("HEADER_ELF_SEGMENT_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
638  AsmElfSegmentTableEntry.setFunctionSource("SOURCE_ELF_SEGMENT_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
639  AsmElfSegmentTableEntry.setDataPrototype("size_t", "index", "= 0",
640  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
641  AsmElfSegmentTableEntry.setDataPrototype("SgAsmElfSegmentTableEntry::SegmentType", "type",
642  "= SgAsmElfSegmentTableEntry::PT_LOAD",
643  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
644  AsmElfSegmentTableEntry.setDataPrototype("SgAsmElfSegmentTableEntry::SegmentFlags", "flags",
645  "= SgAsmElfSegmentTableEntry::PF_NONE",
646  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
647  AsmElfSegmentTableEntry.setDataPrototype("rose_addr_t", "offset", "= 0",
648  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
649  AsmElfSegmentTableEntry.setDataPrototype("rose_addr_t", "vaddr", "= 0",
650  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
651  AsmElfSegmentTableEntry.setDataPrototype("rose_addr_t", "paddr", "= 0",
652  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
653  AsmElfSegmentTableEntry.setDataPrototype("rose_addr_t", "filesz", "= 0",
654  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
655  AsmElfSegmentTableEntry.setDataPrototype("rose_addr_t", "memsz", "= 0",
656  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
657  AsmElfSegmentTableEntry.setDataPrototype("rose_addr_t", "align", "= 0",
658  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
659  AsmElfSegmentTableEntry.setDataPrototype("SgUnsignedCharList", "extra", "",
660  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
661 
662 
663 
664  /*************************************************************************************************************************
665  * ELF Symbol Tables
666  *************************************************************************************************************************/
667 
668  NEW_TERMINAL_MACRO(AsmElfSymbolSection, "AsmElfSymbolSection", "AsmElfSymbolSectionTag");
669  AsmElfSymbolSection.setFunctionPrototype("HEADER_ELF_SYMBOL_SECTION", "../Grammar/BinaryInstruction.code");
670  AsmElfSymbolSection.setDataPrototype("SgAsmElfSymbolList*", "symbols", "= NULL",
671  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
672  AsmElfSymbolSection.setDataPrototype("bool", "is_dynamic", "= false",
673  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
674 
675 
676 
677  NEW_TERMINAL_MACRO(AsmElfSymbolList, "AsmElfSymbolList", "AsmElfSymbolListTag");
678  AsmElfSymbolList.setDataPrototype("SgAsmElfSymbolPtrList", "symbols", "",
679  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
680 
681 
682 
683  NEW_TERMINAL_MACRO(AsmElfSymbol, "AsmElfSymbol", "AsmElfSymbolTag");
684  AsmElfSymbol.setFunctionPrototype("HEADER_ELF_SYMBOL", "../Grammar/BinaryInstruction.code");
685  AsmElfSymbol.setDataPrototype("unsigned char", "st_info", "= 0",
686  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
687  AsmElfSymbol.setDataPrototype("unsigned char", "st_res1", "= 0",
688  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
689  AsmElfSymbol.setDataPrototype("unsigned", "st_shndx", "= 0",
690  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
691  AsmElfSymbol.setDataPrototype("rose_addr_t", "st_size", "= 0",
692  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
693  AsmElfSymbol.setDataPrototype("SgUnsignedCharList", "extra", "",
694  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
695 
696 
697 
698  /*************************************************************************************************************************
699  * ELF Symbol Version Tables
700  *************************************************************************************************************************/
701 
702  // The ELF Symbol Version Table (.gnu.version section). The section points to an SgAsmElfSymverEntryPtrList containing a
703  // list of SgAsmElfSymverEntry objects.
704  NEW_TERMINAL_MACRO(AsmElfSymverSection, "AsmElfSymverSection", "AsmElfSymverSection");
705  AsmElfSymverSection.setFunctionPrototype("HEADER_ELF_SYMVER_SECTION", "../Grammar/BinaryInstruction.code");
706  AsmElfSymverSection.setDataPrototype("SgAsmElfSymverEntryList*", "entries", "= NULL",
707  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
708 
709 
710 
711  NEW_TERMINAL_MACRO(AsmElfSymverEntry, "AsmElfSymverEntry", "AsmElfSymverEntryTag");
712  AsmElfSymverEntry.setFunctionPrototype("HEADER_ELF_SYMVER_ENTRY", "../Grammar/BinaryInstruction.code");
713  AsmElfSymverEntry.setDataPrototype("size_t", "value", "= 0",
714  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
715 
716 
717 
718  NEW_TERMINAL_MACRO(AsmElfSymverEntryList, "AsmElfSymverEntryList", "AsmElfSymverEntryListTag");
719  AsmElfSymverEntryList.setDataPrototype("SgAsmElfSymverEntryPtrList", "entries", "",
720  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
721 
722 
723 
724  /* The GNU Symbol Version Definitions (.gnu.version_d section). The SgAsmElfSymverDefinedSection points to a list of
725  * entries (SgAsmSymverDefinedEntry), which in turn point to a list of auxilliary members (SgAsmSymverDefinedAux). See
726  * SgAsmSymverDefinedSection::parse() for a good description of the disk format. */
727  NEW_TERMINAL_MACRO(AsmElfSymverDefinedSection, "AsmElfSymverDefinedSection", "AsmElfSymverDefinedSection");
728  AsmElfSymverDefinedSection.setFunctionPrototype("HEADER_ELF_SYMVER_DEFINED_SECTION", "../Grammar/BinaryInstruction.code");
729  AsmElfSymverDefinedSection.setDataPrototype("SgAsmElfSymverDefinedEntryList*", "entries", "= NULL",
730  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
731 
732 
733 
734  NEW_TERMINAL_MACRO(AsmElfSymverDefinedEntryList, "AsmElfSymverDefinedEntryList", "AsmElfSymverDefinedEntryListTag");
735  AsmElfSymverDefinedEntryList.setDataPrototype("SgAsmElfSymverDefinedEntryPtrList", "entries", "",
736  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL,
737  NO_DELETE);
738 
739 
740 
741  NEW_TERMINAL_MACRO(AsmElfSymverDefinedEntry, "AsmElfSymverDefinedEntry", "AsmElfSymverDefinedEntryTag");
742  AsmElfSymverDefinedEntry.setFunctionPrototype("HEADER_ELF_SYMVER_DEFINED_ENTRY", "../Grammar/BinaryInstruction.code");
743  AsmElfSymverDefinedEntry.setDataPrototype("size_t", "version", "= 0",
744  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
745  AsmElfSymverDefinedEntry.setDataPrototype("int", "flags", "= 0",
746  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
747  AsmElfSymverDefinedEntry.setDataPrototype("size_t", "index", "= 0",
748  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
749  AsmElfSymverDefinedEntry.setDataPrototype("uint32_t", "hash", "= 0",
750  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
751  AsmElfSymverDefinedEntry.setDataPrototype("SgAsmElfSymverDefinedAuxList*", "entries", "",
752  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
753 
754 
755 
756  NEW_TERMINAL_MACRO(AsmElfSymverDefinedAuxList, "AsmElfSymverDefinedAuxList", "AsmElfSymverDefinedAuxListTag");
757  AsmElfSymverDefinedAuxList.setDataPrototype("SgAsmElfSymverDefinedAuxPtrList", "entries", "",
758  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
759 
760 
761 
762  NEW_TERMINAL_MACRO(AsmElfSymverDefinedAux, "AsmElfSymverDefinedAux", "AsmElfSymverDefinedAuxTag");
763  AsmElfSymverDefinedAux.setFunctionPrototype("HEADER_ELF_SYMVER_DEFINED_AUX", "../Grammar/BinaryInstruction.code");
764  AsmElfSymverDefinedAux.setDataPrototype("SgAsmGenericString*", "name", "= 0",
765  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
766 
767 
768 
769  /* The GNU Symbol Version Requirements Table (.gnu.version_r section). The format of this table is similar to the GNU
770  * Symbol Version Definitions Table described above, namey that the table object (SgAsmElfSymverNeededSection) points to
771  * a list of entries (SgAsmElfSymverNeededEntry), which of which point to a list of auxilliary information
772  * (SgAsmElfSymverNeededAux). */
773  NEW_TERMINAL_MACRO(AsmElfSymverNeededSection, "AsmElfSymverNeededSection", "AsmElfSymverNeededSection");
774  AsmElfSymverNeededSection.setFunctionPrototype("HEADER_ELF_SYMVER_NEEDED_SECTION", "../Grammar/BinaryInstruction.code");
775  AsmElfSymverNeededSection.setDataPrototype("SgAsmElfSymverNeededEntryList*", "entries", "= NULL",
776  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
777 
778 
779 
780  NEW_TERMINAL_MACRO(AsmElfSymverNeededEntryList, "AsmElfSymverNeededEntryList", "AsmElfSymverNeededEntryListTag");
781  AsmElfSymverNeededEntryList.setDataPrototype("SgAsmElfSymverNeededEntryPtrList", "entries", "",
782  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
783 
784 
785 
786  NEW_TERMINAL_MACRO(AsmElfSymverNeededEntry, "AsmElfSymverNeededEntry", "AsmElfSymverNeededEntryTag");
787  AsmElfSymverNeededEntry.setFunctionPrototype("HEADER_ELF_SYMVER_NEEDED_ENTRY", "../Grammar/BinaryInstruction.code");
788  AsmElfSymverNeededEntry.setDataPrototype("size_t", "version", "= 0",
789  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
790  AsmElfSymverNeededEntry.setDataPrototype("SgAsmGenericString*", "file_name", "= 0",
791  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
792  AsmElfSymverNeededEntry.setDataPrototype("SgAsmElfSymverNeededAuxList*", "entries", "",
793  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
794 
795 
796 
797  NEW_TERMINAL_MACRO(AsmElfSymverNeededAuxList, "AsmElfSymverNeededAuxList", "AsmElfSymverNeededAuxListTag");
798  AsmElfSymverNeededAuxList.setDataPrototype("SgAsmElfSymverNeededAuxPtrList", "entries", "",
799  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
800 
801 
802 
803  NEW_TERMINAL_MACRO(AsmElfSymverNeededAux, "AsmElfSymverNeededAux", "AsmElfSymverNeededAuxTag");
804  AsmElfSymverNeededAux.setFunctionPrototype("HEADER_ELF_SYMVER_NEEDED_AUX", "../Grammar/BinaryInstruction.code");
805  AsmElfSymverNeededAux.setDataPrototype("uint32_t", "hash", "= 0",
806  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
807  AsmElfSymverNeededAux.setDataPrototype("int", "flags", "= 0",
808  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
809  AsmElfSymverNeededAux.setDataPrototype("size_t", "other", "= 0",
810  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
811  AsmElfSymverNeededAux.setDataPrototype("SgAsmGenericString*", "name", "= 0",
812  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
813 
814 
815 
816  /*************************************************************************************************************************
817  * ELF Relocation Tables
818  *************************************************************************************************************************/
819 
820  NEW_TERMINAL_MACRO(AsmElfRelocSection, "AsmElfRelocSection", "AsmElfRelocSectionTag");
821  AsmElfRelocSection.setFunctionPrototype("HEADER_ELF_RELOC_SECTION", "../Grammar/BinaryInstruction.code");
822  AsmElfRelocSection.setDataPrototype("bool", "uses_addend", "= true",
823  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
824  AsmElfRelocSection.setDataPrototype("SgAsmElfSection*", "target_section", "= NULL",
825  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
826  AsmElfRelocSection.setDataPrototype("SgAsmElfRelocEntryList*", "entries", "= NULL",
827  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
828 
829 
830 
831  NEW_TERMINAL_MACRO(AsmElfRelocEntryList, "AsmElfRelocEntryList", "AsmElfRelocEntryListTag");
832  AsmElfRelocEntryList.setDataPrototype("SgAsmElfRelocEntryPtrList", "entries", "",
833  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
834 
835 
836 
837  NEW_TERMINAL_MACRO(AsmElfRelocEntry, "AsmElfRelocEntry", "AsmElfRelocEntryTag");
838  AsmElfRelocEntry.setFunctionPrototype("HEADER_ELF_RELOC_ENTRY", "../Grammar/BinaryInstruction.code");
839  AsmElfRelocEntry.setDataPrototype("rose_addr_t", "r_offset", "= 0",
840  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
841  AsmElfRelocEntry.setDataPrototype("rose_addr_t", "r_addend", "= 0",
842  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
843  AsmElfRelocEntry.setDataPrototype("unsigned long", "sym", "= 0",
844  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
845  AsmElfRelocEntry.setDataPrototype("SgAsmElfRelocEntry::RelocType", "type", "= R_386_NONE",
846  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
847  AsmElfRelocEntry.setDataPrototype("SgUnsignedCharList", "extra", "",
848  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
849 
850 
851 
852  /*************************************************************************************************************************
853  * ELF Dynamic Linking
854  *************************************************************************************************************************/
855 
856  NEW_TERMINAL_MACRO(AsmElfDynamicSection, "AsmElfDynamicSection", "AsmElfDynamicSectionTag");
857  AsmElfDynamicSection.setFunctionPrototype("HEADER_ELF_DYNAMIC_SECTION", "../Grammar/BinaryInstruction.code");
858  AsmElfDynamicSection.setDataPrototype("SgAsmElfDynamicEntryList*", "entries", "= NULL",
859  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
860 
861 
862 
863  NEW_TERMINAL_MACRO(AsmElfDynamicEntryList, "AsmElfDynamicEntryList", "AsmElfDynamicEntryListTag");
864  AsmElfDynamicEntryList.setDataPrototype("SgAsmElfDynamicEntryPtrList", "entries", "",
865  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
866 
867 
868 
869  NEW_TERMINAL_MACRO(AsmElfDynamicEntry, "AsmElfDynamicEntry", "AsmElfDynamicEntryTag");
870  AsmElfDynamicEntry.setFunctionPrototype("HEADER_ELF_DYNAMIC_ENTRY", "../Grammar/BinaryInstruction.code");
871  AsmElfDynamicEntry.setDataPrototype("SgAsmElfDynamicEntry::EntryType", "d_tag", "= SgAsmElfDynamicEntry::DT_NULL",
872  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
873  AsmElfDynamicEntry.setDataPrototype("rose_rva_t", "d_val", "",
874  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
875  AsmElfDynamicEntry.setDataPrototype("SgAsmGenericString*", "name", "= NULL",
876  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
877  AsmElfDynamicEntry.setDataPrototype("SgUnsignedCharList", "extra", "",
878  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
879 
880 
881 
882  /*************************************************************************************************************************
883  * ELF String Tables
884  *************************************************************************************************************************/
885 
886  // String table section
887  NEW_TERMINAL_MACRO(AsmElfStringSection, "AsmElfStringSection", "AsmElfStringSectionTag");
888  AsmElfStringSection.setFunctionPrototype("HEADER_ELF_STRING_SECTION", "../Grammar/BinaryInstruction.code");
889  AsmElfStringSection.setFunctionSource("SOURCE_ELF_STRING_SECTION", "../Grammar/BinaryInstruction.code");
890  AsmElfStringSection.setAutomaticGenerationOfDestructor(false);
891  AsmElfStringSection.setDataPrototype("SgAsmElfStrtab*", "strtab", "= NULL",
892  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
893 
894 
895 
896  NEW_TERMINAL_MACRO(AsmElfStrtab, "AsmElfStrtab", "AsmElfStrtabTag");
897  AsmElfStrtab.setFunctionPrototype("HEADER_ELF_STRING_TABLE", "../Grammar/BinaryInstruction.code");
898  AsmElfStrtab.setAutomaticGenerationOfDestructor(false);
899 
900 
901 
902  /*************************************************************************************************************************
903  * ELF Notes
904  *************************************************************************************************************************/
905 
906  NEW_TERMINAL_MACRO(AsmElfNoteSection, "AsmElfNoteSection", "AsmElfNoteSection");
907  AsmElfNoteSection.setFunctionPrototype("HEADER_ELF_NOTE_SECTION", "../Grammar/BinaryInstruction.code");
908  AsmElfNoteSection.setDataPrototype("SgAsmElfNoteEntryList*", "entries", "= NULL",
909  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
910 
911 
912 
913  NEW_TERMINAL_MACRO(AsmElfNoteEntryList, "AsmElfNoteEntryList", "AsmElfNoteEntryListTag");
914  AsmElfNoteEntryList.setDataPrototype("SgAsmElfNoteEntryPtrList", "entries", "",
915  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
916 
917 
918 
919  NEW_TERMINAL_MACRO(AsmElfNoteEntry, "AsmElfNoteEntry", "AsmElfNoteEntryTag");
920  AsmElfNoteEntry.setFunctionPrototype("HEADER_ELF_NOTE_ENTRY", "../Grammar/BinaryInstruction.code");
921  AsmElfNoteEntry.setDataPrototype("unsigned", "type", "= 0",
922  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
923  AsmElfNoteEntry.setDataPrototype("SgAsmGenericString*", "name", "= NULL",
924  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
925  AsmElfNoteEntry.setDataPrototype("SgUnsignedCharList", "payload", "",
926  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
927 
928 
929 
930  /*************************************************************************************************************************
931  * ELF Exception Handling
932  *************************************************************************************************************************/
933 
934  NEW_TERMINAL_MACRO(AsmElfEHFrameSection, "AsmElfEHFrameSection", "AsmElfEHFrameSection");
935  AsmElfEHFrameSection.setFunctionPrototype("HEADER_ELF_EH_FRAME_SECTION", "../Grammar/BinaryInstruction.code");
936  AsmElfEHFrameSection.setDataPrototype("SgAsmElfEHFrameEntryCIList*", "ci_entries", "= NULL",
937  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
938 
939 
940 
941  NEW_TERMINAL_MACRO(AsmElfEHFrameEntryCIList, "AsmElfEHFrameEntryCIList", "AsmElfEHFrameEntryCIListTag");
942  AsmElfEHFrameEntryCIList.setDataPrototype("SgAsmElfEHFrameEntryCIPtrList", "entries", "",
943  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
944 
945 
946 
947  // ELF Error Handling Frame Entry, Common Information Entry Format
948  NEW_TERMINAL_MACRO(AsmElfEHFrameEntryCI, "AsmElfEHFrameEntryCI", "AsmElfEHFrameEntryCITag");
949  AsmElfEHFrameEntryCI.setFunctionPrototype("HEADER_ELF_EH_FRAME_ENTRY_CI", "../Grammar/BinaryInstruction.code");
950  AsmElfEHFrameEntryCI.setDataPrototype("int", "version", "= 0",
951  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
952  AsmElfEHFrameEntryCI.setDataPrototype("std::string", "augmentation_string", "= \"\"",
953  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
954  AsmElfEHFrameEntryCI.setDataPrototype("uint64_t", "code_alignment_factor", "= 0",
955  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
956  AsmElfEHFrameEntryCI.setDataPrototype("int64_t", "data_alignment_factor", "= 0",
957  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
958  AsmElfEHFrameEntryCI.setDataPrototype("uint64_t", "augmentation_data_length", "= 0",
959  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
960  AsmElfEHFrameEntryCI.setDataPrototype("int", "lsda_encoding", "= -1",
961  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
962  AsmElfEHFrameEntryCI.setDataPrototype("int", "prh_encoding", "= -1",
963  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
964  AsmElfEHFrameEntryCI.setDataPrototype("unsigned", "prh_arg", "= 0",
965  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
966  AsmElfEHFrameEntryCI.setDataPrototype("rose_addr_t", "prh_addr", "= 0",
967  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
968  AsmElfEHFrameEntryCI.setDataPrototype("int", "addr_encoding", "= -1",
969  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
970  AsmElfEHFrameEntryCI.setDataPrototype("bool", "sig_frame", "= false",
971  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
972  AsmElfEHFrameEntryCI.setDataPrototype("SgUnsignedCharList", "instructions", "",
973  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
974  AsmElfEHFrameEntryCI.setDataPrototype("SgAsmElfEHFrameEntryFDList*", "fd_entries", "= NULL",
975  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
976 
977 
978 
979  NEW_TERMINAL_MACRO(AsmElfEHFrameEntryFDList, "AsmElfEHFrameEntryFDList", "AsmElfEHFrameEntryFDListTag");
980  AsmElfEHFrameEntryFDList.setDataPrototype("SgAsmElfEHFrameEntryFDPtrList", "entries", "",
981  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
982 
983 
984 
985  /* ELF Error Handling Frame Entry, Frame Description Entry Format */
986  NEW_TERMINAL_MACRO(AsmElfEHFrameEntryFD, "AsmElfEHFrameEntryFD", "AsmElfEHFrameEntryFDTag");
987  AsmElfEHFrameEntryFD.setFunctionPrototype("HEADER_ELF_EH_FRAME_ENTRY_FD", "../Grammar/BinaryInstruction.code");
988  AsmElfEHFrameEntryFD.setDataPrototype("rose_rva_t", "begin_rva", "",
989  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
990  AsmElfEHFrameEntryFD.setDataPrototype("rose_addr_t", "size", "= 0",
991  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
992  AsmElfEHFrameEntryFD.setDataPrototype("SgUnsignedCharList", "augmentation_data", "",
993  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
994  AsmElfEHFrameEntryFD.setDataPrototype("SgUnsignedCharList", "instructions", "",
995  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
996 
997 
998 
999  /*************************************************************************************************************************
1000  * ELF Sections
1001  *************************************************************************************************************************/
1002 
1003  NEW_NONTERMINAL_MACRO(AsmElfSection,
1004  AsmElfSymbolSection | AsmElfRelocSection | AsmElfDynamicSection |
1005  AsmElfStringSection | AsmElfNoteSection | AsmElfEHFrameSection |
1007  "AsmElfSection", "AsmElfSectionTag", true);
1008  AsmElfSection.setFunctionPrototype("HEADER_ELF_SECTION", "../Grammar/BinaryInstruction.code");
1009  AsmElfSection.setFunctionSource("SOURCE_ELF_SECTION", "../Grammar/BinaryInstruction.code");
1010  AsmElfSection.setDataPrototype("SgAsmElfSection*", "linked_section", "= NULL", //accessors must be virtual
1011  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1012  AsmElfSection.setDataPrototype("SgAsmElfSectionTableEntry*", "section_entry", "= NULL",
1013  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1014  AsmElfSection.setDataPrototype("SgAsmElfSegmentTableEntry*", "segment_entry", "= NULL",
1015  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1016 
1017 
1018 
1019  /*************************************************************************************************************************
1020  * DOS File Header
1021  *************************************************************************************************************************/
1022 
1023  NEW_TERMINAL_MACRO(AsmDOSFileHeader, "AsmDOSFileHeader", "AsmDOSFileHeaderTag");
1024  AsmDOSFileHeader.setFunctionPrototype("HEADER_DOS_HEADER", "../Grammar/BinaryInstruction.code");
1025  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_last_page_size", "= 0",
1026  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1027  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_total_pages", "= 0",
1028  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1029  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_nrelocs", "= 0",
1030  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1031  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_header_paragraphs", "= 0",
1032  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1033  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_minalloc", "= 0",
1034  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1035  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_maxalloc", "= 0",
1036  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1037  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_ss", "= 0",
1038  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1039  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_sp", "= 0",
1040  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1041  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_cksum", "= 0",
1042  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1043  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_ip", "= 0",
1044  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1045  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_cs", "= 0",
1046  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1047  AsmDOSFileHeader.setDataPrototype("uint16_t", "e_overlay", "= 0",
1048  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1049  AsmDOSFileHeader.setDataPrototype("rose_addr_t", "e_relocs_offset", "= 0",
1050  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1051  AsmDOSFileHeader.setDataPrototype("unsigned", "e_res1", "= 0",
1052  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1053  AsmDOSFileHeader.setDataPrototype("SgAsmGenericSection*", "relocs", "= NULL", //relocation info
1054  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1055  AsmDOSFileHeader.setDataPrototype("SgAsmGenericSection*", "rm_section", "= NULL", //real-mode section
1056  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1057 
1058 
1059 
1060  NEW_TERMINAL_MACRO(AsmDOSExtendedHeader, "AsmDOSExtendedHeader", "AsmDOSExtendedHeaderTag");
1061  AsmDOSExtendedHeader.setFunctionPrototype("HEADER_DOS_EXTENDED_HEADER", "../Grammar/BinaryInstruction.code");
1062  AsmDOSExtendedHeader.setDataPrototype("unsigned", "e_res1", "= 0",
1063  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1064  AsmDOSExtendedHeader.setDataPrototype("unsigned", "e_oemid", "= 0",
1065  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1066  AsmDOSExtendedHeader.setDataPrototype("unsigned", "e_oeminfo", "= 0",
1067  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1068  AsmDOSExtendedHeader.setDataPrototype("unsigned", "e_res2", "= 0",
1069  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1070  AsmDOSExtendedHeader.setDataPrototype("unsigned", "e_res3", "= 0",
1071  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1072  AsmDOSExtendedHeader.setDataPrototype("unsigned", "e_res4", "= 0",
1073  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1074  AsmDOSExtendedHeader.setDataPrototype("unsigned", "e_res5", "= 0",
1075  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1076  AsmDOSExtendedHeader.setDataPrototype("unsigned", "e_res6", "= 0",
1077  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1078  AsmDOSExtendedHeader.setDataPrototype("rose_addr_t", "e_lfanew", "= 0",
1079  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1080 
1081 
1082 
1083  /*************************************************************************************************************************
1084  * PE File Header
1085  *************************************************************************************************************************/
1086 
1087  NEW_TERMINAL_MACRO(AsmPEFileHeader, "AsmPEFileHeader", "AsmPEFileHeaderTag");
1088  AsmPEFileHeader.setFunctionPrototype("HEADER_PE_FILE_HEADER", "../Grammar/BinaryInstruction.code");
1089  AsmPEFileHeader.setDataPrototype("unsigned", "e_cpu_type", "= 0",
1090  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1091  AsmPEFileHeader.setDataPrototype("unsigned", "e_nsections", "= 0",
1092  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1093  AsmPEFileHeader.setDataPrototype("unsigned", "e_time", "= 0",
1094  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1095  AsmPEFileHeader.setDataPrototype("rose_addr_t", "e_coff_symtab", "= 0",
1096  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1097  AsmPEFileHeader.setDataPrototype("rose_addr_t", "e_nt_hdr_size", "= 0",
1098  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1099  AsmPEFileHeader.setDataPrototype("unsigned", "e_coff_nsyms", "= 0",
1100  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1101  AsmPEFileHeader.setDataPrototype("unsigned", "e_flags", "= 0",
1102  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1103  AsmPEFileHeader.setDataPrototype("unsigned", "e_opt_magic", "= 0",
1104  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1105  AsmPEFileHeader.setDataPrototype("unsigned", "e_lmajor", "= 0",
1106  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1107  AsmPEFileHeader.setDataPrototype("unsigned", "e_lminor", "= 0",
1108  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1109  AsmPEFileHeader.setDataPrototype("unsigned", "e_code_size", "= 0",
1110  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1111  AsmPEFileHeader.setDataPrototype("unsigned", "e_data_size", "= 0",
1112  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1113  AsmPEFileHeader.setDataPrototype("unsigned", "e_bss_size", "= 0",
1114  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1115  AsmPEFileHeader.setDataPrototype("rose_rva_t", "e_code_rva", "= 0",
1116  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1117  AsmPEFileHeader.setDataPrototype("rose_rva_t", "e_data_rva", "= 0",
1118  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1119  AsmPEFileHeader.setDataPrototype("unsigned", "e_section_align", "= 0",
1120  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1121  AsmPEFileHeader.setDataPrototype("unsigned", "e_file_align", "= 0",
1122  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1123  AsmPEFileHeader.setDataPrototype("unsigned", "e_os_major", "= 0",
1124  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1125  AsmPEFileHeader.setDataPrototype("unsigned", "e_os_minor", "= 0",
1126  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1127  AsmPEFileHeader.setDataPrototype("unsigned", "e_user_major", "= 0",
1128  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1129  AsmPEFileHeader.setDataPrototype("unsigned", "e_user_minor", "= 0",
1130  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1131  AsmPEFileHeader.setDataPrototype("unsigned", "e_subsys_major", "= 0",
1132  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1133  AsmPEFileHeader.setDataPrototype("unsigned", "e_subsys_minor", "= 0",
1134  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1135  AsmPEFileHeader.setDataPrototype("unsigned", "e_reserved9", "= 0",
1136  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1137  AsmPEFileHeader.setDataPrototype("unsigned", "e_image_size", "= 0",
1138  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1139  AsmPEFileHeader.setDataPrototype("unsigned", "e_header_size", "= 0",
1140  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1141  AsmPEFileHeader.setDataPrototype("unsigned", "e_file_checksum", "= 0",
1142  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1143  AsmPEFileHeader.setDataPrototype("unsigned", "e_subsystem", "= 0",
1144  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1145  AsmPEFileHeader.setDataPrototype("unsigned", "e_dll_flags", "= 0",
1146  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1147  AsmPEFileHeader.setDataPrototype("unsigned", "e_stack_reserve_size", "= 0",
1148  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1149  AsmPEFileHeader.setDataPrototype("unsigned", "e_stack_commit_size", "= 0",
1150  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1151  AsmPEFileHeader.setDataPrototype("unsigned", "e_heap_reserve_size", "= 0",
1152  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1153  AsmPEFileHeader.setDataPrototype("unsigned", "e_heap_commit_size", "= 0",
1154  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1155  AsmPEFileHeader.setDataPrototype("unsigned", "e_loader_flags", "= 0",
1156  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1157  AsmPEFileHeader.setDataPrototype("unsigned", "e_num_rvasize_pairs", "= 0",
1158  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1159  AsmPEFileHeader.setDataPrototype("SgAsmPERVASizePairList*", "rvasize_pairs", "= NULL",
1160  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1161  AsmPEFileHeader.setDataPrototype("SgAsmPESectionTable*", "section_table", "= NULL",
1162  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1163  AsmPEFileHeader.setDataPrototype("SgAsmCoffSymbolTable*", "coff_symtab", "= NULL",
1164  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1165 
1166 
1167 
1168  NEW_TERMINAL_MACRO(AsmPERVASizePairList, "AsmPERVASizePairList", "AsmPERVASizePairListTag");
1169  AsmPERVASizePairList.setFunctionPrototype("HEADER_PE_RVA_SIZE_PAIR_LIST", "../Grammar/BinaryInstruction.code");
1170  AsmPERVASizePairList.setDataPrototype("SgAsmPERVASizePairPtrList", "pairs", "",
1171  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1172 
1173 
1174 
1175  NEW_TERMINAL_MACRO(AsmPERVASizePair, "AsmPERVASizePair", "AsmPERVASizePairTag");
1176  AsmPERVASizePair.setFunctionPrototype("HEADER_PE_RVA_SIZE_PAIR", "../Grammar/BinaryInstruction.code");
1177  AsmPERVASizePair.setDataPrototype("rose_rva_t", "e_rva", "= 0",
1178  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1179  AsmPERVASizePair.setDataPrototype("rose_addr_t", "e_size", "= 0",
1180  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1181  AsmPERVASizePair.setDataPrototype("SgAsmGenericSection*", "section", "= NULL",
1182  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1183 
1184 
1185 
1186  /*************************************************************************************************************************
1187  * PE Import Tables
1188  *************************************************************************************************************************/
1189 
1190  // A single imported object. Each of these nodes is created from a combination of the PE Import Lookup Table and the PE
1191  // Import Address Table, pointers to which are stored in the Import Directory (SgAsmPEImportDirectory).
1192  NEW_TERMINAL_MACRO(AsmPEImportItem, "AsmPEImportItem", "AsmPEImportItemTag");
1193  AsmPEImportItem.setFunctionPrototype("HEADER_PE_IMPORT_ITEM", "../Grammar/BinaryInstruction.code");
1194  AsmPEImportItem.setDataPrototype("bool", "by_ordinal", "=true", // store ordinal number if ILT/IAT?
1195  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1196  AsmPEImportItem.setDataPrototype("unsigned", "ordinal", "=0", // ordinal number
1197  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1198  AsmPEImportItem.setDataPrototype("unsigned", "hint", "=0", // export name table hint if not by_ordinal
1199  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1200  AsmPEImportItem.setDataPrototype("SgAsmGenericString*", "name", "", // name if not by ordinal
1201  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1202  AsmPEImportItem.setDataPrototype("rose_rva_t", "hintname_rva", "=0", // rva of hint/name pair
1203  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1204  AsmPEImportItem.setDataPrototype("size_t", "hintname_nalloc", "=0", // file bytes allocated for hint/name pair
1205  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1206  AsmPEImportItem.setDataPrototype("rose_rva_t", "bound_rva", "=0", // bound rva from IAT if not a copy of ILT
1207  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1208 
1209 
1210 
1211  // A list of imported items.
1212  NEW_TERMINAL_MACRO(AsmPEImportItemList, "AsmPEImportItemList", "AsmPEImportItemListTag");
1213  AsmPEImportItemList.setDataPrototype("SgAsmPEImportItemPtrList", "vector", "",
1214  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1215 
1216 
1217 
1218  // One import directory per library. The import directory points to the Import Lookup Table and Import Address Table.
1219  // ROSE no longer represents the ILT and IAT with separate IR nodes.
1220  NEW_TERMINAL_MACRO(AsmPEImportDirectory, "AsmPEImportDirectory", "AsmPEImportDirectoryTag");
1221  AsmPEImportDirectory.setFunctionPrototype("HEADER_PE_IMPORT_DIRECTORY", "../Grammar/BinaryInstruction.code");
1222  AsmPEImportDirectory.setDataPrototype("SgAsmGenericString*", "dll_name", "=0", // name of library from which to import
1223  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1224  AsmPEImportDirectory.setDataPrototype("rose_rva_t", "dll_name_rva", "= 0", // address of the name
1225  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1226  AsmPEImportDirectory.setDataPrototype("size_t", "dll_name_nalloc", "=0", // bytes allocated in the file for the name
1227  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1228  AsmPEImportDirectory.setDataPrototype("time_t", "time", "= 0",
1229  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1230  AsmPEImportDirectory.setDataPrototype("unsigned", "forwarder_chain", "= 0",
1231  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1232  AsmPEImportDirectory.setDataPrototype("rose_rva_t", "ilt_rva", "= 0", // starting address of the ILT
1233  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1234  AsmPEImportDirectory.setDataPrototype("size_t", "ilt_nalloc", "= 0", // bytes allocated in the file for the ILT
1235  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1236  AsmPEImportDirectory.setDataPrototype("rose_rva_t", "iat_rva", "= 0", // usually in the .rdata section
1237  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1238  AsmPEImportDirectory.setDataPrototype("size_t", "iat_nalloc", "=0", // bytes allocated in the file for the IAT
1239  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1240  AsmPEImportDirectory.setDataPrototype("SgAsmPEImportItemList*", "imports", "=NULL",
1241  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1242 
1243 
1244  // A list of PE Import Directories.
1245  NEW_TERMINAL_MACRO(AsmPEImportDirectoryList, "AsmPEImportDirectoryList", "AsmPEImportDirectoryListTag");
1246  AsmPEImportDirectoryList.setDataPrototype("SgAsmPEImportDirectoryPtrList", "vector", "",
1247  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1248 
1249 
1250 
1251  // A file section containing a list of PE Import Directories. Documentation is in PeImportSection.C */
1252  NEW_TERMINAL_MACRO(AsmPEImportSection, "AsmPEImportSection", "AsmPEImportSectionTag");
1253  AsmPEImportSection.setFunctionPrototype("HEADER_PE_IMPORT_SECTION", "../Grammar/BinaryInstruction.code");
1254  AsmPEImportSection.setDataPrototype ("SgAsmPEImportDirectoryList*", "import_directories", "= NULL",
1255  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1256 
1257 
1258 
1259  /*************************************************************************************************************************
1260  * PE Export Tables
1261  *************************************************************************************************************************/
1262 
1263  NEW_TERMINAL_MACRO(AsmPEExportSection, "AsmPEExportSection", "AsmPEExportSectionTag");
1264  AsmPEExportSection.setFunctionPrototype("HEADER_PE_EXPORT_SECTION", "../Grammar/BinaryInstruction.code");
1265  AsmPEExportSection.setDataPrototype("SgAsmPEExportDirectory*", "export_dir", "= NULL",
1266  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1267  AsmPEExportSection.setDataPrototype("SgAsmPEExportEntryList*", "exports", "",
1268  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1269 
1270 
1271 
1272  NEW_TERMINAL_MACRO(AsmPEExportDirectory, "AsmPEExportDirectory", "AsmPEExportDirectoryTag");
1273  AsmPEExportDirectory.setFunctionPrototype("HEADER_PE_EXPORT_DIRECTORY", "../Grammar/BinaryInstruction.code");
1274  AsmPEExportDirectory.setDataPrototype("unsigned", "res1", "= 0",
1275  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1276  AsmPEExportDirectory.setDataPrototype("time_t", "timestamp", "= 0",
1277  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1278  AsmPEExportDirectory.setDataPrototype("unsigned", "vmajor", "= 0",
1279  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1280  AsmPEExportDirectory.setDataPrototype("unsigned", "vminor", "= 0",
1281  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1282  AsmPEExportDirectory.setDataPrototype("rose_rva_t", "name_rva", "= 0",
1283  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1284  AsmPEExportDirectory.setDataPrototype("unsigned", "ord_base", "= 0",
1285  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1286  AsmPEExportDirectory.setDataPrototype("size_t", "expaddr_n", "= 0",
1287  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1288  AsmPEExportDirectory.setDataPrototype("size_t", "nameptr_n", "= 0",
1289  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1290  AsmPEExportDirectory.setDataPrototype("rose_rva_t", "expaddr_rva", "= 0",
1291  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1292  AsmPEExportDirectory.setDataPrototype("rose_rva_t", "nameptr_rva", "= 0",
1293  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1294  AsmPEExportDirectory.setDataPrototype("rose_rva_t", "ordinals_rva", "= 0",
1295  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1296  AsmPEExportDirectory.setDataPrototype("SgAsmGenericString*", "name", "= NULL",
1297  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1298 
1299 
1300 
1301  NEW_TERMINAL_MACRO(AsmPEExportEntryList, "AsmPEExportEntryList", "AsmPEExportEntryListTag");
1302  AsmPEExportEntryList.setDataPrototype("SgAsmPEExportEntryPtrList", "exports", "",
1303  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1304 
1305 
1306 
1307  NEW_TERMINAL_MACRO(AsmPEExportEntry, "AsmPEExportEntry", "AsmPEExportEntryTag");
1308  AsmPEExportEntry.setFunctionPrototype("HEADER_PE_EXPORT_ENTRY", "../Grammar/BinaryInstruction.code");
1309  AsmPEExportEntry.setDataPrototype("SgAsmGenericString*", "name", "= NULL",
1310  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1311  AsmPEExportEntry.setDataPrototype("unsigned", "ordinal", "= 0",
1312  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1313  AsmPEExportEntry.setDataPrototype("rose_rva_t", "export_rva", "= 0",
1314  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1315  AsmPEExportEntry.setDataPrototype("SgAsmGenericString*", "forwarder", "= NULL",
1316  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1317 
1318 
1319 
1320  /*************************************************************************************************************************
1321  * PE String Tables
1322  *************************************************************************************************************************/
1323 
1324  NEW_TERMINAL_MACRO(AsmPEStringSection, "AsmPEStringSection", "AsmPEStringSectionTag");
1325  AsmPEStringSection.setFunctionPrototype("HEADER_PE_STRING_SECTION", "../Grammar/BinaryInstruction.code");
1326  AsmPEStringSection.setAutomaticGenerationOfDestructor(false);
1327  AsmPEStringSection.setDataPrototype("SgAsmCoffStrtab*", "strtab", "= NULL",
1328  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1329 
1330 
1331 
1332  /*************************************************************************************************************************
1333  * PE Section Tables
1334  *************************************************************************************************************************/
1335 
1336  NEW_TERMINAL_MACRO(AsmPESectionTable, "AsmPESectionTable", "AsmPESectionTableTag");
1337  AsmPESectionTable.setFunctionPrototype("HEADER_PE_SECTION_TABLE", "../Grammar/BinaryInstruction.code");
1338 
1339 
1340 
1341  NEW_TERMINAL_MACRO(AsmPESectionTableEntry, "AsmPESectionTableEntry", "AsmPESectionTableEntryTag");
1342  AsmPESectionTableEntry.setFunctionPrototype("HEADER_PE_SECTION_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
1343  AsmPESectionTableEntry.setFunctionSource("SOURCE_PE_SECTION_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
1344  AsmPESectionTableEntry.setDataPrototype("std::string", "name", "= \"\"",
1345  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1346  AsmPESectionTableEntry.setDataPrototype("rose_addr_t", "virtual_size", "= 0",
1347  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1348  AsmPESectionTableEntry.setDataPrototype("rose_addr_t", "rva", "= 0",
1349  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1350  AsmPESectionTableEntry.setDataPrototype("rose_addr_t", "physical_size", "= 0",
1351  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1352  AsmPESectionTableEntry.setDataPrototype("rose_addr_t", "physical_offset", "= 0",
1353  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1354  AsmPESectionTableEntry.setDataPrototype("unsigned", "coff_line_nums", "= 0",
1355  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1356  AsmPESectionTableEntry.setDataPrototype("unsigned", "n_relocs", "= 0",
1357  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1358  AsmPESectionTableEntry.setDataPrototype("unsigned", "n_coff_line_nums", "= 0",
1359  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1360  AsmPESectionTableEntry.setDataPrototype("unsigned", "flags", "= 0",
1361  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1362 
1363 
1364 
1365  /*************************************************************************************************************************
1366  * PE Sections
1367  *************************************************************************************************************************/
1368 
1369  NEW_NONTERMINAL_MACRO(AsmPESection,
1370  AsmPEImportSection | AsmPEExportSection | AsmPEStringSection,
1371  "AsmPESection", "AsmPESectionTag", true);
1372  AsmPESection.setFunctionPrototype("HEADER_PE_SECTION", "../Grammar/BinaryInstruction.code");
1373  AsmPESection.setDataPrototype("SgAsmPESectionTableEntry*", "section_entry", "= NULL",
1374  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1375 
1376 
1377 
1378  /*************************************************************************************************************************
1379  * COFF Symbol Tables
1380  * The COFF format is used by Microsoft PE files.
1381  *************************************************************************************************************************/
1382 
1383  NEW_TERMINAL_MACRO(AsmCoffSymbolTable, "AsmCoffSymbolTable", "AsmCoffSymbolTableTag");
1384  AsmCoffSymbolTable.setFunctionPrototype("HEADER_PE_COFF_SYMBOL_TABLE", "../Grammar/BinaryInstruction.code");
1385  AsmCoffSymbolTable.setDataPrototype("SgAsmGenericSection*", "strtab", "= NULL",
1386  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1387  AsmCoffSymbolTable.setDataPrototype("SgAsmCoffSymbolList*", "symbols", "= NULL",
1388  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1389 
1390 
1391 
1392  NEW_TERMINAL_MACRO(AsmCoffSymbolList, "AsmCoffSymbolList", "AsmCoffSymbolListTag");
1393  AsmCoffSymbolList.setDataPrototype("SgAsmCoffSymbolPtrList", "symbols", "",
1394  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1395 
1396 
1397 
1398  NEW_TERMINAL_MACRO(AsmCoffSymbol, "AsmCoffSymbol", "AsmCoffSymbolTag");
1399  AsmCoffSymbol.setFunctionPrototype("HEADER_PE_COFF_SYMBOL", "../Grammar/BinaryInstruction.code");
1400  AsmCoffSymbol.setFunctionSource("SOURCE_PE_COFF_SYMBOL", "../Grammar/BinaryInstruction.code");
1401  AsmCoffSymbol.setDataPrototype("std::string", "st_name", "= \"\"",
1402  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1403  AsmCoffSymbol.setDataPrototype("rose_addr_t", "st_name_offset", "= 0",
1404  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1405  AsmCoffSymbol.setDataPrototype("int", "st_section_num", "= 0",
1406  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1407  AsmCoffSymbol.setDataPrototype("unsigned", "st_type", "= 0",
1408  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1409  AsmCoffSymbol.setDataPrototype("unsigned", "st_storage_class", "= 0",
1410  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1411  AsmCoffSymbol.setDataPrototype("unsigned", "st_num_aux_entries", "= 0",
1412  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1413  AsmCoffSymbol.setDataPrototype("SgUnsignedCharList", "aux_data", "",
1414  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1415 
1416 
1417 
1418  NEW_TERMINAL_MACRO(AsmCoffStrtab, "AsmCoffStrtab", "AsmCoffStrtabTag");
1419  AsmCoffStrtab.setFunctionPrototype("HEADER_COFF_STRING_TABLE", "../Grammar/BinaryInstruction.code");
1420  AsmCoffStrtab.setAutomaticGenerationOfDestructor(false);
1421 
1422 
1423 
1424  /*************************************************************************************************************************
1425  * NE File Header
1426  *************************************************************************************************************************/
1427 
1428  NEW_TERMINAL_MACRO(AsmNEFileHeader, "AsmNEFileHeader", "AsmNEFileHeaderTag");
1429  AsmNEFileHeader.setFunctionPrototype("HEADER_NE_FILE_HEADER", "../Grammar/BinaryInstruction.code");
1430  AsmNEFileHeader.setDataPrototype("unsigned", "e_linker_major", "= 0",
1431  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1432  AsmNEFileHeader.setDataPrototype("unsigned", "e_linker_minor", "= 0",
1433  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1434  AsmNEFileHeader.setDataPrototype("unsigned", "e_checksum", "= 0",
1435  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1436  AsmNEFileHeader.setDataPrototype("unsigned", "e_flags1", "= 0",
1437  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1438  AsmNEFileHeader.setDataPrototype("unsigned", "e_autodata_sn", "= 0",
1439  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1440  AsmNEFileHeader.setDataPrototype("unsigned", "e_bss_size", "= 0",
1441  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1442  AsmNEFileHeader.setDataPrototype("unsigned", "e_stack_size", "= 0",
1443  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1444  AsmNEFileHeader.setDataPrototype("unsigned", "e_csip", "= 0",
1445  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1446  AsmNEFileHeader.setDataPrototype("unsigned", "e_sssp", "= 0",
1447  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1448  AsmNEFileHeader.setDataPrototype("unsigned", "e_nsections", "= 0",
1449  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1450  AsmNEFileHeader.setDataPrototype("unsigned", "e_nmodrefs", "= 0",
1451  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1452  AsmNEFileHeader.setDataPrototype("unsigned", "e_nnonresnames", "= 0",
1453  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1454  AsmNEFileHeader.setDataPrototype("unsigned", "e_nmovable_entries", "= 0",
1455  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1456  AsmNEFileHeader.setDataPrototype("unsigned", "e_sector_align", "= 0",
1457  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1458  AsmNEFileHeader.setDataPrototype("unsigned", "e_nresources", "= 0",
1459  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1460  AsmNEFileHeader.setDataPrototype("unsigned", "e_exetype", "= 0",
1461  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1462  AsmNEFileHeader.setDataPrototype("unsigned", "e_flags2", "= 0",
1463  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1464  AsmNEFileHeader.setDataPrototype("unsigned", "e_res1", "= 0",
1465  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1466  AsmNEFileHeader.setDataPrototype("unsigned", "e_winvers", "= 0",
1467  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1468  AsmNEFileHeader.setDataPrototype("rose_addr_t", "e_entrytab_rfo", "= 0",
1469  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1470  AsmNEFileHeader.setDataPrototype("rose_addr_t", "e_entrytab_size", "= 0",
1471  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1472  AsmNEFileHeader.setDataPrototype("rose_addr_t", "e_sectab_rfo", "= 0",
1473  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1474  AsmNEFileHeader.setDataPrototype("rose_addr_t", "e_rsrctab_rfo", "= 0",
1475  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1476  AsmNEFileHeader.setDataPrototype("rose_addr_t", "e_resnametab_rfo", "= 0",
1477  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1478  AsmNEFileHeader.setDataPrototype("rose_addr_t", "e_modreftab_rfo", "= 0",
1479  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1480  AsmNEFileHeader.setDataPrototype("rose_addr_t", "e_importnametab_rfo", "= 0",
1481  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1482  AsmNEFileHeader.setDataPrototype("rose_addr_t", "e_nonresnametab_offset", "= 0",
1483  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1484  AsmNEFileHeader.setDataPrototype("rose_addr_t", "e_fastload_sector", "= 0",
1485  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1486  AsmNEFileHeader.setDataPrototype("rose_addr_t", "e_fastload_nsectors", "= 0",
1487  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1488  AsmNEFileHeader.setDataPrototype("SgAsmDOSExtendedHeader*", "dos2_header", "= NULL",
1489  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1490  AsmNEFileHeader.setDataPrototype("SgAsmNESectionTable*", "section_table", "= NULL",
1491  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1492  AsmNEFileHeader.setDataPrototype("SgAsmNENameTable*", "resname_table", "= NULL",
1493  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1494  AsmNEFileHeader.setDataPrototype("SgAsmNENameTable*", "nonresname_table", "= NULL",
1495  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1496  AsmNEFileHeader.setDataPrototype("SgAsmNEModuleTable*", "module_table", "= NULL",
1497  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1498  AsmNEFileHeader.setDataPrototype("SgAsmNEEntryTable*", "entry_table", "= NULL",
1499  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1500 
1501 
1502 
1503  NEW_TERMINAL_MACRO(AsmNEEntryTable, "AsmNEEntryTable", "AsmNEEntryTableTag");
1504  AsmNEEntryTable.setFunctionPrototype("HEADER_NE_ENTRY_TABLE", "../Grammar/BinaryInstruction.code");
1505  AsmNEEntryTable.setDataPrototype("SgSizeTList", "bundle_sizes", "",
1506  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1507  AsmNEEntryTable.setDataPrototype("SgAsmNEEntryPointPtrList", "entries", "",
1508  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1509 
1510 
1511 
1512  NEW_TERMINAL_MACRO(AsmNEEntryPoint, "AsmNEEntryPoint", "AsmNEEntryPointTag");
1513  AsmNEEntryPoint.setFunctionPrototype("HEADER_NE_ENTRY_POINT", "../Grammar/BinaryInstruction.code");
1514  AsmNEEntryPoint.setFunctionSource("SOURCE_NE_ENTRY_POINT", "../Grammar/BinaryInstruction.code");
1515  AsmNEEntryPoint.setDataPrototype("SgAsmNEEntryPoint::NEEntryFlags", "flags", "= SgAsmNEEntryPoint::EF_ZERO",
1516  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1517  AsmNEEntryPoint.setDataPrototype("unsigned", "int3f", "= 0",
1518  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1519  AsmNEEntryPoint.setDataPrototype("unsigned", "section_idx", "= 0",
1520  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1521  AsmNEEntryPoint.setDataPrototype("unsigned", "section_offset", "= 0",
1522  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1523 
1524 
1525 
1526  /*************************************************************************************************************************
1527  * NE Section Table
1528  *************************************************************************************************************************/
1529 
1530  NEW_TERMINAL_MACRO(AsmNESectionTable, "AsmNESectionTable", "AsmNESectionTableTag");
1531  AsmNESectionTable.setFunctionPrototype("HEADER_NE_SECTION_TABLE", "../Grammar/BinaryInstruction.code");
1532  AsmNESectionTable.setDataPrototype("unsigned", "flags", "= 0",
1533  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1534  AsmNESectionTable.setDataPrototype("unsigned", "sector", "= 0",
1535  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1536  AsmNESectionTable.setDataPrototype("rose_addr_t", "physical_size", "= 0",
1537  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1538  AsmNESectionTable.setDataPrototype("rose_addr_t", "virtual_size", "= 0",
1539  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1540 
1541 
1542 
1543  NEW_TERMINAL_MACRO(AsmNESectionTableEntry, "AsmNESectionTableEntry", "AsmNESectionTableEntryTag");
1544  AsmNESectionTableEntry.setFunctionPrototype("HEADER_NE_SECTION_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
1545  AsmNESectionTableEntry.setFunctionSource("SOURCE_NE_SECTION_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
1546  AsmNESectionTableEntry.setDataPrototype("unsigned", "flags", "= 0",
1547  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1548  AsmNESectionTableEntry.setDataPrototype("unsigned", "sector", "= 0",
1549  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1550  AsmNESectionTableEntry.setDataPrototype("rose_addr_t", "physical_size", "= 0",
1551  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1552  AsmNESectionTableEntry.setDataPrototype("rose_addr_t", "virtual_size", "= 0",
1553  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1554 
1555 
1556 
1557  /*************************************************************************************************************************
1558  * NE Relocation Table
1559  *************************************************************************************************************************/
1560 
1561  NEW_TERMINAL_MACRO(AsmNERelocTable, "AsmNERelocTable", "AsmNERelocTableTag");
1562  AsmNERelocTable.setFunctionPrototype("HEADER_NE_RELOC_TABLE", "../Grammar/BinaryInstruction.code");
1563  AsmNERelocTable.setDataPrototype("SgAsmNERelocEntryPtrList", "entries", "",
1564  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1565 
1566 
1567 
1568  NEW_TERMINAL_MACRO(AsmNERelocEntry, "AsmNERelocEntry", "AsmNERelocEntryTag");
1569  AsmNERelocEntry.setFunctionPrototype("HEADER_NE_RELOC_ENTRY", "../Grammar/BinaryInstruction.code");
1570  AsmNERelocEntry.setFunctionSource("SOURCE_NE_RELOC_ENTRY", "../Grammar/BinaryInstruction.code");
1571  AsmNERelocEntry.setDataPrototype("SgAsmNERelocEntry::NERelocSrcType", "src_type", "= SgAsmNERelocEntry::RF_SRCTYPE_8OFF",
1572  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1573  AsmNERelocEntry.setDataPrototype("SgAsmNERelocEntry::NERelocModifiers", "modifier", "= SgAsmNERelocEntry::RF_MODIFIER_SINGLE",
1574  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1575  AsmNERelocEntry.setDataPrototype("SgAsmNERelocEntry::NERelocTgtType", "tgt_type", "= SgAsmNERelocEntry::RF_TGTTYPE_IREF",
1576  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1577  AsmNERelocEntry.setDataPrototype("SgAsmNERelocEntry::NERelocFlags", "flags", "= SgAsmNERelocEntry::RF_ADDITIVE",
1578  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1579  AsmNERelocEntry.setDataPrototype("rose_addr_t", "src_offset", "= 0",
1580  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1581  AsmNERelocEntry.setDataPrototype("SgAsmNERelocEntry::iref_type", "iref", "",
1582  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1583  AsmNERelocEntry.setDataPrototype("SgAsmNERelocEntry::iord_type", "iord", "",
1584  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1585  AsmNERelocEntry.setDataPrototype("SgAsmNERelocEntry::iname_type", "iname", "",
1586  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1587  AsmNERelocEntry.setDataPrototype("SgAsmNERelocEntry::osfixup_type", "osfixup", "",
1588  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1589 
1590 
1591 
1592  /*************************************************************************************************************************
1593  * NE Sections
1594  *************************************************************************************************************************/
1595 
1596  NEW_TERMINAL_MACRO(AsmNENameTable, "AsmNENameTable", "AsmNENameTableTag");
1597  AsmNENameTable.setFunctionPrototype("HEADER_NE_NAME_TABLE", "../Grammar/BinaryInstruction.code");
1598  AsmNENameTable.setDataPrototype("SgStringList", "names", "",
1599  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1600  AsmNENameTable.setDataPrototype("SgUnsignedList", "ordinals", "",
1601  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1602 
1603 
1604 
1605  NEW_TERMINAL_MACRO(AsmNEModuleTable, "AsmNEModuleTable", "AsmNEModuleTableTag");
1606  AsmNEModuleTable.setFunctionPrototype("HEADER_NE_MODULE_TABLE", "../Grammar/BinaryInstruction.code");
1607  AsmNEModuleTable.setDataPrototype("SgAsmNEStringTable*", "strtab", "= NULL",
1608  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1609  AsmNEModuleTable.setDataPrototype("SgAddressList", "name_offsets", "",
1610  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1611  AsmNEModuleTable.setDataPrototype("SgStringList", "names", "",
1612  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1613 
1614 
1615 
1616  NEW_TERMINAL_MACRO(AsmNEStringTable, "AsmNEStringTable", "AsmNEStringTableTag");
1617  AsmNEStringTable.setFunctionPrototype("HEADER_NE_STRING_TABLE", "../Grammar/BinaryInstruction.code");
1618 
1619 
1620 
1621  NEW_TERMINAL_MACRO(AsmNESection, "AsmNESection", "AsmNESectionTag");
1622  AsmNESection.setFunctionPrototype("HEADER_NE_SECTION", "../Grammar/BinaryInstruction.code");
1623  AsmNESection.setDataPrototype("SgAsmNESectionTableEntry*", "st_entry", "= NULL",
1624  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1625  AsmNESection.setDataPrototype("SgAsmNERelocTable*", "reloc_table", "= NULL",
1626  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1627 
1628 
1629 
1630  /*************************************************************************************************************************
1631  * LE File Header
1632  *************************************************************************************************************************/
1633 
1634  NEW_TERMINAL_MACRO(AsmLEFileHeader, "AsmLEFileHeader", "AsmLEFileHeaderTag");
1635  AsmLEFileHeader.setFunctionPrototype("HEADER_LE_FILE_HEADER", "../Grammar/BinaryInstruction.code");
1636  AsmLEFileHeader.setDataPrototype("unsigned", "e_byte_order", "= 0",
1637  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1638  AsmLEFileHeader.setDataPrototype("unsigned", "e_word_order", "= 0",
1639  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1640  AsmLEFileHeader.setDataPrototype("unsigned", "e_format_level", "= 0",
1641  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1642  AsmLEFileHeader.setDataPrototype("unsigned", "e_cpu_type", "= 0",
1643  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1644  AsmLEFileHeader.setDataPrototype("unsigned", "e_os_type", "= 0",
1645  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1646  AsmLEFileHeader.setDataPrototype("unsigned", "e_module_version", "= 0",
1647  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1648  AsmLEFileHeader.setDataPrototype("unsigned", "e_flags", "= 0",
1649  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1650  AsmLEFileHeader.setDataPrototype("unsigned", "e_eip_section", "= 0",
1651  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1652  AsmLEFileHeader.setDataPrototype("unsigned", "e_esp_section", "= 0",
1653  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1654  AsmLEFileHeader.setDataPrototype("unsigned", "e_last_page_size", "= 0",
1655  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1656  AsmLEFileHeader.setDataPrototype("unsigned", "e_page_offset_shift", "= 0",
1657  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1658  AsmLEFileHeader.setDataPrototype("unsigned", "e_fixup_sect_cksum", "= 0",
1659  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1660  AsmLEFileHeader.setDataPrototype("unsigned", "e_loader_sect_cksum", "= 0",
1661  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1662  AsmLEFileHeader.setDataPrototype("unsigned", "e_secttab_nentries", "= 0",
1663  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1664  AsmLEFileHeader.setDataPrototype("unsigned", "e_rsrctab_nentries", "= 0",
1665  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1666  AsmLEFileHeader.setDataPrototype("unsigned", "e_fmtdirtab_nentries", "= 0",
1667  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1668  AsmLEFileHeader.setDataPrototype("unsigned", "e_import_modtab_nentries", "= 0",
1669  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1670  AsmLEFileHeader.setDataPrototype("unsigned", "e_preload_npages", "= 0",
1671  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1672  AsmLEFileHeader.setDataPrototype("unsigned", "e_nonresnametab_size", "= 0",
1673  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1674  AsmLEFileHeader.setDataPrototype("unsigned", "e_nonresnametab_cksum", "= 0",
1675  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1676  AsmLEFileHeader.setDataPrototype("unsigned", "e_auto_ds_section", "= 0",
1677  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1678  AsmLEFileHeader.setDataPrototype("unsigned", "e_debug_info_size", "= 0",
1679  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1680  AsmLEFileHeader.setDataPrototype("unsigned", "e_num_instance_preload", "= 0",
1681  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1682  AsmLEFileHeader.setDataPrototype("unsigned", "e_num_instance_demand", "= 0",
1683  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1684  AsmLEFileHeader.setDataPrototype("unsigned", "e_heap_size", "= 0",
1685  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1686  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_npages", "= 0",
1687  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1688  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_eip", "= 0",
1689  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1690  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_esp", "= 0",
1691  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1692  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_page_size", "= 0",
1693  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1694  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_fixup_sect_size", "= 0",
1695  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1696  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_loader_sect_size", "= 0",
1697  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1698  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_secttab_rfo", "= 0",
1699  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1700  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_pagetab_rfo", "= 0",
1701  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1702  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_iterpages_offset", "= 0",
1703  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1704  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_rsrctab_rfo", "= 0",
1705  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1706  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_resnametab_rfo", "= 0",
1707  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1708  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_entrytab_rfo", "= 0",
1709  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1710  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_fmtdirtab_rfo", "= 0",
1711  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1712  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_fixup_pagetab_rfo", "= 0",
1713  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1714  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_fixup_rectab_rfo", "= 0",
1715  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1716  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_import_modtab_rfo", "= 0",
1717  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1718  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_import_proctab_rfo", "= 0",
1719  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1720  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_ppcksumtab_rfo", "= 0",
1721  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1722  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_data_pages_offset", "= 0",
1723  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1724  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_nonresnametab_offset", "= 0",
1725  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1726  AsmLEFileHeader.setDataPrototype("rose_addr_t", "e_debug_info_rfo", "= 0",
1727  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1728  AsmLEFileHeader.setDataPrototype("SgAsmDOSExtendedHeader*", "dos2_header", "= NULL",
1729  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1730  AsmLEFileHeader.setDataPrototype("SgAsmLESectionTable*", "section_table", "= NULL",
1731  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1732  AsmLEFileHeader.setDataPrototype("SgAsmLEPageTable*", "page_table", "= NULL",
1733  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1734  AsmLEFileHeader.setDataPrototype("SgAsmLENameTable*", "resname_table", "= NULL",
1735  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1736  AsmLEFileHeader.setDataPrototype("SgAsmLENameTable*", "nonresname_table", "= NULL",
1737  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1738  AsmLEFileHeader.setDataPrototype("SgAsmLEEntryTable*", "entry_table", "= NULL",
1739  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1740  AsmLEFileHeader.setDataPrototype("SgAsmLERelocTable*", "reloc_table", "= NULL",
1741  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1742 
1743 
1744 
1745  NEW_TERMINAL_MACRO(AsmLEEntryTable, "AsmLEEntryTable", "AsmLEEntryTableTag");
1746  AsmLEEntryTable.setFunctionPrototype("HEADER_LE_ENTRY_TABLE", "../Grammar/BinaryInstruction.code");
1747  AsmLEEntryTable.setDataPrototype("SgSizeTList", "bundle_sizes", "",
1748  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1749  AsmLEEntryTable.setDataPrototype("SgAsmLEEntryPointPtrList", "entries", "",
1750  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1751 
1752 
1753 
1754  NEW_TERMINAL_MACRO(AsmLEEntryPoint, "AsmLEEntryPoint", "AsmLEEntryPointTag");
1755  AsmLEEntryPoint.setFunctionPrototype("HEADER_LE_ENTRY_POINT", "../Grammar/BinaryInstruction.code");
1756  AsmLEEntryPoint.setFunctionSource("SOURCE_LE_ENTRY_POINT", "../Grammar/BinaryInstruction.code");
1757  AsmLEEntryPoint.setDataPrototype("SgAsmLEEntryPointPtrList", "entries", "",
1758  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1759  AsmLEEntryPoint.setDataPrototype("unsigned", "flags", "= 0",
1760  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1761  AsmLEEntryPoint.setDataPrototype("unsigned", "objnum", "= 0",
1762  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1763  AsmLEEntryPoint.setDataPrototype("unsigned", "entry_type", "= 0",
1764  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1765  AsmLEEntryPoint.setDataPrototype("unsigned", "res1", "= 0",
1766  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1767  AsmLEEntryPoint.setDataPrototype("rose_addr_t", "entry_offset", "= 0",
1768  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1769 
1770 
1771 
1772  /*************************************************************************************************************************
1773  * LE Section Table
1774  *************************************************************************************************************************/
1775 
1776  NEW_TERMINAL_MACRO(AsmLESectionTable, "AsmLESectionTable", "AsmLESectionTableTag");
1777  AsmLESectionTable.setFunctionPrototype("HEADER_LE_SECTION_TABLE", "../Grammar/BinaryInstruction.code");
1778 
1779 
1780 
1781  NEW_TERMINAL_MACRO(AsmLESectionTableEntry, "AsmLESectionTableEntry", "AsmLESectionTableEntryTag");
1782  AsmLESectionTableEntry.setFunctionPrototype("HEADER_LE_SECTION_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
1783  AsmLESectionTableEntry.setFunctionSource("SOURCE_LE_SECTION_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
1784  AsmLESectionTableEntry.setDataPrototype("unsigned", "flags", "= 0",
1785  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1786  AsmLESectionTableEntry.setDataPrototype("unsigned", "pagemap_index", "= 0",
1787  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1788  AsmLESectionTableEntry.setDataPrototype("unsigned", "pagemap_nentries", "= 0",
1789  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1790  AsmLESectionTableEntry.setDataPrototype("unsigned", "res1", "= 0",
1791  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1792  AsmLESectionTableEntry.setDataPrototype("rose_addr_t", "mapped_size", "= 0",
1793  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1794  AsmLESectionTableEntry.setDataPrototype("rose_addr_t", "base_addr", "= 0",
1795  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1796 
1797 
1798 
1799  /*************************************************************************************************************************
1800  * LE Relocation Table
1801  *************************************************************************************************************************/
1802 
1803  NEW_TERMINAL_MACRO(AsmLERelocTable, "AsmLERelocTable", "AsmLERelocTableTag");
1804  AsmLERelocTable.setFunctionPrototype("HEADER_LE_RELOC_TABLE", "../Grammar/BinaryInstruction.code");
1805  AsmLERelocTable.setDataPrototype("SgAsmLERelocEntryPtrList", "entries", "",
1806  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1807 
1808 
1809 
1810  /*************************************************************************************************************************
1811  * LE Sections
1812  *************************************************************************************************************************/
1813 
1814  NEW_TERMINAL_MACRO(AsmLENameTable, "AsmLENameTable", "AsmLENameTableTag");
1815  AsmLENameTable.setFunctionPrototype("HEADER_LE_NAME_TABLE", "../Grammar/BinaryInstruction.code");
1816  AsmLENameTable.setDataPrototype("SgStringList", "names", "",
1817  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1818  AsmLENameTable.setDataPrototype("SgUnsignedList", "ordinals", "",
1819  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1820 
1821 
1822 
1823  NEW_TERMINAL_MACRO(AsmLEPageTable, "AsmLEPageTable", "AsmLEPageTableTag");
1824  AsmLEPageTable.setFunctionPrototype("HEADER_LE_PAGE_TABLE", "../Grammar/BinaryInstruction.code");
1825  AsmLEPageTable.setDataPrototype("SgAsmLEPageTableEntryPtrList", "entries", "",
1826  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1827 
1828 
1829 
1830  NEW_TERMINAL_MACRO(AsmLEPageTableEntry, "AsmLEPageTableEntry", "AsmLEPageTableEntryTag");
1831  AsmLEPageTableEntry.setFunctionPrototype("HEADER_LE_PAGE_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
1832  AsmLEPageTableEntry.setFunctionSource("SOURCE_LE_PAGE_TABLE_ENTRY", "../Grammar/BinaryInstruction.code");
1833  AsmLEPageTableEntry.setDataPrototype("unsigned", "pageno", "= 0",
1834  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1835  AsmLEPageTableEntry.setDataPrototype("unsigned", "flags", "= 0",
1836  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1837 
1838 
1839 
1840  NEW_TERMINAL_MACRO(AsmLESection, "AsmLESection", "AsmLESectionTag");
1841  AsmLESection.setFunctionPrototype("HEADER_LE_SECTION", "../Grammar/BinaryInstruction.code");
1842  AsmLESection.setDataPrototype("SgAsmLESectionTableEntry*", "st_entry", "= NULL",
1843  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1844 
1845 
1846 
1847  /*************************************************************************************************************************
1848  * DWARF
1849  * These are a subset (but most of) the possible Dwarf Tags, I [DQ] have skipped some of the architecture specific tags
1850  * (except for GNU). There are about 63 new IR nodes here. These are kinds of language constructs that are stored in the
1851  * ".debug_info" section when dwarf debug information is available (generated by the compiler) in the binary executable.
1852  *************************************************************************************************************************/
1853 
1854  NEW_TERMINAL_MACRO(AsmDwarfArrayType, "AsmDwarfArrayType", "AsmDwarfArrayTypeTag");
1855  AsmDwarfArrayType.setFunctionPrototype("HEADER_DWARF_ARRAY_TYPE", "../Grammar/BinaryInstruction.code");
1856  AsmDwarfArrayType.setFunctionSource("SOURCE_DWARF_ARRAY_TYPE", "../Grammar/BinaryInstruction.code");
1857  AsmDwarfArrayType.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
1858  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1859 
1860 
1861 
1862  NEW_TERMINAL_MACRO(AsmDwarfClassType, "AsmDwarfClassType", "AsmDwarfClassTypeTag");
1863  AsmDwarfClassType.setFunctionPrototype("HEADER_DWARF_CLASS_TYPE", "../Grammar/BinaryInstruction.code");
1864  AsmDwarfClassType.setFunctionSource("SOURCE_DWARF_CLASS_TYPE", "../Grammar/BinaryInstruction.code");
1865  AsmDwarfClassType.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
1866  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1867 
1868 
1869 
1870  NEW_TERMINAL_MACRO(AsmDwarfEntryPoint, "AsmDwarfEntryPoint", "AsmDwarfEntryPointTag");
1871 
1872 
1873 
1874  NEW_TERMINAL_MACRO(AsmDwarfEnumerationType, "AsmDwarfEnumerationType", "AsmDwarfEnumerationTypeTag");
1875  AsmDwarfEnumerationType.setFunctionPrototype("HEADER_DWARF_ENUMERATION_TYPE", "../Grammar/BinaryInstruction.code");
1876  AsmDwarfEnumerationType.setFunctionSource("SOURCE_DWARF_ENUMERATION_TYPE", "../Grammar/BinaryInstruction.code");
1877  AsmDwarfEnumerationType.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
1878  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1879 
1880 
1881 
1882  NEW_TERMINAL_MACRO(AsmDwarfFormalParameter, "AsmDwarfFormalParameter", "AsmDwarfFormalParameterTag");
1883 
1884 
1885 
1886  NEW_TERMINAL_MACRO(AsmDwarfImportedDeclaration, "AsmDwarfImportedDeclaration", "AsmDwarfImportedDeclarationTag");
1887 
1888 
1889 
1890  NEW_TERMINAL_MACRO(AsmDwarfLabel, "AsmDwarfLabel", "AsmDwarfLabelTag");
1891 
1892 
1893 
1894  NEW_TERMINAL_MACRO(AsmDwarfLexicalBlock, "AsmDwarfLexicalBlock", "AsmDwarfLexicalBlockTag");
1895  AsmDwarfLexicalBlock.setFunctionPrototype("HEADER_DWARF_LEXICAL_BLOCK", "../Grammar/BinaryInstruction.code");
1896  AsmDwarfLexicalBlock.setFunctionSource("SOURCE_DWARF_LEXICAL_BLOCK", "../Grammar/BinaryInstruction.code");
1897  AsmDwarfLexicalBlock.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
1898  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1899 
1900 
1901 
1902  NEW_TERMINAL_MACRO(AsmDwarfMember, "AsmDwarfMember", "AsmDwarfMemberTag");
1903 
1904 
1905 
1906  NEW_TERMINAL_MACRO(AsmDwarfPointerType, "AsmDwarfPointerType", "AsmDwarfPointerTypeTag");
1907 
1908 
1909 
1910  NEW_TERMINAL_MACRO(AsmDwarfReferenceType, "AsmDwarfReferenceType", "AsmDwarfReferenceTypeTag");
1911 
1912 
1913 
1914  NEW_TERMINAL_MACRO(AsmDwarfCompilationUnit, "AsmDwarfCompilationUnit", "AsmDwarfCompilationUnitTag");
1915  AsmDwarfCompilationUnit.setFunctionPrototype("HEADER_DWARF_COMPILATION_UNIT", "../Grammar/BinaryInstruction.code");
1916  AsmDwarfCompilationUnit.setFunctionSource("SOURCE_DWARF_COMPILATION_UNIT", "../Grammar/BinaryInstruction.code");
1917  //AsmDwarfCompilationUnit.setDataPrototype("std::string", "name", "= \"\"",
1918  // NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1919  AsmDwarfCompilationUnit.setDataPrototype("std::string", "producer", "= \"\"",
1920  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1921  AsmDwarfCompilationUnit.setDataPrototype("std::string", "language", "= \"\"",
1922  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1923  AsmDwarfCompilationUnit.setDataPrototype("uint64_t", "low_pc", "= 0x0",
1924  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1925  AsmDwarfCompilationUnit.setDataPrototype("uint64_t", "hi_pc", "= 0x0",
1926  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1927  AsmDwarfCompilationUnit.setDataPrototype("int", "version_stamp", "= 0",
1928  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1929  AsmDwarfCompilationUnit.setDataPrototype("uint64_t", "abbrev_offset", "= 0",
1930  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1931  AsmDwarfCompilationUnit.setDataPrototype("uint64_t", "address_size", "= 0",
1932  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1933  AsmDwarfCompilationUnit.setDataPrototype("uint64_t", "offset_length", "= 0",
1934  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
1935  AsmDwarfCompilationUnit.setDataPrototype("SgAsmDwarfLineList*", "line_info", "= NULL",
1936  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1937  AsmDwarfCompilationUnit.setDataPrototype("SgAsmDwarfConstructList*", "language_constructs", "= NULL",
1938  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1939  AsmDwarfCompilationUnit.setDataPrototype("SgAsmDwarfMacroList*", "macro_info", "= NULL",
1940  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1941 
1942 
1943 
1944  NEW_TERMINAL_MACRO(AsmDwarfStringType, "AsmDwarfStringType", "AsmDwarfStringTypeTag");
1945 
1946 
1947 
1948  NEW_TERMINAL_MACRO(AsmDwarfStructureType, "AsmDwarfStructureType", "AsmDwarfStructureTypeTag");
1949  AsmDwarfStructureType.setFunctionPrototype("HEADER_DWARF_STRUCTURE_TYPE", "../Grammar/BinaryInstruction.code");
1950  AsmDwarfStructureType.setFunctionSource("SOURCE_DWARF_STRUCTURE_TYPE", "../Grammar/BinaryInstruction.code");
1951  AsmDwarfStructureType.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
1952  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1953 
1954 
1955 
1956  NEW_TERMINAL_MACRO(AsmDwarfSubroutineType, "AsmDwarfSubroutineType", "AsmDwarfSubroutineTypeTag");
1957  AsmDwarfSubroutineType.setFunctionPrototype("HEADER_DWARF_SUBROUTINE_TYPE", "../Grammar/BinaryInstruction.code");
1958  AsmDwarfSubroutineType.setFunctionSource("SOURCE_DWARF_SUBROUTINE_TYPE", "../Grammar/BinaryInstruction.code");
1959  AsmDwarfSubroutineType.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
1960  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1961 
1962 
1963 
1964  NEW_TERMINAL_MACRO(AsmDwarfTypedef, "AsmDwarfTypedef", "AsmDwarfTypedefTag");
1965 
1966 
1967 
1968  NEW_TERMINAL_MACRO(AsmDwarfUnionType, "AsmDwarfUnionType", "AsmDwarfUnionTypeTag");
1969  AsmDwarfUnionType.setFunctionPrototype("HEADER_DWARF_UNION_TYPE", "../Grammar/BinaryInstruction.code");
1970  AsmDwarfUnionType.setFunctionSource("SOURCE_DWARF_UNION_TYPE", "../Grammar/BinaryInstruction.code");
1971  AsmDwarfUnionType.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
1972  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1973 
1974 
1975 
1976  NEW_TERMINAL_MACRO(AsmDwarfUnspecifiedParameters, "AsmDwarfUnspecifiedParameters", "AsmDwarfUnspecifiedParametersTag");
1977 
1978 
1979 
1980  NEW_TERMINAL_MACRO(AsmDwarfVariant, "AsmDwarfVariant", "AsmDwarfVariantTag");
1981 
1982 
1983 
1984  NEW_TERMINAL_MACRO(AsmDwarfCommonBlock, "AsmDwarfCommonBlock", "AsmDwarfCommonBlockTag");
1985  AsmDwarfCommonBlock.setFunctionPrototype("HEADER_DWARF_COMMON_BLOCK", "../Grammar/BinaryInstruction.code");
1986  AsmDwarfCommonBlock.setFunctionSource("SOURCE_DWARF_COMMON_BLOCK", "../Grammar/BinaryInstruction.code");
1987  AsmDwarfCommonBlock.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
1988  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
1989 
1990 
1991 
1992  NEW_TERMINAL_MACRO(AsmDwarfCommonInclusion, "AsmDwarfCommonInclusion", "AsmDwarfCommonInclusionTag");
1993 
1994 
1995 
1996  NEW_TERMINAL_MACRO(AsmDwarfInheritance, "AsmDwarfInheritance", "AsmDwarfInheritanceTag");
1997 
1998 
1999 
2000  NEW_TERMINAL_MACRO(AsmDwarfInlinedSubroutine, "AsmDwarfInlinedSubroutine", "AsmDwarfInlinedSubroutineTag");
2001  AsmDwarfInlinedSubroutine.setFunctionPrototype("HEADER_DWARF_INLINED_SUBROUTINE", "../Grammar/BinaryInstruction.code");
2002  AsmDwarfInlinedSubroutine.setFunctionSource("SOURCE_DWARF_INLINED_SUBROUTINE", "../Grammar/BinaryInstruction.code");
2003  AsmDwarfInlinedSubroutine.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
2004  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2005 
2006 
2007 
2008  NEW_TERMINAL_MACRO(AsmDwarfModule, "AsmDwarfModule", "AsmDwarfModuleTag");
2009 
2010 
2011 
2012  NEW_TERMINAL_MACRO(AsmDwarfPtrToMemberType, "AsmDwarfPtrToMemberType", "AsmDwarfPtrToMemberTypeTag");
2013 
2014 
2015 
2016  NEW_TERMINAL_MACRO(AsmDwarfSetType, "AsmDwarfSetType", "AsmDwarfSetTypeTag");
2017 
2018 
2019 
2020  NEW_TERMINAL_MACRO(AsmDwarfSubrangeType, "AsmDwarfSubrangeType", "AsmDwarfSubrangeTypeTag");
2021 
2022 
2023 
2024  NEW_TERMINAL_MACRO(AsmDwarfWithStmt, "AsmDwarfWithStmt", "AsmDwarfWithStmtTag");
2025 
2026 
2027 
2028  NEW_TERMINAL_MACRO(AsmDwarfAccessDeclaration, "AsmDwarfAccessDeclaration", "AsmDwarfAccessDeclarationTag");
2029 
2030 
2031 
2032  NEW_TERMINAL_MACRO(AsmDwarfBaseType, "AsmDwarfBaseType", "AsmDwarfBaseTypeTag");
2033 
2034 
2035 
2036  NEW_TERMINAL_MACRO(AsmDwarfCatchBlock, "AsmDwarfCatchBlock", "AsmDwarfCatchBlockTag");
2037 
2038 
2039 
2040  NEW_TERMINAL_MACRO(AsmDwarfConstType, "AsmDwarfConstType", "AsmDwarfConstTypeTag");
2041 
2042 
2043 
2044  NEW_TERMINAL_MACRO(AsmDwarfConstant, "AsmDwarfConstant", "AsmDwarfConstantTag");
2045 
2046 
2047 
2048  NEW_TERMINAL_MACRO(AsmDwarfEnumerator, "AsmDwarfEnumerator", "AsmDwarfEnumeratorTag");
2049 
2050 
2051 
2052  NEW_TERMINAL_MACRO(AsmDwarfFileType, "AsmDwarfFileType", "AsmDwarfFileTypeTag");
2053 
2054 
2055 
2056  NEW_TERMINAL_MACRO(AsmDwarfFriend, "AsmDwarfFriend", "AsmDwarfFriendTag");
2057 
2058 
2059 
2060  NEW_TERMINAL_MACRO(AsmDwarfNamelist, "AsmDwarfNamelist", "AsmDwarfNamelistTag");
2061 
2062 
2063 
2064  NEW_TERMINAL_MACRO(AsmDwarfNamelistItem, "AsmDwarfNamelistItem", "AsmDwarfNamelistItemTag");
2065 
2066 
2067 
2068  NEW_TERMINAL_MACRO(AsmDwarfPackedType, "AsmDwarfPackedType", "AsmDwarfPackedTypeTag");
2069 
2070 
2071 
2072  NEW_TERMINAL_MACRO(AsmDwarfSubprogram, "AsmDwarfSubprogram", "AsmDwarfSubprogramTag");
2073  AsmDwarfSubprogram.setFunctionPrototype("HEADER_DWARF_SUBPROGRAM", "../Grammar/BinaryInstruction.code");
2074  AsmDwarfSubprogram.setFunctionSource("SOURCE_DWARF_SUBPROGRAM", "../Grammar/BinaryInstruction.code");
2075  AsmDwarfSubprogram.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
2076  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2077 
2078 
2079 
2080  NEW_TERMINAL_MACRO(AsmDwarfTemplateTypeParameter, "AsmDwarfTemplateTypeParameter", "AsmDwarfTemplateTypeParameterTag");
2081 
2082 
2083 
2084  NEW_TERMINAL_MACRO(AsmDwarfTemplateValueParameter, "AsmDwarfTemplateValueParameter", "AsmDwarfTemplateValueParameterTag");
2085 
2086 
2087 
2088  NEW_TERMINAL_MACRO(AsmDwarfThrownType, "AsmDwarfThrownType", "AsmDwarfThrownTypeTag");
2089 
2090 
2091 
2092  NEW_TERMINAL_MACRO(AsmDwarfTryBlock, "AsmDwarfTryBlock", "AsmDwarfTryBlockTag");
2093 
2094 
2095 
2096  NEW_TERMINAL_MACRO(AsmDwarfVariantPart, "AsmDwarfVariantPart", "AsmDwarfVariantPartTag");
2097 
2098 
2099 
2100  NEW_TERMINAL_MACRO(AsmDwarfVariable, "AsmDwarfVariable", "AsmDwarfVariableTag");
2101 
2102 
2103 
2104  NEW_TERMINAL_MACRO(AsmDwarfVolatileType, "AsmDwarfVolatileType", "AsmDwarfVolatileTypeTag");
2105 
2106 
2107 
2108  NEW_TERMINAL_MACRO(AsmDwarfDwarfProcedure, "AsmDwarfDwarfProcedure", "AsmDwarfDwarfProcedureTag");
2109 
2110 
2111 
2112  NEW_TERMINAL_MACRO(AsmDwarfRestrictType, "AsmDwarfRestrictType", "AsmDwarfRestrictTypeTag");
2113 
2114 
2115 
2116  NEW_TERMINAL_MACRO(AsmDwarfInterfaceType, "AsmDwarfInterfaceType", "AsmDwarfInterfaceTypeTag");
2117 
2118 
2119 
2120  NEW_TERMINAL_MACRO(AsmDwarfNamespace, "AsmDwarfNamespace", "AsmDwarfNamespaceTag");
2121  AsmDwarfNamespace.setFunctionPrototype("HEADER_DWARF_NAMESPACE", "../Grammar/BinaryInstruction.code");
2122  AsmDwarfNamespace.setFunctionSource("SOURCE_DWARF_NAMESPACE", "../Grammar/BinaryInstruction.code");
2123  AsmDwarfNamespace.setDataPrototype("SgAsmDwarfConstructList*", "body", "= NULL",
2124  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2125 
2126 
2127 
2128  NEW_TERMINAL_MACRO(AsmDwarfImportedModule, "AsmDwarfImportedModule", "AsmDwarfImportedModuleTag");
2129 
2130 
2131 
2132  NEW_TERMINAL_MACRO(AsmDwarfUnspecifiedType, "AsmDwarfUnspecifiedType", "AsmDwarfUnspecifiedTypeTag");
2133 
2134 
2135 
2136  NEW_TERMINAL_MACRO(AsmDwarfPartialUnit, "AsmDwarfPartialUnit", "AsmDwarfPartialUnitTag");
2137 
2138 
2139 
2140  NEW_TERMINAL_MACRO(AsmDwarfImportedUnit, "AsmDwarfImportedUnit", "AsmDwarfImportedUnitTag");
2141 
2142 
2143 
2144  NEW_TERMINAL_MACRO(AsmDwarfMutableType, "AsmDwarfMutableType", "AsmDwarfMutableTypeTag");
2145 
2146 
2147 
2148  NEW_TERMINAL_MACRO(AsmDwarfCondition, "AsmDwarfCondition", "AsmDwarfConditionTag");
2149 
2150 
2151 
2152  NEW_TERMINAL_MACRO(AsmDwarfSharedType, "AsmDwarfSharedType", "AsmDwarfSharedTypeTag");
2153 
2154 
2155 
2156  NEW_TERMINAL_MACRO(AsmDwarfFormatLabel, "AsmDwarfFormatLabel", "AsmDwarfFormatLabelTag");
2157 
2158 
2159 
2160  NEW_TERMINAL_MACRO(AsmDwarfFunctionTemplate, "AsmDwarfFunctionTemplate", "AsmDwarfFunctionTemplateTag");
2161 
2162 
2163 
2164  NEW_TERMINAL_MACRO(AsmDwarfClassTemplate, "AsmDwarfClassTemplate", "AsmDwarfClassTemplateTag");
2165 
2166 
2167 
2168  NEW_TERMINAL_MACRO(AsmDwarfUpcSharedType, "AsmDwarfUpcSharedType", "AsmDwarfUpcSharedTypeTag");
2169 
2170 
2171 
2172  NEW_TERMINAL_MACRO(AsmDwarfUpcStrictType, "AsmDwarfUpcStrictType", "AsmDwarfUpcStrictTypeTag");
2173 
2174 
2175 
2176  NEW_TERMINAL_MACRO(AsmDwarfUpcRelaxedType, "AsmDwarfUpcRelaxedType", "AsmDwarfUpcRelaxedTypeTag");
2177 
2178 
2179 
2180  NEW_TERMINAL_MACRO(AsmDwarfUnknownConstruct, "AsmDwarfUnknownConstruct", "AsmDwarfUnknownConstructTag");
2181 
2182 
2183 
2184  NEW_NONTERMINAL_MACRO(AsmDwarfConstruct,
2185  AsmDwarfArrayType | AsmDwarfClassType | AsmDwarfEntryPoint | AsmDwarfEnumerationType |
2186  AsmDwarfFormalParameter | AsmDwarfImportedDeclaration | AsmDwarfLabel | AsmDwarfLexicalBlock |
2187  AsmDwarfMember | AsmDwarfPointerType | AsmDwarfReferenceType | AsmDwarfCompilationUnit |
2188  AsmDwarfStringType | AsmDwarfStructureType | AsmDwarfSubroutineType | AsmDwarfTypedef |
2189  AsmDwarfUnionType | AsmDwarfUnspecifiedParameters | AsmDwarfVariant | AsmDwarfCommonBlock |
2190  AsmDwarfCommonInclusion | AsmDwarfInheritance | AsmDwarfInlinedSubroutine | AsmDwarfModule |
2191  AsmDwarfPtrToMemberType | AsmDwarfSetType | AsmDwarfSubrangeType | AsmDwarfWithStmt |
2192  AsmDwarfAccessDeclaration | AsmDwarfBaseType | AsmDwarfCatchBlock | AsmDwarfConstType |
2193  AsmDwarfConstant | AsmDwarfEnumerator | AsmDwarfFileType | AsmDwarfFriend | AsmDwarfNamelist |
2194  AsmDwarfNamelistItem | AsmDwarfPackedType | AsmDwarfSubprogram | AsmDwarfTemplateTypeParameter |
2195  AsmDwarfTemplateValueParameter | AsmDwarfThrownType | AsmDwarfTryBlock | AsmDwarfVariantPart |
2196  AsmDwarfVariable | AsmDwarfVolatileType | AsmDwarfDwarfProcedure | AsmDwarfRestrictType |
2197  AsmDwarfInterfaceType | AsmDwarfNamespace | AsmDwarfImportedModule | AsmDwarfUnspecifiedType |
2198  AsmDwarfPartialUnit | AsmDwarfImportedUnit | AsmDwarfMutableType | AsmDwarfCondition |
2199  AsmDwarfSharedType | AsmDwarfFormatLabel | AsmDwarfFunctionTemplate | AsmDwarfClassTemplate |
2200  AsmDwarfUpcSharedType | AsmDwarfUpcStrictType | AsmDwarfUpcRelaxedType | AsmDwarfUnknownConstruct,
2201  "AsmDwarfConstruct", "AsmDwarfConstructTag", false);
2202  AsmDwarfConstruct.setFunctionPrototype("HEADER_DWARF_CONSTRUCT", "../Grammar/BinaryInstruction.code");
2203  AsmDwarfConstruct.setFunctionSource("SOURCE_DWARF_CONSTRUCT", "../Grammar/BinaryInstruction.code");
2204  // For now we will store the nesting level (just to support debugging), then it will be removed.
2205  AsmDwarfConstruct.setDataPrototype("int", "nesting_level", "= 0",
2206  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2207  AsmDwarfConstruct.setDataPrototype("uint64_t", "offset", "= 0",
2208  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2209  AsmDwarfConstruct.setDataPrototype("uint64_t", "overall_offset", "= 0",
2210  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2211  // A lot of constructs have a name so put the name into the base class
2212  AsmDwarfConstruct.setDataPrototype("std::string", "name", "= \"\"",
2213  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2214  // This is a data member that can be filled in via a separate analysis (we would have to read the line information before
2215  // hand).
2216  AsmDwarfConstruct.setDataPrototype("SgAsmDwarfLine*", "source_position", "= NULL",
2217  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2218 
2219 
2220 
2221 
2222  NEW_TERMINAL_MACRO(AsmDwarfMacroList, "AsmDwarfMacroList", "AsmDwarfMacroListTag");
2223  AsmDwarfMacroList.setDataPrototype("SgAsmDwarfMacroPtrList", "macro_list", "",
2224  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2225 
2226 
2227 
2228  NEW_TERMINAL_MACRO(AsmDwarfMacro, "AsmDwarfMacro", "AsmDwarfMacroTag");
2229  AsmDwarfMacro.setDataPrototype("std::string", "macro_string", "= \"\"",
2230  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2231 
2232 
2233 
2234  NEW_TERMINAL_MACRO(AsmDwarfLine, "AsmDwarfLine", "AsmDwarfLineTag");
2235  AsmDwarfLine.setDataPrototype("uint64_t", "address", "= 0",
2236  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2237  AsmDwarfLine.setDataPrototype("int", "file_id", "= Sg_File_Info::NULL_FILE_ID",
2238  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2239  AsmDwarfLine.setDataPrototype("int", "line", "= 0",
2240  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2241  AsmDwarfLine.setDataPrototype("int", "column", "= 0",
2242  CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2243 
2244 
2245 
2246  NEW_TERMINAL_MACRO(AsmDwarfLineList, "AsmDwarfLineList", "AsmDwarfLineListTag");
2247  AsmDwarfLineList.setFunctionPrototype("HEADER_DWARF_LINE_LIST", "../Grammar/BinaryInstruction.code");
2248  AsmDwarfLineList.setFunctionSource("SOURCE_DWARF_LINE_LIST", "../Grammar/BinaryInstruction.code");
2249  AsmDwarfLineList.setDataPrototype("SgAsmDwarfLinePtrList", "line_list", "",
2250  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2251 #if 0
2252  // I [DQ] am having trouble making these proper data members so just use function to return them, so that they are
2253  // computed dynamically.
2254  AsmDwarfLineList.setDataPrototype("SgInstructionAddressSourcePositionMapPtrList", "instructionToSourceMap", "",
2255  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2256  AsmDwarfLineList.setDataPrototype("SgSourcePositionInstructionAddressMapPtrList", "sourceToInstructionMap", "",
2257  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2258 #endif
2259 
2260 
2261 
2262  NEW_TERMINAL_MACRO(AsmDwarfConstructList, "AsmDwarfConstructList", "AsmDwarfConstructListTag");
2263  AsmDwarfConstructList.setDataPrototype("SgAsmDwarfConstructPtrList", "list", "",
2264  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2265 
2266 
2267 
2268  NEW_TERMINAL_MACRO(AsmDwarfCompilationUnitList, "AsmDwarfCompilationUnitList", "AsmDwarfCompilationUnitListTag");
2269  AsmDwarfCompilationUnitList.setDataPrototype("SgAsmDwarfCompilationUnitPtrList", "cu_list", "",
2270  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2271 
2272 
2273 
2274  NEW_NONTERMINAL_MACRO(AsmDwarfInformation,
2275  AsmDwarfMacro | AsmDwarfMacroList | AsmDwarfLine | AsmDwarfLineList | AsmDwarfCompilationUnitList |
2276  AsmDwarfConstruct | AsmDwarfConstructList,
2277  "AsmDwarfInformation", "AsmDwarfInformationTag", false);
2278 
2279 
2280 
2281  /*************************************************************************************************************************
2282  * Strings
2283  * These nodes describe how character strings (symbol names, section names, etc) are stored in a binary file.
2284  *************************************************************************************************************************/
2285 
2286  NEW_TERMINAL_MACRO(AsmStringStorage, "AsmStringStorage", "AsmStringStorageTag");
2287  AsmStringStorage.setFunctionPrototype("HEADER_STRING_STORAGE", "../Grammar/BinaryInstruction.code");
2288  AsmStringStorage.setDataPrototype("SgAsmGenericStrtab*", "strtab", "= NULL",
2289  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2290  AsmStringStorage.setDataPrototype("std::string", "string", "= \"\"",
2291  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2292  AsmStringStorage.setDataPrototype("rose_addr_t", "offset", "= 0",
2293  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2294 
2295 
2296 
2297  NEW_TERMINAL_MACRO(AsmBasicString, "AsmBasicString", "AsmBasicStringTag");
2298  AsmBasicString.setFunctionPrototype("HEADER_BASIC_STRING", "../Grammar/BinaryInstruction.code");
2299  AsmBasicString.setDataPrototype("std::string", "string", "= \"\"",
2300  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2301 
2302 
2303 
2304  NEW_TERMINAL_MACRO(AsmStoredString, "AsmStoredString", "AsmStoredStringTag");
2305  AsmStoredString.setFunctionPrototype("HEADER_STORED_STRING", "../Grammar/BinaryInstruction.code");
2306  AsmStoredString.setDataPrototype("SgAsmStringStorage*", "storage", "= NULL",
2307  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2308 
2309 
2310 
2311  NEW_NONTERMINAL_MACRO(AsmGenericString,
2312  AsmBasicString | AsmStoredString,
2313  "AsmGenericString", "AsmGenericStringTag", false);
2314  AsmGenericString.setFunctionPrototype("HEADER_GENERIC_STRING", "../Grammar/BinaryInstruction.code");
2315 
2316 
2317 
2318 
2319 
2320 
2321  /*************************************************************************************************************************
2322  * Generic Binary IR Nodes
2323  * These are mostly base classes for the container-specific nodes defined above.
2324  *************************************************************************************************************************/
2325 
2326  NEW_TERMINAL_MACRO(AsmGenericHeaderList, "AsmGenericHeaderList", "AsmGenericHeaderListTag");
2327  AsmGenericHeaderList.setDataPrototype("SgAsmGenericHeaderPtrList", "headers", "",
2328  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2329 
2330 
2331 
2332  NEW_NONTERMINAL_MACRO(AsmGenericHeader,
2333  AsmPEFileHeader | AsmLEFileHeader | AsmNEFileHeader | AsmDOSFileHeader | AsmElfFileHeader,
2334  "AsmGenericHeader", "AsmGenericHeaderTag", true);
2335  AsmGenericHeader.setFunctionPrototype("HEADER_GENERIC_HEADER", "../Grammar/BinaryInstruction.code");
2336  AsmGenericHeader.setFunctionSource("SOURCE_GENERIC_HEADER", "../Grammar/BinaryInstruction.code");
2337  AsmGenericHeader.setAutomaticGenerationOfDestructor(false);
2338  // General info about the executable format
2339  AsmGenericHeader.setDataPrototype("SgAsmGenericFormat*", "exec_format", "= NULL",
2340  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2341  // Optional magic number in file byte order
2342  AsmGenericHeader.setDataPrototype("SgCharList", "magic", "",
2343  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2344  // Machine for which this header and its sections, etc. was compiled
2345  AsmGenericHeader.setDataPrototype("SgAsmGenericFormat::InsSetArchitecture", "isa", "= SgAsmGenericFormat::ISA_UNSPECIFIED",
2346  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2347  // Base virtual address used by all "relative virtual addresses" (RVA)
2348  AsmGenericHeader.setDataPrototype("rose_addr_t", "base_va", "= 0",
2349  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2350  // Code entry point wrt base_va
2351  AsmGenericHeader.setDataPrototype("SgRVAList", "entry_rvas", "",
2352  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2353  AsmGenericHeader.setDataPrototype("SgAsmGenericDLLList*", "dlls", "= NULL",
2354  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2355  AsmGenericHeader.setDataPrototype("SgAsmGenericSectionList*", "sections", "= NULL",
2356  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2357 
2358 
2359 
2360  NEW_TERMINAL_MACRO(AsmGenericSymbolList, "AsmGenericSymbolList", "AsmGenericSymbolListTag");
2361  AsmGenericSymbolList.setDataPrototype("SgAsmGenericSymbolPtrList", "symbols", "",
2362  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2363 
2364 
2365 
2366  NEW_NONTERMINAL_MACRO(AsmGenericSymbol,
2367  AsmCoffSymbol | AsmElfSymbol,
2368  "AsmGenericSymbol", "AsmGenericSymbolTag", false);
2369  AsmGenericSymbol.setFunctionPrototype("HEADER_GENERIC_SYMBOL", "../Grammar/BinaryInstruction.code");
2370  AsmGenericSymbol.setFunctionSource("SOURCE_GENERIC_SYMBOL", "../Grammar/BinaryInstruction.code");
2371  AsmGenericSymbol.setAutomaticGenerationOfConstructor(false);
2372  AsmGenericSymbol.setDataPrototype("SgAsmGenericSymbol::SymbolDefState", "def_state", "= SgAsmGenericSymbol::SYM_UNDEFINED",
2373  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2374  AsmGenericSymbol.setDataPrototype("SgAsmGenericSymbol::SymbolBinding", "binding", "= SgAsmGenericSymbol::SYM_NO_BINDING",
2375  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2376  AsmGenericSymbol.setDataPrototype("SgAsmGenericSymbol::SymbolType", "type", "= SgAsmGenericSymbol::SYM_NO_TYPE",
2377  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2378  AsmGenericSymbol.setDataPrototype("rose_addr_t", "value", "= 0",
2379  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2380  AsmGenericSymbol.setDataPrototype("rose_addr_t", "size", "= 0",
2381  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2382  AsmGenericSymbol.setDataPrototype("SgAsmGenericSection*", "bound", "= NULL",
2383  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2384  AsmGenericSymbol.setDataPrototype("SgAsmGenericString*", "name", "= 0",
2385  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2386 
2387 
2388 
2389  NEW_NONTERMINAL_MACRO(AsmGenericStrtab,
2390  AsmElfStrtab | AsmCoffStrtab,
2391  "AsmGenericStrtab", "AsmGenericStrtabTag", false);
2392  AsmGenericStrtab.setFunctionPrototype("HEADER_GENERIC_STRTAB", "../Grammar/BinaryInstruction.code");
2393  AsmGenericStrtab.setAutomaticGenerationOfDestructor(false);
2394  AsmGenericStrtab.setDataPrototype("SgAsmGenericSection*", "container", "= NULL",
2395  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2396  AsmGenericStrtab.setDataPrototype("SgAsmGenericStrtab::referenced_t", "storage_list", "",
2397  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2398  AsmGenericStrtab.setDataPrototype("ExtentMap", "freelist", "", // space avail. for new strings
2399  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2400  AsmGenericStrtab.setDataPrototype("SgAsmStringStorage*", "dont_free", "= NULL", // never free this storage
2401  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2402  AsmGenericStrtab.setDataPrototype("size_t", "num_freed", "= 0", // number of strings freed thus far
2403  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2404 
2405 
2406 
2407  NEW_TERMINAL_MACRO(AsmGenericSectionList, "AsmGenericSectionList", "AsmGenericSectionListTag");
2408  AsmGenericSectionList.setDataPrototype("SgAsmGenericSectionPtrList", "sections", "",
2409  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2410 
2411 
2412 
2413  NEW_NONTERMINAL_MACRO(AsmGenericSection,
2414  AsmGenericHeader | AsmElfSection | AsmElfSectionTable | AsmElfSegmentTable | AsmPESection |
2415  AsmPESectionTable | AsmDOSExtendedHeader | AsmCoffSymbolTable | AsmNESection | AsmNESectionTable |
2416  AsmNENameTable | AsmNEModuleTable | AsmNEStringTable | AsmNEEntryTable | AsmNERelocTable |
2417  AsmLESection | AsmLESectionTable | AsmLENameTable | AsmLEPageTable | AsmLEEntryTable | AsmLERelocTable,
2418  "AsmGenericSection", "AsmGenericSectionTag", true);
2419  AsmGenericSection.setFunctionPrototype("HEADER_GENERIC_SECTION", "../Grammar/BinaryInstruction.code");
2420  AsmGenericSection.setFunctionSource("SOURCE_GENERIC_SECTION", "../Grammar/BinaryInstruction.code");
2421  AsmGenericSection.setPredeclarationString("HEADER_GENERIC_SECTION_PREDECLARATION", "../Grammar/BinaryInstruction.code");
2422  AsmGenericSection.setAutomaticGenerationOfDestructor(false);
2423  AsmGenericSection.setDataPrototype("SgAsmGenericFile*", "file", "= NULL", // The file to which this section belongs
2424  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2425  AsmGenericSection.setDataPrototype("SgAsmGenericHeader*", "header", "= NULL",
2426  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2427  // Current size of section in bytes (may be different than original size, which is kept in p_data.size())
2428  AsmGenericSection.setDataPrototype("rose_addr_t", "size", "= 0",
2429  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2430  AsmGenericSection.setDataPrototype("rose_addr_t", "offset", "= 0", // Starting file offset of the section
2431  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2432  // Required file alignment; zero and one both imply byte alignment
2433  AsmGenericSection.setDataPrototype("rose_addr_t", "file_alignment", "= 0",
2434  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2435  // Original content of just this section; points into file's content
2436  AsmGenericSection.setDataPrototype("SgFileContentList", "data", "",
2437  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2438  // General contents of the section
2439  AsmGenericSection.setDataPrototype("SgAsmGenericSection::SectionPurpose", "purpose", "= SgAsmGenericSection::SP_UNSPECIFIED",
2440  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2441  // Section was created by the format reader; not specified in file
2442  AsmGenericSection.setDataPrototype("bool", "synthesized", "= false",
2443  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2444  // Non-unique section ID (unique for ELF) or negative
2445  AsmGenericSection.setDataPrototype("int", "id", "= 0",
2446  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2447  // Non-unique name of section (may be empty string). The name is not part of the AST traversal because if we
2448  // made it part of the traversal then we'd need to fix some of the subclasses which contain a solitary list
2449  // data member (ROSE cannot have IR nodes that contain a list and other data members). Therefore, the SgAsmGenericSection
2450  // destructor will need to explicitly delete the name.
2451  AsmGenericSection.setDataPrototype("SgAsmGenericString*", "name", "= NULL",
2452  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2453  AsmGenericSection.setDataPrototype("std::string", "short_name", "",
2454  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2455  AsmGenericSection.setDataPrototype("rose_addr_t", "mapped_preferred_rva", "= 0", // DOXYGEN
2456  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2457  AsmGenericSection.setDataPrototype("rose_addr_t", "mapped_size", "= 0",
2458  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2459  AsmGenericSection.setDataPrototype("rose_addr_t", "mapped_alignment", "= 0",
2460  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2461  AsmGenericSection.setDataPrototype("bool", "mapped_rperm", "= false",
2462  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2463  AsmGenericSection.setDataPrototype("bool", "mapped_wperm", "= false",
2464  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2465  AsmGenericSection.setDataPrototype("bool", "mapped_xperm", "= false",
2466  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2467  AsmGenericSection.setDataPrototype("bool", "contains_code", "= false", // DOXYGEN
2468  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2469  AsmGenericSection.setDataPrototype("rose_addr_t", "mapped_actual_va", "= 0", // DOXYGEN
2470  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2471 
2472 
2473 
2474  NEW_TERMINAL_MACRO(AsmGenericDLLList, "AsmGenericDLLList", "AsmGenericDLLListTag");
2475  AsmGenericDLLList.setDataPrototype("SgAsmGenericDLLPtrList", "dlls", "",
2476  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2477 
2478 
2479 
2480  NEW_TERMINAL_MACRO(AsmGenericDLL, "AsmGenericDLL", "AsmGenericDLLTag");
2481  AsmGenericDLL.setFunctionPrototype("HEADER_GENERIC_DLL", "../Grammar/BinaryInstruction.code");
2482  AsmGenericDLL.setFunctionSource("SOURCE_GENERIC_DLL", "../Grammar/BinaryInstruction.code");
2483  AsmGenericDLL.setDataPrototype("SgAsmGenericString*", "name", "= 0",
2484  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE, NO_COPY_DATA);
2485  AsmGenericDLL.setDataPrototype("SgStringList", "symbols", "",
2486  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, NO_COPY_DATA);
2487 
2488 
2489 
2490  NEW_TERMINAL_MACRO(AsmGenericFormat, "AsmGenericFormat", "AsmGenericFormatTag");
2491  AsmGenericFormat.setFunctionPrototype("HEADER_GENERIC_FORMAT", "../Grammar/BinaryInstruction.code");
2492  AsmGenericFormat.setDataPrototype("SgAsmGenericFormat::ExecFamily", "family", "= SgAsmGenericFormat::FAMILY_UNSPECIFIED",
2493  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2494  AsmGenericFormat.setDataPrototype("SgAsmGenericFormat::ExecPurpose", "purpose", "= SgAsmGenericFormat::PURPOSE_EXECUTABLE",
2495  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2496  AsmGenericFormat.setDataPrototype("ByteOrder::Endianness", "sex", "= ByteOrder::ORDER_UNSPECIFIED",
2497  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2498  // actual file format version number stored in file
2499  AsmGenericFormat.setDataPrototype("unsigned", "version", "= 0",
2500  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2501  // is 'version' considered to be the current, supported version
2502  AsmGenericFormat.setDataPrototype("bool", "is_current_version", "= false",
2503  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2504  // application binary interface
2505  AsmGenericFormat.setDataPrototype("SgAsmGenericFormat::ExecABI", "abi", "= SgAsmGenericFormat::ABI_UNSPECIFIED",
2506  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2507  // version of the ABI targeted by this file
2508  AsmGenericFormat.setDataPrototype("unsigned", "abi_version", "= 0",
2509  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2510  // Initialize to ZERO first and then set as required, in bytes (e.g., Elf32 is 4; Elf64 is 8)
2511  AsmGenericFormat.setDataPrototype("size_t", "word_size", "= 0",
2512  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2513 
2514 
2515 
2516  NEW_TERMINAL_MACRO(AsmGenericFileList, "AsmGenericFileList", "AsmGenericFileListTag");
2517  AsmGenericFileList.setDataPrototype("SgAsmGenericFilePtrList", "files", "",
2518  NO_CONSTRUCTOR_PARAMETER, BUILD_LIST_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2519 
2520 
2521 
2522  NEW_TERMINAL_MACRO(AsmGenericFile, "AsmGenericFile", "AsmGenericFileTag");
2523  AsmGenericFile.setFunctionPrototype("HEADER_GENERIC_FILE", "../Grammar/BinaryInstruction.code");
2524  AsmGenericFile.setPredeclarationString("HEADER_GENERIC_FILE_PREDECLARATION", "../Grammar/BinaryInstruction.code");
2525  AsmGenericFile.setAutomaticGenerationOfConstructor(false);
2526  AsmGenericFile.setAutomaticGenerationOfDestructor(false);
2527  // The "dwarf_info" member is first as an optimization: a single AST traversal will see the dwarf information first and
2528  // therefore have the necessary debugging information already available when the traversal gets to the rest of the AST.
2529  AsmGenericFile.setDataPrototype("SgAsmDwarfCompilationUnitList*", "dwarf_info", "= NULL",
2530  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2531  AsmGenericFile.setDataPrototype("std::string", "name", "= \"\"",
2532  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2533  // File descriptor opened for read-only (or negative)
2534  AsmGenericFile.setDataPrototype("int", "fd", "= -1",
2535  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2536  // File attributes at time of file open (valid if fd>=0)
2537  AsmGenericFile.setDataPrototype("SgAsmGenericFormat::fileDetails", "sb", "",
2538  NO_CONSTRUCTOR_PARAMETER, NO_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2539  // Content of file mapped into memory
2540  AsmGenericFile.setDataPrototype("SgFileContentList", "data", "",
2541  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2542  // All known header sections for this file
2543  AsmGenericFile.setDataPrototype("SgAsmGenericHeaderList*", "headers", "= NULL",
2544  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2545  // All known holes (areas otherwise unreferenced by parsing)
2546  AsmGenericFile.setDataPrototype("SgAsmGenericSectionList*", "holes", "= NULL",
2547  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, DEF_TRAVERSAL, NO_DELETE);
2548  AsmGenericFile.setDataPrototype("bool", "truncate_zeros", "= false",
2549  NO_CONSTRUCTOR_PARAMETER, BUILD_FLAG_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2550  AsmGenericFile.setDataPrototype("bool", "tracking_references", "= true",
2551  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2552  AsmGenericFile.setDataPrototype("ExtentMap", "referenced_extents", "",
2553  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2554  AsmGenericFile.setDataPrototype("bool", "neuter", "= false", // if set, refuse to unparse file
2555  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE);
2556 
2557 
2558 
2559  /*************************************************************************************************************************
2560  * Generic Binary File
2561  * This is the root of binary file format container classes.
2562  *************************************************************************************************************************/
2563 
2564  NEW_NONTERMINAL_MACRO(AsmExecutableFileFormat,
2565  AsmGenericDLL | AsmGenericFormat | AsmGenericDLLList | AsmElfEHFrameEntryFD | AsmGenericFile |
2566  AsmGenericSection | AsmGenericSymbol | AsmGenericStrtab | AsmGenericSymbolList |
2567  AsmGenericSectionList | AsmGenericHeaderList | AsmGenericString | AsmElfSectionTableEntry |
2568  AsmElfSegmentTableEntry | AsmElfSymbolList | AsmElfRelocEntry |
2569  AsmElfRelocEntryList | AsmPEExportEntry | AsmPEExportEntryList | AsmElfDynamicEntry |
2570  AsmElfDynamicEntryList | AsmElfSegmentTableEntryList | AsmStringStorage | AsmElfNoteEntry |
2571  AsmElfNoteEntryList | AsmElfSymverEntry | AsmElfSymverEntryList | AsmElfSymverDefinedEntry |
2572  AsmElfSymverDefinedEntryList | AsmElfSymverDefinedAux | AsmElfSymverDefinedAuxList |
2573  AsmElfSymverNeededEntry | AsmElfSymverNeededEntryList | AsmElfSymverNeededAux |
2574  AsmElfSymverNeededAuxList | AsmPEImportDirectory | AsmPESectionTableEntry |
2575  AsmPEExportDirectory | AsmPERVASizePair | AsmCoffSymbolList | AsmPERVASizePairList |
2576  AsmElfEHFrameEntryCI |
2577  AsmPEImportDirectoryList | AsmNEEntryPoint | AsmNERelocEntry | AsmNESectionTableEntry |
2578  AsmElfEHFrameEntryCIList | AsmLEPageTableEntry | AsmLEEntryPoint | AsmLESectionTableEntry |
2579  AsmElfEHFrameEntryFDList | AsmDwarfInformation | AsmPEImportItem | AsmPEImportItemList,
2580  "AsmExecutableFileFormat", "AsmExecutableFileFormatTag", false);
2581  AsmExecutableFileFormat.setFunctionPrototype("HEADER_EXECUTABLE_FILE_FORMAT", "../Grammar/BinaryInstruction.code");
2582 
2583 
2584 
2585  /*************************************************************************************************************************
2586  * Root of all binary IR classes
2587  *************************************************************************************************************************/
2588 
2589  NEW_NONTERMINAL_MACRO(AsmNode,
2590  AsmStatement | AsmExpression | AsmInterpretation | AsmOperandList | AsmType |
2591  AsmExecutableFileFormat | AsmInterpretationList | AsmGenericFileList,
2592  "AsmNode", "AsmNodeTag", false);
2593  AsmNode.setFunctionPrototype("HEADER_BINARY", "../Grammar/BinaryInstruction.code");
2594  AsmNode.setFunctionSource("SOURCE_BINARY", "../Grammar/BinaryInstruction.code");
2595  AsmNode.setDataPrototype("AttachedPreprocessingInfoType*", "attachedPreprocessingInfoPtr", "= NULL",
2596  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, DEF_DELETE, COPY_DATA);
2597  AsmNode.setDataPrototype("AstAttributeMechanism*", "asmAttributeMechanism", "= NULL",
2598  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, NO_COPY_DATA);
2599  AsmNode.setFunctionPrototype("HEADER_ATTRIBUTE_SUPPORT", "../Grammar/Support.code");
2600  AsmNode.setFunctionSource("SOURCE_ATTRIBUTE_SUPPORT", "../Grammar/Support.code");
2601  AsmNode.setFunctionPrototype("HEADER_ATTRIBUTE_SUPPORT", "../Grammar/Support.code");
2602  AsmNode.setFunctionSource("SOURCE_ATTRIBUTE_SUPPORT", "../Grammar/Support.code");
2603  AsmNode.setDataPrototype("AstAttributeMechanism*", "attributeMechanism", "= NULL",
2604  NO_CONSTRUCTOR_PARAMETER, BUILD_ACCESS_FUNCTIONS, NO_TRAVERSAL, NO_DELETE, NO_COPY_DATA);
2605 }