187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/*===- ScriptParser.yy ----------------------------------------------------===// 287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// 387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// The MCLinker Project 487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// 587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// This file is distributed under the University of Illinois Open Source 687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// License. See LICENSE.TXT for details. 787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// 887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===----------------------------------------------------------------------===*/ 987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%{ 1187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* C/C++ Declarations */ 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/ScriptReader.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/ScriptScanner.h" 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/Operand.h" 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/Operator.h" 1637b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/Assignment.h" 1737b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/RpnExpr.h" 1837b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/FileToken.h" 1937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/NameSpec.h" 2037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/WildcardPattern.h" 2137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/MsgHandling.h" 2287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesusing namespace mcld; 2387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#undef yylex 2587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define yylex m_ScriptScanner.lex 2687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%} 2787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 2887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%code requires { 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/StrToken.h" 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/StringList.h" 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/OutputSectDesc.h" 3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/InputSectDesc.h" 3387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <llvm/Support/DataTypes.h> 3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 3587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesusing namespace mcld; 3687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 3787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines} 3887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 3987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%require "2.4" 4087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%skeleton "glr.cc" 413a2e300ddef8b046136a931d632c0671fa1c930fTim Murray/* 423a2e300ddef8b046136a931d632c0671fa1c930fTim Murray * BEGIN android-removed: prevent bison from generating the header in current directory 4387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%defines "ScriptParser.h" 443a2e300ddef8b046136a931d632c0671fa1c930fTim Murray * END android-removed 453a2e300ddef8b046136a931d632c0671fa1c930fTim Murray */ 4687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%debug 4787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%error-verbose 4887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%define namespace "mcld" 4987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%define "parser_class_name" "ScriptParser" 5087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%parse-param { const class LinkerConfig& m_LDConfig } 5187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%parse-param { class ScriptFile& m_ScriptFile } 5287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%parse-param { class ScriptScanner& m_ScriptScanner } 5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines%parse-param { class ObjectReader& m_ObjectReader} 5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines%parse-param { class ArchiveReader& m_ArchiveReader} 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines%parse-param { class DynObjReader& m_DynObjReader} 5687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%parse-param { class GroupReader& m_GroupReader} 5787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%lex-param { const class ScriptFile& m_ScriptFile } 5887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 5987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%locations 6087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%initial-action 6187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines{ 6287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /* Initialize the initial location. */ 6387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines @$.begin.filename = @$.end.filename = &(m_ScriptFile.name()); 6487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines} 6587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 6687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%start script_file 6787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 6887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%union { 6987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const std::string* string; 7087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines uint64_t integer; 7187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines RpnExpr* rpn_expr; 7287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines StrToken* str_token; 7387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines StringList* str_tokens; 7487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines OutputSectDesc::Prolog output_prolog; 7587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines OutputSectDesc::Type output_type; 7687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines OutputSectDesc::Constraint output_constraint; 7787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines OutputSectDesc::Epilog output_epilog; 7887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines WildcardPattern* wildcard; 7987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines InputSectDesc::Spec input_spec; 8087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines} 8187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 8287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token END 0 /* EOF */ 8387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token <string> STRING LNAMESPEC 8487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token <integer> INTEGER 8587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 8687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Initial states */ 8787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token LINKER_SCRIPT DEFSYM VERSION_SCRIPT DYNAMIC_LIST 8887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 8987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Entry point */ 9087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token ENTRY 9187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* File Commands */ 9287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token INCLUDE 9387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token INPUT 9487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token GROUP 9587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token AS_NEEDED 9687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token OUTPUT 9787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SEARCH_DIR 9887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token STARTUP 9987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Format Commands */ 10087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token OUTPUT_FORMAT 10187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token TARGET 10287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Misc Commands */ 10387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token ASSERT 10487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token EXTERN 10587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token FORCE_COMMON_ALLOCATION 10687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token INHIBIT_COMMON_ALLOCATION 10787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token INSERT 10887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token NOCROSSREFS 10987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token OUTPUT_ARCH 11087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token LD_FEATURE 11187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Assignments */ 11287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token HIDDEN 11387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token PROVIDE 11487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token PROVIDE_HIDDEN 11587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* SECTIONS Command */ 11687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SECTIONS 11787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* MEMORY Command */ 11887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token MEMORY 11987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* PHDRS Command */ 12087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token PHDRS 12187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Builtin Functions */ 12287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token ABSOLUTE 12387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token ADDR 12487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token ALIGN 12587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token ALIGNOF 12687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token BLOCK 12787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token DATA_SEGMENT_ALIGN 12887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token DATA_SEGMENT_END 12987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token DATA_SEGMENT_RELRO_END 13087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token DEFINED 13187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token LENGTH 13287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token LOADADDR 13387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token MAX 13487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token MIN 13587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token NEXT 13687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token ORIGIN 13787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SEGMENT_START 13887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SIZEOF 13987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SIZEOF_HEADERS 14087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token CONSTANT 14187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Symbolic Constants */ 14287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token MAXPAGESIZE 14387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token COMMONPAGESIZE 14487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Input Section Description */ 14587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token EXCLUDE_FILE 14687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token COMMON 14787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token KEEP 14887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SORT_BY_NAME 14987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SORT_BY_ALIGNMENT 15087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SORT_NONE 15187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SORT_BY_INIT_PRIORITY 15287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Output Section Data */ 15387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token BYTE 15487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SHORT 15587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token LONG 15687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token QUAD 15787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SQUAD 15887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token FILL 15987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Output Section Discarding */ 16087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token DISCARD 16187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Output Section Keywords */ 16287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token CREATE_OBJECT_SYMBOLS 16387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token CONSTRUCTORS 16487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Output Section Attributes */ 16587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Output Section Type */ 16687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token NOLOAD 16787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token DSECT 16887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token COPY 16987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token INFO 17087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token OVERLAY 17187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Output Section LMA */ 17287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token AT 17387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Forced Input Alignment */ 17487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token SUBALIGN 17587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Output Section Constraint */ 17687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token ONLY_IF_RO 17787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%token ONLY_IF_RW 17887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Operators are listed top to bottem, in ascending order */ 17987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left ',' 18087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%right '=' ADD_ASSIGN SUB_ASSIGN MUL_ASSIGN DIV_ASSIGN AND_ASSIGN OR_ASSIGN LS_ASSIGN RS_ASSIGN 18187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%right '?' ':' 18287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left LOGICAL_OR 18387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left LOGICAL_AND 18487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left '|' 18587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left '^' 18687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left '&' 18787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left EQ NE 18887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left '<' LE '>' GE 18987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left LSHIFT RSHIFT 19087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left '+' '-' 19187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%left '*' '/' '%' 19287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%right UNARY_PLUS UNARY_MINUS '!' '~' 19387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 19487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <integer> exp 19587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <string> string symbol opt_region opt_lma_region wildcard_pattern 19687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <rpn_expr> script_exp opt_lma opt_align opt_subalign opt_fill 19787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <str_token> input phdr 19887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <str_tokens> input_list opt_phdr opt_exclude_files input_sect_wildcard_patterns 19987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <output_prolog> output_desc_prolog opt_vma_and_type 20087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <output_type> opt_type type 20187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <output_constraint> opt_constraint 20287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <output_epilog> output_desc_epilog 20387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <wildcard> wildcard_file wildcard_section 20487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%type <input_spec> input_sect_spec 20587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 20687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%% 20787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 20887f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesscript_file : LINKER_SCRIPT 20987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptScanner.setLexState(ScriptFile::LDScript); } 21087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines linker_script 21187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptScanner.popLexState(); } 21287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 21387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 21487f34658dec9097d987d254a990ea7f311bfc95fStephen Hineslinker_script : linker_script script_command 21587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 21687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 21787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 21887f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesscript_command : entry_command 21987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | output_format_command 22087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | group_command 22137b74a387bb3993387029859c2d9d051c41c724eStephen Hines | input_command 22287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | output_command 22387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | search_dir_command 22487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | output_arch_command 22587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | assert_command 22687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol_assignment 22787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | sections_command 22887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | ';' 22987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 23087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 23187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesentry_command : ENTRY '(' STRING ')' 23287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addEntryPoint(*$3); } 23387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 23487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 23587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesoutput_format_command : OUTPUT_FORMAT '(' STRING ')' 23687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addOutputFormatCmd(*$3); } 23787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | OUTPUT_FORMAT '(' STRING ',' STRING ',' STRING ')' 23887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addOutputFormatCmd(*$3, *$5, *$7); } 23987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 24087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 24187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesgroup_command : GROUP '(' input_list ')' 24287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addGroupCmd(*$3, m_GroupReader, m_LDConfig); } 24387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 24487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 24537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesinput_command : INPUT '(' input_list ')' 24637b74a387bb3993387029859c2d9d051c41c724eStephen Hines { 24737b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_ScriptFile.addInputCmd(*$3, m_ObjectReader, m_ArchiveReader, 24837b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_DynObjReader, m_LDConfig); 24937b74a387bb3993387029859c2d9d051c41c724eStephen Hines } 25037b74a387bb3993387029859c2d9d051c41c724eStephen Hines ; 25137b74a387bb3993387029859c2d9d051c41c724eStephen Hines 25287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinessearch_dir_command : SEARCH_DIR '(' STRING ')' 25387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addSearchDirCmd(*$3); } 25487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 25587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 25687f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesoutput_command : OUTPUT '(' STRING ')' 25787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addOutputCmd(*$3); } 25887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 25987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 26087f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesoutput_arch_command : OUTPUT_ARCH '(' STRING ')' 26187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addOutputArchCmd(*$3); } 26287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 26387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 26487f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesassert_command : ASSERT '(' script_exp ',' string ')' 26587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addAssertCmd(*$3, *$5); } 26687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 26787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 26887f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesinput_list : { m_ScriptFile.createStringList(); } 26987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines inputs 27087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = m_ScriptFile.getCurrentStringList(); } 27187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 27287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 27387f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesinputs : input 27487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.getCurrentStringList()->push_back($1); } 27587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | inputs input 27687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.getCurrentStringList()->push_back($2); } 27787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | inputs ',' input 27887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.getCurrentStringList()->push_back($3); } 27987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | AS_NEEDED '(' 28087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.setAsNeeded(true); } 28187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines inputs ')' 28287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.setAsNeeded(false); } 28387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | inputs AS_NEEDED '(' 28487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.setAsNeeded(true); } 28587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines inputs ')' 28687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.setAsNeeded(false); } 28787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | inputs ',' AS_NEEDED '(' 28887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.setAsNeeded(true); } 28987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines inputs ')' 29087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.setAsNeeded(false); } 29187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 29287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 29387f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesinput : string 29487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = FileToken::create(*$1, m_ScriptFile.asNeeded()); } 29587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | LNAMESPEC 29687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = NameSpec::create(*$1, m_ScriptFile.asNeeded()); } 29787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 29887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 29987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* 30087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines SECTIONS 30187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 30287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines sections-command 30387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines sections-command 30487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ... 30587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 30687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines*/ 30787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinessections_command : SECTIONS 30887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.enterSectionsCmd(); } 30987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines '{' sect_commands '}' 31087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.leaveSectionsCmd(); } 31187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 31287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 31387f34658dec9097d987d254a990ea7f311bfc95fStephen Hinessect_commands : sect_commands sect_cmd 31487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 31587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 31687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 31787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* 31887f34658dec9097d987d254a990ea7f311bfc95fStephen HinesEach sections-command may of be one of the following: 31987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 32087f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesan ENTRY command (see Entry command) 32187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesa symbol assignment (see Assignments) 32287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesan output section description 32387f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesan overlay description 32487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines*/ 32587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinessect_cmd : entry_command 32687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol_assignment 32787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | output_sect_desc 32887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 32987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 33087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* 33187f34658dec9097d987d254a990ea7f311bfc95fStephen HinesThe full description of an output section looks like this: 33287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 33387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines section [address] [(type)] : 33487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines [AT(lma)] 33587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines [ALIGN(section_align)] 33687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines [SUBALIGN(subsection_align)] 33787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines [constraint] 33887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 33987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines output-section-command 34087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines output-section-command 34187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ... 34287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } [>region] [AT>lma_region] [:phdr :phdr ...] [=fillexp] 34387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines*/ 34487f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesoutput_sect_desc : string output_desc_prolog 34587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.enterOutputSectDesc(*$1, $2); } 34687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines '{' 34787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines output_sect_commands 34887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines '}' output_desc_epilog 34987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.leaveOutputSectDesc($7); } 35087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 35187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 35287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesoutput_desc_prolog : { 35387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptScanner.setLexState(ScriptFile::Expression); 35487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /* create exp for vma */ 35587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.createRpnExpr(); 35687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 35787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines opt_vma_and_type 35887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptScanner.popLexState(); } 35987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ':' 36087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines opt_lma opt_align opt_subalign opt_constraint 36187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 36287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pVMA = $2.m_pVMA; 36387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_Type = $2.m_Type; 36487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pLMA = $5; 36587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pAlign = $6; 36687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pSubAlign = $7; 36787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_Constraint = $8; 36887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 36987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 37087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 37187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesoutput_sect_commands : output_sect_commands output_sect_cmd 37287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 37387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 37487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 37587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesoutput_desc_epilog : opt_region opt_lma_region opt_phdr opt_fill 37687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 37787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pRegion = $1; 37887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pLMARegion = $2; 37987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pPhdrs = $3; 38087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pFillExp = $4; 38187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 38287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 38387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 38487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Output Section Attributes */ 38587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_vma_and_type : exp opt_type 38687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 38787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pVMA = m_ScriptFile.getCurrentRpnExpr(); 38887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_Type = $2; 38987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 39087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | opt_type 39187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 39287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pVMA = NULL; 39387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_Type = $1; 39487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 39587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 39687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 39787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_type : '(' type ')' 39887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $2; } 39987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | '(' ')' 40087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = OutputSectDesc::LOAD; } 40187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 40287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = OutputSectDesc::LOAD; } 40387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 40487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 40587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinestype : NOLOAD 40687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = OutputSectDesc::NOLOAD; } 40787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | DSECT 40887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = OutputSectDesc::DSECT; } 40987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | COPY 41087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = OutputSectDesc::COPY; } 41187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | INFO 41287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = OutputSectDesc::INFO; } 41387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | OVERLAY 41487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = OutputSectDesc::OVERLAY; } 41587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 41687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 41787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_lma : AT '(' script_exp ')' 41887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $3; } 41987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 42087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = NULL; } 42187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 42287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 42387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Forced Output Alignment */ 42487f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_align : ALIGN '(' script_exp ')' 42587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $3; } 42687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 42787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = NULL; } 42887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 42987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 43087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* Forced Input Alignment */ 43187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_subalign : SUBALIGN '(' script_exp ')' 43287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $3; } 43387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 43487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = NULL; } 43587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 43687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 43787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_constraint : ONLY_IF_RO 43887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = OutputSectDesc::ONLY_IF_RO; } 43987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | ONLY_IF_RW 44087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = OutputSectDesc::ONLY_IF_RW; } 44187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 44287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = OutputSectDesc::NO_CONSTRAINT; } 44387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 44487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 44587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_region : '>' string 44687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $2; } 44787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 44887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = NULL; } 44987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 45087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 45187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_lma_region : AT '>' string 45287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $3; } 45387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 45487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = NULL; } 45587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 45687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 45787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_phdr : { m_ScriptFile.createStringList(); } 45887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines phdrs 45987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = m_ScriptFile.getCurrentStringList(); } 46087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 46187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 46287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesphdrs : phdrs ':' phdr 46387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.getCurrentStringList()->push_back($3); } 46487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 46587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 46687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 46787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesphdr : string 46887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = StrToken::create(*$1); } 46987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 47087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 47187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_fill : '=' script_exp 47287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $2; } 47387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 47487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = NULL; } 47587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 47687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 47787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/* 47887f34658dec9097d987d254a990ea7f311bfc95fStephen HinesEach output-section-command may be one of the following: 47987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 48087f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesa symbol assignment (see Assignments) 48187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesan input section description (see Input Section) 48287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesdata values to include directly (see Output Section Data) 48387f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesa special output section keyword (see Output Section Keywords) 48487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines*/ 48587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesoutput_sect_cmd : symbol_assignment 48687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | input_sect_desc 48787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | output_sect_data 48887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | output_sect_keyword 48987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | ';' 49087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 49187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 49287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesinput_sect_desc : input_sect_spec 49387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addInputSectDesc(InputSectDesc::NoKeep, $1); } 49487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | KEEP '(' input_sect_spec ')' 49587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addInputSectDesc(InputSectDesc::Keep, $3); } 49687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 49787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 49887f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesinput_sect_spec : string 49987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 50087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pWildcardFile = 50187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines WildcardPattern::create(*$1, WildcardPattern::SORT_NONE); 50287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pExcludeFiles = NULL; 50387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pWildcardSections = NULL; 50487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 50587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | wildcard_file '(' opt_exclude_files input_sect_wildcard_patterns ')' 50687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 50787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pWildcardFile = $1; 50887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pExcludeFiles = $3; 50987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$.m_pWildcardSections = $4; 51087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 51187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 51287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 51387f34658dec9097d987d254a990ea7f311bfc95fStephen Hineswildcard_file : wildcard_pattern 51487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$1, WildcardPattern::SORT_NONE); } 51587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SORT_BY_NAME '(' wildcard_pattern ')' 51687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$3, WildcardPattern::SORT_BY_NAME); } 51787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 51887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 51987f34658dec9097d987d254a990ea7f311bfc95fStephen Hineswildcard_pattern : string 52087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $1; } 52187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | '*' 52287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = &m_ScriptFile.createParserStr("*", 1); } 52387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | '?' 52487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = &m_ScriptFile.createParserStr("?", 1); } 52587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 52687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 52787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesopt_exclude_files : EXCLUDE_FILE '(' 52887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.createStringList(); } 52987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines exclude_files ')' 53087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = m_ScriptFile.getCurrentStringList(); } 53187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | /* Empty */ 53287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = NULL; } 53387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 53487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 53587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesexclude_files : exclude_files wildcard_pattern 53687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 53787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentStringList()->push_back( 53887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines WildcardPattern::create(*$2, WildcardPattern::SORT_NONE)); 53987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 54087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | wildcard_pattern 54187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 54287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentStringList()->push_back( 54387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines WildcardPattern::create(*$1, WildcardPattern::SORT_NONE)); 54487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 54587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 54687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 54787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesinput_sect_wildcard_patterns : { m_ScriptFile.createStringList(); } 54887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines wildcard_sections 54987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = m_ScriptFile.getCurrentStringList(); } 55087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 55187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 55287f34658dec9097d987d254a990ea7f311bfc95fStephen Hineswildcard_sections : wildcard_sections wildcard_section 55387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 55487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentStringList()->push_back($2); 55587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 55687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | wildcard_section 55787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 55887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentStringList()->push_back($1); 55987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 56087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 56187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 56287f34658dec9097d987d254a990ea7f311bfc95fStephen Hineswildcard_section : wildcard_pattern 56387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$1, WildcardPattern::SORT_NONE); } 56487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SORT_NONE '(' wildcard_pattern ')' 56587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$3, WildcardPattern::SORT_NONE); } 56687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SORT_BY_NAME '(' wildcard_pattern ')' 56787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$3, WildcardPattern::SORT_BY_NAME); } 56887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SORT_BY_ALIGNMENT '(' wildcard_pattern ')' 56987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$3, WildcardPattern::SORT_BY_ALIGNMENT); } 57087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SORT_BY_NAME '(' SORT_BY_ALIGNMENT '(' wildcard_pattern ')' ')' 57187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$5, WildcardPattern::SORT_BY_NAME_ALIGNMENT); } 57287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SORT_BY_ALIGNMENT '('SORT_BY_NAME '(' wildcard_pattern ')' ')' 57387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$5, WildcardPattern::SORT_BY_ALIGNMENT_NAME); } 57487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SORT_BY_NAME '(' SORT_BY_NAME '(' wildcard_pattern ')' ')' 57587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$5, WildcardPattern::SORT_BY_NAME); } 57687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SORT_BY_ALIGNMENT '(' SORT_BY_ALIGNMENT '(' wildcard_pattern ')' ')' 57787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$5, WildcardPattern::SORT_BY_ALIGNMENT); } 57887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SORT_BY_INIT_PRIORITY '(' wildcard_pattern ')' 57987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = WildcardPattern::create(*$3, WildcardPattern::SORT_BY_INIT_PRIORITY); } 58087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 58187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 58287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesoutput_sect_data : BYTE '(' script_exp ')' 58387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SHORT '(' script_exp ')' 58487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | LONG '(' script_exp ')' 58587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | QUAD '(' script_exp ')' 58687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SQUAD '(' script_exp ')' 58787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 58887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 58987f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesoutput_sect_keyword : CREATE_OBJECT_SYMBOLS 59087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | CONSTRUCTORS 59187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SORT_BY_NAME '(' CONSTRUCTORS ')' 59287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 59387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 59487f34658dec9097d987d254a990ea7f311bfc95fStephen Hinessymbol_assignment : symbol '=' script_exp ';' 59587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { m_ScriptFile.addAssignment(*$1, *$3); } 59687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol ADD_ASSIGN exp ';' 59787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol SUB_ASSIGN exp ';' 59887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol MUL_ASSIGN exp ';' 59987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol DIV_ASSIGN exp ';' 60087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol AND_ASSIGN exp ';' 60187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol OR_ASSIGN exp ';' 60287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol LS_ASSIGN exp ';' 60387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol RS_ASSIGN exp ';' 60487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | HIDDEN '(' symbol '=' script_exp ')' ';' 60587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 60687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.addAssignment(*$3, *$5, 60787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Assignment::HIDDEN); 60887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 60987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | PROVIDE '(' symbol '=' script_exp ')' ';' 61087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 61187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.addAssignment(*$3, *$5, 61287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Assignment::PROVIDE); 61387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 61487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | PROVIDE_HIDDEN '(' symbol '=' script_exp ')' ';' 61587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 61687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.addAssignment(*$3, *$5, 61787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Assignment::PROVIDE_HIDDEN); 61887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 61987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 62087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 62187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesscript_exp : { 62287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptScanner.setLexState(ScriptFile::Expression); 62387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.createRpnExpr(); 62487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 62587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines exp 62687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 62787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptScanner.popLexState(); 62887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = m_ScriptFile.getCurrentRpnExpr(); 62987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 63087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 63187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 63287f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesexp : '(' exp ')' 63387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 63487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $2; 63587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 63687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | '+' exp %prec UNARY_PLUS 63787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 63887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 63987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::UNARY_PLUS>()); 64087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $2 + 1; 64187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 64287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | '-' exp %prec UNARY_MINUS 64387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 64487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 64587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::UNARY_MINUS>()); 64687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $2 + 1; 64787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 64887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | '!' exp 64987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 65087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 65187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::LOGICAL_NOT>()); 65287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $2 + 1; 65387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 65487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | '~' exp 65587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 65687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 65787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::BITWISE_NOT>()); 65887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $2 + 1; 65987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 66087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '*' exp 66187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 66287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 66387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::MUL>()); 66487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 66587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 66687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '/' exp 66787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 66887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 66987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::DIV>()); 67087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 67187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 67287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '%' exp 67387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 67487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 67587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::MOD>()); 67687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 67787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 67887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '+' exp 67987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 68087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 68187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::ADD>()); 68287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 68387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 68487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '-' exp 68587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 68687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 68787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::SUB>()); 68887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 68987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 69087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp LSHIFT exp 69187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 69287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 69387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::LSHIFT>()); 69487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 69587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 69687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp RSHIFT exp 69787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 69887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 69987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::RSHIFT>()); 70087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 70187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 70287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '<' exp 70387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 70487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 70587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::LT>()); 70687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 70787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 70887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp LE exp 70987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 71087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 71187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::LE>()); 71287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 71387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 71487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '>' exp 71587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 71687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 71787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::GT>()); 71887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 71987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 72087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp GE exp 72187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 72287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 72387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::GE>()); 72487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 72587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 72687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp EQ exp 72787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 72887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 72987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::EQ>()); 73087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 73187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 73287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp NE exp 73387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 73487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 73587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::NE>()); 73687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 73787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 73887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '&' exp 73987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 74087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 74187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::BITWISE_AND>()); 74287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 74387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 74487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '^' exp 74587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 74687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 74787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::BITWISE_XOR>()); 74887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 74987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 75087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '|' exp 75187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 75287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 75387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::BITWISE_OR>()); 75487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 75587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 75687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp LOGICAL_AND exp 75787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 75887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 75987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::LOGICAL_AND>()); 76087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 76187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 76287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp LOGICAL_OR exp 76387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 76487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 76587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::LOGICAL_OR>()); 76687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + 1; 76787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 76887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | exp '?' exp ':' exp 76987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 77087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 77187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::TERNARY_IF>()); 77287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $1 + $3 + $5 + 1; 77387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 77487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | ABSOLUTE '(' exp ')' 77587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 77687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 77787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::ABSOLUTE>()); 77887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $3 + 1; 77987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 78087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | ADDR '(' string ')' 78187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 78287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back(SectOperand::create(*$3)); 78387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 78487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::ADDR>()); 78587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = 2; 78687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 78787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | ALIGN '(' exp ')' 78887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 78987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines RpnExpr::iterator pos = m_ScriptFile.getCurrentRpnExpr()->begin() + 79087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->size() - $3; 79187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->insert(pos, SymOperand::create(".")); 79287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 79387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::ALIGN>()); 79487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $3 + 2; 79587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 79687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | ALIGN '(' exp ',' exp ')' 79787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 79887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 79987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::ALIGN>()); 80087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $3 + $5 + 1; 80187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 80287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | ALIGNOF '(' string ')' 80387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 80487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back(SectOperand::create(*$3)); 80587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 80687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::ALIGNOF>()); 80787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = 2; 80887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 80987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | BLOCK '(' exp ')' 81087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 81187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines RpnExpr::iterator pos = m_ScriptFile.getCurrentRpnExpr()->begin() + 81287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->size() - $3; 81387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->insert(pos, SymOperand::create(".")); 81487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 81587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::ALIGN>()); 81687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $3 + 2; 81787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 81887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | DATA_SEGMENT_ALIGN 81987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 82087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back(SymOperand::create(".")); 82187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 82287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines '(' exp ',' exp ')' 82387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 82487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 82587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::DATA_SEGMENT_ALIGN>()); 82687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $4 + $6 + 2; 82787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 82887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | DATA_SEGMENT_END '(' exp ')' 82987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 83087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 83187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::DATA_SEGMENT_END>()); 83287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $3 + 1; 83387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 83487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | DATA_SEGMENT_RELRO_END '(' exp ',' exp ')' 83587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 83687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 83787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::DATA_SEGMENT_RELRO_END>()); 83887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $3 + $5 + 1; 83987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 84087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | DEFINED '(' symbol ')' 84187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 84287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back(SymOperand::create(*$3)); 84387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 84487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::DEFINED>()); 84587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = 2; 84687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 84787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | LENGTH '(' string ')' 84887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 84987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /* TODO */ 85087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 85187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | LOADADDR '(' string ')' 85287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 85387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back(SectOperand::create(*$3)); 85487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 85587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::LOADADDR>()); 85687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = 2; 85787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 85887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | MAX '(' exp ',' exp ')' 85987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 86087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 86187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::MAX>()); 86287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $3 + $5 + 1; 86387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 86487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | MIN '(' exp ',' exp ')' 86587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 86687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 86787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::MIN>()); 86887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $3 + $5 + 1; 86987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 87087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | NEXT '(' exp ')' 87187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 87287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 87387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::NEXT>()); 87487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $3 + 1; 87587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 87687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | ORIGIN '(' string ')' 87787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 87887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /* TODO */ 87987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 88087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SEGMENT_START '(' string 88187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 88287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back(SectOperand::create(*$3)); 88387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 88487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ',' exp ')' 88587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 88687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 88787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::SEGMENT_START>()); 88887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = $6 + 2; 88987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 89087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SIZEOF '(' string ')' 89187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 89287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back(SectOperand::create(*$3)); 89387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 89487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::SIZEOF>()); 89587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = 2; 89687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 89787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | SIZEOF_HEADERS 89887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 89987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 90087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::SIZEOF_HEADERS>()); 90187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = 1; 90287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 90387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | CONSTANT '(' MAXPAGESIZE ')' 90487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 90587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 90687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::MAXPAGESIZE>()); 90787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = 1; 90887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 90987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | CONSTANT '(' COMMONPAGESIZE')' 91087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 91187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back( 91287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines &Operator::create<Operator::COMMONPAGESIZE>()); 91387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = 1; 91487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 91587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | INTEGER 91687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 91787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back(IntOperand::create($1)); 91887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = 1; 91987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 92087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | symbol 92187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { 92287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_ScriptFile.getCurrentRpnExpr()->push_back(SymOperand::create(*$1)); 92387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines $$ = 1; 92487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 92587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 92687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 92787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinessymbol : STRING 92887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $1; } 92987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 93087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 93187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesstring : STRING 93287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $1; } 93387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines | '"' STRING '"' 93487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines { $$ = $2; } 93587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ; 93687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 93787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines%% 93887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 93987f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesvoid mcld::ScriptParser::error(const mcld::ScriptParser::location_type& pLoc, 94087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines const std::string &pMsg) 94187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines{ 94287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines position last = pLoc.end - 1; 94387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines std::string filename = "NaN"; 94487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines if (last.filename != NULL) 94587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines filename = *last.filename; 94687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 94787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines mcld::error(diag::err_syntax_error) 94887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines << filename << last.line << last.column << pMsg; 94987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines} 95087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 951