Merge remote-tracking branch 'origin/vendor/LDNS'
[dragonfly.git] / contrib / binutils-2.25 / gold / script.cc
1 // script.cc -- handle linker scripts for gold.
2
3 // Copyright (C) 2006-2014 Free Software Foundation, Inc.
4 // Written by Ian Lance Taylor <iant@google.com>.
5
6 // This file is part of gold.
7
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.
12
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.
17
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.
22
23 #include "gold.h"
24
25 #include <cstdio>
26 #include <cstdlib>
27 #include <cstring>
28 #include <fnmatch.h>
29 #include <string>
30 #include <vector>
31 #include "filenames.h"
32
33 #include "elfcpp.h"
34 #include "demangle.h"
35 #include "dirsearch.h"
36 #include "options.h"
37 #include "fileread.h"
38 #include "workqueue.h"
39 #include "readsyms.h"
40 #include "parameters.h"
41 #include "layout.h"
42 #include "symtab.h"
43 #include "target-select.h"
44 #include "script.h"
45 #include "script-c.h"
46 #include "incremental.h"
47
48 namespace gold
49 {
50
51 // A token read from a script file.  We don't implement keywords here;
52 // all keywords are simply represented as a string.
53
54 class Token
55 {
56  public:
57   // Token classification.
58   enum Classification
59   {
60     // Token is invalid.
61     TOKEN_INVALID,
62     // Token indicates end of input.
63     TOKEN_EOF,
64     // Token is a string of characters.
65     TOKEN_STRING,
66     // Token is a quoted string of characters.
67     TOKEN_QUOTED_STRING,
68     // Token is an operator.
69     TOKEN_OPERATOR,
70     // Token is a number (an integer).
71     TOKEN_INTEGER
72   };
73
74   // We need an empty constructor so that we can put this STL objects.
75   Token()
76     : classification_(TOKEN_INVALID), value_(NULL), value_length_(0),
77       opcode_(0), lineno_(0), charpos_(0)
78   { }
79
80   // A general token with no value.
81   Token(Classification classification, int lineno, int charpos)
82     : classification_(classification), value_(NULL), value_length_(0),
83       opcode_(0), lineno_(lineno), charpos_(charpos)
84   {
85     gold_assert(classification == TOKEN_INVALID
86                 || classification == TOKEN_EOF);
87   }
88
89   // A general token with a value.
90   Token(Classification classification, const char* value, size_t length,
91         int lineno, int charpos)
92     : classification_(classification), value_(value), value_length_(length),
93       opcode_(0), lineno_(lineno), charpos_(charpos)
94   {
95     gold_assert(classification != TOKEN_INVALID
96                 && classification != TOKEN_EOF);
97   }
98
99   // A token representing an operator.
100   Token(int opcode, int lineno, int charpos)
101     : classification_(TOKEN_OPERATOR), value_(NULL), value_length_(0),
102       opcode_(opcode), lineno_(lineno), charpos_(charpos)
103   { }
104
105   // Return whether the token is invalid.
106   bool
107   is_invalid() const
108   { return this->classification_ == TOKEN_INVALID; }
109
110   // Return whether this is an EOF token.
111   bool
112   is_eof() const
113   { return this->classification_ == TOKEN_EOF; }
114
115   // Return the token classification.
116   Classification
117   classification() const
118   { return this->classification_; }
119
120   // Return the line number at which the token starts.
121   int
122   lineno() const
123   { return this->lineno_; }
124
125   // Return the character position at this the token starts.
126   int
127   charpos() const
128   { return this->charpos_; }
129
130   // Get the value of a token.
131
132   const char*
133   string_value(size_t* length) const
134   {
135     gold_assert(this->classification_ == TOKEN_STRING
136                 || this->classification_ == TOKEN_QUOTED_STRING);
137     *length = this->value_length_;
138     return this->value_;
139   }
140
141   int
142   operator_value() const
143   {
144     gold_assert(this->classification_ == TOKEN_OPERATOR);
145     return this->opcode_;
146   }
147
148   uint64_t
149   integer_value() const;
150
151  private:
152   // The token classification.
153   Classification classification_;
154   // The token value, for TOKEN_STRING or TOKEN_QUOTED_STRING or
155   // TOKEN_INTEGER.
156   const char* value_;
157   // The length of the token value.
158   size_t value_length_;
159   // The token value, for TOKEN_OPERATOR.
160   int opcode_;
161   // The line number where this token started (one based).
162   int lineno_;
163   // The character position within the line where this token started
164   // (one based).
165   int charpos_;
166 };
167
168 // Return the value of a TOKEN_INTEGER.
169
170 uint64_t
171 Token::integer_value() const
172 {
173   gold_assert(this->classification_ == TOKEN_INTEGER);
174
175   size_t len = this->value_length_;
176
177   uint64_t multiplier = 1;
178   char last = this->value_[len - 1];
179   if (last == 'm' || last == 'M')
180     {
181       multiplier = 1024 * 1024;
182       --len;
183     }
184   else if (last == 'k' || last == 'K')
185     {
186       multiplier = 1024;
187       --len;
188     }
189
190   char *end;
191   uint64_t ret = strtoull(this->value_, &end, 0);
192   gold_assert(static_cast<size_t>(end - this->value_) == len);
193
194   return ret * multiplier;
195 }
196
197 // This class handles lexing a file into a sequence of tokens.
198
199 class Lex
200 {
201  public:
202   // We unfortunately have to support different lexing modes, because
203   // when reading different parts of a linker script we need to parse
204   // things differently.
205   enum Mode
206   {
207     // Reading an ordinary linker script.
208     LINKER_SCRIPT,
209     // Reading an expression in a linker script.
210     EXPRESSION,
211     // Reading a version script.
212     VERSION_SCRIPT,
213     // Reading a --dynamic-list file.
214     DYNAMIC_LIST
215   };
216
217   Lex(const char* input_string, size_t input_length, int parsing_token)
218     : input_string_(input_string), input_length_(input_length),
219       current_(input_string), mode_(LINKER_SCRIPT),
220       first_token_(parsing_token), token_(),
221       lineno_(1), linestart_(input_string)
222   { }
223
224   // Read a file into a string.
225   static void
226   read_file(Input_file*, std::string*);
227
228   // Return the next token.
229   const Token*
230   next_token();
231
232   // Return the current lexing mode.
233   Lex::Mode
234   mode() const
235   { return this->mode_; }
236
237   // Set the lexing mode.
238   void
239   set_mode(Mode mode)
240   { this->mode_ = mode; }
241
242  private:
243   Lex(const Lex&);
244   Lex& operator=(const Lex&);
245
246   // Make a general token with no value at the current location.
247   Token
248   make_token(Token::Classification c, const char* start) const
249   { return Token(c, this->lineno_, start - this->linestart_ + 1); }
250
251   // Make a general token with a value at the current location.
252   Token
253   make_token(Token::Classification c, const char* v, size_t len,
254              const char* start)
255     const
256   { return Token(c, v, len, this->lineno_, start - this->linestart_ + 1); }
257
258   // Make an operator token at the current location.
259   Token
260   make_token(int opcode, const char* start) const
261   { return Token(opcode, this->lineno_, start - this->linestart_ + 1); }
262
263   // Make an invalid token at the current location.
264   Token
265   make_invalid_token(const char* start)
266   { return this->make_token(Token::TOKEN_INVALID, start); }
267
268   // Make an EOF token at the current location.
269   Token
270   make_eof_token(const char* start)
271   { return this->make_token(Token::TOKEN_EOF, start); }
272
273   // Return whether C can be the first character in a name.  C2 is the
274   // next character, since we sometimes need that.
275   inline bool
276   can_start_name(char c, char c2);
277
278   // If C can appear in a name which has already started, return a
279   // pointer to a character later in the token or just past
280   // it. Otherwise, return NULL.
281   inline const char*
282   can_continue_name(const char* c);
283
284   // Return whether C, C2, C3 can start a hex number.
285   inline bool
286   can_start_hex(char c, char c2, char c3);
287
288   // If C can appear in a hex number which has already started, return
289   // a pointer to a character later in the token or just past
290   // it. Otherwise, return NULL.
291   inline const char*
292   can_continue_hex(const char* c);
293
294   // Return whether C can start a non-hex number.
295   static inline bool
296   can_start_number(char c);
297
298   // If C can appear in a decimal number which has already started,
299   // return a pointer to a character later in the token or just past
300   // it. Otherwise, return NULL.
301   inline const char*
302   can_continue_number(const char* c)
303   { return Lex::can_start_number(*c) ? c + 1 : NULL; }
304
305   // If C1 C2 C3 form a valid three character operator, return the
306   // opcode.  Otherwise return 0.
307   static inline int
308   three_char_operator(char c1, char c2, char c3);
309
310   // If C1 C2 form a valid two character operator, return the opcode.
311   // Otherwise return 0.
312   static inline int
313   two_char_operator(char c1, char c2);
314
315   // If C1 is a valid one character operator, return the opcode.
316   // Otherwise return 0.
317   static inline int
318   one_char_operator(char c1);
319
320   // Read the next token.
321   Token
322   get_token(const char**);
323
324   // Skip a C style /* */ comment.  Return false if the comment did
325   // not end.
326   bool
327   skip_c_comment(const char**);
328
329   // Skip a line # comment.  Return false if there was no newline.
330   bool
331   skip_line_comment(const char**);
332
333   // Build a token CLASSIFICATION from all characters that match
334   // CAN_CONTINUE_FN.  The token starts at START.  Start matching from
335   // MATCH.  Set *PP to the character following the token.
336   inline Token
337   gather_token(Token::Classification,
338                const char* (Lex::*can_continue_fn)(const char*),
339                const char* start, const char* match, const char** pp);
340
341   // Build a token from a quoted string.
342   Token
343   gather_quoted_string(const char** pp);
344
345   // The string we are tokenizing.
346   const char* input_string_;
347   // The length of the string.
348   size_t input_length_;
349   // The current offset into the string.
350   const char* current_;
351   // The current lexing mode.
352   Mode mode_;
353   // The code to use for the first token.  This is set to 0 after it
354   // is used.
355   int first_token_;
356   // The current token.
357   Token token_;
358   // The current line number.
359   int lineno_;
360   // The start of the current line in the string.
361   const char* linestart_;
362 };
363
364 // Read the whole file into memory.  We don't expect linker scripts to
365 // be large, so we just use a std::string as a buffer.  We ignore the
366 // data we've already read, so that we read aligned buffers.
367
368 void
369 Lex::read_file(Input_file* input_file, std::string* contents)
370 {
371   off_t filesize = input_file->file().filesize();
372   contents->clear();
373   contents->reserve(filesize);
374
375   off_t off = 0;
376   unsigned char buf[BUFSIZ];
377   while (off < filesize)
378     {
379       off_t get = BUFSIZ;
380       if (get > filesize - off)
381         get = filesize - off;
382       input_file->file().read(off, get, buf);
383       contents->append(reinterpret_cast<char*>(&buf[0]), get);
384       off += get;
385     }
386 }
387
388 // Return whether C can be the start of a name, if the next character
389 // is C2.  A name can being with a letter, underscore, period, or
390 // dollar sign.  Because a name can be a file name, we also permit
391 // forward slash, backslash, and tilde.  Tilde is the tricky case
392 // here; GNU ld also uses it as a bitwise not operator.  It is only
393 // recognized as the operator if it is not immediately followed by
394 // some character which can appear in a symbol.  That is, when we
395 // don't know that we are looking at an expression, "~0" is a file
396 // name, and "~ 0" is an expression using bitwise not.  We are
397 // compatible.
398
399 inline bool
400 Lex::can_start_name(char c, char c2)
401 {
402   switch (c)
403     {
404     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
405     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
406     case 'M': case 'N': case 'O': case 'Q': case 'P': case 'R':
407     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
408     case 'Y': case 'Z':
409     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
410     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
411     case 'm': case 'n': case 'o': case 'q': case 'p': case 'r':
412     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
413     case 'y': case 'z':
414     case '_': case '.': case '$':
415       return true;
416
417     case '/': case '\\':
418       return this->mode_ == LINKER_SCRIPT;
419
420     case '~':
421       return this->mode_ == LINKER_SCRIPT && can_continue_name(&c2);
422
423     case '*': case '[':
424       return (this->mode_ == VERSION_SCRIPT
425               || this->mode_ == DYNAMIC_LIST
426               || (this->mode_ == LINKER_SCRIPT
427                   && can_continue_name(&c2)));
428
429     default:
430       return false;
431     }
432 }
433
434 // Return whether C can continue a name which has already started.
435 // Subsequent characters in a name are the same as the leading
436 // characters, plus digits and "=+-:[],?*".  So in general the linker
437 // script language requires spaces around operators, unless we know
438 // that we are parsing an expression.
439
440 inline const char*
441 Lex::can_continue_name(const char* c)
442 {
443   switch (*c)
444     {
445     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
446     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
447     case 'M': case 'N': case 'O': case 'Q': case 'P': case 'R':
448     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
449     case 'Y': case 'Z':
450     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
451     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
452     case 'm': case 'n': case 'o': case 'q': case 'p': case 'r':
453     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
454     case 'y': case 'z':
455     case '_': case '.': case '$':
456     case '0': case '1': case '2': case '3': case '4':
457     case '5': case '6': case '7': case '8': case '9':
458       return c + 1;
459
460     // TODO(csilvers): why not allow ~ in names for version-scripts?
461     case '/': case '\\': case '~':
462     case '=': case '+':
463     case ',':
464       if (this->mode_ == LINKER_SCRIPT)
465         return c + 1;
466       return NULL;
467
468     case '[': case ']': case '*': case '?': case '-':
469       if (this->mode_ == LINKER_SCRIPT || this->mode_ == VERSION_SCRIPT
470           || this->mode_ == DYNAMIC_LIST)
471         return c + 1;
472       return NULL;
473
474     // TODO(csilvers): why allow this?  ^ is meaningless in version scripts.
475     case '^':
476       if (this->mode_ == VERSION_SCRIPT || this->mode_ == DYNAMIC_LIST)
477         return c + 1;
478       return NULL;
479
480     case ':':
481       if (this->mode_ == LINKER_SCRIPT)
482         return c + 1;
483       else if ((this->mode_ == VERSION_SCRIPT || this->mode_ == DYNAMIC_LIST)
484                && (c[1] == ':'))
485         {
486           // A name can have '::' in it, as that's a c++ namespace
487           // separator. But a single colon is not part of a name.
488           return c + 2;
489         }
490       return NULL;
491
492     default:
493       return NULL;
494     }
495 }
496
497 // For a number we accept 0x followed by hex digits, or any sequence
498 // of digits.  The old linker accepts leading '$' for hex, and
499 // trailing HXBOD.  Those are for MRI compatibility and we don't
500 // accept them.
501
502 // Return whether C1 C2 C3 can start a hex number.
503
504 inline bool
505 Lex::can_start_hex(char c1, char c2, char c3)
506 {
507   if (c1 == '0' && (c2 == 'x' || c2 == 'X'))
508     return this->can_continue_hex(&c3);
509   return false;
510 }
511
512 // Return whether C can appear in a hex number.
513
514 inline const char*
515 Lex::can_continue_hex(const char* c)
516 {
517   switch (*c)
518     {
519     case '0': case '1': case '2': case '3': case '4':
520     case '5': case '6': case '7': case '8': case '9':
521     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
522     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
523       return c + 1;
524
525     default:
526       return NULL;
527     }
528 }
529
530 // Return whether C can start a non-hex number.
531
532 inline bool
533 Lex::can_start_number(char c)
534 {
535   switch (c)
536     {
537     case '0': case '1': case '2': case '3': case '4':
538     case '5': case '6': case '7': case '8': case '9':
539       return true;
540
541     default:
542       return false;
543     }
544 }
545
546 // If C1 C2 C3 form a valid three character operator, return the
547 // opcode (defined in the yyscript.h file generated from yyscript.y).
548 // Otherwise return 0.
549
550 inline int
551 Lex::three_char_operator(char c1, char c2, char c3)
552 {
553   switch (c1)
554     {
555     case '<':
556       if (c2 == '<' && c3 == '=')
557         return LSHIFTEQ;
558       break;
559     case '>':
560       if (c2 == '>' && c3 == '=')
561         return RSHIFTEQ;
562       break;
563     default:
564       break;
565     }
566   return 0;
567 }
568
569 // If C1 C2 form a valid two character operator, return the opcode
570 // (defined in the yyscript.h file generated from yyscript.y).
571 // Otherwise return 0.
572
573 inline int
574 Lex::two_char_operator(char c1, char c2)
575 {
576   switch (c1)
577     {
578     case '=':
579       if (c2 == '=')
580         return EQ;
581       break;
582     case '!':
583       if (c2 == '=')
584         return NE;
585       break;
586     case '+':
587       if (c2 == '=')
588         return PLUSEQ;
589       break;
590     case '-':
591       if (c2 == '=')
592         return MINUSEQ;
593       break;
594     case '*':
595       if (c2 == '=')
596         return MULTEQ;
597       break;
598     case '/':
599       if (c2 == '=')
600         return DIVEQ;
601       break;
602     case '|':
603       if (c2 == '=')
604         return OREQ;
605       if (c2 == '|')
606         return OROR;
607       break;
608     case '&':
609       if (c2 == '=')
610         return ANDEQ;
611       if (c2 == '&')
612         return ANDAND;
613       break;
614     case '>':
615       if (c2 == '=')
616         return GE;
617       if (c2 == '>')
618         return RSHIFT;
619       break;
620     case '<':
621       if (c2 == '=')
622         return LE;
623       if (c2 == '<')
624         return LSHIFT;
625       break;
626     default:
627       break;
628     }
629   return 0;
630 }
631
632 // If C1 is a valid operator, return the opcode.  Otherwise return 0.
633
634 inline int
635 Lex::one_char_operator(char c1)
636 {
637   switch (c1)
638     {
639     case '+':
640     case '-':
641     case '*':
642     case '/':
643     case '%':
644     case '!':
645     case '&':
646     case '|':
647     case '^':
648     case '~':
649     case '<':
650     case '>':
651     case '=':
652     case '?':
653     case ',':
654     case '(':
655     case ')':
656     case '{':
657     case '}':
658     case '[':
659     case ']':
660     case ':':
661     case ';':
662       return c1;
663     default:
664       return 0;
665     }
666 }
667
668 // Skip a C style comment.  *PP points to just after the "/*".  Return
669 // false if the comment did not end.
670
671 bool
672 Lex::skip_c_comment(const char** pp)
673 {
674   const char* p = *pp;
675   while (p[0] != '*' || p[1] != '/')
676     {
677       if (*p == '\0')
678         {
679           *pp = p;
680           return false;
681         }
682
683       if (*p == '\n')
684         {
685           ++this->lineno_;
686           this->linestart_ = p + 1;
687         }
688       ++p;
689     }
690
691   *pp = p + 2;
692   return true;
693 }
694
695 // Skip a line # comment.  Return false if there was no newline.
696
697 bool
698 Lex::skip_line_comment(const char** pp)
699 {
700   const char* p = *pp;
701   size_t skip = strcspn(p, "\n");
702   if (p[skip] == '\0')
703     {
704       *pp = p + skip;
705       return false;
706     }
707
708   p += skip + 1;
709   ++this->lineno_;
710   this->linestart_ = p;
711   *pp = p;
712
713   return true;
714 }
715
716 // Build a token CLASSIFICATION from all characters that match
717 // CAN_CONTINUE_FN.  Update *PP.
718
719 inline Token
720 Lex::gather_token(Token::Classification classification,
721                   const char* (Lex::*can_continue_fn)(const char*),
722                   const char* start,
723                   const char* match,
724                   const char** pp)
725 {
726   const char* new_match = NULL;
727   while ((new_match = (this->*can_continue_fn)(match)) != NULL)
728     match = new_match;
729
730   // A special case: integers may be followed by a single M or K,
731   // case-insensitive.
732   if (classification == Token::TOKEN_INTEGER
733       && (*match == 'm' || *match == 'M' || *match == 'k' || *match == 'K'))
734     ++match;
735
736   *pp = match;
737   return this->make_token(classification, start, match - start, start);
738 }
739
740 // Build a token from a quoted string.
741
742 Token
743 Lex::gather_quoted_string(const char** pp)
744 {
745   const char* start = *pp;
746   const char* p = start;
747   ++p;
748   size_t skip = strcspn(p, "\"\n");
749   if (p[skip] != '"')
750     return this->make_invalid_token(start);
751   *pp = p + skip + 1;
752   return this->make_token(Token::TOKEN_QUOTED_STRING, p, skip, start);
753 }
754
755 // Return the next token at *PP.  Update *PP.  General guideline: we
756 // require linker scripts to be simple ASCII.  No unicode linker
757 // scripts.  In particular we can assume that any '\0' is the end of
758 // the input.
759
760 Token
761 Lex::get_token(const char** pp)
762 {
763   const char* p = *pp;
764
765   while (true)
766     {
767       if (*p == '\0')
768         {
769           *pp = p;
770           return this->make_eof_token(p);
771         }
772
773       // Skip whitespace quickly.
774       while (*p == ' ' || *p == '\t' || *p == '\r')
775         ++p;
776
777       if (*p == '\n')
778         {
779           ++p;
780           ++this->lineno_;
781           this->linestart_ = p;
782           continue;
783         }
784
785       // Skip C style comments.
786       if (p[0] == '/' && p[1] == '*')
787         {
788           int lineno = this->lineno_;
789           int charpos = p - this->linestart_ + 1;
790
791           *pp = p + 2;
792           if (!this->skip_c_comment(pp))
793             return Token(Token::TOKEN_INVALID, lineno, charpos);
794           p = *pp;
795
796           continue;
797         }
798
799       // Skip line comments.
800       if (*p == '#')
801         {
802           *pp = p + 1;
803           if (!this->skip_line_comment(pp))
804             return this->make_eof_token(p);
805           p = *pp;
806           continue;
807         }
808
809       // Check for a name.
810       if (this->can_start_name(p[0], p[1]))
811         return this->gather_token(Token::TOKEN_STRING,
812                                   &Lex::can_continue_name,
813                                   p, p + 1, pp);
814
815       // We accept any arbitrary name in double quotes, as long as it
816       // does not cross a line boundary.
817       if (*p == '"')
818         {
819           *pp = p;
820           return this->gather_quoted_string(pp);
821         }
822
823       // Check for a number.
824
825       if (this->can_start_hex(p[0], p[1], p[2]))
826         return this->gather_token(Token::TOKEN_INTEGER,
827                                   &Lex::can_continue_hex,
828                                   p, p + 3, pp);
829
830       if (Lex::can_start_number(p[0]))
831         return this->gather_token(Token::TOKEN_INTEGER,
832                                   &Lex::can_continue_number,
833                                   p, p + 1, pp);
834
835       // Check for operators.
836
837       int opcode = Lex::three_char_operator(p[0], p[1], p[2]);
838       if (opcode != 0)
839         {
840           *pp = p + 3;
841           return this->make_token(opcode, p);
842         }
843
844       opcode = Lex::two_char_operator(p[0], p[1]);
845       if (opcode != 0)
846         {
847           *pp = p + 2;
848           return this->make_token(opcode, p);
849         }
850
851       opcode = Lex::one_char_operator(p[0]);
852       if (opcode != 0)
853         {
854           *pp = p + 1;
855           return this->make_token(opcode, p);
856         }
857
858       return this->make_token(Token::TOKEN_INVALID, p);
859     }
860 }
861
862 // Return the next token.
863
864 const Token*
865 Lex::next_token()
866 {
867   // The first token is special.
868   if (this->first_token_ != 0)
869     {
870       this->token_ = Token(this->first_token_, 0, 0);
871       this->first_token_ = 0;
872       return &this->token_;
873     }
874
875   this->token_ = this->get_token(&this->current_);
876
877   // Don't let an early null byte fool us into thinking that we've
878   // reached the end of the file.
879   if (this->token_.is_eof()
880       && (static_cast<size_t>(this->current_ - this->input_string_)
881           < this->input_length_))
882     this->token_ = this->make_invalid_token(this->current_);
883
884   return &this->token_;
885 }
886
887 // class Symbol_assignment.
888
889 // Add the symbol to the symbol table.  This makes sure the symbol is
890 // there and defined.  The actual value is stored later.  We can't
891 // determine the actual value at this point, because we can't
892 // necessarily evaluate the expression until all ordinary symbols have
893 // been finalized.
894
895 // The GNU linker lets symbol assignments in the linker script
896 // silently override defined symbols in object files.  We are
897 // compatible.  FIXME: Should we issue a warning?
898
899 void
900 Symbol_assignment::add_to_table(Symbol_table* symtab)
901 {
902   elfcpp::STV vis = this->hidden_ ? elfcpp::STV_HIDDEN : elfcpp::STV_DEFAULT;
903   this->sym_ = symtab->define_as_constant(this->name_.c_str(),
904                                           NULL, // version
905                                           (this->is_defsym_
906                                            ? Symbol_table::DEFSYM
907                                            : Symbol_table::SCRIPT),
908                                           0, // value
909                                           0, // size
910                                           elfcpp::STT_NOTYPE,
911                                           elfcpp::STB_GLOBAL,
912                                           vis,
913                                           0, // nonvis
914                                           this->provide_,
915                                           true); // force_override
916 }
917
918 // Finalize a symbol value.
919
920 void
921 Symbol_assignment::finalize(Symbol_table* symtab, const Layout* layout)
922 {
923   this->finalize_maybe_dot(symtab, layout, false, 0, NULL);
924 }
925
926 // Finalize a symbol value which can refer to the dot symbol.
927
928 void
929 Symbol_assignment::finalize_with_dot(Symbol_table* symtab,
930                                      const Layout* layout,
931                                      uint64_t dot_value,
932                                      Output_section* dot_section)
933 {
934   this->finalize_maybe_dot(symtab, layout, true, dot_value, dot_section);
935 }
936
937 // Finalize a symbol value, internal version.
938
939 void
940 Symbol_assignment::finalize_maybe_dot(Symbol_table* symtab,
941                                       const Layout* layout,
942                                       bool is_dot_available,
943                                       uint64_t dot_value,
944                                       Output_section* dot_section)
945 {
946   // If we were only supposed to provide this symbol, the sym_ field
947   // will be NULL if the symbol was not referenced.
948   if (this->sym_ == NULL)
949     {
950       gold_assert(this->provide_);
951       return;
952     }
953
954   if (parameters->target().get_size() == 32)
955     {
956 #if defined(HAVE_TARGET_32_LITTLE) || defined(HAVE_TARGET_32_BIG)
957       this->sized_finalize<32>(symtab, layout, is_dot_available, dot_value,
958                                dot_section);
959 #else
960       gold_unreachable();
961 #endif
962     }
963   else if (parameters->target().get_size() == 64)
964     {
965 #if defined(HAVE_TARGET_64_LITTLE) || defined(HAVE_TARGET_64_BIG)
966       this->sized_finalize<64>(symtab, layout, is_dot_available, dot_value,
967                                dot_section);
968 #else
969       gold_unreachable();
970 #endif
971     }
972   else
973     gold_unreachable();
974 }
975
976 template<int size>
977 void
978 Symbol_assignment::sized_finalize(Symbol_table* symtab, const Layout* layout,
979                                   bool is_dot_available, uint64_t dot_value,
980                                   Output_section* dot_section)
981 {
982   Output_section* section;
983   elfcpp::STT type = elfcpp::STT_NOTYPE;
984   elfcpp::STV vis = elfcpp::STV_DEFAULT;
985   unsigned char nonvis = 0;
986   uint64_t final_val = this->val_->eval_maybe_dot(symtab, layout, true,
987                                                   is_dot_available,
988                                                   dot_value, dot_section,
989                                                   &section, NULL, &type,
990                                                   &vis, &nonvis, false);
991   Sized_symbol<size>* ssym = symtab->get_sized_symbol<size>(this->sym_);
992   ssym->set_value(final_val);
993   ssym->set_type(type);
994   ssym->set_visibility(vis);
995   ssym->set_nonvis(nonvis);
996   if (section != NULL)
997     ssym->set_output_section(section);
998 }
999
1000 // Set the symbol value if the expression yields an absolute value or
1001 // a value relative to DOT_SECTION.
1002
1003 void
1004 Symbol_assignment::set_if_absolute(Symbol_table* symtab, const Layout* layout,
1005                                    bool is_dot_available, uint64_t dot_value,
1006                                    Output_section* dot_section)
1007 {
1008   if (this->sym_ == NULL)
1009     return;
1010
1011   Output_section* val_section;
1012   uint64_t val = this->val_->eval_maybe_dot(symtab, layout, false,
1013                                             is_dot_available, dot_value,
1014                                             dot_section, &val_section, NULL,
1015                                             NULL, NULL, NULL, false);
1016   if (val_section != NULL && val_section != dot_section)
1017     return;
1018
1019   if (parameters->target().get_size() == 32)
1020     {
1021 #if defined(HAVE_TARGET_32_LITTLE) || defined(HAVE_TARGET_32_BIG)
1022       Sized_symbol<32>* ssym = symtab->get_sized_symbol<32>(this->sym_);
1023       ssym->set_value(val);
1024 #else
1025       gold_unreachable();
1026 #endif
1027     }
1028   else if (parameters->target().get_size() == 64)
1029     {
1030 #if defined(HAVE_TARGET_64_LITTLE) || defined(HAVE_TARGET_64_BIG)
1031       Sized_symbol<64>* ssym = symtab->get_sized_symbol<64>(this->sym_);
1032       ssym->set_value(val);
1033 #else
1034       gold_unreachable();
1035 #endif
1036     }
1037   else
1038     gold_unreachable();
1039   if (val_section != NULL)
1040     this->sym_->set_output_section(val_section);
1041 }
1042
1043 // Print for debugging.
1044
1045 void
1046 Symbol_assignment::print(FILE* f) const
1047 {
1048   if (this->provide_ && this->hidden_)
1049     fprintf(f, "PROVIDE_HIDDEN(");
1050   else if (this->provide_)
1051     fprintf(f, "PROVIDE(");
1052   else if (this->hidden_)
1053     gold_unreachable();
1054
1055   fprintf(f, "%s = ", this->name_.c_str());
1056   this->val_->print(f);
1057
1058   if (this->provide_ || this->hidden_)
1059     fprintf(f, ")");
1060
1061   fprintf(f, "\n");
1062 }
1063
1064 // Class Script_assertion.
1065
1066 // Check the assertion.
1067
1068 void
1069 Script_assertion::check(const Symbol_table* symtab, const Layout* layout)
1070 {
1071   if (!this->check_->eval(symtab, layout, true))
1072     gold_error("%s", this->message_.c_str());
1073 }
1074
1075 // Print for debugging.
1076
1077 void
1078 Script_assertion::print(FILE* f) const
1079 {
1080   fprintf(f, "ASSERT(");
1081   this->check_->print(f);
1082   fprintf(f, ", \"%s\")\n", this->message_.c_str());
1083 }
1084
1085 // Class Script_options.
1086
1087 Script_options::Script_options()
1088   : entry_(), symbol_assignments_(), symbol_definitions_(),
1089     symbol_references_(), version_script_info_(), script_sections_()
1090 {
1091 }
1092
1093 // Returns true if NAME is on the list of symbol assignments waiting
1094 // to be processed.
1095
1096 bool
1097 Script_options::is_pending_assignment(const char* name)
1098 {
1099   for (Symbol_assignments::iterator p = this->symbol_assignments_.begin();
1100        p != this->symbol_assignments_.end();
1101        ++p)
1102     if ((*p)->name() == name)
1103       return true;
1104   return false;
1105 }
1106
1107 // Add a symbol to be defined.
1108
1109 void
1110 Script_options::add_symbol_assignment(const char* name, size_t length,
1111                                       bool is_defsym, Expression* value,
1112                                       bool provide, bool hidden)
1113 {
1114   if (length != 1 || name[0] != '.')
1115     {
1116       if (this->script_sections_.in_sections_clause())
1117         {
1118           gold_assert(!is_defsym);
1119           this->script_sections_.add_symbol_assignment(name, length, value,
1120                                                        provide, hidden);
1121         }
1122       else
1123         {
1124           Symbol_assignment* p = new Symbol_assignment(name, length, is_defsym,
1125                                                        value, provide, hidden);
1126           this->symbol_assignments_.push_back(p);
1127         }
1128
1129       if (!provide)
1130         {
1131           std::string n(name, length);
1132           this->symbol_definitions_.insert(n);
1133           this->symbol_references_.erase(n);
1134         }
1135     }
1136   else
1137     {
1138       if (provide || hidden)
1139         gold_error(_("invalid use of PROVIDE for dot symbol"));
1140
1141       // The GNU linker permits assignments to dot outside of SECTIONS
1142       // clauses and treats them as occurring inside, so we don't
1143       // check in_sections_clause here.
1144       this->script_sections_.add_dot_assignment(value);
1145     }
1146 }
1147
1148 // Add a reference to a symbol.
1149
1150 void
1151 Script_options::add_symbol_reference(const char* name, size_t length)
1152 {
1153   if (length != 1 || name[0] != '.')
1154     {
1155       std::string n(name, length);
1156       if (this->symbol_definitions_.find(n) == this->symbol_definitions_.end())
1157         this->symbol_references_.insert(n);
1158     }
1159 }
1160
1161 // Add an assertion.
1162
1163 void
1164 Script_options::add_assertion(Expression* check, const char* message,
1165                               size_t messagelen)
1166 {
1167   if (this->script_sections_.in_sections_clause())
1168     this->script_sections_.add_assertion(check, message, messagelen);
1169   else
1170     {
1171       Script_assertion* p = new Script_assertion(check, message, messagelen);
1172       this->assertions_.push_back(p);
1173     }
1174 }
1175
1176 // Create sections required by any linker scripts.
1177
1178 void
1179 Script_options::create_script_sections(Layout* layout)
1180 {
1181   if (this->saw_sections_clause())
1182     this->script_sections_.create_sections(layout);
1183 }
1184
1185 // Add any symbols we are defining to the symbol table.
1186
1187 void
1188 Script_options::add_symbols_to_table(Symbol_table* symtab)
1189 {
1190   for (Symbol_assignments::iterator p = this->symbol_assignments_.begin();
1191        p != this->symbol_assignments_.end();
1192        ++p)
1193     (*p)->add_to_table(symtab);
1194   this->script_sections_.add_symbols_to_table(symtab);
1195 }
1196
1197 // Finalize symbol values.  Also check assertions.
1198
1199 void
1200 Script_options::finalize_symbols(Symbol_table* symtab, const Layout* layout)
1201 {
1202   // We finalize the symbols defined in SECTIONS first, because they
1203   // are the ones which may have changed.  This way if symbol outside
1204   // SECTIONS are defined in terms of symbols inside SECTIONS, they
1205   // will get the right value.
1206   this->script_sections_.finalize_symbols(symtab, layout);
1207
1208   for (Symbol_assignments::iterator p = this->symbol_assignments_.begin();
1209        p != this->symbol_assignments_.end();
1210        ++p)
1211     (*p)->finalize(symtab, layout);
1212
1213   for (Assertions::iterator p = this->assertions_.begin();
1214        p != this->assertions_.end();
1215        ++p)
1216     (*p)->check(symtab, layout);
1217 }
1218
1219 // Set section addresses.  We set all the symbols which have absolute
1220 // values.  Then we let the SECTIONS clause do its thing.  This
1221 // returns the segment which holds the file header and segment
1222 // headers, if any.
1223
1224 Output_segment*
1225 Script_options::set_section_addresses(Symbol_table* symtab, Layout* layout)
1226 {
1227   for (Symbol_assignments::iterator p = this->symbol_assignments_.begin();
1228        p != this->symbol_assignments_.end();
1229        ++p)
1230     (*p)->set_if_absolute(symtab, layout, false, 0, NULL);
1231
1232   return this->script_sections_.set_section_addresses(symtab, layout);
1233 }
1234
1235 // This class holds data passed through the parser to the lexer and to
1236 // the parser support functions.  This avoids global variables.  We
1237 // can't use global variables because we need not be called by a
1238 // singleton thread.
1239
1240 class Parser_closure
1241 {
1242  public:
1243   Parser_closure(const char* filename,
1244                  const Position_dependent_options& posdep_options,
1245                  bool parsing_defsym, bool in_group, bool is_in_sysroot,
1246                  Command_line* command_line,
1247                  Script_options* script_options,
1248                  Lex* lex,
1249                  bool skip_on_incompatible_target,
1250                  Script_info* script_info)
1251     : filename_(filename), posdep_options_(posdep_options),
1252       parsing_defsym_(parsing_defsym), in_group_(in_group),
1253       is_in_sysroot_(is_in_sysroot),
1254       skip_on_incompatible_target_(skip_on_incompatible_target),
1255       found_incompatible_target_(false),
1256       command_line_(command_line), script_options_(script_options),
1257       version_script_info_(script_options->version_script_info()),
1258       lex_(lex), lineno_(0), charpos_(0), lex_mode_stack_(), inputs_(NULL),
1259       script_info_(script_info)
1260   {
1261     // We start out processing C symbols in the default lex mode.
1262     this->language_stack_.push_back(Version_script_info::LANGUAGE_C);
1263     this->lex_mode_stack_.push_back(lex->mode());
1264   }
1265
1266   // Return the file name.
1267   const char*
1268   filename() const
1269   { return this->filename_; }
1270
1271   // Return the position dependent options.  The caller may modify
1272   // this.
1273   Position_dependent_options&
1274   position_dependent_options()
1275   { return this->posdep_options_; }
1276
1277   // Whether we are parsing a --defsym.
1278   bool
1279   parsing_defsym() const
1280   { return this->parsing_defsym_; }
1281
1282   // Return whether this script is being run in a group.
1283   bool
1284   in_group() const
1285   { return this->in_group_; }
1286
1287   // Return whether this script was found using a directory in the
1288   // sysroot.
1289   bool
1290   is_in_sysroot() const
1291   { return this->is_in_sysroot_; }
1292
1293   // Whether to skip to the next file with the same name if we find an
1294   // incompatible target in an OUTPUT_FORMAT statement.
1295   bool
1296   skip_on_incompatible_target() const
1297   { return this->skip_on_incompatible_target_; }
1298
1299   // Stop skipping to the next file on an incompatible target.  This
1300   // is called when we make some unrevocable change to the data
1301   // structures.
1302   void
1303   clear_skip_on_incompatible_target()
1304   { this->skip_on_incompatible_target_ = false; }
1305
1306   // Whether we found an incompatible target in an OUTPUT_FORMAT
1307   // statement.
1308   bool
1309   found_incompatible_target() const
1310   { return this->found_incompatible_target_; }
1311
1312   // Note that we found an incompatible target.
1313   void
1314   set_found_incompatible_target()
1315   { this->found_incompatible_target_ = true; }
1316
1317   // Returns the Command_line structure passed in at constructor time.
1318   // This value may be NULL.  The caller may modify this, which modifies
1319   // the passed-in Command_line object (not a copy).
1320   Command_line*
1321   command_line()
1322   { return this->command_line_; }
1323
1324   // Return the options which may be set by a script.
1325   Script_options*
1326   script_options()
1327   { return this->script_options_; }
1328
1329   // Return the object in which version script information should be stored.
1330   Version_script_info*
1331   version_script()
1332   { return this->version_script_info_; }
1333
1334   // Return the next token, and advance.
1335   const Token*
1336   next_token()
1337   {
1338     const Token* token = this->lex_->next_token();
1339     this->lineno_ = token->lineno();
1340     this->charpos_ = token->charpos();
1341     return token;
1342   }
1343
1344   // Set a new lexer mode, pushing the current one.
1345   void
1346   push_lex_mode(Lex::Mode mode)
1347   {
1348     this->lex_mode_stack_.push_back(this->lex_->mode());
1349     this->lex_->set_mode(mode);
1350   }
1351
1352   // Pop the lexer mode.
1353   void
1354   pop_lex_mode()
1355   {
1356     gold_assert(!this->lex_mode_stack_.empty());
1357     this->lex_->set_mode(this->lex_mode_stack_.back());
1358     this->lex_mode_stack_.pop_back();
1359   }
1360
1361   // Return the current lexer mode.
1362   Lex::Mode
1363   lex_mode() const
1364   { return this->lex_mode_stack_.back(); }
1365
1366   // Return the line number of the last token.
1367   int
1368   lineno() const
1369   { return this->lineno_; }
1370
1371   // Return the character position in the line of the last token.
1372   int
1373   charpos() const
1374   { return this->charpos_; }
1375
1376   // Return the list of input files, creating it if necessary.  This
1377   // is a space leak--we never free the INPUTS_ pointer.
1378   Input_arguments*
1379   inputs()
1380   {
1381     if (this->inputs_ == NULL)
1382       this->inputs_ = new Input_arguments();
1383     return this->inputs_;
1384   }
1385
1386   // Return whether we saw any input files.
1387   bool
1388   saw_inputs() const
1389   { return this->inputs_ != NULL && !this->inputs_->empty(); }
1390
1391   // Return the current language being processed in a version script
1392   // (eg, "C++").  The empty string represents unmangled C names.
1393   Version_script_info::Language
1394   get_current_language() const
1395   { return this->language_stack_.back(); }
1396
1397   // Push a language onto the stack when entering an extern block.
1398   void
1399   push_language(Version_script_info::Language lang)
1400   { this->language_stack_.push_back(lang); }
1401
1402   // Pop a language off of the stack when exiting an extern block.
1403   void
1404   pop_language()
1405   {
1406     gold_assert(!this->language_stack_.empty());
1407     this->language_stack_.pop_back();
1408   }
1409
1410   // Return a pointer to the incremental info.
1411   Script_info*
1412   script_info()
1413   { return this->script_info_; }
1414
1415  private:
1416   // The name of the file we are reading.
1417   const char* filename_;
1418   // The position dependent options.
1419   Position_dependent_options posdep_options_;
1420   // True if we are parsing a --defsym.
1421   bool parsing_defsym_;
1422   // Whether we are currently in a --start-group/--end-group.
1423   bool in_group_;
1424   // Whether the script was found in a sysrooted directory.
1425   bool is_in_sysroot_;
1426   // If this is true, then if we find an OUTPUT_FORMAT with an
1427   // incompatible target, then we tell the parser to abort so that we
1428   // can search for the next file with the same name.
1429   bool skip_on_incompatible_target_;
1430   // True if we found an OUTPUT_FORMAT with an incompatible target.
1431   bool found_incompatible_target_;
1432   // May be NULL if the user chooses not to pass one in.
1433   Command_line* command_line_;
1434   // Options which may be set from any linker script.
1435   Script_options* script_options_;
1436   // Information parsed from a version script.
1437   Version_script_info* version_script_info_;
1438   // The lexer.
1439   Lex* lex_;
1440   // The line number of the last token returned by next_token.
1441   int lineno_;
1442   // The column number of the last token returned by next_token.
1443   int charpos_;
1444   // A stack of lexer modes.
1445   std::vector<Lex::Mode> lex_mode_stack_;
1446   // A stack of which extern/language block we're inside. Can be C++,
1447   // java, or empty for C.
1448   std::vector<Version_script_info::Language> language_stack_;
1449   // New input files found to add to the link.
1450   Input_arguments* inputs_;
1451   // Pointer to incremental linking info.
1452   Script_info* script_info_;
1453 };
1454
1455 // FILE was found as an argument on the command line.  Try to read it
1456 // as a script.  Return true if the file was handled.
1457
1458 bool
1459 read_input_script(Workqueue* workqueue, Symbol_table* symtab, Layout* layout,
1460                   Dirsearch* dirsearch, int dirindex,
1461                   Input_objects* input_objects, Mapfile* mapfile,
1462                   Input_group* input_group,
1463                   const Input_argument* input_argument,
1464                   Input_file* input_file, Task_token* next_blocker,
1465                   bool* used_next_blocker)
1466 {
1467   *used_next_blocker = false;
1468
1469   std::string input_string;
1470   Lex::read_file(input_file, &input_string);
1471
1472   Lex lex(input_string.c_str(), input_string.length(), PARSING_LINKER_SCRIPT);
1473
1474   Script_info* script_info = NULL;
1475   if (layout->incremental_inputs() != NULL)
1476     {
1477       const std::string& filename = input_file->filename();
1478       Timespec mtime = input_file->file().get_mtime();
1479       unsigned int arg_serial = input_argument->file().arg_serial();
1480       script_info = new Script_info(filename);
1481       layout->incremental_inputs()->report_script(script_info, arg_serial,
1482                                                   mtime);
1483     }
1484
1485   Parser_closure closure(input_file->filename().c_str(),
1486                          input_argument->file().options(),
1487                          false,
1488                          input_group != NULL,
1489                          input_file->is_in_sysroot(),
1490                          NULL,
1491                          layout->script_options(),
1492                          &lex,
1493                          input_file->will_search_for(),
1494                          script_info);
1495
1496   bool old_saw_sections_clause =
1497     layout->script_options()->saw_sections_clause();
1498
1499   if (yyparse(&closure) != 0)
1500     {
1501       if (closure.found_incompatible_target())
1502         {
1503           Read_symbols::incompatible_warning(input_argument, input_file);
1504           Read_symbols::requeue(workqueue, input_objects, symtab, layout,
1505                                 dirsearch, dirindex, mapfile, input_argument,
1506                                 input_group, next_blocker);
1507           return true;
1508         }
1509       return false;
1510     }
1511
1512   if (!old_saw_sections_clause
1513       && layout->script_options()->saw_sections_clause()
1514       && layout->have_added_input_section())
1515     gold_error(_("%s: SECTIONS seen after other input files; try -T/--script"),
1516                input_file->filename().c_str());
1517
1518   if (!closure.saw_inputs())
1519     return true;
1520
1521   Task_token* this_blocker = NULL;
1522   for (Input_arguments::const_iterator p = closure.inputs()->begin();
1523        p != closure.inputs()->end();
1524        ++p)
1525     {
1526       Task_token* nb;
1527       if (p + 1 == closure.inputs()->end())
1528         nb = next_blocker;
1529       else
1530         {
1531           nb = new Task_token(true);
1532           nb->add_blocker();
1533         }
1534       workqueue->queue_soon(new Read_symbols(input_objects, symtab,
1535                                              layout, dirsearch, 0, mapfile, &*p,
1536                                              input_group, NULL, this_blocker, nb));
1537       this_blocker = nb;
1538     }
1539
1540   *used_next_blocker = true;
1541
1542   return true;
1543 }
1544
1545 // Helper function for read_version_script(), read_commandline_script() and
1546 // script_include_directive().  Processes the given file in the mode indicated
1547 // by first_token and lex_mode.
1548
1549 static bool
1550 read_script_file(const char* filename, Command_line* cmdline,
1551                  Script_options* script_options,
1552                  int first_token, Lex::Mode lex_mode)
1553 {
1554   Dirsearch dirsearch;
1555   std::string name = filename;
1556
1557   // If filename is a relative filename, search for it manually using "." +
1558   // cmdline->options()->library_path() -- not dirsearch.
1559   if (!IS_ABSOLUTE_PATH(filename))
1560     {
1561       const General_options::Dir_list& search_path =
1562           cmdline->options().library_path();
1563       name = Dirsearch::find_file_in_dir_list(name, search_path, ".");
1564     }
1565
1566   // The file locking code wants to record a Task, but we haven't
1567   // started the workqueue yet.  This is only for debugging purposes,
1568   // so we invent a fake value.
1569   const Task* task = reinterpret_cast<const Task*>(-1);
1570
1571   // We don't want this file to be opened in binary mode.
1572   Position_dependent_options posdep = cmdline->position_dependent_options();
1573   if (posdep.format_enum() == General_options::OBJECT_FORMAT_BINARY)
1574     posdep.set_format_enum(General_options::OBJECT_FORMAT_ELF);
1575   Input_file_argument input_argument(name.c_str(),
1576                                      Input_file_argument::INPUT_FILE_TYPE_FILE,
1577                                      "", false, posdep);
1578   Input_file input_file(&input_argument);
1579   int dummy = 0;
1580   if (!input_file.open(dirsearch, task, &dummy))
1581     return false;
1582
1583   std::string input_string;
1584   Lex::read_file(&input_file, &input_string);
1585
1586   Lex lex(input_string.c_str(), input_string.length(), first_token);
1587   lex.set_mode(lex_mode);
1588
1589   Parser_closure closure(filename,
1590                          cmdline->position_dependent_options(),
1591                          first_token == Lex::DYNAMIC_LIST,
1592                          false,
1593                          input_file.is_in_sysroot(),
1594                          cmdline,
1595                          script_options,
1596                          &lex,
1597                          false,
1598                          NULL);
1599   if (yyparse(&closure) != 0)
1600     {
1601       input_file.file().unlock(task);
1602       return false;
1603     }
1604
1605   input_file.file().unlock(task);
1606
1607   gold_assert(!closure.saw_inputs());
1608
1609   return true;
1610 }
1611
1612 // FILENAME was found as an argument to --script (-T).
1613 // Read it as a script, and execute its contents immediately.
1614
1615 bool
1616 read_commandline_script(const char* filename, Command_line* cmdline)
1617 {
1618   return read_script_file(filename, cmdline, &cmdline->script_options(),
1619                           PARSING_LINKER_SCRIPT, Lex::LINKER_SCRIPT);
1620 }
1621
1622 // FILENAME was found as an argument to --version-script.  Read it as
1623 // a version script, and store its contents in
1624 // cmdline->script_options()->version_script_info().
1625
1626 bool
1627 read_version_script(const char* filename, Command_line* cmdline)
1628 {
1629   return read_script_file(filename, cmdline, &cmdline->script_options(),
1630                           PARSING_VERSION_SCRIPT, Lex::VERSION_SCRIPT);
1631 }
1632
1633 // FILENAME was found as an argument to --dynamic-list.  Read it as a
1634 // list of symbols, and store its contents in DYNAMIC_LIST.
1635
1636 bool
1637 read_dynamic_list(const char* filename, Command_line* cmdline,
1638                   Script_options* dynamic_list)
1639 {
1640   return read_script_file(filename, cmdline, dynamic_list,
1641                           PARSING_DYNAMIC_LIST, Lex::DYNAMIC_LIST);
1642 }
1643
1644 // Implement the --defsym option on the command line.  Return true if
1645 // all is well.
1646
1647 bool
1648 Script_options::define_symbol(const char* definition)
1649 {
1650   Lex lex(definition, strlen(definition), PARSING_DEFSYM);
1651   lex.set_mode(Lex::EXPRESSION);
1652
1653   // Dummy value.
1654   Position_dependent_options posdep_options;
1655
1656   Parser_closure closure("command line", posdep_options, true,
1657                          false, false, NULL, this, &lex, false, NULL);
1658
1659   if (yyparse(&closure) != 0)
1660     return false;
1661
1662   gold_assert(!closure.saw_inputs());
1663
1664   return true;
1665 }
1666
1667 // Print the script to F for debugging.
1668
1669 void
1670 Script_options::print(FILE* f) const
1671 {
1672   fprintf(f, "%s: Dumping linker script\n", program_name);
1673
1674   if (!this->entry_.empty())
1675     fprintf(f, "ENTRY(%s)\n", this->entry_.c_str());
1676
1677   for (Symbol_assignments::const_iterator p =
1678          this->symbol_assignments_.begin();
1679        p != this->symbol_assignments_.end();
1680        ++p)
1681     (*p)->print(f);
1682
1683   for (Assertions::const_iterator p = this->assertions_.begin();
1684        p != this->assertions_.end();
1685        ++p)
1686     (*p)->print(f);
1687
1688   this->script_sections_.print(f);
1689
1690   this->version_script_info_.print(f);
1691 }
1692
1693 // Manage mapping from keywords to the codes expected by the bison
1694 // parser.  We construct one global object for each lex mode with
1695 // keywords.
1696
1697 class Keyword_to_parsecode
1698 {
1699  public:
1700   // The structure which maps keywords to parsecodes.
1701   struct Keyword_parsecode
1702   {
1703     // Keyword.
1704     const char* keyword;
1705     // Corresponding parsecode.
1706     int parsecode;
1707   };
1708
1709   Keyword_to_parsecode(const Keyword_parsecode* keywords,
1710                        int keyword_count)
1711       : keyword_parsecodes_(keywords), keyword_count_(keyword_count)
1712   { }
1713
1714   // Return the parsecode corresponding KEYWORD, or 0 if it is not a
1715   // keyword.
1716   int
1717   keyword_to_parsecode(const char* keyword, size_t len) const;
1718
1719  private:
1720   const Keyword_parsecode* keyword_parsecodes_;
1721   const int keyword_count_;
1722 };
1723
1724 // Mapping from keyword string to keyword parsecode.  This array must
1725 // be kept in sorted order.  Parsecodes are looked up using bsearch.
1726 // This array must correspond to the list of parsecodes in yyscript.y.
1727
1728 static const Keyword_to_parsecode::Keyword_parsecode
1729 script_keyword_parsecodes[] =
1730 {
1731   { "ABSOLUTE", ABSOLUTE },
1732   { "ADDR", ADDR },
1733   { "ALIGN", ALIGN_K },
1734   { "ALIGNOF", ALIGNOF },
1735   { "ASSERT", ASSERT_K },
1736   { "AS_NEEDED", AS_NEEDED },
1737   { "AT", AT },
1738   { "BIND", BIND },
1739   { "BLOCK", BLOCK },
1740   { "BYTE", BYTE },
1741   { "CONSTANT", CONSTANT },
1742   { "CONSTRUCTORS", CONSTRUCTORS },
1743   { "COPY", COPY },
1744   { "CREATE_OBJECT_SYMBOLS", CREATE_OBJECT_SYMBOLS },
1745   { "DATA_SEGMENT_ALIGN", DATA_SEGMENT_ALIGN },
1746   { "DATA_SEGMENT_END", DATA_SEGMENT_END },
1747   { "DATA_SEGMENT_RELRO_END", DATA_SEGMENT_RELRO_END },
1748   { "DEFINED", DEFINED },
1749   { "DSECT", DSECT },
1750   { "ENTRY", ENTRY },
1751   { "EXCLUDE_FILE", EXCLUDE_FILE },
1752   { "EXTERN", EXTERN },
1753   { "FILL", FILL },
1754   { "FLOAT", FLOAT },
1755   { "FORCE_COMMON_ALLOCATION", FORCE_COMMON_ALLOCATION },
1756   { "GROUP", GROUP },
1757   { "HLL", HLL },
1758   { "INCLUDE", INCLUDE },
1759   { "INFO", INFO },
1760   { "INHIBIT_COMMON_ALLOCATION", INHIBIT_COMMON_ALLOCATION },
1761   { "INPUT", INPUT },
1762   { "KEEP", KEEP },
1763   { "LENGTH", LENGTH },
1764   { "LOADADDR", LOADADDR },
1765   { "LONG", LONG },
1766   { "MAP", MAP },
1767   { "MAX", MAX_K },
1768   { "MEMORY", MEMORY },
1769   { "MIN", MIN_K },
1770   { "NEXT", NEXT },
1771   { "NOCROSSREFS", NOCROSSREFS },
1772   { "NOFLOAT", NOFLOAT },
1773   { "NOLOAD", NOLOAD },
1774   { "ONLY_IF_RO", ONLY_IF_RO },
1775   { "ONLY_IF_RW", ONLY_IF_RW },
1776   { "OPTION", OPTION },
1777   { "ORIGIN", ORIGIN },
1778   { "OUTPUT", OUTPUT },
1779   { "OUTPUT_ARCH", OUTPUT_ARCH },
1780   { "OUTPUT_FORMAT", OUTPUT_FORMAT },
1781   { "OVERLAY", OVERLAY },
1782   { "PHDRS", PHDRS },
1783   { "PROVIDE", PROVIDE },
1784   { "PROVIDE_HIDDEN", PROVIDE_HIDDEN },
1785   { "QUAD", QUAD },
1786   { "SEARCH_DIR", SEARCH_DIR },
1787   { "SECTIONS", SECTIONS },
1788   { "SEGMENT_START", SEGMENT_START },
1789   { "SHORT", SHORT },
1790   { "SIZEOF", SIZEOF },
1791   { "SIZEOF_HEADERS", SIZEOF_HEADERS },
1792   { "SORT", SORT_BY_NAME },
1793   { "SORT_BY_ALIGNMENT", SORT_BY_ALIGNMENT },
1794   { "SORT_BY_NAME", SORT_BY_NAME },
1795   { "SPECIAL", SPECIAL },
1796   { "SQUAD", SQUAD },
1797   { "STARTUP", STARTUP },
1798   { "SUBALIGN", SUBALIGN },
1799   { "SYSLIB", SYSLIB },
1800   { "TARGET", TARGET_K },
1801   { "TRUNCATE", TRUNCATE },
1802   { "VERSION", VERSIONK },
1803   { "global", GLOBAL },
1804   { "l", LENGTH },
1805   { "len", LENGTH },
1806   { "local", LOCAL },
1807   { "o", ORIGIN },
1808   { "org", ORIGIN },
1809   { "sizeof_headers", SIZEOF_HEADERS },
1810 };
1811
1812 static const Keyword_to_parsecode
1813 script_keywords(&script_keyword_parsecodes[0],
1814                 (sizeof(script_keyword_parsecodes)
1815                  / sizeof(script_keyword_parsecodes[0])));
1816
1817 static const Keyword_to_parsecode::Keyword_parsecode
1818 version_script_keyword_parsecodes[] =
1819 {
1820   { "extern", EXTERN },
1821   { "global", GLOBAL },
1822   { "local", LOCAL },
1823 };
1824
1825 static const Keyword_to_parsecode
1826 version_script_keywords(&version_script_keyword_parsecodes[0],
1827                         (sizeof(version_script_keyword_parsecodes)
1828                          / sizeof(version_script_keyword_parsecodes[0])));
1829
1830 static const Keyword_to_parsecode::Keyword_parsecode
1831 dynamic_list_keyword_parsecodes[] =
1832 {
1833   { "extern", EXTERN },
1834 };
1835
1836 static const Keyword_to_parsecode
1837 dynamic_list_keywords(&dynamic_list_keyword_parsecodes[0],
1838                       (sizeof(dynamic_list_keyword_parsecodes)
1839                        / sizeof(dynamic_list_keyword_parsecodes[0])));
1840
1841
1842
1843 // Comparison function passed to bsearch.
1844
1845 extern "C"
1846 {
1847
1848 struct Ktt_key
1849 {
1850   const char* str;
1851   size_t len;
1852 };
1853
1854 static int
1855 ktt_compare(const void* keyv, const void* kttv)
1856 {
1857   const Ktt_key* key = static_cast<const Ktt_key*>(keyv);
1858   const Keyword_to_parsecode::Keyword_parsecode* ktt =
1859     static_cast<const Keyword_to_parsecode::Keyword_parsecode*>(kttv);
1860   int i = strncmp(key->str, ktt->keyword, key->len);
1861   if (i != 0)
1862     return i;
1863   if (ktt->keyword[key->len] != '\0')
1864     return -1;
1865   return 0;
1866 }
1867
1868 } // End extern "C".
1869
1870 int
1871 Keyword_to_parsecode::keyword_to_parsecode(const char* keyword,
1872                                            size_t len) const
1873 {
1874   Ktt_key key;
1875   key.str = keyword;
1876   key.len = len;
1877   void* kttv = bsearch(&key,
1878                        this->keyword_parsecodes_,
1879                        this->keyword_count_,
1880                        sizeof(this->keyword_parsecodes_[0]),
1881                        ktt_compare);
1882   if (kttv == NULL)
1883     return 0;
1884   Keyword_parsecode* ktt = static_cast<Keyword_parsecode*>(kttv);
1885   return ktt->parsecode;
1886 }
1887
1888 // The following structs are used within the VersionInfo class as well
1889 // as in the bison helper functions.  They store the information
1890 // parsed from the version script.
1891
1892 // A single version expression.
1893 // For example, pattern="std::map*" and language="C++".
1894 struct Version_expression
1895 {
1896   Version_expression(const std::string& a_pattern,
1897                      Version_script_info::Language a_language,
1898                      bool a_exact_match)
1899     : pattern(a_pattern), language(a_language), exact_match(a_exact_match),
1900       was_matched_by_symbol(false)
1901   { }
1902
1903   std::string pattern;
1904   Version_script_info::Language language;
1905   // If false, we use glob() to match pattern.  If true, we use strcmp().
1906   bool exact_match;
1907   // True if --no-undefined-version is in effect and we found this
1908   // version in get_symbol_version.  We use mutable because this
1909   // struct is generally not modifiable after it has been created.
1910   mutable bool was_matched_by_symbol;
1911 };
1912
1913 // A list of expressions.
1914 struct Version_expression_list
1915 {
1916   std::vector<struct Version_expression> expressions;
1917 };
1918
1919 // A list of which versions upon which another version depends.
1920 // Strings should be from the Stringpool.
1921 struct Version_dependency_list
1922 {
1923   std::vector<std::string> dependencies;
1924 };
1925
1926 // The total definition of a version.  It includes the tag for the
1927 // version, its global and local expressions, and any dependencies.
1928 struct Version_tree
1929 {
1930   Version_tree()
1931       : tag(), global(NULL), local(NULL), dependencies(NULL)
1932   { }
1933
1934   std::string tag;
1935   const struct Version_expression_list* global;
1936   const struct Version_expression_list* local;
1937   const struct Version_dependency_list* dependencies;
1938 };
1939
1940 // Helper class that calls cplus_demangle when needed and takes care of freeing
1941 // the result.
1942
1943 class Lazy_demangler
1944 {
1945  public:
1946   Lazy_demangler(const char* symbol, int options)
1947     : symbol_(symbol), options_(options), demangled_(NULL), did_demangle_(false)
1948   { }
1949
1950   ~Lazy_demangler()
1951   { free(this->demangled_); }
1952
1953   // Return the demangled name. The actual demangling happens on the first call,
1954   // and the result is later cached.
1955   inline char*
1956   get();
1957
1958  private:
1959   // The symbol to demangle.
1960   const char* symbol_;
1961   // Option flags to pass to cplus_demagle.
1962   const int options_;
1963   // The cached demangled value, or NULL if demangling didn't happen yet or
1964   // failed.
1965   char* demangled_;
1966   // Whether we already called cplus_demangle
1967   bool did_demangle_;
1968 };
1969
1970 // Return the demangled name. The actual demangling happens on the first call,
1971 // and the result is later cached. Returns NULL if the symbol cannot be
1972 // demangled.
1973
1974 inline char*
1975 Lazy_demangler::get()
1976 {
1977   if (!this->did_demangle_)
1978     {
1979       this->demangled_ = cplus_demangle(this->symbol_, this->options_);
1980       this->did_demangle_ = true;
1981     }
1982   return this->demangled_;
1983 }
1984
1985 // Class Version_script_info.
1986
1987 Version_script_info::Version_script_info()
1988   : dependency_lists_(), expression_lists_(), version_trees_(), globs_(),
1989     default_version_(NULL), default_is_global_(false), is_finalized_(false)
1990 {
1991   for (int i = 0; i < LANGUAGE_COUNT; ++i)
1992     this->exact_[i] = NULL;
1993 }
1994
1995 Version_script_info::~Version_script_info()
1996 {
1997 }
1998
1999 // Forget all the known version script information.
2000
2001 void
2002 Version_script_info::clear()
2003 {
2004   for (size_t k = 0; k < this->dependency_lists_.size(); ++k)
2005     delete this->dependency_lists_[k];
2006   this->dependency_lists_.clear();
2007   for (size_t k = 0; k < this->version_trees_.size(); ++k)
2008     delete this->version_trees_[k];
2009   this->version_trees_.clear();
2010   for (size_t k = 0; k < this->expression_lists_.size(); ++k)
2011     delete this->expression_lists_[k];
2012   this->expression_lists_.clear();
2013 }
2014
2015 // Finalize the version script information.
2016
2017 void
2018 Version_script_info::finalize()
2019 {
2020   if (!this->is_finalized_)
2021     {
2022       this->build_lookup_tables();
2023       this->is_finalized_ = true;
2024     }
2025 }
2026
2027 // Return all the versions.
2028
2029 std::vector<std::string>
2030 Version_script_info::get_versions() const
2031 {
2032   std::vector<std::string> ret;
2033   for (size_t j = 0; j < this->version_trees_.size(); ++j)
2034     if (!this->version_trees_[j]->tag.empty())
2035       ret.push_back(this->version_trees_[j]->tag);
2036   return ret;
2037 }
2038
2039 // Return the dependencies of VERSION.
2040
2041 std::vector<std::string>
2042 Version_script_info::get_dependencies(const char* version) const
2043 {
2044   std::vector<std::string> ret;
2045   for (size_t j = 0; j < this->version_trees_.size(); ++j)
2046     if (this->version_trees_[j]->tag == version)
2047       {
2048         const struct Version_dependency_list* deps =
2049           this->version_trees_[j]->dependencies;
2050         if (deps != NULL)
2051           for (size_t k = 0; k < deps->dependencies.size(); ++k)
2052             ret.push_back(deps->dependencies[k]);
2053         return ret;
2054       }
2055   return ret;
2056 }
2057
2058 // A version script essentially maps a symbol name to a version tag
2059 // and an indication of whether symbol is global or local within that
2060 // version tag.  Each symbol maps to at most one version tag.
2061 // Unfortunately, in practice, version scripts are ambiguous, and list
2062 // symbols multiple times.  Thus, we have to document the matching
2063 // process.
2064
2065 // This is a description of what the GNU linker does as of 2010-01-11.
2066 // It walks through the version tags in the order in which they appear
2067 // in the version script.  For each tag, it first walks through the
2068 // global patterns for that tag, then the local patterns.  When
2069 // looking at a single pattern, it first applies any language specific
2070 // demangling as specified for the pattern, and then matches the
2071 // resulting symbol name to the pattern.  If it finds an exact match
2072 // for a literal pattern (a pattern enclosed in quotes or with no
2073 // wildcard characters), then that is the match that it uses.  If
2074 // finds a match with a wildcard pattern, then it saves it and
2075 // continues searching.  Wildcard patterns that are exactly "*" are
2076 // saved separately.
2077
2078 // If no exact match with a literal pattern is ever found, then if a
2079 // wildcard match with a global pattern was found it is used,
2080 // otherwise if a wildcard match with a local pattern was found it is
2081 // used.
2082
2083 // This is the result:
2084 //   * If there is an exact match, then we use the first tag in the
2085 //     version script where it matches.
2086 //     + If the exact match in that tag is global, it is used.
2087 //     + Otherwise the exact match in that tag is local, and is used.
2088 //   * Otherwise, if there is any match with a global wildcard pattern:
2089 //     + If there is any match with a wildcard pattern which is not
2090 //       "*", then we use the tag in which the *last* such pattern
2091 //       appears.
2092 //     + Otherwise, we matched "*".  If there is no match with a local
2093 //       wildcard pattern which is not "*", then we use the *last*
2094 //       match with a global "*".  Otherwise, continue.
2095 //   * Otherwise, if there is any match with a local wildcard pattern:
2096 //     + If there is any match with a wildcard pattern which is not
2097 //       "*", then we use the tag in which the *last* such pattern
2098 //       appears.
2099 //     + Otherwise, we matched "*", and we use the tag in which the
2100 //       *last* such match occurred.
2101
2102 // There is an additional wrinkle.  When the GNU linker finds a symbol
2103 // with a version defined in an object file due to a .symver
2104 // directive, it looks up that symbol name in that version tag.  If it
2105 // finds it, it matches the symbol name against the patterns for that
2106 // version.  If there is no match with a global pattern, but there is
2107 // a match with a local pattern, then the GNU linker marks the symbol
2108 // as local.
2109
2110 // We want gold to be generally compatible, but we also want gold to
2111 // be fast.  These are the rules that gold implements:
2112 //   * If there is an exact match for the mangled name, we use it.
2113 //     + If there is more than one exact match, we give a warning, and
2114 //       we use the first tag in the script which matches.
2115 //     + If a symbol has an exact match as both global and local for
2116 //       the same version tag, we give an error.
2117 //   * Otherwise, we look for an extern C++ or an extern Java exact
2118 //     match.  If we find an exact match, we use it.
2119 //     + If there is more than one exact match, we give a warning, and
2120 //       we use the first tag in the script which matches.
2121 //     + If a symbol has an exact match as both global and local for
2122 //       the same version tag, we give an error.
2123 //   * Otherwise, we look through the wildcard patterns, ignoring "*"
2124 //     patterns.  We look through the version tags in reverse order.
2125 //     For each version tag, we look through the global patterns and
2126 //     then the local patterns.  We use the first match we find (i.e.,
2127 //     the last matching version tag in the file).
2128 //   * Otherwise, we use the "*" pattern if there is one.  We give an
2129 //     error if there are multiple "*" patterns.
2130
2131 // At least for now, gold does not look up the version tag for a
2132 // symbol version found in an object file to see if it should be
2133 // forced local.  There are other ways to force a symbol to be local,
2134 // and I don't understand why this one is useful.
2135
2136 // Build a set of fast lookup tables for a version script.
2137
2138 void
2139 Version_script_info::build_lookup_tables()
2140 {
2141   size_t size = this->version_trees_.size();
2142   for (size_t j = 0; j < size; ++j)
2143     {
2144       const Version_tree* v = this->version_trees_[j];
2145       this->build_expression_list_lookup(v->local, v, false);
2146       this->build_expression_list_lookup(v->global, v, true);
2147     }
2148 }
2149
2150 // If a pattern has backlashes but no unquoted wildcard characters,
2151 // then we apply backslash unquoting and look for an exact match.
2152 // Otherwise we treat it as a wildcard pattern.  This function returns
2153 // true for a wildcard pattern.  Otherwise, it does backslash
2154 // unquoting on *PATTERN and returns false.  If this returns true,
2155 // *PATTERN may have been partially unquoted.
2156
2157 bool
2158 Version_script_info::unquote(std::string* pattern) const
2159 {
2160   bool saw_backslash = false;
2161   size_t len = pattern->length();
2162   size_t j = 0;
2163   for (size_t i = 0; i < len; ++i)
2164     {
2165       if (saw_backslash)
2166         saw_backslash = false;
2167       else
2168         {
2169           switch ((*pattern)[i])
2170             {
2171             case '?': case '[': case '*':
2172               return true;
2173             case '\\':
2174               saw_backslash = true;
2175               continue;
2176             default:
2177               break;
2178             }
2179         }
2180
2181       if (i != j)
2182         (*pattern)[j] = (*pattern)[i];
2183       ++j;
2184     }
2185   return false;
2186 }
2187
2188 // Add an exact match for MATCH to *PE.  The result of the match is
2189 // V/IS_GLOBAL.
2190
2191 void
2192 Version_script_info::add_exact_match(const std::string& match,
2193                                      const Version_tree* v, bool is_global,
2194                                      const Version_expression* ve,
2195                                      Exact* pe)
2196 {
2197   std::pair<Exact::iterator, bool> ins =
2198     pe->insert(std::make_pair(match, Version_tree_match(v, is_global, ve)));
2199   if (ins.second)
2200     {
2201       // This is the first time we have seen this match.
2202       return;
2203     }
2204
2205   Version_tree_match& vtm(ins.first->second);
2206   if (vtm.real->tag != v->tag)
2207     {
2208       // This is an ambiguous match.  We still return the
2209       // first version that we found in the script, but we
2210       // record the new version to issue a warning if we
2211       // wind up looking up this symbol.
2212       if (vtm.ambiguous == NULL)
2213         vtm.ambiguous = v;
2214     }
2215   else if (is_global != vtm.is_global)
2216     {
2217       // We have a match for both the global and local entries for a
2218       // version tag.  That's got to be wrong.
2219       gold_error(_("'%s' appears as both a global and a local symbol "
2220                    "for version '%s' in script"),
2221                  match.c_str(), v->tag.c_str());
2222     }
2223 }
2224
2225 // Build fast lookup information for EXPLIST and store it in LOOKUP.
2226 // All matches go to V, and IS_GLOBAL is true if they are global
2227 // matches.
2228
2229 void
2230 Version_script_info::build_expression_list_lookup(
2231     const Version_expression_list* explist,
2232     const Version_tree* v,
2233     bool is_global)
2234 {
2235   if (explist == NULL)
2236     return;
2237   size_t size = explist->expressions.size();
2238   for (size_t i = 0; i < size; ++i)
2239     {
2240       const Version_expression& exp(explist->expressions[i]);
2241
2242       if (exp.pattern.length() == 1 && exp.pattern[0] == '*')
2243         {
2244           if (this->default_version_ != NULL
2245               && this->default_version_->tag != v->tag)
2246             gold_warning(_("wildcard match appears in both version '%s' "
2247                            "and '%s' in script"),
2248                          this->default_version_->tag.c_str(), v->tag.c_str());
2249           else if (this->default_version_ != NULL
2250                    && this->default_is_global_ != is_global)
2251             gold_error(_("wildcard match appears as both global and local "
2252                          "in version '%s' in script"),
2253                        v->tag.c_str());
2254           this->default_version_ = v;
2255           this->default_is_global_ = is_global;
2256           continue;
2257         }
2258
2259       std::string pattern = exp.pattern;
2260       if (!exp.exact_match)
2261         {
2262           if (this->unquote(&pattern))
2263             {
2264               this->globs_.push_back(Glob(&exp, v, is_global));
2265               continue;
2266             }
2267         }
2268
2269       if (this->exact_[exp.language] == NULL)
2270         this->exact_[exp.language] = new Exact();
2271       this->add_exact_match(pattern, v, is_global, &exp,
2272                             this->exact_[exp.language]);
2273     }
2274 }
2275
2276 // Return the name to match given a name, a language code, and two
2277 // lazy demanglers.
2278
2279 const char*
2280 Version_script_info::get_name_to_match(const char* name,
2281                                        int language,
2282                                        Lazy_demangler* cpp_demangler,
2283                                        Lazy_demangler* java_demangler) const
2284 {
2285   switch (language)
2286     {
2287     case LANGUAGE_C:
2288       return name;
2289     case LANGUAGE_CXX:
2290       return cpp_demangler->get();
2291     case LANGUAGE_JAVA:
2292       return java_demangler->get();
2293     default:
2294       gold_unreachable();
2295     }
2296 }
2297
2298 // Look up SYMBOL_NAME in the list of versions.  Return true if the
2299 // symbol is found, false if not.  If the symbol is found, then if
2300 // PVERSION is not NULL, set *PVERSION to the version tag, and if
2301 // P_IS_GLOBAL is not NULL, set *P_IS_GLOBAL according to whether the
2302 // symbol is global or not.
2303
2304 bool
2305 Version_script_info::get_symbol_version(const char* symbol_name,
2306                                         std::string* pversion,
2307                                         bool* p_is_global) const
2308 {
2309   Lazy_demangler cpp_demangled_name(symbol_name, DMGL_ANSI | DMGL_PARAMS);
2310   Lazy_demangler java_demangled_name(symbol_name,
2311                                      DMGL_ANSI | DMGL_PARAMS | DMGL_JAVA);
2312
2313   gold_assert(this->is_finalized_);
2314   for (int i = 0; i < LANGUAGE_COUNT; ++i)
2315     {
2316       Exact* exact = this->exact_[i];
2317       if (exact == NULL)
2318         continue;
2319
2320       const char* name_to_match = this->get_name_to_match(symbol_name, i,
2321                                                           &cpp_demangled_name,
2322                                                           &java_demangled_name);
2323       if (name_to_match == NULL)
2324         {
2325           // If the name can not be demangled, the GNU linker goes
2326           // ahead and tries to match it anyhow.  That does not
2327           // make sense to me and I have not implemented it.
2328           continue;
2329         }
2330
2331       Exact::const_iterator pe = exact->find(name_to_match);
2332       if (pe != exact->end())
2333         {
2334           const Version_tree_match& vtm(pe->second);
2335           if (vtm.ambiguous != NULL)
2336             gold_warning(_("using '%s' as version for '%s' which is also "
2337                            "named in version '%s' in script"),
2338                          vtm.real->tag.c_str(), name_to_match,
2339                          vtm.ambiguous->tag.c_str());
2340
2341           if (pversion != NULL)
2342             *pversion = vtm.real->tag;
2343           if (p_is_global != NULL)
2344             *p_is_global = vtm.is_global;
2345
2346           // If we are using --no-undefined-version, and this is a
2347           // global symbol, we have to record that we have found this
2348           // symbol, so that we don't warn about it.  We have to do
2349           // this now, because otherwise we have no way to get from a
2350           // non-C language back to the demangled name that we
2351           // matched.
2352           if (p_is_global != NULL && vtm.is_global)
2353             vtm.expression->was_matched_by_symbol = true;
2354
2355           return true;
2356         }
2357     }
2358
2359   // Look through the glob patterns in reverse order.
2360
2361   for (Globs::const_reverse_iterator p = this->globs_.rbegin();
2362        p != this->globs_.rend();
2363        ++p)
2364     {
2365       int language = p->expression->language;
2366       const char* name_to_match = this->get_name_to_match(symbol_name,
2367                                                           language,
2368                                                           &cpp_demangled_name,
2369                                                           &java_demangled_name);
2370       if (name_to_match == NULL)
2371         continue;
2372
2373       if (fnmatch(p->expression->pattern.c_str(), name_to_match,
2374                   FNM_NOESCAPE) == 0)
2375         {
2376           if (pversion != NULL)
2377             *pversion = p->version->tag;
2378           if (p_is_global != NULL)
2379             *p_is_global = p->is_global;
2380           return true;
2381         }
2382     }
2383
2384   // Finally, there may be a wildcard.
2385   if (this->default_version_ != NULL)
2386     {
2387       if (pversion != NULL)
2388         *pversion = this->default_version_->tag;
2389       if (p_is_global != NULL)
2390         *p_is_global = this->default_is_global_;
2391       return true;
2392     }
2393
2394   return false;
2395 }
2396
2397 // Give an error if any exact symbol names (not wildcards) appear in a
2398 // version script, but there is no such symbol.
2399
2400 void
2401 Version_script_info::check_unmatched_names(const Symbol_table* symtab) const
2402 {
2403   for (size_t i = 0; i < this->version_trees_.size(); ++i)
2404     {
2405       const Version_tree* vt = this->version_trees_[i];
2406       if (vt->global == NULL)
2407         continue;
2408       for (size_t j = 0; j < vt->global->expressions.size(); ++j)
2409         {
2410           const Version_expression& expression(vt->global->expressions[j]);
2411
2412           // Ignore cases where we used the version because we saw a
2413           // symbol that we looked up.  Note that
2414           // WAS_MATCHED_BY_SYMBOL will be true even if the symbol was
2415           // not a definition.  That's OK as in that case we most
2416           // likely gave an undefined symbol error anyhow.
2417           if (expression.was_matched_by_symbol)
2418             continue;
2419
2420           // Just ignore names which are in languages other than C.
2421           // We have no way to look them up in the symbol table.
2422           if (expression.language != LANGUAGE_C)
2423             continue;
2424
2425           // Remove backslash quoting, and ignore wildcard patterns.
2426           std::string pattern = expression.pattern;
2427           if (!expression.exact_match)
2428             {
2429               if (this->unquote(&pattern))
2430                 continue;
2431             }
2432
2433           if (symtab->lookup(pattern.c_str(), vt->tag.c_str()) == NULL)
2434             gold_error(_("version script assignment of %s to symbol %s "
2435                          "failed: symbol not defined"),
2436                        vt->tag.c_str(), pattern.c_str());
2437         }
2438     }
2439 }
2440
2441 struct Version_dependency_list*
2442 Version_script_info::allocate_dependency_list()
2443 {
2444   dependency_lists_.push_back(new Version_dependency_list);
2445   return dependency_lists_.back();
2446 }
2447
2448 struct Version_expression_list*
2449 Version_script_info::allocate_expression_list()
2450 {
2451   expression_lists_.push_back(new Version_expression_list);
2452   return expression_lists_.back();
2453 }
2454
2455 struct Version_tree*
2456 Version_script_info::allocate_version_tree()
2457 {
2458   version_trees_.push_back(new Version_tree);
2459   return version_trees_.back();
2460 }
2461
2462 // Print for debugging.
2463
2464 void
2465 Version_script_info::print(FILE* f) const
2466 {
2467   if (this->empty())
2468     return;
2469
2470   fprintf(f, "VERSION {");
2471
2472   for (size_t i = 0; i < this->version_trees_.size(); ++i)
2473     {
2474       const Version_tree* vt = this->version_trees_[i];
2475
2476       if (vt->tag.empty())
2477         fprintf(f, "  {\n");
2478       else
2479         fprintf(f, "  %s {\n", vt->tag.c_str());
2480
2481       if (vt->global != NULL)
2482         {
2483           fprintf(f, "    global :\n");
2484           this->print_expression_list(f, vt->global);
2485         }
2486
2487       if (vt->local != NULL)
2488         {
2489           fprintf(f, "    local :\n");
2490           this->print_expression_list(f, vt->local);
2491         }
2492
2493       fprintf(f, "  }");
2494       if (vt->dependencies != NULL)
2495         {
2496           const Version_dependency_list* deps = vt->dependencies;
2497           for (size_t j = 0; j < deps->dependencies.size(); ++j)
2498             {
2499               if (j < deps->dependencies.size() - 1)
2500                 fprintf(f, "\n");
2501               fprintf(f, "    %s", deps->dependencies[j].c_str());
2502             }
2503         }
2504       fprintf(f, ";\n");
2505     }
2506
2507   fprintf(f, "}\n");
2508 }
2509
2510 void
2511 Version_script_info::print_expression_list(
2512     FILE* f,
2513     const Version_expression_list* vel) const
2514 {
2515   Version_script_info::Language current_language = LANGUAGE_C;
2516   for (size_t i = 0; i < vel->expressions.size(); ++i)
2517     {
2518       const Version_expression& ve(vel->expressions[i]);
2519
2520       if (ve.language != current_language)
2521         {
2522           if (current_language != LANGUAGE_C)
2523             fprintf(f, "      }\n");
2524           switch (ve.language)
2525             {
2526             case LANGUAGE_C:
2527               break;
2528             case LANGUAGE_CXX:
2529               fprintf(f, "      extern \"C++\" {\n");
2530               break;
2531             case LANGUAGE_JAVA:
2532               fprintf(f, "      extern \"Java\" {\n");
2533               break;
2534             default:
2535               gold_unreachable();
2536             }
2537           current_language = ve.language;
2538         }
2539
2540       fprintf(f, "      ");
2541       if (current_language != LANGUAGE_C)
2542         fprintf(f, "  ");
2543
2544       if (ve.exact_match)
2545         fprintf(f, "\"");
2546       fprintf(f, "%s", ve.pattern.c_str());
2547       if (ve.exact_match)
2548         fprintf(f, "\"");
2549
2550       fprintf(f, "\n");
2551     }
2552
2553   if (current_language != LANGUAGE_C)
2554     fprintf(f, "      }\n");
2555 }
2556
2557 } // End namespace gold.
2558
2559 // The remaining functions are extern "C", so it's clearer to not put
2560 // them in namespace gold.
2561
2562 using namespace gold;
2563
2564 // This function is called by the bison parser to return the next
2565 // token.
2566
2567 extern "C" int
2568 yylex(YYSTYPE* lvalp, void* closurev)
2569 {
2570   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2571   const Token* token = closure->next_token();
2572   switch (token->classification())
2573     {
2574     default:
2575       gold_unreachable();
2576
2577     case Token::TOKEN_INVALID:
2578       yyerror(closurev, "invalid character");
2579       return 0;
2580
2581     case Token::TOKEN_EOF:
2582       return 0;
2583
2584     case Token::TOKEN_STRING:
2585       {
2586         // This is either a keyword or a STRING.
2587         size_t len;
2588         const char* str = token->string_value(&len);
2589         int parsecode = 0;
2590         switch (closure->lex_mode())
2591           {
2592           case Lex::LINKER_SCRIPT:
2593             parsecode = script_keywords.keyword_to_parsecode(str, len);
2594             break;
2595           case Lex::VERSION_SCRIPT:
2596             parsecode = version_script_keywords.keyword_to_parsecode(str, len);
2597             break;
2598           case Lex::DYNAMIC_LIST:
2599             parsecode = dynamic_list_keywords.keyword_to_parsecode(str, len);
2600             break;
2601           default:
2602             break;
2603           }
2604         if (parsecode != 0)
2605           return parsecode;
2606         lvalp->string.value = str;
2607         lvalp->string.length = len;
2608         return STRING;
2609       }
2610
2611     case Token::TOKEN_QUOTED_STRING:
2612       lvalp->string.value = token->string_value(&lvalp->string.length);
2613       return QUOTED_STRING;
2614
2615     case Token::TOKEN_OPERATOR:
2616       return token->operator_value();
2617
2618     case Token::TOKEN_INTEGER:
2619       lvalp->integer = token->integer_value();
2620       return INTEGER;
2621     }
2622 }
2623
2624 // This function is called by the bison parser to report an error.
2625
2626 extern "C" void
2627 yyerror(void* closurev, const char* message)
2628 {
2629   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2630   gold_error(_("%s:%d:%d: %s"), closure->filename(), closure->lineno(),
2631              closure->charpos(), message);
2632 }
2633
2634 // Called by the bison parser to add an external symbol to the link.
2635
2636 extern "C" void
2637 script_add_extern(void* closurev, const char* name, size_t length)
2638 {
2639   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2640   closure->script_options()->add_symbol_reference(name, length);
2641 }
2642
2643 // Called by the bison parser to add a file to the link.
2644
2645 extern "C" void
2646 script_add_file(void* closurev, const char* name, size_t length)
2647 {
2648   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2649
2650   // If this is an absolute path, and we found the script in the
2651   // sysroot, then we want to prepend the sysroot to the file name.
2652   // For example, this is how we handle a cross link to the x86_64
2653   // libc.so, which refers to /lib/libc.so.6.
2654   std::string name_string(name, length);
2655   const char* extra_search_path = ".";
2656   std::string script_directory;
2657   if (IS_ABSOLUTE_PATH(name_string.c_str()))
2658     {
2659       if (closure->is_in_sysroot())
2660         {
2661           const std::string& sysroot(parameters->options().sysroot());
2662           gold_assert(!sysroot.empty());
2663           name_string = sysroot + name_string;
2664         }
2665     }
2666   else
2667     {
2668       // In addition to checking the normal library search path, we
2669       // also want to check in the script-directory.
2670       const char* slash = strrchr(closure->filename(), '/');
2671       if (slash != NULL)
2672         {
2673           script_directory.assign(closure->filename(),
2674                                   slash - closure->filename() + 1);
2675           extra_search_path = script_directory.c_str();
2676         }
2677     }
2678
2679   Input_file_argument file(name_string.c_str(),
2680                            Input_file_argument::INPUT_FILE_TYPE_FILE,
2681                            extra_search_path, false,
2682                            closure->position_dependent_options());
2683   Input_argument& arg = closure->inputs()->add_file(file);
2684   arg.set_script_info(closure->script_info());
2685 }
2686
2687 // Called by the bison parser to add a library to the link.
2688
2689 extern "C" void
2690 script_add_library(void* closurev, const char* name, size_t length)
2691 {
2692   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2693   std::string name_string(name, length);
2694
2695   if (name_string[0] != 'l')
2696     gold_error(_("library name must be prefixed with -l"));
2697     
2698   Input_file_argument file(name_string.c_str() + 1,
2699                            Input_file_argument::INPUT_FILE_TYPE_LIBRARY,
2700                            "", false,
2701                            closure->position_dependent_options());
2702   Input_argument& arg = closure->inputs()->add_file(file);
2703   arg.set_script_info(closure->script_info());
2704 }
2705
2706 // Called by the bison parser to start a group.  If we are already in
2707 // a group, that means that this script was invoked within a
2708 // --start-group --end-group sequence on the command line, or that
2709 // this script was found in a GROUP of another script.  In that case,
2710 // we simply continue the existing group, rather than starting a new
2711 // one.  It is possible to construct a case in which this will do
2712 // something other than what would happen if we did a recursive group,
2713 // but it's hard to imagine why the different behaviour would be
2714 // useful for a real program.  Avoiding recursive groups is simpler
2715 // and more efficient.
2716
2717 extern "C" void
2718 script_start_group(void* closurev)
2719 {
2720   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2721   if (!closure->in_group())
2722     closure->inputs()->start_group();
2723 }
2724
2725 // Called by the bison parser at the end of a group.
2726
2727 extern "C" void
2728 script_end_group(void* closurev)
2729 {
2730   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2731   if (!closure->in_group())
2732     closure->inputs()->end_group();
2733 }
2734
2735 // Called by the bison parser to start an AS_NEEDED list.
2736
2737 extern "C" void
2738 script_start_as_needed(void* closurev)
2739 {
2740   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2741   closure->position_dependent_options().set_as_needed(true);
2742 }
2743
2744 // Called by the bison parser at the end of an AS_NEEDED list.
2745
2746 extern "C" void
2747 script_end_as_needed(void* closurev)
2748 {
2749   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2750   closure->position_dependent_options().set_as_needed(false);
2751 }
2752
2753 // Called by the bison parser to set the entry symbol.
2754
2755 extern "C" void
2756 script_set_entry(void* closurev, const char* entry, size_t length)
2757 {
2758   // We'll parse this exactly the same as --entry=ENTRY on the commandline
2759   // TODO(csilvers): FIXME -- call set_entry directly.
2760   std::string arg("--entry=");
2761   arg.append(entry, length);
2762   script_parse_option(closurev, arg.c_str(), arg.size());
2763 }
2764
2765 // Called by the bison parser to set whether to define common symbols.
2766
2767 extern "C" void
2768 script_set_common_allocation(void* closurev, int set)
2769 {
2770   const char* arg = set != 0 ? "--define-common" : "--no-define-common";
2771   script_parse_option(closurev, arg, strlen(arg));
2772 }
2773
2774 // Called by the bison parser to refer to a symbol.
2775
2776 extern "C" Expression*
2777 script_symbol(void* closurev, const char* name, size_t length)
2778 {
2779   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2780   if (length != 1 || name[0] != '.')
2781     closure->script_options()->add_symbol_reference(name, length);
2782   return script_exp_string(name, length);
2783 }
2784
2785 // Called by the bison parser to define a symbol.
2786
2787 extern "C" void
2788 script_set_symbol(void* closurev, const char* name, size_t length,
2789                   Expression* value, int providei, int hiddeni)
2790 {
2791   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2792   const bool provide = providei != 0;
2793   const bool hidden = hiddeni != 0;
2794   closure->script_options()->add_symbol_assignment(name, length,
2795                                                    closure->parsing_defsym(),
2796                                                    value, provide, hidden);
2797   closure->clear_skip_on_incompatible_target();
2798 }
2799
2800 // Called by the bison parser to add an assertion.
2801
2802 extern "C" void
2803 script_add_assertion(void* closurev, Expression* check, const char* message,
2804                      size_t messagelen)
2805 {
2806   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2807   closure->script_options()->add_assertion(check, message, messagelen);
2808   closure->clear_skip_on_incompatible_target();
2809 }
2810
2811 // Called by the bison parser to parse an OPTION.
2812
2813 extern "C" void
2814 script_parse_option(void* closurev, const char* option, size_t length)
2815 {
2816   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2817   // We treat the option as a single command-line option, even if
2818   // it has internal whitespace.
2819   if (closure->command_line() == NULL)
2820     {
2821       // There are some options that we could handle here--e.g.,
2822       // -lLIBRARY.  Should we bother?
2823       gold_warning(_("%s:%d:%d: ignoring command OPTION; OPTION is only valid"
2824                      " for scripts specified via -T/--script"),
2825                    closure->filename(), closure->lineno(), closure->charpos());
2826     }
2827   else
2828     {
2829       bool past_a_double_dash_option = false;
2830       const char* mutable_option = strndup(option, length);
2831       gold_assert(mutable_option != NULL);
2832       closure->command_line()->process_one_option(1, &mutable_option, 0,
2833                                                   &past_a_double_dash_option);
2834       // The General_options class will quite possibly store a pointer
2835       // into mutable_option, so we can't free it.  In cases the class
2836       // does not store such a pointer, this is a memory leak.  Alas. :(
2837     }
2838   closure->clear_skip_on_incompatible_target();
2839 }
2840
2841 // Called by the bison parser to handle OUTPUT_FORMAT.  OUTPUT_FORMAT
2842 // takes either one or three arguments.  In the three argument case,
2843 // the format depends on the endianness option, which we don't
2844 // currently support (FIXME).  If we see an OUTPUT_FORMAT for the
2845 // wrong format, then we want to search for a new file.  Returning 0
2846 // here will cause the parser to immediately abort.
2847
2848 extern "C" int
2849 script_check_output_format(void* closurev,
2850                            const char* default_name, size_t default_length,
2851                            const char*, size_t, const char*, size_t)
2852 {
2853   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2854   std::string name(default_name, default_length);
2855   Target* target = select_target_by_bfd_name(name.c_str());
2856   if (target == NULL || !parameters->is_compatible_target(target))
2857     {
2858       if (closure->skip_on_incompatible_target())
2859         {
2860           closure->set_found_incompatible_target();
2861           return 0;
2862         }
2863       // FIXME: Should we warn about the unknown target?
2864     }
2865   return 1;
2866 }
2867
2868 // Called by the bison parser to handle TARGET.
2869
2870 extern "C" void
2871 script_set_target(void* closurev, const char* target, size_t len)
2872 {
2873   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2874   std::string s(target, len);
2875   General_options::Object_format format_enum;
2876   format_enum = General_options::string_to_object_format(s.c_str());
2877   closure->position_dependent_options().set_format_enum(format_enum);
2878 }
2879
2880 // Called by the bison parser to handle SEARCH_DIR.  This is handled
2881 // exactly like a -L option.
2882
2883 extern "C" void
2884 script_add_search_dir(void* closurev, const char* option, size_t length)
2885 {
2886   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2887   if (closure->command_line() == NULL)
2888     gold_warning(_("%s:%d:%d: ignoring SEARCH_DIR; SEARCH_DIR is only valid"
2889                    " for scripts specified via -T/--script"),
2890                  closure->filename(), closure->lineno(), closure->charpos());
2891   else if (!closure->command_line()->options().nostdlib())
2892     {
2893       std::string s = "-L" + std::string(option, length);
2894       script_parse_option(closurev, s.c_str(), s.size());
2895     }
2896 }
2897
2898 /* Called by the bison parser to push the lexer into expression
2899    mode.  */
2900
2901 extern "C" void
2902 script_push_lex_into_expression_mode(void* closurev)
2903 {
2904   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2905   closure->push_lex_mode(Lex::EXPRESSION);
2906 }
2907
2908 /* Called by the bison parser to push the lexer into version
2909    mode.  */
2910
2911 extern "C" void
2912 script_push_lex_into_version_mode(void* closurev)
2913 {
2914   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2915   if (closure->version_script()->is_finalized())
2916     gold_error(_("%s:%d:%d: invalid use of VERSION in input file"),
2917                closure->filename(), closure->lineno(), closure->charpos());
2918   closure->push_lex_mode(Lex::VERSION_SCRIPT);
2919 }
2920
2921 /* Called by the bison parser to pop the lexer mode.  */
2922
2923 extern "C" void
2924 script_pop_lex_mode(void* closurev)
2925 {
2926   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2927   closure->pop_lex_mode();
2928 }
2929
2930 // Register an entire version node. For example:
2931 //
2932 // GLIBC_2.1 {
2933 //   global: foo;
2934 // } GLIBC_2.0;
2935 //
2936 // - tag is "GLIBC_2.1"
2937 // - tree contains the information "global: foo"
2938 // - deps contains "GLIBC_2.0"
2939
2940 extern "C" void
2941 script_register_vers_node(void*,
2942                           const char* tag,
2943                           int taglen,
2944                           struct Version_tree* tree,
2945                           struct Version_dependency_list* deps)
2946 {
2947   gold_assert(tree != NULL);
2948   tree->dependencies = deps;
2949   if (tag != NULL)
2950     tree->tag = std::string(tag, taglen);
2951 }
2952
2953 // Add a dependencies to the list of existing dependencies, if any,
2954 // and return the expanded list.
2955
2956 extern "C" struct Version_dependency_list*
2957 script_add_vers_depend(void* closurev,
2958                        struct Version_dependency_list* all_deps,
2959                        const char* depend_to_add, int deplen)
2960 {
2961   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2962   if (all_deps == NULL)
2963     all_deps = closure->version_script()->allocate_dependency_list();
2964   all_deps->dependencies.push_back(std::string(depend_to_add, deplen));
2965   return all_deps;
2966 }
2967
2968 // Add a pattern expression to an existing list of expressions, if any.
2969
2970 extern "C" struct Version_expression_list*
2971 script_new_vers_pattern(void* closurev,
2972                         struct Version_expression_list* expressions,
2973                         const char* pattern, int patlen, int exact_match)
2974 {
2975   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2976   if (expressions == NULL)
2977     expressions = closure->version_script()->allocate_expression_list();
2978   expressions->expressions.push_back(
2979       Version_expression(std::string(pattern, patlen),
2980                          closure->get_current_language(),
2981                          static_cast<bool>(exact_match)));
2982   return expressions;
2983 }
2984
2985 // Attaches b to the end of a, and clears b.  So a = a + b and b = {}.
2986
2987 extern "C" struct Version_expression_list*
2988 script_merge_expressions(struct Version_expression_list* a,
2989                          struct Version_expression_list* b)
2990 {
2991   a->expressions.insert(a->expressions.end(),
2992                         b->expressions.begin(), b->expressions.end());
2993   // We could delete b and remove it from expressions_lists_, but
2994   // that's a lot of work.  This works just as well.
2995   b->expressions.clear();
2996   return a;
2997 }
2998
2999 // Combine the global and local expressions into a a Version_tree.
3000
3001 extern "C" struct Version_tree*
3002 script_new_vers_node(void* closurev,
3003                      struct Version_expression_list* global,
3004                      struct Version_expression_list* local)
3005 {
3006   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3007   Version_tree* tree = closure->version_script()->allocate_version_tree();
3008   tree->global = global;
3009   tree->local = local;
3010   return tree;
3011 }
3012
3013 // Handle a transition in language, such as at the
3014 // start or end of 'extern "C++"'
3015
3016 extern "C" void
3017 version_script_push_lang(void* closurev, const char* lang, int langlen)
3018 {
3019   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3020   std::string language(lang, langlen);
3021   Version_script_info::Language code;
3022   if (language.empty() || language == "C")
3023     code = Version_script_info::LANGUAGE_C;
3024   else if (language == "C++")
3025     code = Version_script_info::LANGUAGE_CXX;
3026   else if (language == "Java")
3027     code = Version_script_info::LANGUAGE_JAVA;
3028   else
3029     {
3030       char* buf = new char[langlen + 100];
3031       snprintf(buf, langlen + 100,
3032                _("unrecognized version script language '%s'"),
3033                language.c_str());
3034       yyerror(closurev, buf);
3035       delete[] buf;
3036       code = Version_script_info::LANGUAGE_C;
3037     }
3038   closure->push_language(code);
3039 }
3040
3041 extern "C" void
3042 version_script_pop_lang(void* closurev)
3043 {
3044   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3045   closure->pop_language();
3046 }
3047
3048 // Called by the bison parser to start a SECTIONS clause.
3049
3050 extern "C" void
3051 script_start_sections(void* closurev)
3052 {
3053   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3054   closure->script_options()->script_sections()->start_sections();
3055   closure->clear_skip_on_incompatible_target();
3056 }
3057
3058 // Called by the bison parser to finish a SECTIONS clause.
3059
3060 extern "C" void
3061 script_finish_sections(void* closurev)
3062 {
3063   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3064   closure->script_options()->script_sections()->finish_sections();
3065 }
3066
3067 // Start processing entries for an output section.
3068
3069 extern "C" void
3070 script_start_output_section(void* closurev, const char* name, size_t namelen,
3071                             const struct Parser_output_section_header* header)
3072 {
3073   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3074   closure->script_options()->script_sections()->start_output_section(name,
3075                                                                      namelen,
3076                                                                      header);
3077 }
3078
3079 // Finish processing entries for an output section.
3080
3081 extern "C" void
3082 script_finish_output_section(void* closurev,
3083                              const struct Parser_output_section_trailer* trail)
3084 {
3085   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3086   closure->script_options()->script_sections()->finish_output_section(trail);
3087 }
3088
3089 // Add a data item (e.g., "WORD (0)") to the current output section.
3090
3091 extern "C" void
3092 script_add_data(void* closurev, int data_token, Expression* val)
3093 {
3094   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3095   int size;
3096   bool is_signed = true;
3097   switch (data_token)
3098     {
3099     case QUAD:
3100       size = 8;
3101       is_signed = false;
3102       break;
3103     case SQUAD:
3104       size = 8;
3105       break;
3106     case LONG:
3107       size = 4;
3108       break;
3109     case SHORT:
3110       size = 2;
3111       break;
3112     case BYTE:
3113       size = 1;
3114       break;
3115     default:
3116       gold_unreachable();
3117     }
3118   closure->script_options()->script_sections()->add_data(size, is_signed, val);
3119 }
3120
3121 // Add a clause setting the fill value to the current output section.
3122
3123 extern "C" void
3124 script_add_fill(void* closurev, Expression* val)
3125 {
3126   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3127   closure->script_options()->script_sections()->add_fill(val);
3128 }
3129
3130 // Add a new input section specification to the current output
3131 // section.
3132
3133 extern "C" void
3134 script_add_input_section(void* closurev,
3135                          const struct Input_section_spec* spec,
3136                          int keepi)
3137 {
3138   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3139   bool keep = keepi != 0;
3140   closure->script_options()->script_sections()->add_input_section(spec, keep);
3141 }
3142
3143 // When we see DATA_SEGMENT_ALIGN we record that following output
3144 // sections may be relro.
3145
3146 extern "C" void
3147 script_data_segment_align(void* closurev)
3148 {
3149   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3150   if (!closure->script_options()->saw_sections_clause())
3151     gold_error(_("%s:%d:%d: DATA_SEGMENT_ALIGN not in SECTIONS clause"),
3152                closure->filename(), closure->lineno(), closure->charpos());
3153   else
3154     closure->script_options()->script_sections()->data_segment_align();
3155 }
3156
3157 // When we see DATA_SEGMENT_RELRO_END we know that all output sections
3158 // since DATA_SEGMENT_ALIGN should be relro.
3159
3160 extern "C" void
3161 script_data_segment_relro_end(void* closurev)
3162 {
3163   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3164   if (!closure->script_options()->saw_sections_clause())
3165     gold_error(_("%s:%d:%d: DATA_SEGMENT_ALIGN not in SECTIONS clause"),
3166                closure->filename(), closure->lineno(), closure->charpos());
3167   else
3168     closure->script_options()->script_sections()->data_segment_relro_end();
3169 }
3170
3171 // Create a new list of string/sort pairs.
3172
3173 extern "C" String_sort_list_ptr
3174 script_new_string_sort_list(const struct Wildcard_section* string_sort)
3175 {
3176   return new String_sort_list(1, *string_sort);
3177 }
3178
3179 // Add an entry to a list of string/sort pairs.  The way the parser
3180 // works permits us to simply modify the first parameter, rather than
3181 // copy the vector.
3182
3183 extern "C" String_sort_list_ptr
3184 script_string_sort_list_add(String_sort_list_ptr pv,
3185                             const struct Wildcard_section* string_sort)
3186 {
3187   if (pv == NULL)
3188     return script_new_string_sort_list(string_sort);
3189   else
3190     {
3191       pv->push_back(*string_sort);
3192       return pv;
3193     }
3194 }
3195
3196 // Create a new list of strings.
3197
3198 extern "C" String_list_ptr
3199 script_new_string_list(const char* str, size_t len)
3200 {
3201   return new String_list(1, std::string(str, len));
3202 }
3203
3204 // Add an element to a list of strings.  The way the parser works
3205 // permits us to simply modify the first parameter, rather than copy
3206 // the vector.
3207
3208 extern "C" String_list_ptr
3209 script_string_list_push_back(String_list_ptr pv, const char* str, size_t len)
3210 {
3211   if (pv == NULL)
3212     return script_new_string_list(str, len);
3213   else
3214     {
3215       pv->push_back(std::string(str, len));
3216       return pv;
3217     }
3218 }
3219
3220 // Concatenate two string lists.  Either or both may be NULL.  The way
3221 // the parser works permits us to modify the parameters, rather than
3222 // copy the vector.
3223
3224 extern "C" String_list_ptr
3225 script_string_list_append(String_list_ptr pv1, String_list_ptr pv2)
3226 {
3227   if (pv1 == NULL)
3228     return pv2;
3229   if (pv2 == NULL)
3230     return pv1;
3231   pv1->insert(pv1->end(), pv2->begin(), pv2->end());
3232   return pv1;
3233 }
3234
3235 // Add a new program header.
3236
3237 extern "C" void
3238 script_add_phdr(void* closurev, const char* name, size_t namelen,
3239                 unsigned int type, const Phdr_info* info)
3240 {
3241   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3242   bool includes_filehdr = info->includes_filehdr != 0;
3243   bool includes_phdrs = info->includes_phdrs != 0;
3244   bool is_flags_valid = info->is_flags_valid != 0;
3245   Script_sections* ss = closure->script_options()->script_sections();
3246   ss->add_phdr(name, namelen, type, includes_filehdr, includes_phdrs,
3247                is_flags_valid, info->flags, info->load_address);
3248   closure->clear_skip_on_incompatible_target();
3249 }
3250
3251 // Convert a program header string to a type.
3252
3253 #define PHDR_TYPE(NAME) { #NAME, sizeof(#NAME) - 1, elfcpp::NAME }
3254
3255 static struct
3256 {
3257   const char* name;
3258   size_t namelen;
3259   unsigned int val;
3260 } phdr_type_names[] =
3261 {
3262   PHDR_TYPE(PT_NULL),
3263   PHDR_TYPE(PT_LOAD),
3264   PHDR_TYPE(PT_DYNAMIC),
3265   PHDR_TYPE(PT_INTERP),
3266   PHDR_TYPE(PT_NOTE),
3267   PHDR_TYPE(PT_SHLIB),
3268   PHDR_TYPE(PT_PHDR),
3269   PHDR_TYPE(PT_TLS),
3270   PHDR_TYPE(PT_GNU_EH_FRAME),
3271   PHDR_TYPE(PT_GNU_STACK),
3272   PHDR_TYPE(PT_GNU_RELRO)
3273 };
3274
3275 extern "C" unsigned int
3276 script_phdr_string_to_type(void* closurev, const char* name, size_t namelen)
3277 {
3278   for (unsigned int i = 0;
3279        i < sizeof(phdr_type_names) / sizeof(phdr_type_names[0]);
3280        ++i)
3281     if (namelen == phdr_type_names[i].namelen
3282         && strncmp(name, phdr_type_names[i].name, namelen) == 0)
3283       return phdr_type_names[i].val;
3284   yyerror(closurev, _("unknown PHDR type (try integer)"));
3285   return elfcpp::PT_NULL;
3286 }
3287
3288 extern "C" void
3289 script_saw_segment_start_expression(void* closurev)
3290 {
3291   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3292   Script_sections* ss = closure->script_options()->script_sections();
3293   ss->set_saw_segment_start_expression(true);
3294 }
3295
3296 extern "C" void
3297 script_set_section_region(void* closurev, const char* name, size_t namelen,
3298                           int set_vma)
3299 {
3300   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3301   if (!closure->script_options()->saw_sections_clause())
3302     {
3303       gold_error(_("%s:%d:%d: MEMORY region '%.*s' referred to outside of "
3304                    "SECTIONS clause"),
3305                  closure->filename(), closure->lineno(), closure->charpos(),
3306                  static_cast<int>(namelen), name);
3307       return;
3308     }
3309
3310   Script_sections* ss = closure->script_options()->script_sections();
3311   Memory_region* mr = ss->find_memory_region(name, namelen);
3312   if (mr == NULL)
3313     {
3314       gold_error(_("%s:%d:%d: MEMORY region '%.*s' not declared"),
3315                  closure->filename(), closure->lineno(), closure->charpos(),
3316                  static_cast<int>(namelen), name);
3317       return;
3318     }
3319
3320   ss->set_memory_region(mr, set_vma);
3321 }
3322
3323 extern "C" void
3324 script_add_memory(void* closurev, const char* name, size_t namelen,
3325                   unsigned int attrs, Expression* origin, Expression* length)
3326 {
3327   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3328   Script_sections* ss = closure->script_options()->script_sections();
3329   ss->add_memory_region(name, namelen, attrs, origin, length);
3330 }
3331
3332 extern "C" unsigned int
3333 script_parse_memory_attr(void* closurev, const char* attrs, size_t attrlen,
3334                          int invert)
3335 {
3336   int attributes = 0;
3337
3338   while (attrlen--)
3339     switch (*attrs++)
3340       {
3341       case 'R':
3342       case 'r':
3343         attributes |= MEM_READABLE; break;
3344       case 'W':
3345       case 'w':
3346         attributes |= MEM_READABLE | MEM_WRITEABLE; break;
3347       case 'X':
3348       case 'x':
3349         attributes |= MEM_EXECUTABLE; break;
3350       case 'A':
3351       case 'a':
3352         attributes |= MEM_ALLOCATABLE; break;
3353       case 'I':
3354       case 'i':
3355       case 'L':
3356       case 'l':
3357         attributes |= MEM_INITIALIZED; break;
3358       default:
3359         yyerror(closurev, _("unknown MEMORY attribute"));
3360       }
3361
3362   if (invert)
3363     attributes = (~ attributes) & MEM_ATTR_MASK;
3364
3365   return attributes;
3366 }
3367
3368 extern "C" void
3369 script_include_directive(void* closurev, const char* filename, size_t length)
3370 {
3371   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3372   std::string name(filename, length);
3373   Command_line* cmdline = closure->command_line();
3374   read_script_file(name.c_str(), cmdline, &cmdline->script_options(),
3375                    PARSING_LINKER_SCRIPT, Lex::LINKER_SCRIPT);
3376 }
3377
3378 // Functions for memory regions.
3379
3380 extern "C" Expression*
3381 script_exp_function_origin(void* closurev, const char* name, size_t namelen)
3382 {
3383   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3384   Script_sections* ss = closure->script_options()->script_sections();
3385   Expression* origin = ss->find_memory_region_origin(name, namelen);
3386
3387   if (origin == NULL)
3388     {
3389       gold_error(_("undefined memory region '%s' referenced "
3390                    "in ORIGIN expression"),
3391                  name);
3392       // Create a dummy expression to prevent crashes later on.
3393       origin = script_exp_integer(0);
3394     }
3395
3396   return origin;
3397 }
3398
3399 extern "C" Expression*
3400 script_exp_function_length(void* closurev, const char* name, size_t namelen)
3401 {
3402   Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3403   Script_sections* ss = closure->script_options()->script_sections();
3404   Expression* length = ss->find_memory_region_length(name, namelen);
3405
3406   if (length == NULL)
3407     {
3408       gold_error(_("undefined memory region '%s' referenced "
3409                    "in LENGTH expression"),
3410                  name);
3411       // Create a dummy expression to prevent crashes later on.
3412       length = script_exp_integer(0);
3413     }
3414
3415   return length;
3416 }