script.cc revision 1.1
1// script.cc -- handle linker scripts for gold.
2
3// Copyright 2006, 2007, 2008, 2009, 2010, 2011 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
48namespace 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
54class 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
170uint64_t
171Token::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
199class 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
368void
369Lex::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
399inline bool
400Lex::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
440inline const char*
441Lex::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
504inline bool
505Lex::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
514inline const char*
515Lex::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
532inline bool
533Lex::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
550inline int
551Lex::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
573inline int
574Lex::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
634inline int
635Lex::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
671bool
672Lex::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
697bool
698Lex::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
719inline Token
720Lex::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
742Token
743Lex::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
760Token
761Lex::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
864const Token*
865Lex::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
899void
900Symbol_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
920void
921Symbol_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
928void
929Symbol_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
939void
940Symbol_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
976template<int size>
977void
978Symbol_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  uint64_t final_val = this->val_->eval_maybe_dot(symtab, layout, true,
984						  is_dot_available,
985						  dot_value, dot_section,
986						  &section, NULL, false);
987  Sized_symbol<size>* ssym = symtab->get_sized_symbol<size>(this->sym_);
988  ssym->set_value(final_val);
989  if (section != NULL)
990    ssym->set_output_section(section);
991}
992
993// Set the symbol value if the expression yields an absolute value or
994// a value relative to DOT_SECTION.
995
996void
997Symbol_assignment::set_if_absolute(Symbol_table* symtab, const Layout* layout,
998				   bool is_dot_available, uint64_t dot_value,
999				   Output_section* dot_section)
1000{
1001  if (this->sym_ == NULL)
1002    return;
1003
1004  Output_section* val_section;
1005  uint64_t val = this->val_->eval_maybe_dot(symtab, layout, false,
1006					    is_dot_available, dot_value,
1007					    dot_section, &val_section, NULL,
1008					    false);
1009  if (val_section != NULL && val_section != dot_section)
1010    return;
1011
1012  if (parameters->target().get_size() == 32)
1013    {
1014#if defined(HAVE_TARGET_32_LITTLE) || defined(HAVE_TARGET_32_BIG)
1015      Sized_symbol<32>* ssym = symtab->get_sized_symbol<32>(this->sym_);
1016      ssym->set_value(val);
1017#else
1018      gold_unreachable();
1019#endif
1020    }
1021  else if (parameters->target().get_size() == 64)
1022    {
1023#if defined(HAVE_TARGET_64_LITTLE) || defined(HAVE_TARGET_64_BIG)
1024      Sized_symbol<64>* ssym = symtab->get_sized_symbol<64>(this->sym_);
1025      ssym->set_value(val);
1026#else
1027      gold_unreachable();
1028#endif
1029    }
1030  else
1031    gold_unreachable();
1032  if (val_section != NULL)
1033    this->sym_->set_output_section(val_section);
1034}
1035
1036// Print for debugging.
1037
1038void
1039Symbol_assignment::print(FILE* f) const
1040{
1041  if (this->provide_ && this->hidden_)
1042    fprintf(f, "PROVIDE_HIDDEN(");
1043  else if (this->provide_)
1044    fprintf(f, "PROVIDE(");
1045  else if (this->hidden_)
1046    gold_unreachable();
1047
1048  fprintf(f, "%s = ", this->name_.c_str());
1049  this->val_->print(f);
1050
1051  if (this->provide_ || this->hidden_)
1052    fprintf(f, ")");
1053
1054  fprintf(f, "\n");
1055}
1056
1057// Class Script_assertion.
1058
1059// Check the assertion.
1060
1061void
1062Script_assertion::check(const Symbol_table* symtab, const Layout* layout)
1063{
1064  if (!this->check_->eval(symtab, layout, true))
1065    gold_error("%s", this->message_.c_str());
1066}
1067
1068// Print for debugging.
1069
1070void
1071Script_assertion::print(FILE* f) const
1072{
1073  fprintf(f, "ASSERT(");
1074  this->check_->print(f);
1075  fprintf(f, ", \"%s\")\n", this->message_.c_str());
1076}
1077
1078// Class Script_options.
1079
1080Script_options::Script_options()
1081  : entry_(), symbol_assignments_(), symbol_definitions_(),
1082    symbol_references_(), version_script_info_(), script_sections_()
1083{
1084}
1085
1086// Returns true if NAME is on the list of symbol assignments waiting
1087// to be processed.
1088
1089bool
1090Script_options::is_pending_assignment(const char* name)
1091{
1092  for (Symbol_assignments::iterator p = this->symbol_assignments_.begin();
1093       p != this->symbol_assignments_.end();
1094       ++p)
1095    if ((*p)->name() == name)
1096      return true;
1097  return false;
1098}
1099
1100// Add a symbol to be defined.
1101
1102void
1103Script_options::add_symbol_assignment(const char* name, size_t length,
1104				      bool is_defsym, Expression* value,
1105				      bool provide, bool hidden)
1106{
1107  if (length != 1 || name[0] != '.')
1108    {
1109      if (this->script_sections_.in_sections_clause())
1110	{
1111	  gold_assert(!is_defsym);
1112	  this->script_sections_.add_symbol_assignment(name, length, value,
1113						       provide, hidden);
1114	}
1115      else
1116	{
1117	  Symbol_assignment* p = new Symbol_assignment(name, length, is_defsym,
1118						       value, provide, hidden);
1119	  this->symbol_assignments_.push_back(p);
1120	}
1121
1122      if (!provide)
1123	{
1124	  std::string n(name, length);
1125	  this->symbol_definitions_.insert(n);
1126	  this->symbol_references_.erase(n);
1127	}
1128    }
1129  else
1130    {
1131      if (provide || hidden)
1132	gold_error(_("invalid use of PROVIDE for dot symbol"));
1133
1134      // The GNU linker permits assignments to dot outside of SECTIONS
1135      // clauses and treats them as occurring inside, so we don't
1136      // check in_sections_clause here.
1137      this->script_sections_.add_dot_assignment(value);
1138    }
1139}
1140
1141// Add a reference to a symbol.
1142
1143void
1144Script_options::add_symbol_reference(const char* name, size_t length)
1145{
1146  if (length != 1 || name[0] != '.')
1147    {
1148      std::string n(name, length);
1149      if (this->symbol_definitions_.find(n) == this->symbol_definitions_.end())
1150	this->symbol_references_.insert(n);
1151    }
1152}
1153
1154// Add an assertion.
1155
1156void
1157Script_options::add_assertion(Expression* check, const char* message,
1158			      size_t messagelen)
1159{
1160  if (this->script_sections_.in_sections_clause())
1161    this->script_sections_.add_assertion(check, message, messagelen);
1162  else
1163    {
1164      Script_assertion* p = new Script_assertion(check, message, messagelen);
1165      this->assertions_.push_back(p);
1166    }
1167}
1168
1169// Create sections required by any linker scripts.
1170
1171void
1172Script_options::create_script_sections(Layout* layout)
1173{
1174  if (this->saw_sections_clause())
1175    this->script_sections_.create_sections(layout);
1176}
1177
1178// Add any symbols we are defining to the symbol table.
1179
1180void
1181Script_options::add_symbols_to_table(Symbol_table* symtab)
1182{
1183  for (Symbol_assignments::iterator p = this->symbol_assignments_.begin();
1184       p != this->symbol_assignments_.end();
1185       ++p)
1186    (*p)->add_to_table(symtab);
1187  this->script_sections_.add_symbols_to_table(symtab);
1188}
1189
1190// Finalize symbol values.  Also check assertions.
1191
1192void
1193Script_options::finalize_symbols(Symbol_table* symtab, const Layout* layout)
1194{
1195  // We finalize the symbols defined in SECTIONS first, because they
1196  // are the ones which may have changed.  This way if symbol outside
1197  // SECTIONS are defined in terms of symbols inside SECTIONS, they
1198  // will get the right value.
1199  this->script_sections_.finalize_symbols(symtab, layout);
1200
1201  for (Symbol_assignments::iterator p = this->symbol_assignments_.begin();
1202       p != this->symbol_assignments_.end();
1203       ++p)
1204    (*p)->finalize(symtab, layout);
1205
1206  for (Assertions::iterator p = this->assertions_.begin();
1207       p != this->assertions_.end();
1208       ++p)
1209    (*p)->check(symtab, layout);
1210}
1211
1212// Set section addresses.  We set all the symbols which have absolute
1213// values.  Then we let the SECTIONS clause do its thing.  This
1214// returns the segment which holds the file header and segment
1215// headers, if any.
1216
1217Output_segment*
1218Script_options::set_section_addresses(Symbol_table* symtab, Layout* layout)
1219{
1220  for (Symbol_assignments::iterator p = this->symbol_assignments_.begin();
1221       p != this->symbol_assignments_.end();
1222       ++p)
1223    (*p)->set_if_absolute(symtab, layout, false, 0, NULL);
1224
1225  return this->script_sections_.set_section_addresses(symtab, layout);
1226}
1227
1228// This class holds data passed through the parser to the lexer and to
1229// the parser support functions.  This avoids global variables.  We
1230// can't use global variables because we need not be called by a
1231// singleton thread.
1232
1233class Parser_closure
1234{
1235 public:
1236  Parser_closure(const char* filename,
1237		 const Position_dependent_options& posdep_options,
1238		 bool parsing_defsym, bool in_group, bool is_in_sysroot,
1239                 Command_line* command_line,
1240		 Script_options* script_options,
1241		 Lex* lex,
1242		 bool skip_on_incompatible_target,
1243		 Script_info* script_info)
1244    : filename_(filename), posdep_options_(posdep_options),
1245      parsing_defsym_(parsing_defsym), in_group_(in_group),
1246      is_in_sysroot_(is_in_sysroot),
1247      skip_on_incompatible_target_(skip_on_incompatible_target),
1248      found_incompatible_target_(false),
1249      command_line_(command_line), script_options_(script_options),
1250      version_script_info_(script_options->version_script_info()),
1251      lex_(lex), lineno_(0), charpos_(0), lex_mode_stack_(), inputs_(NULL),
1252      script_info_(script_info)
1253  {
1254    // We start out processing C symbols in the default lex mode.
1255    this->language_stack_.push_back(Version_script_info::LANGUAGE_C);
1256    this->lex_mode_stack_.push_back(lex->mode());
1257  }
1258
1259  // Return the file name.
1260  const char*
1261  filename() const
1262  { return this->filename_; }
1263
1264  // Return the position dependent options.  The caller may modify
1265  // this.
1266  Position_dependent_options&
1267  position_dependent_options()
1268  { return this->posdep_options_; }
1269
1270  // Whether we are parsing a --defsym.
1271  bool
1272  parsing_defsym() const
1273  { return this->parsing_defsym_; }
1274
1275  // Return whether this script is being run in a group.
1276  bool
1277  in_group() const
1278  { return this->in_group_; }
1279
1280  // Return whether this script was found using a directory in the
1281  // sysroot.
1282  bool
1283  is_in_sysroot() const
1284  { return this->is_in_sysroot_; }
1285
1286  // Whether to skip to the next file with the same name if we find an
1287  // incompatible target in an OUTPUT_FORMAT statement.
1288  bool
1289  skip_on_incompatible_target() const
1290  { return this->skip_on_incompatible_target_; }
1291
1292  // Stop skipping to the next file on an incompatible target.  This
1293  // is called when we make some unrevocable change to the data
1294  // structures.
1295  void
1296  clear_skip_on_incompatible_target()
1297  { this->skip_on_incompatible_target_ = false; }
1298
1299  // Whether we found an incompatible target in an OUTPUT_FORMAT
1300  // statement.
1301  bool
1302  found_incompatible_target() const
1303  { return this->found_incompatible_target_; }
1304
1305  // Note that we found an incompatible target.
1306  void
1307  set_found_incompatible_target()
1308  { this->found_incompatible_target_ = true; }
1309
1310  // Returns the Command_line structure passed in at constructor time.
1311  // This value may be NULL.  The caller may modify this, which modifies
1312  // the passed-in Command_line object (not a copy).
1313  Command_line*
1314  command_line()
1315  { return this->command_line_; }
1316
1317  // Return the options which may be set by a script.
1318  Script_options*
1319  script_options()
1320  { return this->script_options_; }
1321
1322  // Return the object in which version script information should be stored.
1323  Version_script_info*
1324  version_script()
1325  { return this->version_script_info_; }
1326
1327  // Return the next token, and advance.
1328  const Token*
1329  next_token()
1330  {
1331    const Token* token = this->lex_->next_token();
1332    this->lineno_ = token->lineno();
1333    this->charpos_ = token->charpos();
1334    return token;
1335  }
1336
1337  // Set a new lexer mode, pushing the current one.
1338  void
1339  push_lex_mode(Lex::Mode mode)
1340  {
1341    this->lex_mode_stack_.push_back(this->lex_->mode());
1342    this->lex_->set_mode(mode);
1343  }
1344
1345  // Pop the lexer mode.
1346  void
1347  pop_lex_mode()
1348  {
1349    gold_assert(!this->lex_mode_stack_.empty());
1350    this->lex_->set_mode(this->lex_mode_stack_.back());
1351    this->lex_mode_stack_.pop_back();
1352  }
1353
1354  // Return the current lexer mode.
1355  Lex::Mode
1356  lex_mode() const
1357  { return this->lex_mode_stack_.back(); }
1358
1359  // Return the line number of the last token.
1360  int
1361  lineno() const
1362  { return this->lineno_; }
1363
1364  // Return the character position in the line of the last token.
1365  int
1366  charpos() const
1367  { return this->charpos_; }
1368
1369  // Return the list of input files, creating it if necessary.  This
1370  // is a space leak--we never free the INPUTS_ pointer.
1371  Input_arguments*
1372  inputs()
1373  {
1374    if (this->inputs_ == NULL)
1375      this->inputs_ = new Input_arguments();
1376    return this->inputs_;
1377  }
1378
1379  // Return whether we saw any input files.
1380  bool
1381  saw_inputs() const
1382  { return this->inputs_ != NULL && !this->inputs_->empty(); }
1383
1384  // Return the current language being processed in a version script
1385  // (eg, "C++").  The empty string represents unmangled C names.
1386  Version_script_info::Language
1387  get_current_language() const
1388  { return this->language_stack_.back(); }
1389
1390  // Push a language onto the stack when entering an extern block.
1391  void
1392  push_language(Version_script_info::Language lang)
1393  { this->language_stack_.push_back(lang); }
1394
1395  // Pop a language off of the stack when exiting an extern block.
1396  void
1397  pop_language()
1398  {
1399    gold_assert(!this->language_stack_.empty());
1400    this->language_stack_.pop_back();
1401  }
1402
1403  // Return a pointer to the incremental info.
1404  Script_info*
1405  script_info()
1406  { return this->script_info_; }
1407
1408 private:
1409  // The name of the file we are reading.
1410  const char* filename_;
1411  // The position dependent options.
1412  Position_dependent_options posdep_options_;
1413  // True if we are parsing a --defsym.
1414  bool parsing_defsym_;
1415  // Whether we are currently in a --start-group/--end-group.
1416  bool in_group_;
1417  // Whether the script was found in a sysrooted directory.
1418  bool is_in_sysroot_;
1419  // If this is true, then if we find an OUTPUT_FORMAT with an
1420  // incompatible target, then we tell the parser to abort so that we
1421  // can search for the next file with the same name.
1422  bool skip_on_incompatible_target_;
1423  // True if we found an OUTPUT_FORMAT with an incompatible target.
1424  bool found_incompatible_target_;
1425  // May be NULL if the user chooses not to pass one in.
1426  Command_line* command_line_;
1427  // Options which may be set from any linker script.
1428  Script_options* script_options_;
1429  // Information parsed from a version script.
1430  Version_script_info* version_script_info_;
1431  // The lexer.
1432  Lex* lex_;
1433  // The line number of the last token returned by next_token.
1434  int lineno_;
1435  // The column number of the last token returned by next_token.
1436  int charpos_;
1437  // A stack of lexer modes.
1438  std::vector<Lex::Mode> lex_mode_stack_;
1439  // A stack of which extern/language block we're inside. Can be C++,
1440  // java, or empty for C.
1441  std::vector<Version_script_info::Language> language_stack_;
1442  // New input files found to add to the link.
1443  Input_arguments* inputs_;
1444  // Pointer to incremental linking info.
1445  Script_info* script_info_;
1446};
1447
1448// FILE was found as an argument on the command line.  Try to read it
1449// as a script.  Return true if the file was handled.
1450
1451bool
1452read_input_script(Workqueue* workqueue, Symbol_table* symtab, Layout* layout,
1453		  Dirsearch* dirsearch, int dirindex,
1454		  Input_objects* input_objects, Mapfile* mapfile,
1455		  Input_group* input_group,
1456		  const Input_argument* input_argument,
1457		  Input_file* input_file, Task_token* next_blocker,
1458		  bool* used_next_blocker)
1459{
1460  *used_next_blocker = false;
1461
1462  std::string input_string;
1463  Lex::read_file(input_file, &input_string);
1464
1465  Lex lex(input_string.c_str(), input_string.length(), PARSING_LINKER_SCRIPT);
1466
1467  Script_info* script_info = NULL;
1468  if (layout->incremental_inputs() != NULL)
1469    {
1470      const std::string& filename = input_file->filename();
1471      Timespec mtime = input_file->file().get_mtime();
1472      unsigned int arg_serial = input_argument->file().arg_serial();
1473      script_info = new Script_info(filename);
1474      layout->incremental_inputs()->report_script(script_info, arg_serial,
1475						  mtime);
1476    }
1477
1478  Parser_closure closure(input_file->filename().c_str(),
1479			 input_argument->file().options(),
1480			 false,
1481			 input_group != NULL,
1482			 input_file->is_in_sysroot(),
1483                         NULL,
1484			 layout->script_options(),
1485			 &lex,
1486			 input_file->will_search_for(),
1487			 script_info);
1488
1489  bool old_saw_sections_clause =
1490    layout->script_options()->saw_sections_clause();
1491
1492  if (yyparse(&closure) != 0)
1493    {
1494      if (closure.found_incompatible_target())
1495	{
1496	  Read_symbols::incompatible_warning(input_argument, input_file);
1497	  Read_symbols::requeue(workqueue, input_objects, symtab, layout,
1498				dirsearch, dirindex, mapfile, input_argument,
1499				input_group, next_blocker);
1500	  return true;
1501	}
1502      return false;
1503    }
1504
1505  if (!old_saw_sections_clause
1506      && layout->script_options()->saw_sections_clause()
1507      && layout->have_added_input_section())
1508    gold_error(_("%s: SECTIONS seen after other input files; try -T/--script"),
1509	       input_file->filename().c_str());
1510
1511  if (!closure.saw_inputs())
1512    return true;
1513
1514  Task_token* this_blocker = NULL;
1515  for (Input_arguments::const_iterator p = closure.inputs()->begin();
1516       p != closure.inputs()->end();
1517       ++p)
1518    {
1519      Task_token* nb;
1520      if (p + 1 == closure.inputs()->end())
1521	nb = next_blocker;
1522      else
1523	{
1524	  nb = new Task_token(true);
1525	  nb->add_blocker();
1526	}
1527      workqueue->queue_soon(new Read_symbols(input_objects, symtab,
1528					     layout, dirsearch, 0, mapfile, &*p,
1529					     input_group, NULL, this_blocker, nb));
1530      this_blocker = nb;
1531    }
1532
1533  *used_next_blocker = true;
1534
1535  return true;
1536}
1537
1538// Helper function for read_version_script(), read_commandline_script() and
1539// script_include_directive().  Processes the given file in the mode indicated
1540// by first_token and lex_mode.
1541
1542static bool
1543read_script_file(const char* filename, Command_line* cmdline,
1544                 Script_options* script_options,
1545                 int first_token, Lex::Mode lex_mode)
1546{
1547  Dirsearch dirsearch;
1548  std::string name = filename;
1549
1550  // If filename is a relative filename, search for it manually using "." +
1551  // cmdline->options()->library_path() -- not dirsearch.
1552  if (!IS_ABSOLUTE_PATH(filename))
1553    {
1554      const General_options::Dir_list& search_path =
1555          cmdline->options().library_path();
1556      name = Dirsearch::find_file_in_dir_list(name, search_path, ".");
1557    }
1558
1559  // The file locking code wants to record a Task, but we haven't
1560  // started the workqueue yet.  This is only for debugging purposes,
1561  // so we invent a fake value.
1562  const Task* task = reinterpret_cast<const Task*>(-1);
1563
1564  // We don't want this file to be opened in binary mode.
1565  Position_dependent_options posdep = cmdline->position_dependent_options();
1566  if (posdep.format_enum() == General_options::OBJECT_FORMAT_BINARY)
1567    posdep.set_format_enum(General_options::OBJECT_FORMAT_ELF);
1568  Input_file_argument input_argument(name.c_str(),
1569				     Input_file_argument::INPUT_FILE_TYPE_FILE,
1570				     "", false, posdep);
1571  Input_file input_file(&input_argument);
1572  int dummy = 0;
1573  if (!input_file.open(dirsearch, task, &dummy))
1574    return false;
1575
1576  std::string input_string;
1577  Lex::read_file(&input_file, &input_string);
1578
1579  Lex lex(input_string.c_str(), input_string.length(), first_token);
1580  lex.set_mode(lex_mode);
1581
1582  Parser_closure closure(filename,
1583			 cmdline->position_dependent_options(),
1584			 first_token == Lex::DYNAMIC_LIST,
1585			 false,
1586			 input_file.is_in_sysroot(),
1587                         cmdline,
1588			 script_options,
1589			 &lex,
1590			 false,
1591			 NULL);
1592  if (yyparse(&closure) != 0)
1593    {
1594      input_file.file().unlock(task);
1595      return false;
1596    }
1597
1598  input_file.file().unlock(task);
1599
1600  gold_assert(!closure.saw_inputs());
1601
1602  return true;
1603}
1604
1605// FILENAME was found as an argument to --script (-T).
1606// Read it as a script, and execute its contents immediately.
1607
1608bool
1609read_commandline_script(const char* filename, Command_line* cmdline)
1610{
1611  return read_script_file(filename, cmdline, &cmdline->script_options(),
1612                          PARSING_LINKER_SCRIPT, Lex::LINKER_SCRIPT);
1613}
1614
1615// FILENAME was found as an argument to --version-script.  Read it as
1616// a version script, and store its contents in
1617// cmdline->script_options()->version_script_info().
1618
1619bool
1620read_version_script(const char* filename, Command_line* cmdline)
1621{
1622  return read_script_file(filename, cmdline, &cmdline->script_options(),
1623                          PARSING_VERSION_SCRIPT, Lex::VERSION_SCRIPT);
1624}
1625
1626// FILENAME was found as an argument to --dynamic-list.  Read it as a
1627// list of symbols, and store its contents in DYNAMIC_LIST.
1628
1629bool
1630read_dynamic_list(const char* filename, Command_line* cmdline,
1631                  Script_options* dynamic_list)
1632{
1633  return read_script_file(filename, cmdline, dynamic_list,
1634                          PARSING_DYNAMIC_LIST, Lex::DYNAMIC_LIST);
1635}
1636
1637// Implement the --defsym option on the command line.  Return true if
1638// all is well.
1639
1640bool
1641Script_options::define_symbol(const char* definition)
1642{
1643  Lex lex(definition, strlen(definition), PARSING_DEFSYM);
1644  lex.set_mode(Lex::EXPRESSION);
1645
1646  // Dummy value.
1647  Position_dependent_options posdep_options;
1648
1649  Parser_closure closure("command line", posdep_options, true,
1650			 false, false, NULL, this, &lex, false, NULL);
1651
1652  if (yyparse(&closure) != 0)
1653    return false;
1654
1655  gold_assert(!closure.saw_inputs());
1656
1657  return true;
1658}
1659
1660// Print the script to F for debugging.
1661
1662void
1663Script_options::print(FILE* f) const
1664{
1665  fprintf(f, "%s: Dumping linker script\n", program_name);
1666
1667  if (!this->entry_.empty())
1668    fprintf(f, "ENTRY(%s)\n", this->entry_.c_str());
1669
1670  for (Symbol_assignments::const_iterator p =
1671	 this->symbol_assignments_.begin();
1672       p != this->symbol_assignments_.end();
1673       ++p)
1674    (*p)->print(f);
1675
1676  for (Assertions::const_iterator p = this->assertions_.begin();
1677       p != this->assertions_.end();
1678       ++p)
1679    (*p)->print(f);
1680
1681  this->script_sections_.print(f);
1682
1683  this->version_script_info_.print(f);
1684}
1685
1686// Manage mapping from keywords to the codes expected by the bison
1687// parser.  We construct one global object for each lex mode with
1688// keywords.
1689
1690class Keyword_to_parsecode
1691{
1692 public:
1693  // The structure which maps keywords to parsecodes.
1694  struct Keyword_parsecode
1695  {
1696    // Keyword.
1697    const char* keyword;
1698    // Corresponding parsecode.
1699    int parsecode;
1700  };
1701
1702  Keyword_to_parsecode(const Keyword_parsecode* keywords,
1703                       int keyword_count)
1704      : keyword_parsecodes_(keywords), keyword_count_(keyword_count)
1705  { }
1706
1707  // Return the parsecode corresponding KEYWORD, or 0 if it is not a
1708  // keyword.
1709  int
1710  keyword_to_parsecode(const char* keyword, size_t len) const;
1711
1712 private:
1713  const Keyword_parsecode* keyword_parsecodes_;
1714  const int keyword_count_;
1715};
1716
1717// Mapping from keyword string to keyword parsecode.  This array must
1718// be kept in sorted order.  Parsecodes are looked up using bsearch.
1719// This array must correspond to the list of parsecodes in yyscript.y.
1720
1721static const Keyword_to_parsecode::Keyword_parsecode
1722script_keyword_parsecodes[] =
1723{
1724  { "ABSOLUTE", ABSOLUTE },
1725  { "ADDR", ADDR },
1726  { "ALIGN", ALIGN_K },
1727  { "ALIGNOF", ALIGNOF },
1728  { "ASSERT", ASSERT_K },
1729  { "AS_NEEDED", AS_NEEDED },
1730  { "AT", AT },
1731  { "BIND", BIND },
1732  { "BLOCK", BLOCK },
1733  { "BYTE", BYTE },
1734  { "CONSTANT", CONSTANT },
1735  { "CONSTRUCTORS", CONSTRUCTORS },
1736  { "COPY", COPY },
1737  { "CREATE_OBJECT_SYMBOLS", CREATE_OBJECT_SYMBOLS },
1738  { "DATA_SEGMENT_ALIGN", DATA_SEGMENT_ALIGN },
1739  { "DATA_SEGMENT_END", DATA_SEGMENT_END },
1740  { "DATA_SEGMENT_RELRO_END", DATA_SEGMENT_RELRO_END },
1741  { "DEFINED", DEFINED },
1742  { "DSECT", DSECT },
1743  { "ENTRY", ENTRY },
1744  { "EXCLUDE_FILE", EXCLUDE_FILE },
1745  { "EXTERN", EXTERN },
1746  { "FILL", FILL },
1747  { "FLOAT", FLOAT },
1748  { "FORCE_COMMON_ALLOCATION", FORCE_COMMON_ALLOCATION },
1749  { "GROUP", GROUP },
1750  { "HLL", HLL },
1751  { "INCLUDE", INCLUDE },
1752  { "INFO", INFO },
1753  { "INHIBIT_COMMON_ALLOCATION", INHIBIT_COMMON_ALLOCATION },
1754  { "INPUT", INPUT },
1755  { "KEEP", KEEP },
1756  { "LENGTH", LENGTH },
1757  { "LOADADDR", LOADADDR },
1758  { "LONG", LONG },
1759  { "MAP", MAP },
1760  { "MAX", MAX_K },
1761  { "MEMORY", MEMORY },
1762  { "MIN", MIN_K },
1763  { "NEXT", NEXT },
1764  { "NOCROSSREFS", NOCROSSREFS },
1765  { "NOFLOAT", NOFLOAT },
1766  { "NOLOAD", NOLOAD },
1767  { "ONLY_IF_RO", ONLY_IF_RO },
1768  { "ONLY_IF_RW", ONLY_IF_RW },
1769  { "OPTION", OPTION },
1770  { "ORIGIN", ORIGIN },
1771  { "OUTPUT", OUTPUT },
1772  { "OUTPUT_ARCH", OUTPUT_ARCH },
1773  { "OUTPUT_FORMAT", OUTPUT_FORMAT },
1774  { "OVERLAY", OVERLAY },
1775  { "PHDRS", PHDRS },
1776  { "PROVIDE", PROVIDE },
1777  { "PROVIDE_HIDDEN", PROVIDE_HIDDEN },
1778  { "QUAD", QUAD },
1779  { "SEARCH_DIR", SEARCH_DIR },
1780  { "SECTIONS", SECTIONS },
1781  { "SEGMENT_START", SEGMENT_START },
1782  { "SHORT", SHORT },
1783  { "SIZEOF", SIZEOF },
1784  { "SIZEOF_HEADERS", SIZEOF_HEADERS },
1785  { "SORT", SORT_BY_NAME },
1786  { "SORT_BY_ALIGNMENT", SORT_BY_ALIGNMENT },
1787  { "SORT_BY_NAME", SORT_BY_NAME },
1788  { "SPECIAL", SPECIAL },
1789  { "SQUAD", SQUAD },
1790  { "STARTUP", STARTUP },
1791  { "SUBALIGN", SUBALIGN },
1792  { "SYSLIB", SYSLIB },
1793  { "TARGET", TARGET_K },
1794  { "TRUNCATE", TRUNCATE },
1795  { "VERSION", VERSIONK },
1796  { "global", GLOBAL },
1797  { "l", LENGTH },
1798  { "len", LENGTH },
1799  { "local", LOCAL },
1800  { "o", ORIGIN },
1801  { "org", ORIGIN },
1802  { "sizeof_headers", SIZEOF_HEADERS },
1803};
1804
1805static const Keyword_to_parsecode
1806script_keywords(&script_keyword_parsecodes[0],
1807                (sizeof(script_keyword_parsecodes)
1808                 / sizeof(script_keyword_parsecodes[0])));
1809
1810static const Keyword_to_parsecode::Keyword_parsecode
1811version_script_keyword_parsecodes[] =
1812{
1813  { "extern", EXTERN },
1814  { "global", GLOBAL },
1815  { "local", LOCAL },
1816};
1817
1818static const Keyword_to_parsecode
1819version_script_keywords(&version_script_keyword_parsecodes[0],
1820                        (sizeof(version_script_keyword_parsecodes)
1821                         / sizeof(version_script_keyword_parsecodes[0])));
1822
1823static const Keyword_to_parsecode::Keyword_parsecode
1824dynamic_list_keyword_parsecodes[] =
1825{
1826  { "extern", EXTERN },
1827};
1828
1829static const Keyword_to_parsecode
1830dynamic_list_keywords(&dynamic_list_keyword_parsecodes[0],
1831                      (sizeof(dynamic_list_keyword_parsecodes)
1832                       / sizeof(dynamic_list_keyword_parsecodes[0])));
1833
1834
1835
1836// Comparison function passed to bsearch.
1837
1838extern "C"
1839{
1840
1841struct Ktt_key
1842{
1843  const char* str;
1844  size_t len;
1845};
1846
1847static int
1848ktt_compare(const void* keyv, const void* kttv)
1849{
1850  const Ktt_key* key = static_cast<const Ktt_key*>(keyv);
1851  const Keyword_to_parsecode::Keyword_parsecode* ktt =
1852    static_cast<const Keyword_to_parsecode::Keyword_parsecode*>(kttv);
1853  int i = strncmp(key->str, ktt->keyword, key->len);
1854  if (i != 0)
1855    return i;
1856  if (ktt->keyword[key->len] != '\0')
1857    return -1;
1858  return 0;
1859}
1860
1861} // End extern "C".
1862
1863int
1864Keyword_to_parsecode::keyword_to_parsecode(const char* keyword,
1865                                           size_t len) const
1866{
1867  Ktt_key key;
1868  key.str = keyword;
1869  key.len = len;
1870  void* kttv = bsearch(&key,
1871                       this->keyword_parsecodes_,
1872                       this->keyword_count_,
1873                       sizeof(this->keyword_parsecodes_[0]),
1874                       ktt_compare);
1875  if (kttv == NULL)
1876    return 0;
1877  Keyword_parsecode* ktt = static_cast<Keyword_parsecode*>(kttv);
1878  return ktt->parsecode;
1879}
1880
1881// The following structs are used within the VersionInfo class as well
1882// as in the bison helper functions.  They store the information
1883// parsed from the version script.
1884
1885// A single version expression.
1886// For example, pattern="std::map*" and language="C++".
1887struct Version_expression
1888{
1889  Version_expression(const std::string& a_pattern,
1890		     Version_script_info::Language a_language,
1891                     bool a_exact_match)
1892    : pattern(a_pattern), language(a_language), exact_match(a_exact_match),
1893      was_matched_by_symbol(false)
1894  { }
1895
1896  std::string pattern;
1897  Version_script_info::Language language;
1898  // If false, we use glob() to match pattern.  If true, we use strcmp().
1899  bool exact_match;
1900  // True if --no-undefined-version is in effect and we found this
1901  // version in get_symbol_version.  We use mutable because this
1902  // struct is generally not modifiable after it has been created.
1903  mutable bool was_matched_by_symbol;
1904};
1905
1906// A list of expressions.
1907struct Version_expression_list
1908{
1909  std::vector<struct Version_expression> expressions;
1910};
1911
1912// A list of which versions upon which another version depends.
1913// Strings should be from the Stringpool.
1914struct Version_dependency_list
1915{
1916  std::vector<std::string> dependencies;
1917};
1918
1919// The total definition of a version.  It includes the tag for the
1920// version, its global and local expressions, and any dependencies.
1921struct Version_tree
1922{
1923  Version_tree()
1924      : tag(), global(NULL), local(NULL), dependencies(NULL)
1925  { }
1926
1927  std::string tag;
1928  const struct Version_expression_list* global;
1929  const struct Version_expression_list* local;
1930  const struct Version_dependency_list* dependencies;
1931};
1932
1933// Helper class that calls cplus_demangle when needed and takes care of freeing
1934// the result.
1935
1936class Lazy_demangler
1937{
1938 public:
1939  Lazy_demangler(const char* symbol, int options)
1940    : symbol_(symbol), options_(options), demangled_(NULL), did_demangle_(false)
1941  { }
1942
1943  ~Lazy_demangler()
1944  { free(this->demangled_); }
1945
1946  // Return the demangled name. The actual demangling happens on the first call,
1947  // and the result is later cached.
1948  inline char*
1949  get();
1950
1951 private:
1952  // The symbol to demangle.
1953  const char* symbol_;
1954  // Option flags to pass to cplus_demagle.
1955  const int options_;
1956  // The cached demangled value, or NULL if demangling didn't happen yet or
1957  // failed.
1958  char* demangled_;
1959  // Whether we already called cplus_demangle
1960  bool did_demangle_;
1961};
1962
1963// Return the demangled name. The actual demangling happens on the first call,
1964// and the result is later cached. Returns NULL if the symbol cannot be
1965// demangled.
1966
1967inline char*
1968Lazy_demangler::get()
1969{
1970  if (!this->did_demangle_)
1971    {
1972      this->demangled_ = cplus_demangle(this->symbol_, this->options_);
1973      this->did_demangle_ = true;
1974    }
1975  return this->demangled_;
1976}
1977
1978// Class Version_script_info.
1979
1980Version_script_info::Version_script_info()
1981  : dependency_lists_(), expression_lists_(), version_trees_(), globs_(),
1982    default_version_(NULL), default_is_global_(false), is_finalized_(false)
1983{
1984  for (int i = 0; i < LANGUAGE_COUNT; ++i)
1985    this->exact_[i] = NULL;
1986}
1987
1988Version_script_info::~Version_script_info()
1989{
1990}
1991
1992// Forget all the known version script information.
1993
1994void
1995Version_script_info::clear()
1996{
1997  for (size_t k = 0; k < this->dependency_lists_.size(); ++k)
1998    delete this->dependency_lists_[k];
1999  this->dependency_lists_.clear();
2000  for (size_t k = 0; k < this->version_trees_.size(); ++k)
2001    delete this->version_trees_[k];
2002  this->version_trees_.clear();
2003  for (size_t k = 0; k < this->expression_lists_.size(); ++k)
2004    delete this->expression_lists_[k];
2005  this->expression_lists_.clear();
2006}
2007
2008// Finalize the version script information.
2009
2010void
2011Version_script_info::finalize()
2012{
2013  if (!this->is_finalized_)
2014    {
2015      this->build_lookup_tables();
2016      this->is_finalized_ = true;
2017    }
2018}
2019
2020// Return all the versions.
2021
2022std::vector<std::string>
2023Version_script_info::get_versions() const
2024{
2025  std::vector<std::string> ret;
2026  for (size_t j = 0; j < this->version_trees_.size(); ++j)
2027    if (!this->version_trees_[j]->tag.empty())
2028      ret.push_back(this->version_trees_[j]->tag);
2029  return ret;
2030}
2031
2032// Return the dependencies of VERSION.
2033
2034std::vector<std::string>
2035Version_script_info::get_dependencies(const char* version) const
2036{
2037  std::vector<std::string> ret;
2038  for (size_t j = 0; j < this->version_trees_.size(); ++j)
2039    if (this->version_trees_[j]->tag == version)
2040      {
2041        const struct Version_dependency_list* deps =
2042          this->version_trees_[j]->dependencies;
2043        if (deps != NULL)
2044          for (size_t k = 0; k < deps->dependencies.size(); ++k)
2045            ret.push_back(deps->dependencies[k]);
2046        return ret;
2047      }
2048  return ret;
2049}
2050
2051// A version script essentially maps a symbol name to a version tag
2052// and an indication of whether symbol is global or local within that
2053// version tag.  Each symbol maps to at most one version tag.
2054// Unfortunately, in practice, version scripts are ambiguous, and list
2055// symbols multiple times.  Thus, we have to document the matching
2056// process.
2057
2058// This is a description of what the GNU linker does as of 2010-01-11.
2059// It walks through the version tags in the order in which they appear
2060// in the version script.  For each tag, it first walks through the
2061// global patterns for that tag, then the local patterns.  When
2062// looking at a single pattern, it first applies any language specific
2063// demangling as specified for the pattern, and then matches the
2064// resulting symbol name to the pattern.  If it finds an exact match
2065// for a literal pattern (a pattern enclosed in quotes or with no
2066// wildcard characters), then that is the match that it uses.  If
2067// finds a match with a wildcard pattern, then it saves it and
2068// continues searching.  Wildcard patterns that are exactly "*" are
2069// saved separately.
2070
2071// If no exact match with a literal pattern is ever found, then if a
2072// wildcard match with a global pattern was found it is used,
2073// otherwise if a wildcard match with a local pattern was found it is
2074// used.
2075
2076// This is the result:
2077//   * If there is an exact match, then we use the first tag in the
2078//     version script where it matches.
2079//     + If the exact match in that tag is global, it is used.
2080//     + Otherwise the exact match in that tag is local, and is used.
2081//   * Otherwise, if there is any match with a global wildcard pattern:
2082//     + If there is any match with a wildcard pattern which is not
2083//       "*", then we use the tag in which the *last* such pattern
2084//       appears.
2085//     + Otherwise, we matched "*".  If there is no match with a local
2086//       wildcard pattern which is not "*", then we use the *last*
2087//       match with a global "*".  Otherwise, continue.
2088//   * Otherwise, if there is any match with a local 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 "*", and we use the tag in which the
2093//       *last* such match occurred.
2094
2095// There is an additional wrinkle.  When the GNU linker finds a symbol
2096// with a version defined in an object file due to a .symver
2097// directive, it looks up that symbol name in that version tag.  If it
2098// finds it, it matches the symbol name against the patterns for that
2099// version.  If there is no match with a global pattern, but there is
2100// a match with a local pattern, then the GNU linker marks the symbol
2101// as local.
2102
2103// We want gold to be generally compatible, but we also want gold to
2104// be fast.  These are the rules that gold implements:
2105//   * If there is an exact match for the mangled name, we use it.
2106//     + If there is more than one exact match, we give a warning, and
2107//       we use the first tag in the script which matches.
2108//     + If a symbol has an exact match as both global and local for
2109//       the same version tag, we give an error.
2110//   * Otherwise, we look for an extern C++ or an extern Java exact
2111//     match.  If we find an exact match, we use it.
2112//     + If there is more than one exact match, we give a warning, and
2113//       we use the first tag in the script which matches.
2114//     + If a symbol has an exact match as both global and local for
2115//       the same version tag, we give an error.
2116//   * Otherwise, we look through the wildcard patterns, ignoring "*"
2117//     patterns.  We look through the version tags in reverse order.
2118//     For each version tag, we look through the global patterns and
2119//     then the local patterns.  We use the first match we find (i.e.,
2120//     the last matching version tag in the file).
2121//   * Otherwise, we use the "*" pattern if there is one.  We give an
2122//     error if there are multiple "*" patterns.
2123
2124// At least for now, gold does not look up the version tag for a
2125// symbol version found in an object file to see if it should be
2126// forced local.  There are other ways to force a symbol to be local,
2127// and I don't understand why this one is useful.
2128
2129// Build a set of fast lookup tables for a version script.
2130
2131void
2132Version_script_info::build_lookup_tables()
2133{
2134  size_t size = this->version_trees_.size();
2135  for (size_t j = 0; j < size; ++j)
2136    {
2137      const Version_tree* v = this->version_trees_[j];
2138      this->build_expression_list_lookup(v->local, v, false);
2139      this->build_expression_list_lookup(v->global, v, true);
2140    }
2141}
2142
2143// If a pattern has backlashes but no unquoted wildcard characters,
2144// then we apply backslash unquoting and look for an exact match.
2145// Otherwise we treat it as a wildcard pattern.  This function returns
2146// true for a wildcard pattern.  Otherwise, it does backslash
2147// unquoting on *PATTERN and returns false.  If this returns true,
2148// *PATTERN may have been partially unquoted.
2149
2150bool
2151Version_script_info::unquote(std::string* pattern) const
2152{
2153  bool saw_backslash = false;
2154  size_t len = pattern->length();
2155  size_t j = 0;
2156  for (size_t i = 0; i < len; ++i)
2157    {
2158      if (saw_backslash)
2159	saw_backslash = false;
2160      else
2161	{
2162	  switch ((*pattern)[i])
2163	    {
2164	    case '?': case '[': case '*':
2165	      return true;
2166	    case '\\':
2167	      saw_backslash = true;
2168	      continue;
2169	    default:
2170	      break;
2171	    }
2172	}
2173
2174      if (i != j)
2175	(*pattern)[j] = (*pattern)[i];
2176      ++j;
2177    }
2178  return false;
2179}
2180
2181// Add an exact match for MATCH to *PE.  The result of the match is
2182// V/IS_GLOBAL.
2183
2184void
2185Version_script_info::add_exact_match(const std::string& match,
2186				     const Version_tree* v, bool is_global,
2187				     const Version_expression* ve,
2188				     Exact* pe)
2189{
2190  std::pair<Exact::iterator, bool> ins =
2191    pe->insert(std::make_pair(match, Version_tree_match(v, is_global, ve)));
2192  if (ins.second)
2193    {
2194      // This is the first time we have seen this match.
2195      return;
2196    }
2197
2198  Version_tree_match& vtm(ins.first->second);
2199  if (vtm.real->tag != v->tag)
2200    {
2201      // This is an ambiguous match.  We still return the
2202      // first version that we found in the script, but we
2203      // record the new version to issue a warning if we
2204      // wind up looking up this symbol.
2205      if (vtm.ambiguous == NULL)
2206	vtm.ambiguous = v;
2207    }
2208  else if (is_global != vtm.is_global)
2209    {
2210      // We have a match for both the global and local entries for a
2211      // version tag.  That's got to be wrong.
2212      gold_error(_("'%s' appears as both a global and a local symbol "
2213		   "for version '%s' in script"),
2214		 match.c_str(), v->tag.c_str());
2215    }
2216}
2217
2218// Build fast lookup information for EXPLIST and store it in LOOKUP.
2219// All matches go to V, and IS_GLOBAL is true if they are global
2220// matches.
2221
2222void
2223Version_script_info::build_expression_list_lookup(
2224    const Version_expression_list* explist,
2225    const Version_tree* v,
2226    bool is_global)
2227{
2228  if (explist == NULL)
2229    return;
2230  size_t size = explist->expressions.size();
2231  for (size_t i = 0; i < size; ++i)
2232    {
2233      const Version_expression& exp(explist->expressions[i]);
2234
2235      if (exp.pattern.length() == 1 && exp.pattern[0] == '*')
2236	{
2237	  if (this->default_version_ != NULL
2238	      && this->default_version_->tag != v->tag)
2239	    gold_warning(_("wildcard match appears in both version '%s' "
2240			   "and '%s' in script"),
2241			 this->default_version_->tag.c_str(), v->tag.c_str());
2242	  else if (this->default_version_ != NULL
2243		   && this->default_is_global_ != is_global)
2244	    gold_error(_("wildcard match appears as both global and local "
2245			 "in version '%s' in script"),
2246		       v->tag.c_str());
2247	  this->default_version_ = v;
2248	  this->default_is_global_ = is_global;
2249	  continue;
2250	}
2251
2252      std::string pattern = exp.pattern;
2253      if (!exp.exact_match)
2254	{
2255	  if (this->unquote(&pattern))
2256	    {
2257	      this->globs_.push_back(Glob(&exp, v, is_global));
2258	      continue;
2259	    }
2260	}
2261
2262      if (this->exact_[exp.language] == NULL)
2263	this->exact_[exp.language] = new Exact();
2264      this->add_exact_match(pattern, v, is_global, &exp,
2265			    this->exact_[exp.language]);
2266    }
2267}
2268
2269// Return the name to match given a name, a language code, and two
2270// lazy demanglers.
2271
2272const char*
2273Version_script_info::get_name_to_match(const char* name,
2274				       int language,
2275				       Lazy_demangler* cpp_demangler,
2276				       Lazy_demangler* java_demangler) const
2277{
2278  switch (language)
2279    {
2280    case LANGUAGE_C:
2281      return name;
2282    case LANGUAGE_CXX:
2283      return cpp_demangler->get();
2284    case LANGUAGE_JAVA:
2285      return java_demangler->get();
2286    default:
2287      gold_unreachable();
2288    }
2289}
2290
2291// Look up SYMBOL_NAME in the list of versions.  Return true if the
2292// symbol is found, false if not.  If the symbol is found, then if
2293// PVERSION is not NULL, set *PVERSION to the version tag, and if
2294// P_IS_GLOBAL is not NULL, set *P_IS_GLOBAL according to whether the
2295// symbol is global or not.
2296
2297bool
2298Version_script_info::get_symbol_version(const char* symbol_name,
2299					std::string* pversion,
2300					bool* p_is_global) const
2301{
2302  Lazy_demangler cpp_demangled_name(symbol_name, DMGL_ANSI | DMGL_PARAMS);
2303  Lazy_demangler java_demangled_name(symbol_name,
2304				     DMGL_ANSI | DMGL_PARAMS | DMGL_JAVA);
2305
2306  gold_assert(this->is_finalized_);
2307  for (int i = 0; i < LANGUAGE_COUNT; ++i)
2308    {
2309      Exact* exact = this->exact_[i];
2310      if (exact == NULL)
2311	continue;
2312
2313      const char* name_to_match = this->get_name_to_match(symbol_name, i,
2314							  &cpp_demangled_name,
2315							  &java_demangled_name);
2316      if (name_to_match == NULL)
2317	{
2318	  // If the name can not be demangled, the GNU linker goes
2319	  // ahead and tries to match it anyhow.  That does not
2320	  // make sense to me and I have not implemented it.
2321	  continue;
2322	}
2323
2324      Exact::const_iterator pe = exact->find(name_to_match);
2325      if (pe != exact->end())
2326	{
2327	  const Version_tree_match& vtm(pe->second);
2328	  if (vtm.ambiguous != NULL)
2329	    gold_warning(_("using '%s' as version for '%s' which is also "
2330			   "named in version '%s' in script"),
2331			 vtm.real->tag.c_str(), name_to_match,
2332			 vtm.ambiguous->tag.c_str());
2333
2334	  if (pversion != NULL)
2335	    *pversion = vtm.real->tag;
2336	  if (p_is_global != NULL)
2337	    *p_is_global = vtm.is_global;
2338
2339	  // If we are using --no-undefined-version, and this is a
2340	  // global symbol, we have to record that we have found this
2341	  // symbol, so that we don't warn about it.  We have to do
2342	  // this now, because otherwise we have no way to get from a
2343	  // non-C language back to the demangled name that we
2344	  // matched.
2345	  if (p_is_global != NULL && vtm.is_global)
2346	    vtm.expression->was_matched_by_symbol = true;
2347
2348	  return true;
2349	}
2350    }
2351
2352  // Look through the glob patterns in reverse order.
2353
2354  for (Globs::const_reverse_iterator p = this->globs_.rbegin();
2355       p != this->globs_.rend();
2356       ++p)
2357    {
2358      int language = p->expression->language;
2359      const char* name_to_match = this->get_name_to_match(symbol_name,
2360							  language,
2361							  &cpp_demangled_name,
2362							  &java_demangled_name);
2363      if (name_to_match == NULL)
2364	continue;
2365
2366      if (fnmatch(p->expression->pattern.c_str(), name_to_match,
2367		  FNM_NOESCAPE) == 0)
2368	{
2369	  if (pversion != NULL)
2370	    *pversion = p->version->tag;
2371	  if (p_is_global != NULL)
2372	    *p_is_global = p->is_global;
2373	  return true;
2374	}
2375    }
2376
2377  // Finally, there may be a wildcard.
2378  if (this->default_version_ != NULL)
2379    {
2380      if (pversion != NULL)
2381	*pversion = this->default_version_->tag;
2382      if (p_is_global != NULL)
2383	*p_is_global = this->default_is_global_;
2384      return true;
2385    }
2386
2387  return false;
2388}
2389
2390// Give an error if any exact symbol names (not wildcards) appear in a
2391// version script, but there is no such symbol.
2392
2393void
2394Version_script_info::check_unmatched_names(const Symbol_table* symtab) const
2395{
2396  for (size_t i = 0; i < this->version_trees_.size(); ++i)
2397    {
2398      const Version_tree* vt = this->version_trees_[i];
2399      if (vt->global == NULL)
2400	continue;
2401      for (size_t j = 0; j < vt->global->expressions.size(); ++j)
2402	{
2403	  const Version_expression& expression(vt->global->expressions[j]);
2404
2405	  // Ignore cases where we used the version because we saw a
2406	  // symbol that we looked up.  Note that
2407	  // WAS_MATCHED_BY_SYMBOL will be true even if the symbol was
2408	  // not a definition.  That's OK as in that case we most
2409	  // likely gave an undefined symbol error anyhow.
2410	  if (expression.was_matched_by_symbol)
2411	    continue;
2412
2413	  // Just ignore names which are in languages other than C.
2414	  // We have no way to look them up in the symbol table.
2415	  if (expression.language != LANGUAGE_C)
2416	    continue;
2417
2418	  // Remove backslash quoting, and ignore wildcard patterns.
2419	  std::string pattern = expression.pattern;
2420	  if (!expression.exact_match)
2421	    {
2422	      if (this->unquote(&pattern))
2423		continue;
2424	    }
2425
2426	  if (symtab->lookup(pattern.c_str(), vt->tag.c_str()) == NULL)
2427	    gold_error(_("version script assignment of %s to symbol %s "
2428			 "failed: symbol not defined"),
2429		       vt->tag.c_str(), pattern.c_str());
2430	}
2431    }
2432}
2433
2434struct Version_dependency_list*
2435Version_script_info::allocate_dependency_list()
2436{
2437  dependency_lists_.push_back(new Version_dependency_list);
2438  return dependency_lists_.back();
2439}
2440
2441struct Version_expression_list*
2442Version_script_info::allocate_expression_list()
2443{
2444  expression_lists_.push_back(new Version_expression_list);
2445  return expression_lists_.back();
2446}
2447
2448struct Version_tree*
2449Version_script_info::allocate_version_tree()
2450{
2451  version_trees_.push_back(new Version_tree);
2452  return version_trees_.back();
2453}
2454
2455// Print for debugging.
2456
2457void
2458Version_script_info::print(FILE* f) const
2459{
2460  if (this->empty())
2461    return;
2462
2463  fprintf(f, "VERSION {");
2464
2465  for (size_t i = 0; i < this->version_trees_.size(); ++i)
2466    {
2467      const Version_tree* vt = this->version_trees_[i];
2468
2469      if (vt->tag.empty())
2470	fprintf(f, "  {\n");
2471      else
2472	fprintf(f, "  %s {\n", vt->tag.c_str());
2473
2474      if (vt->global != NULL)
2475	{
2476	  fprintf(f, "    global :\n");
2477	  this->print_expression_list(f, vt->global);
2478	}
2479
2480      if (vt->local != NULL)
2481	{
2482	  fprintf(f, "    local :\n");
2483	  this->print_expression_list(f, vt->local);
2484	}
2485
2486      fprintf(f, "  }");
2487      if (vt->dependencies != NULL)
2488	{
2489	  const Version_dependency_list* deps = vt->dependencies;
2490	  for (size_t j = 0; j < deps->dependencies.size(); ++j)
2491	    {
2492	      if (j < deps->dependencies.size() - 1)
2493		fprintf(f, "\n");
2494	      fprintf(f, "    %s", deps->dependencies[j].c_str());
2495	    }
2496	}
2497      fprintf(f, ";\n");
2498    }
2499
2500  fprintf(f, "}\n");
2501}
2502
2503void
2504Version_script_info::print_expression_list(
2505    FILE* f,
2506    const Version_expression_list* vel) const
2507{
2508  Version_script_info::Language current_language = LANGUAGE_C;
2509  for (size_t i = 0; i < vel->expressions.size(); ++i)
2510    {
2511      const Version_expression& ve(vel->expressions[i]);
2512
2513      if (ve.language != current_language)
2514	{
2515	  if (current_language != LANGUAGE_C)
2516	    fprintf(f, "      }\n");
2517	  switch (ve.language)
2518	    {
2519	    case LANGUAGE_C:
2520	      break;
2521	    case LANGUAGE_CXX:
2522	      fprintf(f, "      extern \"C++\" {\n");
2523	      break;
2524	    case LANGUAGE_JAVA:
2525	      fprintf(f, "      extern \"Java\" {\n");
2526	      break;
2527	    default:
2528	      gold_unreachable();
2529	    }
2530	  current_language = ve.language;
2531	}
2532
2533      fprintf(f, "      ");
2534      if (current_language != LANGUAGE_C)
2535	fprintf(f, "  ");
2536
2537      if (ve.exact_match)
2538	fprintf(f, "\"");
2539      fprintf(f, "%s", ve.pattern.c_str());
2540      if (ve.exact_match)
2541	fprintf(f, "\"");
2542
2543      fprintf(f, "\n");
2544    }
2545
2546  if (current_language != LANGUAGE_C)
2547    fprintf(f, "      }\n");
2548}
2549
2550} // End namespace gold.
2551
2552// The remaining functions are extern "C", so it's clearer to not put
2553// them in namespace gold.
2554
2555using namespace gold;
2556
2557// This function is called by the bison parser to return the next
2558// token.
2559
2560extern "C" int
2561yylex(YYSTYPE* lvalp, void* closurev)
2562{
2563  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2564  const Token* token = closure->next_token();
2565  switch (token->classification())
2566    {
2567    default:
2568      gold_unreachable();
2569
2570    case Token::TOKEN_INVALID:
2571      yyerror(closurev, "invalid character");
2572      return 0;
2573
2574    case Token::TOKEN_EOF:
2575      return 0;
2576
2577    case Token::TOKEN_STRING:
2578      {
2579	// This is either a keyword or a STRING.
2580	size_t len;
2581	const char* str = token->string_value(&len);
2582	int parsecode = 0;
2583        switch (closure->lex_mode())
2584          {
2585          case Lex::LINKER_SCRIPT:
2586            parsecode = script_keywords.keyword_to_parsecode(str, len);
2587            break;
2588          case Lex::VERSION_SCRIPT:
2589            parsecode = version_script_keywords.keyword_to_parsecode(str, len);
2590            break;
2591          case Lex::DYNAMIC_LIST:
2592            parsecode = dynamic_list_keywords.keyword_to_parsecode(str, len);
2593            break;
2594          default:
2595            break;
2596          }
2597	if (parsecode != 0)
2598	  return parsecode;
2599	lvalp->string.value = str;
2600	lvalp->string.length = len;
2601	return STRING;
2602      }
2603
2604    case Token::TOKEN_QUOTED_STRING:
2605      lvalp->string.value = token->string_value(&lvalp->string.length);
2606      return QUOTED_STRING;
2607
2608    case Token::TOKEN_OPERATOR:
2609      return token->operator_value();
2610
2611    case Token::TOKEN_INTEGER:
2612      lvalp->integer = token->integer_value();
2613      return INTEGER;
2614    }
2615}
2616
2617// This function is called by the bison parser to report an error.
2618
2619extern "C" void
2620yyerror(void* closurev, const char* message)
2621{
2622  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2623  gold_error(_("%s:%d:%d: %s"), closure->filename(), closure->lineno(),
2624	     closure->charpos(), message);
2625}
2626
2627// Called by the bison parser to add an external symbol to the link.
2628
2629extern "C" void
2630script_add_extern(void* closurev, const char* name, size_t length)
2631{
2632  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2633  closure->script_options()->add_symbol_reference(name, length);
2634}
2635
2636// Called by the bison parser to add a file to the link.
2637
2638extern "C" void
2639script_add_file(void* closurev, const char* name, size_t length)
2640{
2641  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2642
2643  // If this is an absolute path, and we found the script in the
2644  // sysroot, then we want to prepend the sysroot to the file name.
2645  // For example, this is how we handle a cross link to the x86_64
2646  // libc.so, which refers to /lib/libc.so.6.
2647  std::string name_string(name, length);
2648  const char* extra_search_path = ".";
2649  std::string script_directory;
2650  if (IS_ABSOLUTE_PATH(name_string.c_str()))
2651    {
2652      if (closure->is_in_sysroot())
2653	{
2654	  const std::string& sysroot(parameters->options().sysroot());
2655	  gold_assert(!sysroot.empty());
2656	  name_string = sysroot + name_string;
2657	}
2658    }
2659  else
2660    {
2661      // In addition to checking the normal library search path, we
2662      // also want to check in the script-directory.
2663      const char* slash = strrchr(closure->filename(), '/');
2664      if (slash != NULL)
2665	{
2666	  script_directory.assign(closure->filename(),
2667				  slash - closure->filename() + 1);
2668	  extra_search_path = script_directory.c_str();
2669	}
2670    }
2671
2672  Input_file_argument file(name_string.c_str(),
2673			   Input_file_argument::INPUT_FILE_TYPE_FILE,
2674			   extra_search_path, false,
2675			   closure->position_dependent_options());
2676  Input_argument& arg = closure->inputs()->add_file(file);
2677  arg.set_script_info(closure->script_info());
2678}
2679
2680// Called by the bison parser to add a library to the link.
2681
2682extern "C" void
2683script_add_library(void* closurev, const char* name, size_t length)
2684{
2685  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2686  std::string name_string(name, length);
2687
2688  if (name_string[0] != 'l')
2689    gold_error(_("library name must be prefixed with -l"));
2690
2691  Input_file_argument file(name_string.c_str() + 1,
2692			   Input_file_argument::INPUT_FILE_TYPE_LIBRARY,
2693			   "", false,
2694			   closure->position_dependent_options());
2695  Input_argument& arg = closure->inputs()->add_file(file);
2696  arg.set_script_info(closure->script_info());
2697}
2698
2699// Called by the bison parser to start a group.  If we are already in
2700// a group, that means that this script was invoked within a
2701// --start-group --end-group sequence on the command line, or that
2702// this script was found in a GROUP of another script.  In that case,
2703// we simply continue the existing group, rather than starting a new
2704// one.  It is possible to construct a case in which this will do
2705// something other than what would happen if we did a recursive group,
2706// but it's hard to imagine why the different behaviour would be
2707// useful for a real program.  Avoiding recursive groups is simpler
2708// and more efficient.
2709
2710extern "C" void
2711script_start_group(void* closurev)
2712{
2713  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2714  if (!closure->in_group())
2715    closure->inputs()->start_group();
2716}
2717
2718// Called by the bison parser at the end of a group.
2719
2720extern "C" void
2721script_end_group(void* closurev)
2722{
2723  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2724  if (!closure->in_group())
2725    closure->inputs()->end_group();
2726}
2727
2728// Called by the bison parser to start an AS_NEEDED list.
2729
2730extern "C" void
2731script_start_as_needed(void* closurev)
2732{
2733  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2734  closure->position_dependent_options().set_as_needed(true);
2735}
2736
2737// Called by the bison parser at the end of an AS_NEEDED list.
2738
2739extern "C" void
2740script_end_as_needed(void* closurev)
2741{
2742  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2743  closure->position_dependent_options().set_as_needed(false);
2744}
2745
2746// Called by the bison parser to set the entry symbol.
2747
2748extern "C" void
2749script_set_entry(void* closurev, const char* entry, size_t length)
2750{
2751  // We'll parse this exactly the same as --entry=ENTRY on the commandline
2752  // TODO(csilvers): FIXME -- call set_entry directly.
2753  std::string arg("--entry=");
2754  arg.append(entry, length);
2755  script_parse_option(closurev, arg.c_str(), arg.size());
2756}
2757
2758// Called by the bison parser to set whether to define common symbols.
2759
2760extern "C" void
2761script_set_common_allocation(void* closurev, int set)
2762{
2763  const char* arg = set != 0 ? "--define-common" : "--no-define-common";
2764  script_parse_option(closurev, arg, strlen(arg));
2765}
2766
2767// Called by the bison parser to refer to a symbol.
2768
2769extern "C" Expression*
2770script_symbol(void* closurev, const char* name, size_t length)
2771{
2772  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2773  if (length != 1 || name[0] != '.')
2774    closure->script_options()->add_symbol_reference(name, length);
2775  return script_exp_string(name, length);
2776}
2777
2778// Called by the bison parser to define a symbol.
2779
2780extern "C" void
2781script_set_symbol(void* closurev, const char* name, size_t length,
2782		  Expression* value, int providei, int hiddeni)
2783{
2784  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2785  const bool provide = providei != 0;
2786  const bool hidden = hiddeni != 0;
2787  closure->script_options()->add_symbol_assignment(name, length,
2788						   closure->parsing_defsym(),
2789						   value, provide, hidden);
2790  closure->clear_skip_on_incompatible_target();
2791}
2792
2793// Called by the bison parser to add an assertion.
2794
2795extern "C" void
2796script_add_assertion(void* closurev, Expression* check, const char* message,
2797		     size_t messagelen)
2798{
2799  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2800  closure->script_options()->add_assertion(check, message, messagelen);
2801  closure->clear_skip_on_incompatible_target();
2802}
2803
2804// Called by the bison parser to parse an OPTION.
2805
2806extern "C" void
2807script_parse_option(void* closurev, const char* option, size_t length)
2808{
2809  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2810  // We treat the option as a single command-line option, even if
2811  // it has internal whitespace.
2812  if (closure->command_line() == NULL)
2813    {
2814      // There are some options that we could handle here--e.g.,
2815      // -lLIBRARY.  Should we bother?
2816      gold_warning(_("%s:%d:%d: ignoring command OPTION; OPTION is only valid"
2817		     " for scripts specified via -T/--script"),
2818		   closure->filename(), closure->lineno(), closure->charpos());
2819    }
2820  else
2821    {
2822      bool past_a_double_dash_option = false;
2823      const char* mutable_option = strndup(option, length);
2824      gold_assert(mutable_option != NULL);
2825      closure->command_line()->process_one_option(1, &mutable_option, 0,
2826                                                  &past_a_double_dash_option);
2827      // The General_options class will quite possibly store a pointer
2828      // into mutable_option, so we can't free it.  In cases the class
2829      // does not store such a pointer, this is a memory leak.  Alas. :(
2830    }
2831  closure->clear_skip_on_incompatible_target();
2832}
2833
2834// Called by the bison parser to handle OUTPUT_FORMAT.  OUTPUT_FORMAT
2835// takes either one or three arguments.  In the three argument case,
2836// the format depends on the endianness option, which we don't
2837// currently support (FIXME).  If we see an OUTPUT_FORMAT for the
2838// wrong format, then we want to search for a new file.  Returning 0
2839// here will cause the parser to immediately abort.
2840
2841extern "C" int
2842script_check_output_format(void* closurev,
2843			   const char* default_name, size_t default_length,
2844			   const char*, size_t, const char*, size_t)
2845{
2846  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2847  std::string name(default_name, default_length);
2848  Target* target = select_target_by_bfd_name(name.c_str());
2849  if (target == NULL || !parameters->is_compatible_target(target))
2850    {
2851      if (closure->skip_on_incompatible_target())
2852	{
2853	  closure->set_found_incompatible_target();
2854	  return 0;
2855	}
2856      // FIXME: Should we warn about the unknown target?
2857    }
2858  return 1;
2859}
2860
2861// Called by the bison parser to handle TARGET.
2862
2863extern "C" void
2864script_set_target(void* closurev, const char* target, size_t len)
2865{
2866  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2867  std::string s(target, len);
2868  General_options::Object_format format_enum;
2869  format_enum = General_options::string_to_object_format(s.c_str());
2870  closure->position_dependent_options().set_format_enum(format_enum);
2871}
2872
2873// Called by the bison parser to handle SEARCH_DIR.  This is handled
2874// exactly like a -L option.
2875
2876extern "C" void
2877script_add_search_dir(void* closurev, const char* option, size_t length)
2878{
2879  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2880  if (closure->command_line() == NULL)
2881    gold_warning(_("%s:%d:%d: ignoring SEARCH_DIR; SEARCH_DIR is only valid"
2882		   " for scripts specified via -T/--script"),
2883		 closure->filename(), closure->lineno(), closure->charpos());
2884  else if (!closure->command_line()->options().nostdlib())
2885    {
2886      std::string s = "-L" + std::string(option, length);
2887      script_parse_option(closurev, s.c_str(), s.size());
2888    }
2889}
2890
2891/* Called by the bison parser to push the lexer into expression
2892   mode.  */
2893
2894extern "C" void
2895script_push_lex_into_expression_mode(void* closurev)
2896{
2897  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2898  closure->push_lex_mode(Lex::EXPRESSION);
2899}
2900
2901/* Called by the bison parser to push the lexer into version
2902   mode.  */
2903
2904extern "C" void
2905script_push_lex_into_version_mode(void* closurev)
2906{
2907  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2908  if (closure->version_script()->is_finalized())
2909    gold_error(_("%s:%d:%d: invalid use of VERSION in input file"),
2910	       closure->filename(), closure->lineno(), closure->charpos());
2911  closure->push_lex_mode(Lex::VERSION_SCRIPT);
2912}
2913
2914/* Called by the bison parser to pop the lexer mode.  */
2915
2916extern "C" void
2917script_pop_lex_mode(void* closurev)
2918{
2919  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2920  closure->pop_lex_mode();
2921}
2922
2923// Register an entire version node. For example:
2924//
2925// GLIBC_2.1 {
2926//   global: foo;
2927// } GLIBC_2.0;
2928//
2929// - tag is "GLIBC_2.1"
2930// - tree contains the information "global: foo"
2931// - deps contains "GLIBC_2.0"
2932
2933extern "C" void
2934script_register_vers_node(void*,
2935			  const char* tag,
2936			  int taglen,
2937			  struct Version_tree* tree,
2938			  struct Version_dependency_list* deps)
2939{
2940  gold_assert(tree != NULL);
2941  tree->dependencies = deps;
2942  if (tag != NULL)
2943    tree->tag = std::string(tag, taglen);
2944}
2945
2946// Add a dependencies to the list of existing dependencies, if any,
2947// and return the expanded list.
2948
2949extern "C" struct Version_dependency_list*
2950script_add_vers_depend(void* closurev,
2951		       struct Version_dependency_list* all_deps,
2952		       const char* depend_to_add, int deplen)
2953{
2954  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2955  if (all_deps == NULL)
2956    all_deps = closure->version_script()->allocate_dependency_list();
2957  all_deps->dependencies.push_back(std::string(depend_to_add, deplen));
2958  return all_deps;
2959}
2960
2961// Add a pattern expression to an existing list of expressions, if any.
2962
2963extern "C" struct Version_expression_list*
2964script_new_vers_pattern(void* closurev,
2965			struct Version_expression_list* expressions,
2966			const char* pattern, int patlen, int exact_match)
2967{
2968  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
2969  if (expressions == NULL)
2970    expressions = closure->version_script()->allocate_expression_list();
2971  expressions->expressions.push_back(
2972      Version_expression(std::string(pattern, patlen),
2973                         closure->get_current_language(),
2974                         static_cast<bool>(exact_match)));
2975  return expressions;
2976}
2977
2978// Attaches b to the end of a, and clears b.  So a = a + b and b = {}.
2979
2980extern "C" struct Version_expression_list*
2981script_merge_expressions(struct Version_expression_list* a,
2982                         struct Version_expression_list* b)
2983{
2984  a->expressions.insert(a->expressions.end(),
2985                        b->expressions.begin(), b->expressions.end());
2986  // We could delete b and remove it from expressions_lists_, but
2987  // that's a lot of work.  This works just as well.
2988  b->expressions.clear();
2989  return a;
2990}
2991
2992// Combine the global and local expressions into a a Version_tree.
2993
2994extern "C" struct Version_tree*
2995script_new_vers_node(void* closurev,
2996		     struct Version_expression_list* global,
2997		     struct Version_expression_list* local)
2998{
2999  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3000  Version_tree* tree = closure->version_script()->allocate_version_tree();
3001  tree->global = global;
3002  tree->local = local;
3003  return tree;
3004}
3005
3006// Handle a transition in language, such as at the
3007// start or end of 'extern "C++"'
3008
3009extern "C" void
3010version_script_push_lang(void* closurev, const char* lang, int langlen)
3011{
3012  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3013  std::string language(lang, langlen);
3014  Version_script_info::Language code;
3015  if (language.empty() || language == "C")
3016    code = Version_script_info::LANGUAGE_C;
3017  else if (language == "C++")
3018    code = Version_script_info::LANGUAGE_CXX;
3019  else if (language == "Java")
3020    code = Version_script_info::LANGUAGE_JAVA;
3021  else
3022    {
3023      char* buf = new char[langlen + 100];
3024      snprintf(buf, langlen + 100,
3025	       _("unrecognized version script language '%s'"),
3026	       language.c_str());
3027      yyerror(closurev, buf);
3028      delete[] buf;
3029      code = Version_script_info::LANGUAGE_C;
3030    }
3031  closure->push_language(code);
3032}
3033
3034extern "C" void
3035version_script_pop_lang(void* closurev)
3036{
3037  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3038  closure->pop_language();
3039}
3040
3041// Called by the bison parser to start a SECTIONS clause.
3042
3043extern "C" void
3044script_start_sections(void* closurev)
3045{
3046  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3047  closure->script_options()->script_sections()->start_sections();
3048  closure->clear_skip_on_incompatible_target();
3049}
3050
3051// Called by the bison parser to finish a SECTIONS clause.
3052
3053extern "C" void
3054script_finish_sections(void* closurev)
3055{
3056  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3057  closure->script_options()->script_sections()->finish_sections();
3058}
3059
3060// Start processing entries for an output section.
3061
3062extern "C" void
3063script_start_output_section(void* closurev, const char* name, size_t namelen,
3064			    const struct Parser_output_section_header* header)
3065{
3066  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3067  closure->script_options()->script_sections()->start_output_section(name,
3068								     namelen,
3069								     header);
3070}
3071
3072// Finish processing entries for an output section.
3073
3074extern "C" void
3075script_finish_output_section(void* closurev,
3076			     const struct Parser_output_section_trailer* trail)
3077{
3078  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3079  closure->script_options()->script_sections()->finish_output_section(trail);
3080}
3081
3082// Add a data item (e.g., "WORD (0)") to the current output section.
3083
3084extern "C" void
3085script_add_data(void* closurev, int data_token, Expression* val)
3086{
3087  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3088  int size;
3089  bool is_signed = true;
3090  switch (data_token)
3091    {
3092    case QUAD:
3093      size = 8;
3094      is_signed = false;
3095      break;
3096    case SQUAD:
3097      size = 8;
3098      break;
3099    case LONG:
3100      size = 4;
3101      break;
3102    case SHORT:
3103      size = 2;
3104      break;
3105    case BYTE:
3106      size = 1;
3107      break;
3108    default:
3109      gold_unreachable();
3110    }
3111  closure->script_options()->script_sections()->add_data(size, is_signed, val);
3112}
3113
3114// Add a clause setting the fill value to the current output section.
3115
3116extern "C" void
3117script_add_fill(void* closurev, Expression* val)
3118{
3119  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3120  closure->script_options()->script_sections()->add_fill(val);
3121}
3122
3123// Add a new input section specification to the current output
3124// section.
3125
3126extern "C" void
3127script_add_input_section(void* closurev,
3128			 const struct Input_section_spec* spec,
3129			 int keepi)
3130{
3131  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3132  bool keep = keepi != 0;
3133  closure->script_options()->script_sections()->add_input_section(spec, keep);
3134}
3135
3136// When we see DATA_SEGMENT_ALIGN we record that following output
3137// sections may be relro.
3138
3139extern "C" void
3140script_data_segment_align(void* closurev)
3141{
3142  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3143  if (!closure->script_options()->saw_sections_clause())
3144    gold_error(_("%s:%d:%d: DATA_SEGMENT_ALIGN not in SECTIONS clause"),
3145	       closure->filename(), closure->lineno(), closure->charpos());
3146  else
3147    closure->script_options()->script_sections()->data_segment_align();
3148}
3149
3150// When we see DATA_SEGMENT_RELRO_END we know that all output sections
3151// since DATA_SEGMENT_ALIGN should be relro.
3152
3153extern "C" void
3154script_data_segment_relro_end(void* closurev)
3155{
3156  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3157  if (!closure->script_options()->saw_sections_clause())
3158    gold_error(_("%s:%d:%d: DATA_SEGMENT_ALIGN not in SECTIONS clause"),
3159	       closure->filename(), closure->lineno(), closure->charpos());
3160  else
3161    closure->script_options()->script_sections()->data_segment_relro_end();
3162}
3163
3164// Create a new list of string/sort pairs.
3165
3166extern "C" String_sort_list_ptr
3167script_new_string_sort_list(const struct Wildcard_section* string_sort)
3168{
3169  return new String_sort_list(1, *string_sort);
3170}
3171
3172// Add an entry to a list of string/sort pairs.  The way the parser
3173// works permits us to simply modify the first parameter, rather than
3174// copy the vector.
3175
3176extern "C" String_sort_list_ptr
3177script_string_sort_list_add(String_sort_list_ptr pv,
3178			    const struct Wildcard_section* string_sort)
3179{
3180  if (pv == NULL)
3181    return script_new_string_sort_list(string_sort);
3182  else
3183    {
3184      pv->push_back(*string_sort);
3185      return pv;
3186    }
3187}
3188
3189// Create a new list of strings.
3190
3191extern "C" String_list_ptr
3192script_new_string_list(const char* str, size_t len)
3193{
3194  return new String_list(1, std::string(str, len));
3195}
3196
3197// Add an element to a list of strings.  The way the parser works
3198// permits us to simply modify the first parameter, rather than copy
3199// the vector.
3200
3201extern "C" String_list_ptr
3202script_string_list_push_back(String_list_ptr pv, const char* str, size_t len)
3203{
3204  if (pv == NULL)
3205    return script_new_string_list(str, len);
3206  else
3207    {
3208      pv->push_back(std::string(str, len));
3209      return pv;
3210    }
3211}
3212
3213// Concatenate two string lists.  Either or both may be NULL.  The way
3214// the parser works permits us to modify the parameters, rather than
3215// copy the vector.
3216
3217extern "C" String_list_ptr
3218script_string_list_append(String_list_ptr pv1, String_list_ptr pv2)
3219{
3220  if (pv1 == NULL)
3221    return pv2;
3222  if (pv2 == NULL)
3223    return pv1;
3224  pv1->insert(pv1->end(), pv2->begin(), pv2->end());
3225  return pv1;
3226}
3227
3228// Add a new program header.
3229
3230extern "C" void
3231script_add_phdr(void* closurev, const char* name, size_t namelen,
3232		unsigned int type, const Phdr_info* info)
3233{
3234  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3235  bool includes_filehdr = info->includes_filehdr != 0;
3236  bool includes_phdrs = info->includes_phdrs != 0;
3237  bool is_flags_valid = info->is_flags_valid != 0;
3238  Script_sections* ss = closure->script_options()->script_sections();
3239  ss->add_phdr(name, namelen, type, includes_filehdr, includes_phdrs,
3240	       is_flags_valid, info->flags, info->load_address);
3241  closure->clear_skip_on_incompatible_target();
3242}
3243
3244// Convert a program header string to a type.
3245
3246#define PHDR_TYPE(NAME) { #NAME, sizeof(#NAME) - 1, elfcpp::NAME }
3247
3248static struct
3249{
3250  const char* name;
3251  size_t namelen;
3252  unsigned int val;
3253} phdr_type_names[] =
3254{
3255  PHDR_TYPE(PT_NULL),
3256  PHDR_TYPE(PT_LOAD),
3257  PHDR_TYPE(PT_DYNAMIC),
3258  PHDR_TYPE(PT_INTERP),
3259  PHDR_TYPE(PT_NOTE),
3260  PHDR_TYPE(PT_SHLIB),
3261  PHDR_TYPE(PT_PHDR),
3262  PHDR_TYPE(PT_TLS),
3263  PHDR_TYPE(PT_GNU_EH_FRAME),
3264  PHDR_TYPE(PT_GNU_STACK),
3265  PHDR_TYPE(PT_GNU_RELRO)
3266};
3267
3268extern "C" unsigned int
3269script_phdr_string_to_type(void* closurev, const char* name, size_t namelen)
3270{
3271  for (unsigned int i = 0;
3272       i < sizeof(phdr_type_names) / sizeof(phdr_type_names[0]);
3273       ++i)
3274    if (namelen == phdr_type_names[i].namelen
3275	&& strncmp(name, phdr_type_names[i].name, namelen) == 0)
3276      return phdr_type_names[i].val;
3277  yyerror(closurev, _("unknown PHDR type (try integer)"));
3278  return elfcpp::PT_NULL;
3279}
3280
3281extern "C" void
3282script_saw_segment_start_expression(void* closurev)
3283{
3284  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3285  Script_sections* ss = closure->script_options()->script_sections();
3286  ss->set_saw_segment_start_expression(true);
3287}
3288
3289extern "C" void
3290script_set_section_region(void* closurev, const char* name, size_t namelen,
3291			  int set_vma)
3292{
3293  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3294  if (!closure->script_options()->saw_sections_clause())
3295    {
3296      gold_error(_("%s:%d:%d: MEMORY region '%.*s' referred to outside of "
3297		   "SECTIONS clause"),
3298		 closure->filename(), closure->lineno(), closure->charpos(),
3299		 static_cast<int>(namelen), name);
3300      return;
3301    }
3302
3303  Script_sections* ss = closure->script_options()->script_sections();
3304  Memory_region* mr = ss->find_memory_region(name, namelen);
3305  if (mr == NULL)
3306    {
3307      gold_error(_("%s:%d:%d: MEMORY region '%.*s' not declared"),
3308		 closure->filename(), closure->lineno(), closure->charpos(),
3309		 static_cast<int>(namelen), name);
3310      return;
3311    }
3312
3313  ss->set_memory_region(mr, set_vma);
3314}
3315
3316extern "C" void
3317script_add_memory(void* closurev, const char* name, size_t namelen,
3318		  unsigned int attrs, Expression* origin, Expression* length)
3319{
3320  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3321  Script_sections* ss = closure->script_options()->script_sections();
3322  ss->add_memory_region(name, namelen, attrs, origin, length);
3323}
3324
3325extern "C" unsigned int
3326script_parse_memory_attr(void* closurev, const char* attrs, size_t attrlen,
3327			 int invert)
3328{
3329  int attributes = 0;
3330
3331  while (attrlen--)
3332    switch (*attrs++)
3333      {
3334      case 'R':
3335      case 'r':
3336	attributes |= MEM_READABLE; break;
3337      case 'W':
3338      case 'w':
3339	attributes |= MEM_READABLE | MEM_WRITEABLE; break;
3340      case 'X':
3341      case 'x':
3342	attributes |= MEM_EXECUTABLE; break;
3343      case 'A':
3344      case 'a':
3345	attributes |= MEM_ALLOCATABLE; break;
3346      case 'I':
3347      case 'i':
3348      case 'L':
3349      case 'l':
3350	attributes |= MEM_INITIALIZED; break;
3351      default:
3352	yyerror(closurev, _("unknown MEMORY attribute"));
3353      }
3354
3355  if (invert)
3356    attributes = (~ attributes) & MEM_ATTR_MASK;
3357
3358  return attributes;
3359}
3360
3361extern "C" void
3362script_include_directive(void* closurev, const char* filename, size_t length)
3363{
3364  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3365  std::string name(filename, length);
3366  Command_line* cmdline = closure->command_line();
3367  read_script_file(name.c_str(), cmdline, &cmdline->script_options(),
3368                   PARSING_LINKER_SCRIPT, Lex::LINKER_SCRIPT);
3369}
3370
3371// Functions for memory regions.
3372
3373extern "C" Expression*
3374script_exp_function_origin(void* closurev, const char* name, size_t namelen)
3375{
3376  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3377  Script_sections* ss = closure->script_options()->script_sections();
3378  Expression* origin = ss->find_memory_region_origin(name, namelen);
3379
3380  if (origin == NULL)
3381    {
3382      gold_error(_("undefined memory region '%s' referenced "
3383		   "in ORIGIN expression"),
3384		 name);
3385      // Create a dummy expression to prevent crashes later on.
3386      origin = script_exp_integer(0);
3387    }
3388
3389  return origin;
3390}
3391
3392extern "C" Expression*
3393script_exp_function_length(void* closurev, const char* name, size_t namelen)
3394{
3395  Parser_closure* closure = static_cast<Parser_closure*>(closurev);
3396  Script_sections* ss = closure->script_options()->script_sections();
3397  Expression* length = ss->find_memory_region_length(name, namelen);
3398
3399  if (length == NULL)
3400    {
3401      gold_error(_("undefined memory region '%s' referenced "
3402		   "in LENGTH expression"),
3403		 name);
3404      // Create a dummy expression to prevent crashes later on.
3405      length = script_exp_integer(0);
3406    }
3407
3408  return length;
3409}
3410