1 // script.cc -- handle linker scripts for gold.
3 // Copyright 2006, 2007 Free Software Foundation, Inc.
4 // Written by Ian Lance Taylor <iant@google.com>.
6 // This file is part of gold.
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 3 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 // MA 02110-1301, USA.
32 #include "workqueue.h"
41 // A token read from a script file. We don't implement keywords here;
42 // all keywords are simply represented as a string.
47 // Token classification.
52 // Token indicates end of input.
54 // Token is a string of characters.
56 // Token is an operator.
58 // Token is a number (an integer).
62 // We need an empty constructor so that we can put this STL objects.
64 : classification_(TOKEN_INVALID), value_(), opcode_(0),
65 lineno_(0), charpos_(0)
68 // A general token with no value.
69 Token(Classification classification, int lineno, int charpos)
70 : classification_(classification), value_(), opcode_(0),
71 lineno_(lineno), charpos_(charpos)
73 gold_assert(classification == TOKEN_INVALID
74 || classification == TOKEN_EOF);
77 // A general token with a value.
78 Token(Classification classification, const std::string& value,
79 int lineno, int charpos)
80 : classification_(classification), value_(value), opcode_(0),
81 lineno_(lineno), charpos_(charpos)
83 gold_assert(classification != TOKEN_INVALID
84 && classification != TOKEN_EOF);
87 // A token representing a string of characters.
88 Token(const std::string& s, int lineno, int charpos)
89 : classification_(TOKEN_STRING), value_(s), opcode_(0),
90 lineno_(lineno), charpos_(charpos)
93 // A token representing an operator.
94 Token(int opcode, int lineno, int charpos)
95 : classification_(TOKEN_OPERATOR), value_(), opcode_(opcode),
96 lineno_(lineno), charpos_(charpos)
99 // Return whether the token is invalid.
102 { return this->classification_ == TOKEN_INVALID; }
104 // Return whether this is an EOF token.
107 { return this->classification_ == TOKEN_EOF; }
109 // Return the token classification.
111 classification() const
112 { return this->classification_; }
114 // Return the line number at which the token starts.
117 { return this->lineno_; }
119 // Return the character position at this the token starts.
122 { return this->charpos_; }
124 // Get the value of a token.
129 gold_assert(this->classification_ == TOKEN_STRING);
134 operator_value() const
136 gold_assert(this->classification_ == TOKEN_OPERATOR);
137 return this->opcode_;
141 integer_value() const
143 gold_assert(this->classification_ == TOKEN_INTEGER);
144 return strtoll(this->value_.c_str(), NULL, 0);
148 // The token classification.
149 Classification classification_;
150 // The token value, for TOKEN_STRING or TOKEN_INTEGER.
152 // The token value, for TOKEN_OPERATOR.
154 // The line number where this token started (one based).
156 // The character position within the line where this token started
161 // This class handles lexing a file into a sequence of tokens. We
162 // don't expect linker scripts to be large, so we just read them and
163 // tokenize them all at once.
168 Lex(Input_file* input_file)
169 : input_file_(input_file), tokens_()
172 // Tokenize the file. Return the final token, which will be either
173 // an invalid token or an EOF token. An invalid token indicates
174 // that tokenization failed.
179 typedef std::vector<Token> Token_sequence;
181 // Return the tokens.
182 const Token_sequence&
184 { return this->tokens_; }
188 Lex& operator=(const Lex&);
190 // Read the file into a string buffer.
192 read_file(std::string*);
194 // Make a general token with no value at the current location.
196 make_token(Token::Classification c, const char* p) const
197 { return Token(c, this->lineno_, p - this->linestart_ + 1); }
199 // Make a general token with a value at the current location.
201 make_token(Token::Classification c, const std::string& v, const char* p)
203 { return Token(c, v, this->lineno_, p - this->linestart_ + 1); }
205 // Make an operator token at the current location.
207 make_token(int opcode, const char* p) const
208 { return Token(opcode, this->lineno_, p - this->linestart_ + 1); }
210 // Make an invalid token at the current location.
212 make_invalid_token(const char* p)
213 { return this->make_token(Token::TOKEN_INVALID, p); }
215 // Make an EOF token at the current location.
217 make_eof_token(const char* p)
218 { return this->make_token(Token::TOKEN_EOF, p); }
220 // Return whether C can be the first character in a name. C2 is the
221 // next character, since we sometimes need that.
223 can_start_name(char c, char c2);
225 // Return whether C can appear in a name which has already started.
227 can_continue_name(char c);
229 // Return whether C, C2, C3 can start a hex number.
231 can_start_hex(char c, char c2, char c3);
233 // Return whether C can appear in a hex number.
235 can_continue_hex(char c);
237 // Return whether C can start a non-hex number.
239 can_start_number(char c);
241 // Return whether C can appear in a non-hex number.
243 can_continue_number(char c)
244 { return Lex::can_start_number(c); }
246 // If C1 C2 C3 form a valid three character operator, return the
247 // opcode. Otherwise return 0.
249 three_char_operator(char c1, char c2, char c3);
251 // If C1 C2 form a valid two character operator, return the opcode.
252 // Otherwise return 0.
254 two_char_operator(char c1, char c2);
256 // If C1 is a valid one character operator, return the opcode.
257 // Otherwise return 0.
259 one_char_operator(char c1);
261 // Read the next token.
263 get_token(const char**);
265 // Skip a C style /* */ comment. Return false if the comment did
268 skip_c_comment(const char**);
270 // Skip a line # comment. Return false if there was no newline.
272 skip_line_comment(const char**);
274 // Build a token CLASSIFICATION from all characters that match
275 // CAN_CONTINUE_FN. The token starts at START. Start matching from
276 // MATCH. Set *PP to the character following the token.
278 gather_token(Token::Classification, bool (*can_continue_fn)(char),
279 const char* start, const char* match, const char** pp);
281 // Build a token from a quoted string.
283 gather_quoted_string(const char** pp);
285 // The file we are reading.
286 Input_file* input_file_;
287 // The token sequence we create.
288 Token_sequence tokens_;
289 // The current line number.
291 // The start of the current line in the buffer.
292 const char* linestart_;
295 // Read the whole file into memory. We don't expect linker scripts to
296 // be large, so we just use a std::string as a buffer. We ignore the
297 // data we've already read, so that we read aligned buffers.
300 Lex::read_file(std::string* contents)
305 unsigned char buf[BUFSIZ];
308 this->input_file_->file().read(off, sizeof buf, buf, &got);
309 contents->append(reinterpret_cast<char*>(&buf[0]), got);
312 while (got == sizeof buf);
315 // Return whether C can be the start of a name, if the next character
316 // is C2. A name can being with a letter, underscore, period, or
317 // dollar sign. Because a name can be a file name, we also permit
318 // forward slash, backslash, and tilde. Tilde is the tricky case
319 // here; GNU ld also uses it as a bitwise not operator. It is only
320 // recognized as the operator if it is not immediately followed by
321 // some character which can appear in a symbol. That is, "~0" is a
322 // symbol name, and "~ 0" is an expression using bitwise not. We are
326 Lex::can_start_name(char c, char c2)
330 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
331 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
332 case 'M': case 'N': case 'O': case 'Q': case 'P': case 'R':
333 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
335 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
336 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
337 case 'm': case 'n': case 'o': case 'q': case 'p': case 'r':
338 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
340 case '_': case '.': case '$': case '/': case '\\':
344 return can_continue_name(c2);
351 // Return whether C can continue a name which has already started.
352 // Subsequent characters in a name are the same as the leading
353 // characters, plus digits and "=+-:[],?*". So in general the linker
354 // script language requires spaces around operators.
357 Lex::can_continue_name(char c)
361 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
362 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
363 case 'M': case 'N': case 'O': case 'Q': case 'P': case 'R':
364 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
366 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
367 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
368 case 'm': case 'n': case 'o': case 'q': case 'p': case 'r':
369 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
371 case '_': case '.': case '$': case '/': case '\\':
373 case '0': case '1': case '2': case '3': case '4':
374 case '5': case '6': case '7': case '8': case '9':
375 case '=': case '+': case '-': case ':': case '[': case ']':
376 case ',': case '?': case '*':
384 // For a number we accept 0x followed by hex digits, or any sequence
385 // of digits. The old linker accepts leading '$' for hex, and
386 // trailing HXBOD. Those are for MRI compatibility and we don't
387 // accept them. The old linker also accepts trailing MK for mega or
388 // kilo. Those are mentioned in the documentation, and we accept
391 // Return whether C1 C2 C3 can start a hex number.
394 Lex::can_start_hex(char c1, char c2, char c3)
396 if (c1 == '0' && (c2 == 'x' || c2 == 'X'))
397 return Lex::can_continue_hex(c3);
401 // Return whether C can appear in a hex number.
404 Lex::can_continue_hex(char c)
408 case '0': case '1': case '2': case '3': case '4':
409 case '5': case '6': case '7': case '8': case '9':
410 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
411 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
419 // Return whether C can start a non-hex number.
422 Lex::can_start_number(char c)
426 case '0': case '1': case '2': case '3': case '4':
427 case '5': case '6': case '7': case '8': case '9':
435 // If C1 C2 C3 form a valid three character operator, return the
436 // opcode (defined in the yyscript.h file generated from yyscript.y).
437 // Otherwise return 0.
440 Lex::three_char_operator(char c1, char c2, char c3)
445 if (c2 == '<' && c3 == '=')
449 if (c2 == '>' && c3 == '=')
458 // If C1 C2 form a valid two character operator, return the opcode
459 // (defined in the yyscript.h file generated from yyscript.y).
460 // Otherwise return 0.
463 Lex::two_char_operator(char c1, char c2)
521 // If C1 is a valid operator, return the opcode. Otherwise return 0.
524 Lex::one_char_operator(char c1)
557 // Skip a C style comment. *PP points to just after the "/*". Return
558 // false if the comment did not end.
561 Lex::skip_c_comment(const char** pp)
564 while (p[0] != '*' || p[1] != '/')
575 this->linestart_ = p + 1;
584 // Skip a line # comment. Return false if there was no newline.
587 Lex::skip_line_comment(const char** pp)
590 size_t skip = strcspn(p, "\n");
599 this->linestart_ = p;
605 // Build a token CLASSIFICATION from all characters that match
606 // CAN_CONTINUE_FN. Update *PP.
609 Lex::gather_token(Token::Classification classification,
610 bool (*can_continue_fn)(char),
615 while ((*can_continue_fn)(*match))
618 return this->make_token(classification,
619 std::string(start, match - start),
623 // Build a token from a quoted string.
626 Lex::gather_quoted_string(const char** pp)
628 const char* start = *pp;
629 const char* p = start;
631 size_t skip = strcspn(p, "\"\n");
633 return this->make_invalid_token(start);
635 return this->make_token(Token::TOKEN_STRING,
636 std::string(p, skip),
640 // Return the next token at *PP. Update *PP. General guideline: we
641 // require linker scripts to be simple ASCII. No unicode linker
642 // scripts. In particular we can assume that any '\0' is the end of
646 Lex::get_token(const char** pp)
655 return this->make_eof_token(p);
658 // Skip whitespace quickly.
659 while (*p == ' ' || *p == '\t')
666 this->linestart_ = p;
670 // Skip C style comments.
671 if (p[0] == '/' && p[1] == '*')
673 int lineno = this->lineno_;
674 int charpos = p - this->linestart_ + 1;
677 if (!this->skip_c_comment(pp))
678 return Token(Token::TOKEN_INVALID, lineno, charpos);
684 // Skip line comments.
688 if (!this->skip_line_comment(pp))
689 return this->make_eof_token(p);
695 if (Lex::can_start_name(p[0], p[1]))
696 return this->gather_token(Token::TOKEN_STRING,
697 Lex::can_continue_name,
700 // We accept any arbitrary name in double quotes, as long as it
701 // does not cross a line boundary.
705 return this->gather_quoted_string(pp);
708 // Check for a number.
710 if (Lex::can_start_hex(p[0], p[1], p[2]))
711 return this->gather_token(Token::TOKEN_INTEGER,
712 Lex::can_continue_hex,
715 if (Lex::can_start_number(p[0]))
716 return this->gather_token(Token::TOKEN_INTEGER,
717 Lex::can_continue_number,
720 // Check for operators.
722 int opcode = Lex::three_char_operator(p[0], p[1], p[2]);
726 return this->make_token(opcode, p);
729 opcode = Lex::two_char_operator(p[0], p[1]);
733 return this->make_token(opcode, p);
736 opcode = Lex::one_char_operator(p[0]);
740 return this->make_token(opcode, p);
743 return this->make_token(Token::TOKEN_INVALID, p);
747 // Tokenize the file. Return the final token.
752 std::string contents;
753 this->read_file(&contents);
755 const char* p = contents.c_str();
758 this->linestart_ = p;
762 Token t(this->get_token(&p));
764 // Don't let an early null byte fool us into thinking that we've
765 // reached the end of the file.
767 && static_cast<size_t>(p - contents.c_str()) < contents.length())
768 t = this->make_invalid_token(p);
770 if (t.is_invalid() || t.is_eof())
773 this->tokens_.push_back(t);
777 // A trivial task which waits for THIS_BLOCKER to be clear and then
778 // clears NEXT_BLOCKER. THIS_BLOCKER may be NULL.
780 class Script_unblock : public Task
783 Script_unblock(Task_token* this_blocker, Task_token* next_blocker)
784 : this_blocker_(this_blocker), next_blocker_(next_blocker)
789 if (this->this_blocker_ != NULL)
790 delete this->this_blocker_;
794 is_runnable(Workqueue*)
796 if (this->this_blocker_ != NULL && this->this_blocker_->is_blocked())
802 locks(Workqueue* workqueue)
804 return new Task_locker_block(*this->next_blocker_, workqueue);
812 Task_token* this_blocker_;
813 Task_token* next_blocker_;
816 // This class holds data passed through the parser to the lexer and to
817 // the parser support functions. This avoids global variables. We
818 // can't use global variables because we need not be called in the
824 Parser_closure(const char* filename,
825 const Position_dependent_options& posdep_options,
827 const Lex::Token_sequence* tokens)
828 : filename_(filename), posdep_options_(posdep_options),
829 in_group_(in_group), tokens_(tokens),
830 next_token_index_(0), inputs_(NULL)
833 // Return the file name.
836 { return this->filename_; }
838 // Return the position dependent options. The caller may modify
840 Position_dependent_options&
841 position_dependent_options()
842 { return this->posdep_options_; }
844 // Return whether this script is being run in a group.
847 { return this->in_group_; }
849 // Whether we are at the end of the token list.
852 { return this->next_token_index_ >= this->tokens_->size(); }
854 // Return the next token.
858 const Token* ret = &(*this->tokens_)[this->next_token_index_];
859 ++this->next_token_index_;
863 // Return the list of input files, creating it if necessary. This
864 // is a space leak--we never free the INPUTS_ pointer.
868 if (this->inputs_ == NULL)
869 this->inputs_ = new Input_arguments();
870 return this->inputs_;
873 // Return whether we saw any input files.
876 { return this->inputs_ != NULL && !this->inputs_->empty(); }
879 // The name of the file we are reading.
880 const char* filename_;
881 // The position dependent options.
882 Position_dependent_options posdep_options_;
883 // Whether we are currently in a --start-group/--end-group.
886 // The tokens to be returned by the lexer.
887 const Lex::Token_sequence* tokens_;
888 // The index of the next token to return.
889 unsigned int next_token_index_;
890 // New input files found to add to the link.
891 Input_arguments* inputs_;
894 // FILE was found as an argument on the command line. Try to read it
895 // as a script. We've already read BYTES of data into P, but we
896 // ignore that. Return true if the file was handled.
899 read_input_script(Workqueue* workqueue, const General_options& options,
900 Symbol_table* symtab, Layout* layout,
901 const Dirsearch& dirsearch, Input_objects* input_objects,
902 Input_group* input_group,
903 const Input_argument* input_argument,
904 Input_file* input_file, const unsigned char*, off_t,
905 Task_token* this_blocker, Task_token* next_blocker)
908 if (lex.tokenize().is_invalid())
911 Parser_closure closure(input_file->filename().c_str(),
912 input_argument->file().options(),
916 if (yyparse(&closure) != 0)
919 // THIS_BLOCKER must be clear before we may add anything to the
920 // symbol table. We are responsible for unblocking NEXT_BLOCKER
921 // when we are done. We are responsible for deleting THIS_BLOCKER
922 // when it is unblocked.
924 if (!closure.saw_inputs())
926 // The script did not add any files to read. Note that we are
927 // not permitted to call NEXT_BLOCKER->unblock() here even if
928 // THIS_BLOCKER is NULL, as we are not in the main thread.
929 workqueue->queue(new Script_unblock(this_blocker, next_blocker));
933 for (Input_arguments::const_iterator p = closure.inputs()->begin();
934 p != closure.inputs()->end();
938 if (p + 1 == closure.inputs()->end())
942 nb = new Task_token();
945 workqueue->queue(new Read_symbols(options, input_objects, symtab,
946 layout, dirsearch, &*p,
947 input_group, this_blocker, nb));
954 // Manage mapping from keywords to the codes expected by the bison
957 class Keyword_to_parsecode
960 // The structure which maps keywords to parsecodes.
961 struct Keyword_parsecode
965 // Corresponding parsecode.
969 // Return the parsecode corresponding KEYWORD, or 0 if it is not a
972 keyword_to_parsecode(const char* keyword);
975 // The array of all keywords.
976 static const Keyword_parsecode keyword_parsecodes_[];
978 // The number of keywords.
979 static const int keyword_count;
982 // Mapping from keyword string to keyword parsecode. This array must
983 // be kept in sorted order. Parsecodes are looked up using bsearch.
984 // This array must correspond to the list of parsecodes in yyscript.y.
986 const Keyword_to_parsecode::Keyword_parsecode
987 Keyword_to_parsecode::keyword_parsecodes_[] =
989 { "ABSOLUTE", ABSOLUTE },
991 { "ALIGN", ALIGN_K },
992 { "ASSERT", ASSERT_K },
993 { "AS_NEEDED", AS_NEEDED },
998 { "CONSTANT", CONSTANT },
999 { "CONSTRUCTORS", CONSTRUCTORS },
1001 { "CREATE_OBJECT_SYMBOLS", CREATE_OBJECT_SYMBOLS },
1002 { "DATA_SEGMENT_ALIGN", DATA_SEGMENT_ALIGN },
1003 { "DATA_SEGMENT_END", DATA_SEGMENT_END },
1004 { "DATA_SEGMENT_RELRO_END", DATA_SEGMENT_RELRO_END },
1005 { "DEFINED", DEFINED },
1008 { "EXCLUDE_FILE", EXCLUDE_FILE },
1009 { "EXTERN", EXTERN },
1012 { "FORCE_COMMON_ALLOCATION", FORCE_COMMON_ALLOCATION },
1015 { "INCLUDE", INCLUDE },
1017 { "INHIBIT_COMMON_ALLOCATION", INHIBIT_COMMON_ALLOCATION },
1020 { "LENGTH", LENGTH },
1021 { "LOADADDR", LOADADDR },
1025 { "MEMORY", MEMORY },
1028 { "NOCROSSREFS", NOCROSSREFS },
1029 { "NOFLOAT", NOFLOAT },
1030 { "NOLOAD", NOLOAD },
1031 { "ONLY_IF_RO", ONLY_IF_RO },
1032 { "ONLY_IF_RW", ONLY_IF_RW },
1033 { "ORIGIN", ORIGIN },
1034 { "OUTPUT", OUTPUT },
1035 { "OUTPUT_ARCH", OUTPUT_ARCH },
1036 { "OUTPUT_FORMAT", OUTPUT_FORMAT },
1037 { "OVERLAY", OVERLAY },
1039 { "PROVIDE", PROVIDE },
1040 { "PROVIDE_HIDDEN", PROVIDE_HIDDEN },
1042 { "SEARCH_DIR", SEARCH_DIR },
1043 { "SECTIONS", SECTIONS },
1044 { "SEGMENT_START", SEGMENT_START },
1046 { "SIZEOF", SIZEOF },
1047 { "SIZEOF_HEADERS", SIZEOF_HEADERS },
1048 { "SORT_BY_ALIGNMENT", SORT_BY_ALIGNMENT },
1049 { "SORT_BY_NAME", SORT_BY_NAME },
1050 { "SPECIAL", SPECIAL },
1052 { "STARTUP", STARTUP },
1053 { "SUBALIGN", SUBALIGN },
1054 { "SYSLIB", SYSLIB },
1055 { "TARGET", TARGET_K },
1056 { "TRUNCATE", TRUNCATE },
1057 { "VERSION", VERSIONK },
1058 { "global", GLOBAL },
1064 { "sizeof_headers", SIZEOF_HEADERS },
1067 const int Keyword_to_parsecode::keyword_count =
1068 (sizeof(Keyword_to_parsecode::keyword_parsecodes_)
1069 / sizeof(Keyword_to_parsecode::keyword_parsecodes_[0]));
1071 // Comparison function passed to bsearch.
1077 ktt_compare(const void* keyv, const void* kttv)
1079 const char* key = static_cast<const char*>(keyv);
1080 const Keyword_to_parsecode::Keyword_parsecode* ktt =
1081 static_cast<const Keyword_to_parsecode::Keyword_parsecode*>(kttv);
1082 return strcmp(key, ktt->keyword);
1085 } // End extern "C".
1088 Keyword_to_parsecode::keyword_to_parsecode(const char* keyword)
1090 void* kttv = bsearch(keyword,
1091 Keyword_to_parsecode::keyword_parsecodes_,
1092 Keyword_to_parsecode::keyword_count,
1093 sizeof(Keyword_to_parsecode::keyword_parsecodes_[0]),
1097 Keyword_parsecode* ktt = static_cast<Keyword_parsecode*>(kttv);
1098 return ktt->parsecode;
1101 } // End namespace gold.
1103 // The remaining functions are extern "C", so it's clearer to not put
1104 // them in namespace gold.
1106 using namespace gold;
1108 // This function is called by the bison parser to return the next
1112 yylex(YYSTYPE* lvalp, void* closurev)
1114 Parser_closure* closure = static_cast<Parser_closure*>(closurev);
1116 if (closure->at_eof())
1119 const Token* token = closure->next_token();
1121 switch (token->classification())
1124 case Token::TOKEN_INVALID:
1125 case Token::TOKEN_EOF:
1128 case Token::TOKEN_STRING:
1130 const char* str = token->string_value().c_str();
1131 int parsecode = Keyword_to_parsecode::keyword_to_parsecode(str);
1134 lvalp->string = str;
1138 case Token::TOKEN_OPERATOR:
1139 return token->operator_value();
1141 case Token::TOKEN_INTEGER:
1142 lvalp->integer = token->integer_value();
1147 // This function is called by the bison parser to report an error.
1150 yyerror(void* closurev, const char* message)
1152 Parser_closure* closure = static_cast<Parser_closure*>(closurev);
1154 fprintf(stderr, _("%s: %s: %s\n"),
1155 program_name, closure->filename(), message);
1159 // Called by the bison parser to add a file to the link.
1162 script_add_file(void* closurev, const char* name)
1164 Parser_closure* closure = static_cast<Parser_closure*>(closurev);
1165 std::string absname;
1172 // Prepend `dirname closure->filename()` to make the path absolute.
1173 char *slash = strrchr(closure->filename(), '/');
1174 absname.assign(closure->filename(),
1175 slash ? slash - closure->filename() + 1 : 0);
1178 Input_file_argument file(absname.c_str(), false, closure->position_dependent_options());
1179 closure->inputs()->add_file(file);
1182 // Called by the bison parser to start a group. If we are already in
1183 // a group, that means that this script was invoked within a
1184 // --start-group --end-group sequence on the command line, or that
1185 // this script was found in a GROUP of another script. In that case,
1186 // we simply continue the existing group, rather than starting a new
1187 // one. It is possible to construct a case in which this will do
1188 // something other than what would happen if we did a recursive group,
1189 // but it's hard to imagine why the different behaviour would be
1190 // useful for a real program. Avoiding recursive groups is simpler
1191 // and more efficient.
1194 script_start_group(void* closurev)
1196 Parser_closure* closure = static_cast<Parser_closure*>(closurev);
1197 if (!closure->in_group())
1198 closure->inputs()->start_group();
1201 // Called by the bison parser at the end of a group.
1204 script_end_group(void* closurev)
1206 Parser_closure* closure = static_cast<Parser_closure*>(closurev);
1207 if (!closure->in_group())
1208 closure->inputs()->end_group();
1211 // Called by the bison parser to start an AS_NEEDED list.
1214 script_start_as_needed(void* closurev)
1216 Parser_closure* closure = static_cast<Parser_closure*>(closurev);
1217 closure->position_dependent_options().set_as_needed();
1220 // Called by the bison parser at the end of an AS_NEEDED list.
1223 script_end_as_needed(void* closurev)
1225 Parser_closure* closure = static_cast<Parser_closure*>(closurev);
1226 closure->position_dependent_options().clear_as_needed();