[AArch64] Fix extern protected data handling
[external/binutils.git] / ld / ldexp.c
1 /* This module handles expression trees.
2    Copyright (C) 1991-2015 Free Software Foundation, Inc.
3    Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
4
5    This file is part of the GNU Binutils.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20    MA 02110-1301, USA.  */
21
22
23 /* This module is in charge of working out the contents of expressions.
24
25    It has to keep track of the relative/absness of a symbol etc. This
26    is done by keeping all values in a struct (an etree_value_type)
27    which contains a value, a section to which it is relative and a
28    valid bit.  */
29
30 #include "sysdep.h"
31 #include "bfd.h"
32 #include "bfdlink.h"
33
34 #include "ld.h"
35 #include "ldmain.h"
36 #include "ldmisc.h"
37 #include "ldexp.h"
38 #include "ldlex.h"
39 #include <ldgram.h>
40 #include "ldlang.h"
41 #include "libiberty.h"
42 #include "safe-ctype.h"
43
44 static void exp_fold_tree_1 (etree_type *);
45 static bfd_vma align_n (bfd_vma, bfd_vma);
46
47 segment_type *segments;
48
49 struct ldexp_control expld;
50
51 /* This structure records symbols for which we need to keep track of
52    definedness for use in the DEFINED () test.  */
53
54 struct definedness_hash_entry
55 {
56   struct bfd_hash_entry root;
57   unsigned int by_object : 1;
58   unsigned int by_script : 1;
59   unsigned int iteration : 1;
60 };
61
62 static struct bfd_hash_table definedness_table;
63
64 /* Print the string representation of the given token.  Surround it
65    with spaces if INFIX_P is TRUE.  */
66
67 static void
68 exp_print_token (token_code_type code, int infix_p)
69 {
70   static const struct
71   {
72     token_code_type code;
73     const char * name;
74   }
75   table[] =
76   {
77     { INT, "int" },
78     { NAME, "NAME" },
79     { PLUSEQ, "+=" },
80     { MINUSEQ, "-=" },
81     { MULTEQ, "*=" },
82     { DIVEQ, "/=" },
83     { LSHIFTEQ, "<<=" },
84     { RSHIFTEQ, ">>=" },
85     { ANDEQ, "&=" },
86     { OREQ, "|=" },
87     { OROR, "||" },
88     { ANDAND, "&&" },
89     { EQ, "==" },
90     { NE, "!=" },
91     { LE, "<=" },
92     { GE, ">=" },
93     { LSHIFT, "<<" },
94     { RSHIFT, ">>" },
95     { LOG2CEIL, "LOG2CEIL" },
96     { ALIGN_K, "ALIGN" },
97     { BLOCK, "BLOCK" },
98     { QUAD, "QUAD" },
99     { SQUAD, "SQUAD" },
100     { LONG, "LONG" },
101     { SHORT, "SHORT" },
102     { BYTE, "BYTE" },
103     { SECTIONS, "SECTIONS" },
104     { SIZEOF_HEADERS, "SIZEOF_HEADERS" },
105     { MEMORY, "MEMORY" },
106     { DEFINED, "DEFINED" },
107     { TARGET_K, "TARGET" },
108     { SEARCH_DIR, "SEARCH_DIR" },
109     { MAP, "MAP" },
110     { ENTRY, "ENTRY" },
111     { NEXT, "NEXT" },
112     { ALIGNOF, "ALIGNOF" },
113     { SIZEOF, "SIZEOF" },
114     { ADDR, "ADDR" },
115     { LOADADDR, "LOADADDR" },
116     { CONSTANT, "CONSTANT" },
117     { ABSOLUTE, "ABSOLUTE" },
118     { MAX_K, "MAX" },
119     { MIN_K, "MIN" },
120     { ASSERT_K, "ASSERT" },
121     { REL, "relocatable" },
122     { DATA_SEGMENT_ALIGN, "DATA_SEGMENT_ALIGN" },
123     { DATA_SEGMENT_RELRO_END, "DATA_SEGMENT_RELRO_END" },
124     { DATA_SEGMENT_END, "DATA_SEGMENT_END" },
125     { ORIGIN, "ORIGIN" },
126     { LENGTH, "LENGTH" },
127     { SEGMENT_START, "SEGMENT_START" }
128   };
129   unsigned int idx;
130
131   for (idx = 0; idx < ARRAY_SIZE (table); idx++)
132     if (table[idx].code == code)
133       break;
134
135   if (infix_p)
136     fputc (' ', config.map_file);
137
138   if (idx < ARRAY_SIZE (table))
139     fputs (table[idx].name, config.map_file);
140   else if (code < 127)
141     fputc (code, config.map_file);
142   else
143     fprintf (config.map_file, "<code %d>", code);
144
145   if (infix_p)
146     fputc (' ', config.map_file);
147 }
148
149 static void
150 make_log2ceil (void)
151 {
152   bfd_vma value = expld.result.value;
153   bfd_vma result = -1;
154   bfd_boolean round_up = FALSE;
155
156   do
157     {
158       result++;
159       /* If more than one bit is set in the value we will need to round up.  */
160       if ((value > 1) && (value & 1))
161         round_up = TRUE;
162     }
163   while (value >>= 1);
164
165   if (round_up)
166     result += 1;
167   expld.result.section = NULL;
168   expld.result.value = result;
169 }
170
171 static void
172 make_abs (void)
173 {
174   if (expld.result.section != NULL)
175     expld.result.value += expld.result.section->vma;
176   expld.result.section = bfd_abs_section_ptr;
177 }
178
179 static void
180 new_abs (bfd_vma value)
181 {
182   expld.result.valid_p = TRUE;
183   expld.result.section = bfd_abs_section_ptr;
184   expld.result.value = value;
185   expld.result.str = NULL;
186 }
187
188 etree_type *
189 exp_intop (bfd_vma value)
190 {
191   etree_type *new_e = (etree_type *) stat_alloc (sizeof (new_e->value));
192   new_e->type.node_code = INT;
193   new_e->type.filename = ldlex_filename ();
194   new_e->type.lineno = lineno;
195   new_e->value.value = value;
196   new_e->value.str = NULL;
197   new_e->type.node_class = etree_value;
198   return new_e;
199 }
200
201 etree_type *
202 exp_bigintop (bfd_vma value, char *str)
203 {
204   etree_type *new_e = (etree_type *) stat_alloc (sizeof (new_e->value));
205   new_e->type.node_code = INT;
206   new_e->type.filename = ldlex_filename ();
207   new_e->type.lineno = lineno;
208   new_e->value.value = value;
209   new_e->value.str = str;
210   new_e->type.node_class = etree_value;
211   return new_e;
212 }
213
214 /* Build an expression representing an unnamed relocatable value.  */
215
216 etree_type *
217 exp_relop (asection *section, bfd_vma value)
218 {
219   etree_type *new_e = (etree_type *) stat_alloc (sizeof (new_e->rel));
220   new_e->type.node_code = REL;
221   new_e->type.filename = ldlex_filename ();
222   new_e->type.lineno = lineno;
223   new_e->type.node_class = etree_rel;
224   new_e->rel.section = section;
225   new_e->rel.value = value;
226   return new_e;
227 }
228
229 static void
230 new_number (bfd_vma value)
231 {
232   expld.result.valid_p = TRUE;
233   expld.result.value = value;
234   expld.result.str = NULL;
235   expld.result.section = NULL;
236 }
237
238 static void
239 new_rel (bfd_vma value, asection *section)
240 {
241   expld.result.valid_p = TRUE;
242   expld.result.value = value;
243   expld.result.str = NULL;
244   expld.result.section = section;
245 }
246
247 static void
248 new_rel_from_abs (bfd_vma value)
249 {
250   asection *s = expld.section;
251
252   if (s == bfd_abs_section_ptr && expld.phase == lang_final_phase_enum)
253     s = section_for_dot ();
254   expld.result.valid_p = TRUE;
255   expld.result.value = value - s->vma;
256   expld.result.str = NULL;
257   expld.result.section = s;
258 }
259
260 static void
261 align_dot_val (bfd_vma align)
262 {
263   bfd_vma base = expld.section->vma;
264
265   new_rel_from_abs (base + align_n (expld.dot - base, align));
266 }
267
268 /* New-function for the definedness hash table.  */
269
270 static struct bfd_hash_entry *
271 definedness_newfunc (struct bfd_hash_entry *entry,
272                      struct bfd_hash_table *table ATTRIBUTE_UNUSED,
273                      const char *name ATTRIBUTE_UNUSED)
274 {
275   struct definedness_hash_entry *ret = (struct definedness_hash_entry *) entry;
276
277   if (ret == NULL)
278     ret = (struct definedness_hash_entry *)
279       bfd_hash_allocate (table, sizeof (struct definedness_hash_entry));
280
281   if (ret == NULL)
282     einfo (_("%P%F: bfd_hash_allocate failed creating symbol %s\n"), name);
283
284   ret->by_object = 0;
285   ret->by_script = 0;
286   ret->iteration = 0;
287   return &ret->root;
288 }
289
290 /* Called during processing of linker script script expressions.
291    For symbols assigned in a linker script, return a struct describing
292    where the symbol is defined relative to the current expression,
293    otherwise return NULL.  */
294
295 static struct definedness_hash_entry *
296 symbol_defined (const char *name)
297 {
298   return ((struct definedness_hash_entry *)
299           bfd_hash_lookup (&definedness_table, name, FALSE, FALSE));
300 }
301
302 /* Update the definedness state of NAME.  Return FALSE if script symbol
303    is multiply defining a strong symbol in an object.  */
304
305 static bfd_boolean
306 update_definedness (const char *name, struct bfd_link_hash_entry *h)
307 {
308   bfd_boolean ret;
309   struct definedness_hash_entry *defentry
310     = (struct definedness_hash_entry *)
311     bfd_hash_lookup (&definedness_table, name, TRUE, FALSE);
312
313   if (defentry == NULL)
314     einfo (_("%P%F: bfd_hash_lookup failed creating symbol %s\n"), name);
315
316   /* If the symbol was already defined, and not by a script, then it
317      must be defined by an object file or by the linker target code.  */
318   ret = TRUE;
319   if (!defentry->by_script
320       && (h->type == bfd_link_hash_defined
321           || h->type == bfd_link_hash_defweak
322           || h->type == bfd_link_hash_common))
323     {
324       defentry->by_object = 1;
325       if (h->type == bfd_link_hash_defined
326           && h->u.def.section->output_section != NULL
327           && !h->linker_def)
328         ret = FALSE;
329     }
330
331   defentry->by_script = 1;
332   defentry->iteration = lang_statement_iteration;
333   return ret;
334 }
335
336 static void
337 fold_unary (etree_type *tree)
338 {
339   exp_fold_tree_1 (tree->unary.child);
340   if (expld.result.valid_p)
341     {
342       switch (tree->type.node_code)
343         {
344         case ALIGN_K:
345           if (expld.phase != lang_first_phase_enum)
346             align_dot_val (expld.result.value);
347           else
348             expld.result.valid_p = FALSE;
349           break;
350
351         case ABSOLUTE:
352           make_abs ();
353           break;
354
355         case LOG2CEIL:
356           make_log2ceil ();
357           break;
358
359         case '~':
360           expld.result.value = ~expld.result.value;
361           break;
362
363         case '!':
364           expld.result.value = !expld.result.value;
365           break;
366
367         case '-':
368           expld.result.value = -expld.result.value;
369           break;
370
371         case NEXT:
372           /* Return next place aligned to value.  */
373           if (expld.phase != lang_first_phase_enum)
374             {
375               make_abs ();
376               align_dot_val (expld.result.value);
377             }
378           else
379             expld.result.valid_p = FALSE;
380           break;
381
382         case DATA_SEGMENT_END:
383           if (expld.phase == lang_first_phase_enum
384               || expld.section != bfd_abs_section_ptr)
385             {
386               expld.result.valid_p = FALSE;
387             }
388           else if (expld.dataseg.phase == exp_dataseg_align_seen
389                    || expld.dataseg.phase == exp_dataseg_relro_seen)
390             {
391               expld.dataseg.phase = exp_dataseg_end_seen;
392               expld.dataseg.end = expld.result.value;
393             }
394           else if (expld.dataseg.phase == exp_dataseg_done
395                    || expld.dataseg.phase == exp_dataseg_adjust
396                    || expld.dataseg.phase == exp_dataseg_relro_adjust)
397             {
398               /* OK.  */
399             }
400           else
401             expld.result.valid_p = FALSE;
402           break;
403
404         default:
405           FAIL ();
406           break;
407         }
408     }
409 }
410
411 static void
412 fold_binary (etree_type *tree)
413 {
414   etree_value_type lhs;
415   exp_fold_tree_1 (tree->binary.lhs);
416
417   /* The SEGMENT_START operator is special because its first
418      operand is a string, not the name of a symbol.  Note that the
419      operands have been swapped, so binary.lhs is second (default)
420      operand, binary.rhs is first operand.  */
421   if (expld.result.valid_p && tree->type.node_code == SEGMENT_START)
422     {
423       const char *segment_name;
424       segment_type *seg;
425
426       /* Check to see if the user has overridden the default
427          value.  */
428       segment_name = tree->binary.rhs->name.name;
429       for (seg = segments; seg; seg = seg->next)
430         if (strcmp (seg->name, segment_name) == 0)
431           {
432             if (!seg->used
433                 && config.magic_demand_paged
434                 && (seg->value % config.maxpagesize) != 0)
435               einfo (_("%P: warning: address of `%s' isn't multiple of maximum page size\n"),
436                      segment_name);
437             seg->used = TRUE;
438             new_rel_from_abs (seg->value);
439             break;
440           }
441       return;
442     }
443
444   lhs = expld.result;
445   exp_fold_tree_1 (tree->binary.rhs);
446   expld.result.valid_p &= lhs.valid_p;
447
448   if (expld.result.valid_p)
449     {
450       if (lhs.section != expld.result.section)
451         {
452           /* If the values are from different sections, and neither is
453              just a number, make both the source arguments absolute.  */
454           if (expld.result.section != NULL
455               && lhs.section != NULL)
456             {
457               make_abs ();
458               lhs.value += lhs.section->vma;
459               lhs.section = bfd_abs_section_ptr;
460             }
461
462           /* If the rhs is just a number, keep the lhs section.  */
463           else if (expld.result.section == NULL)
464             {
465               expld.result.section = lhs.section;
466               /* Make this NULL so that we know one of the operands
467                  was just a number, for later tests.  */
468               lhs.section = NULL;
469             }
470         }
471       /* At this point we know that both operands have the same
472          section, or at least one of them is a plain number.  */
473
474       switch (tree->type.node_code)
475         {
476           /* Arithmetic operators, bitwise AND, bitwise OR and XOR
477              keep the section of one of their operands only when the
478              other operand is a plain number.  Losing the section when
479              operating on two symbols, ie. a result of a plain number,
480              is required for subtraction and XOR.  It's justifiable
481              for the other operations on the grounds that adding,
482              multiplying etc. two section relative values does not
483              really make sense unless they are just treated as
484              numbers.
485              The same argument could be made for many expressions
486              involving one symbol and a number.  For example,
487              "1 << x" and "100 / x" probably should not be given the
488              section of x.  The trouble is that if we fuss about such
489              things the rules become complex and it is onerous to
490              document ld expression evaluation.  */
491 #define BOP(x, y) \
492         case x:                                                 \
493           expld.result.value = lhs.value y expld.result.value;  \
494           if (expld.result.section == lhs.section)              \
495             expld.result.section = NULL;                        \
496           break;
497
498           /* Comparison operators, logical AND, and logical OR always
499              return a plain number.  */
500 #define BOPN(x, y) \
501         case x:                                                 \
502           expld.result.value = lhs.value y expld.result.value;  \
503           expld.result.section = NULL;                          \
504           break;
505
506           BOP ('+', +);
507           BOP ('*', *);
508           BOP ('-', -);
509           BOP (LSHIFT, <<);
510           BOP (RSHIFT, >>);
511           BOP ('&', &);
512           BOP ('^', ^);
513           BOP ('|', |);
514           BOPN (EQ, ==);
515           BOPN (NE, !=);
516           BOPN ('<', <);
517           BOPN ('>', >);
518           BOPN (LE, <=);
519           BOPN (GE, >=);
520           BOPN (ANDAND, &&);
521           BOPN (OROR, ||);
522
523         case '%':
524           if (expld.result.value != 0)
525             expld.result.value = ((bfd_signed_vma) lhs.value
526                                   % (bfd_signed_vma) expld.result.value);
527           else if (expld.phase != lang_mark_phase_enum)
528             einfo (_("%F%S %% by zero\n"), tree->binary.rhs);
529           if (expld.result.section == lhs.section)
530             expld.result.section = NULL;
531           break;
532
533         case '/':
534           if (expld.result.value != 0)
535             expld.result.value = ((bfd_signed_vma) lhs.value
536                                   / (bfd_signed_vma) expld.result.value);
537           else if (expld.phase != lang_mark_phase_enum)
538             einfo (_("%F%S / by zero\n"), tree->binary.rhs);
539           if (expld.result.section == lhs.section)
540             expld.result.section = NULL;
541           break;
542
543         case MAX_K:
544           if (lhs.value > expld.result.value)
545             expld.result.value = lhs.value;
546           break;
547
548         case MIN_K:
549           if (lhs.value < expld.result.value)
550             expld.result.value = lhs.value;
551           break;
552
553         case ALIGN_K:
554           expld.result.value = align_n (lhs.value, expld.result.value);
555           break;
556
557         case DATA_SEGMENT_ALIGN:
558           expld.dataseg.relro = exp_dataseg_relro_start;
559           if (expld.phase == lang_first_phase_enum
560               || expld.section != bfd_abs_section_ptr)
561             expld.result.valid_p = FALSE;
562           else
563             {
564               bfd_vma maxpage = lhs.value;
565               bfd_vma commonpage = expld.result.value;
566
567               expld.result.value = align_n (expld.dot, maxpage);
568               if (expld.dataseg.phase == exp_dataseg_relro_adjust)
569                 expld.result.value = expld.dataseg.base;
570               else if (expld.dataseg.phase == exp_dataseg_adjust)
571                 {
572                   if (commonpage < maxpage)
573                     expld.result.value += ((expld.dot + commonpage - 1)
574                                            & (maxpage - commonpage));
575                 }
576               else
577                 {
578                   expld.result.value += expld.dot & (maxpage - 1);
579                   if (expld.dataseg.phase == exp_dataseg_done)
580                     {
581                       /* OK.  */
582                     }
583                   else if (expld.dataseg.phase == exp_dataseg_none)
584                     {
585                       expld.dataseg.phase = exp_dataseg_align_seen;
586                       expld.dataseg.base = expld.result.value;
587                       expld.dataseg.pagesize = commonpage;
588                       expld.dataseg.maxpagesize = maxpage;
589                       expld.dataseg.relro_end = 0;
590                     }
591                   else
592                     expld.result.valid_p = FALSE;
593                 }
594             }
595           break;
596
597         case DATA_SEGMENT_RELRO_END:
598           /* Operands swapped!  DATA_SEGMENT_RELRO_END(offset,exp)
599              has offset in expld.result and exp in lhs.  */
600           expld.dataseg.relro = exp_dataseg_relro_end;
601           expld.dataseg.relro_offset = expld.result.value;
602           if (expld.phase == lang_first_phase_enum
603               || expld.section != bfd_abs_section_ptr)
604             expld.result.valid_p = FALSE;
605           else if (expld.dataseg.phase == exp_dataseg_align_seen
606                    || expld.dataseg.phase == exp_dataseg_adjust
607                    || expld.dataseg.phase == exp_dataseg_relro_adjust
608                    || expld.dataseg.phase == exp_dataseg_done)
609             {
610               if (expld.dataseg.phase == exp_dataseg_align_seen
611                   || expld.dataseg.phase == exp_dataseg_relro_adjust)
612                 expld.dataseg.relro_end = lhs.value + expld.result.value;
613
614               if (expld.dataseg.phase == exp_dataseg_relro_adjust
615                   && (expld.dataseg.relro_end
616                       & (expld.dataseg.pagesize - 1)))
617                 {
618                   expld.dataseg.relro_end += expld.dataseg.pagesize - 1;
619                   expld.dataseg.relro_end &= ~(expld.dataseg.pagesize - 1);
620                   expld.result.value = (expld.dataseg.relro_end
621                                         - expld.result.value);
622                 }
623               else
624                 expld.result.value = lhs.value;
625
626               if (expld.dataseg.phase == exp_dataseg_align_seen)
627                 expld.dataseg.phase = exp_dataseg_relro_seen;
628             }
629           else
630             expld.result.valid_p = FALSE;
631           break;
632
633         default:
634           FAIL ();
635         }
636     }
637 }
638
639 static void
640 fold_trinary (etree_type *tree)
641 {
642   exp_fold_tree_1 (tree->trinary.cond);
643   if (expld.result.valid_p)
644     exp_fold_tree_1 (expld.result.value
645                      ? tree->trinary.lhs
646                      : tree->trinary.rhs);
647 }
648
649 static void
650 fold_name (etree_type *tree)
651 {
652   memset (&expld.result, 0, sizeof (expld.result));
653
654   switch (tree->type.node_code)
655     {
656     case SIZEOF_HEADERS:
657       if (expld.phase != lang_first_phase_enum)
658         {
659           bfd_vma hdr_size = 0;
660           /* Don't find the real header size if only marking sections;
661              The bfd function may cache incorrect data.  */
662           if (expld.phase != lang_mark_phase_enum)
663             hdr_size = bfd_sizeof_headers (link_info.output_bfd, &link_info);
664           new_number (hdr_size);
665         }
666       break;
667
668     case DEFINED:
669       if (expld.phase != lang_first_phase_enum)
670         {
671           struct bfd_link_hash_entry *h;
672           struct definedness_hash_entry *def;
673
674           h = bfd_wrapped_link_hash_lookup (link_info.output_bfd,
675                                             &link_info,
676                                             tree->name.name,
677                                             FALSE, FALSE, TRUE);
678           new_number (h != NULL
679                       && (h->type == bfd_link_hash_defined
680                           || h->type == bfd_link_hash_defweak
681                           || h->type == bfd_link_hash_common)
682                       && ((def = symbol_defined (tree->name.name)) == NULL
683                           || def->by_object
684                           || def->iteration == (lang_statement_iteration & 1)));
685         }
686       break;
687
688     case NAME:
689       if (expld.assign_name != NULL
690           && strcmp (expld.assign_name, tree->name.name) == 0)
691         {
692           /* Self-assignment is only allowed for absolute symbols
693              defined in a linker script.  */
694           struct bfd_link_hash_entry *h;
695           struct definedness_hash_entry *def;
696
697           h = bfd_wrapped_link_hash_lookup (link_info.output_bfd,
698                                             &link_info,
699                                             tree->name.name,
700                                             FALSE, FALSE, TRUE);
701           if (!(h != NULL
702                 && (h->type == bfd_link_hash_defined
703                     || h->type == bfd_link_hash_defweak)
704                 && h->u.def.section == bfd_abs_section_ptr
705                 && (def = symbol_defined (tree->name.name)) != NULL
706                 && def->iteration == (lang_statement_iteration & 1)))
707             expld.assign_name = NULL;
708         }
709       if (expld.phase == lang_first_phase_enum)
710         ;
711       else if (tree->name.name[0] == '.' && tree->name.name[1] == 0)
712         new_rel_from_abs (expld.dot);
713       else
714         {
715           struct bfd_link_hash_entry *h;
716
717           h = bfd_wrapped_link_hash_lookup (link_info.output_bfd,
718                                             &link_info,
719                                             tree->name.name,
720                                             TRUE, FALSE, TRUE);
721           if (!h)
722             einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
723           else if (h->type == bfd_link_hash_defined
724                    || h->type == bfd_link_hash_defweak)
725             {
726               asection *output_section;
727
728               output_section = h->u.def.section->output_section;
729               if (output_section == NULL)
730                 {
731                   if (expld.phase == lang_mark_phase_enum)
732                     new_rel (h->u.def.value, h->u.def.section);
733                   else
734                     einfo (_("%X%S: unresolvable symbol `%s'"
735                              " referenced in expression\n"),
736                            tree, tree->name.name);
737                 }
738               else if (output_section == bfd_abs_section_ptr
739                        && (expld.section != bfd_abs_section_ptr
740                            || config.sane_expr))
741                 new_number (h->u.def.value + h->u.def.section->output_offset);
742               else
743                 new_rel (h->u.def.value + h->u.def.section->output_offset,
744                          output_section);
745             }
746           else if (expld.phase == lang_final_phase_enum
747                    || (expld.phase != lang_mark_phase_enum
748                        && expld.assigning_to_dot))
749             einfo (_("%F%S: undefined symbol `%s'"
750                      " referenced in expression\n"),
751                    tree, tree->name.name);
752           else if (h->type == bfd_link_hash_new)
753             {
754               h->type = bfd_link_hash_undefined;
755               h->u.undef.abfd = NULL;
756               if (h->u.undef.next == NULL && h != link_info.hash->undefs_tail)
757                 bfd_link_add_undef (link_info.hash, h);
758             }
759         }
760       break;
761
762     case ADDR:
763       if (expld.phase != lang_first_phase_enum)
764         {
765           lang_output_section_statement_type *os;
766
767           os = lang_output_section_find (tree->name.name);
768           if (os == NULL)
769             {
770               if (expld.phase == lang_final_phase_enum)
771                 einfo (_("%F%S: undefined section `%s'"
772                          " referenced in expression\n"),
773                        tree, tree->name.name);
774             }
775           else if (os->processed_vma)
776             new_rel (0, os->bfd_section);
777         }
778       break;
779
780     case LOADADDR:
781       if (expld.phase != lang_first_phase_enum)
782         {
783           lang_output_section_statement_type *os;
784
785           os = lang_output_section_find (tree->name.name);
786           if (os == NULL)
787             {
788               if (expld.phase == lang_final_phase_enum)
789                 einfo (_("%F%S: undefined section `%s'"
790                          " referenced in expression\n"),
791                        tree, tree->name.name);
792             }
793           else if (os->processed_lma)
794             {
795               if (os->load_base == NULL)
796                 new_abs (os->bfd_section->lma);
797               else
798                 {
799                   exp_fold_tree_1 (os->load_base);
800                   if (expld.result.valid_p)
801                     make_abs ();
802                 }
803             }
804         }
805       break;
806
807     case SIZEOF:
808     case ALIGNOF:
809       if (expld.phase != lang_first_phase_enum)
810         {
811           lang_output_section_statement_type *os;
812
813           os = lang_output_section_find (tree->name.name);
814           if (os == NULL)
815             {
816               if (expld.phase == lang_final_phase_enum)
817                 einfo (_("%F%S: undefined section `%s'"
818                          " referenced in expression\n"),
819                        tree, tree->name.name);
820               new_number (0);
821             }
822           else if (os->bfd_section != NULL)
823             {
824               bfd_vma val;
825
826               if (tree->type.node_code == SIZEOF)
827                 val = (os->bfd_section->size
828                        / bfd_octets_per_byte (link_info.output_bfd));
829               else
830                 val = (bfd_vma)1 << os->bfd_section->alignment_power;
831
832               new_number (val);
833             }
834           else
835             new_number (0);
836         }
837       break;
838
839     case LENGTH:
840       {
841       if (expld.phase != lang_first_phase_enum)
842         {
843           lang_memory_region_type *mem;
844
845           mem = lang_memory_region_lookup (tree->name.name, FALSE);
846           if (mem != NULL)
847             new_number (mem->length);
848           else
849             einfo (_("%F%S: undefined MEMORY region `%s'"
850              " referenced in expression\n"),
851            tree, tree->name.name);
852         }
853       }
854       break;
855
856     case ORIGIN:
857       if (expld.phase != lang_first_phase_enum)
858         {
859           lang_memory_region_type *mem;
860
861           mem = lang_memory_region_lookup (tree->name.name, FALSE);
862           if (mem != NULL)
863             new_rel_from_abs (mem->origin);
864           else
865             einfo (_("%F%S: undefined MEMORY region `%s'"
866                      " referenced in expression\n"),
867                    tree, tree->name.name);
868         }
869       break;
870
871     case CONSTANT:
872       if (strcmp (tree->name.name, "MAXPAGESIZE") == 0)
873         new_number (config.maxpagesize);
874       else if (strcmp (tree->name.name, "COMMONPAGESIZE") == 0)
875         new_number (config.commonpagesize);
876       else
877         einfo (_("%F%S: unknown constant `%s' referenced in expression\n"),
878                tree, tree->name.name);
879       break;
880
881     default:
882       FAIL ();
883       break;
884     }
885 }
886
887 /* Return true if TREE is '.'.  */
888  
889 static bfd_boolean
890 is_dot (const etree_type *tree)
891 {
892   return (tree->type.node_class == etree_name
893           && tree->type.node_code == NAME
894           && tree->name.name[0] == '.'
895           && tree->name.name[1] == 0);
896 }
897
898 /* Return true if TREE is a constant equal to VAL.  */
899
900 static bfd_boolean
901 is_value (const etree_type *tree, bfd_vma val)
902 {
903   return (tree->type.node_class == etree_value
904           && tree->value.value == val);
905 }
906
907 /* Return true if TREE is an absolute symbol equal to VAL defined in
908    a linker script.  */
909
910 static bfd_boolean
911 is_sym_value (const etree_type *tree, bfd_vma val)
912 {
913   struct bfd_link_hash_entry *h;
914   struct definedness_hash_entry *def;
915
916   return (tree->type.node_class == etree_name
917           && tree->type.node_code == NAME
918           && (def = symbol_defined (tree->name.name)) != NULL
919           && def->by_script
920           && def->iteration == (lang_statement_iteration & 1)
921           && (h = bfd_wrapped_link_hash_lookup (link_info.output_bfd,
922                                                 &link_info,
923                                                 tree->name.name,
924                                                 FALSE, FALSE, TRUE)) != NULL
925           && h->type == bfd_link_hash_defined
926           && h->u.def.section == bfd_abs_section_ptr
927           && h->u.def.value == val);
928 }
929
930 /* Return true if TREE is ". != 0".  */
931
932 static bfd_boolean
933 is_dot_ne_0 (const etree_type *tree)
934 {
935   return (tree->type.node_class == etree_binary
936           && tree->type.node_code == NE
937           && is_dot (tree->binary.lhs)
938           && is_value (tree->binary.rhs, 0));
939 }
940
941 /* Return true if TREE is ". = . + 0" or ". = . + sym" where sym is an
942    absolute constant with value 0 defined in a linker script.  */
943
944 static bfd_boolean
945 is_dot_plus_0 (const etree_type *tree)
946 {
947   return (tree->type.node_class == etree_binary
948           && tree->type.node_code == '+'
949           && is_dot (tree->binary.lhs)
950           && (is_value (tree->binary.rhs, 0)
951               || is_sym_value (tree->binary.rhs, 0)));
952 }
953
954 /* Return true if TREE is "ALIGN (. != 0 ? some_expression : 1)",
955    or equivalent binary ALIGN expressions.  */
956
957 static bfd_boolean
958 is_align_conditional (const etree_type *tree)
959 {
960   if (tree->type.node_code != ALIGN_K)
961     return 0;
962   else if (tree->type.node_class == etree_unary)
963     tree = tree->unary.child;
964   else if (tree->type.node_class == etree_binary
965            && (is_dot (tree->binary.lhs)
966                || (tree->binary.lhs->type.node_class == etree_unary
967                    && tree->binary.lhs->type.node_code == ABSOLUTE
968                    && is_dot (tree->binary.lhs->unary.child))))
969     tree = tree->binary.rhs;
970   else
971     return 0;
972
973   return (tree->type.node_class == etree_trinary
974           && is_dot_ne_0 (tree->trinary.cond)
975           && is_value (tree->trinary.rhs, 1));
976 }
977
978 static void
979 exp_fold_tree_1 (etree_type *tree)
980 {
981   if (tree == NULL)
982     {
983       memset (&expld.result, 0, sizeof (expld.result));
984       return;
985     }
986
987   switch (tree->type.node_class)
988     {
989     case etree_value:
990       if (expld.section == bfd_abs_section_ptr
991           && !config.sane_expr)
992         new_abs (tree->value.value);
993       else
994         new_number (tree->value.value);
995       expld.result.str = tree->value.str;
996       break;
997
998     case etree_rel:
999       if (expld.phase != lang_first_phase_enum)
1000         {
1001           asection *output_section = tree->rel.section->output_section;
1002           new_rel (tree->rel.value + tree->rel.section->output_offset,
1003                    output_section);
1004         }
1005       else
1006         memset (&expld.result, 0, sizeof (expld.result));
1007       break;
1008
1009     case etree_assert:
1010       exp_fold_tree_1 (tree->assert_s.child);
1011       if (expld.phase == lang_final_phase_enum && !expld.result.value)
1012         einfo ("%X%P: %s\n", tree->assert_s.message);
1013       break;
1014
1015     case etree_unary:
1016       fold_unary (tree);
1017       break;
1018
1019     case etree_binary:
1020       fold_binary (tree);
1021       break;
1022
1023     case etree_trinary:
1024       fold_trinary (tree);
1025       break;
1026
1027     case etree_assign:
1028     case etree_provide:
1029     case etree_provided:
1030       if (tree->assign.dst[0] == '.' && tree->assign.dst[1] == 0)
1031         {
1032           if (tree->type.node_class != etree_assign)
1033             einfo (_("%F%S can not PROVIDE assignment to"
1034                      " location counter\n"), tree);
1035           if (expld.phase != lang_first_phase_enum)
1036             {
1037               /* Notify the folder that this is an assignment to dot.  */
1038               expld.assigning_to_dot = TRUE;
1039               exp_fold_tree_1 (tree->assign.src);
1040               expld.assigning_to_dot = FALSE;
1041
1042               if (!expld.result.valid_p)
1043                 {
1044                   if (expld.phase != lang_mark_phase_enum)
1045                     einfo (_("%F%S invalid assignment to"
1046                              " location counter\n"), tree);
1047                   else if (expld.section != bfd_abs_section_ptr)
1048                     expld.section->flags |= SEC_KEEP;
1049                 }
1050               else if (expld.dotp == NULL)
1051                 einfo (_("%F%S assignment to location counter"
1052                          " invalid outside of SECTIONS\n"), tree);
1053
1054               /* After allocation, assignment to dot should not be
1055                  done inside an output section since allocation adds a
1056                  padding statement that effectively duplicates the
1057                  assignment.  */
1058               else if (expld.phase <= lang_allocating_phase_enum
1059                        || expld.section == bfd_abs_section_ptr)
1060                 {
1061                   bfd_vma nextdot;
1062
1063                   nextdot = expld.result.value;
1064                   if (expld.result.section != NULL)
1065                     nextdot += expld.result.section->vma;
1066                   else
1067                     nextdot += expld.section->vma;
1068
1069                   /* If we are assigning to dot inside an output
1070                      section arrange to keep the section, except for
1071                      certain expressions that evaluate to zero.  We
1072                      can't ignore all expressions that evaluate to
1073                      zero because an otherwise empty section might
1074                      have padding added by an alignment expression
1075                      that changes with relaxation.  Such a section
1076                      might have zero size before relaxation and so be
1077                      stripped incorrectly.  */
1078                   if (expld.phase == lang_mark_phase_enum
1079                       && expld.section != bfd_abs_section_ptr
1080                       && !(nextdot == expld.section->vma
1081                            && (is_value (tree->assign.src, 0)
1082                                || is_sym_value (tree->assign.src, 0)
1083                                || is_dot_plus_0 (tree->assign.src)
1084                                || is_align_conditional (tree->assign.src))))
1085                     expld.section->flags |= SEC_KEEP;
1086
1087                   if (nextdot < expld.dot
1088                       && expld.section != bfd_abs_section_ptr)
1089                     einfo (_("%F%S cannot move location counter backwards"
1090                              " (from %V to %V)\n"),
1091                            tree, expld.dot, nextdot);
1092                   else
1093                     {
1094                       expld.dot = nextdot;
1095                       *expld.dotp = nextdot;
1096                     }
1097                 }
1098             }
1099           else
1100             memset (&expld.result, 0, sizeof (expld.result));
1101         }
1102       else
1103         {
1104           struct bfd_link_hash_entry *h = NULL;
1105
1106           if (tree->type.node_class == etree_provide)
1107             {
1108               h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst,
1109                                         FALSE, FALSE, TRUE);
1110               if (h == NULL
1111                   || !(h->type == bfd_link_hash_new
1112                        || h->type == bfd_link_hash_undefined
1113                        || h->linker_def))
1114                 {
1115                   /* Do nothing.  The symbol was never referenced, or
1116                      was defined in some object file.  Undefined weak
1117                      symbols stay undefined.  */
1118                   break;
1119                 }
1120             }
1121
1122           expld.assign_name = tree->assign.dst;
1123           exp_fold_tree_1 (tree->assign.src);
1124           /* expld.assign_name remaining equal to tree->assign.dst
1125              below indicates the evaluation of tree->assign.src did
1126              not use the value of tree->assign.dst.  We don't allow
1127              self assignment until the final phase for two reasons:
1128              1) Expressions are evaluated multiple times.  With
1129              relaxation, the number of times may vary.
1130              2) Section relative symbol values cannot be correctly
1131              converted to absolute values, as is required by many
1132              expressions, until final section sizing is complete.  */
1133           if ((expld.result.valid_p
1134                && (expld.phase == lang_final_phase_enum
1135                    || expld.assign_name != NULL))
1136               || (expld.phase <= lang_mark_phase_enum
1137                   && tree->type.node_class == etree_assign
1138                   && tree->assign.defsym))
1139             {
1140               if (h == NULL)
1141                 {
1142                   h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst,
1143                                             TRUE, FALSE, TRUE);
1144                   if (h == NULL)
1145                     einfo (_("%P%F:%s: hash creation failed\n"),
1146                            tree->assign.dst);
1147                 }
1148
1149               if (expld.result.section == NULL)
1150                 expld.result.section = expld.section;
1151               if (!update_definedness (tree->assign.dst, h) && 0)
1152                 {
1153                   /* Symbol was already defined.  For now this error
1154                      is disabled because it causes failures in the ld
1155                      testsuite: ld-elf/var1, ld-scripts/defined5, and
1156                      ld-scripts/pr14962.  Some of these no doubt
1157                      reflect scripts used in the wild.  */
1158                   (*link_info.callbacks->multiple_definition)
1159                     (&link_info, h, link_info.output_bfd,
1160                      expld.result.section, expld.result.value);
1161                 }
1162               h->type = bfd_link_hash_defined;
1163               h->u.def.value = expld.result.value;
1164               h->u.def.section = expld.result.section;
1165               if (tree->type.node_class == etree_provide)
1166                 tree->type.node_class = etree_provided;
1167
1168               /* Copy the symbol type if this is a simple assignment of
1169                  one symbol to another.  This could be more general
1170                  (e.g. a ?: operator with NAMEs in each branch).  */
1171               if (tree->assign.src->type.node_class == etree_name)
1172                 {
1173                   struct bfd_link_hash_entry *hsrc;
1174
1175                   hsrc = bfd_link_hash_lookup (link_info.hash,
1176                                                tree->assign.src->name.name,
1177                                                FALSE, FALSE, TRUE);
1178                   if (hsrc)
1179                     bfd_copy_link_hash_symbol_type (link_info.output_bfd, h,
1180                                                     hsrc);
1181                 }
1182             }
1183           else if (expld.phase == lang_final_phase_enum)
1184             {
1185               h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst,
1186                                         FALSE, FALSE, TRUE);
1187               if (h != NULL
1188                   && h->type == bfd_link_hash_new)
1189                 h->type = bfd_link_hash_undefined;
1190             }
1191           expld.assign_name = NULL;
1192         }
1193       break;
1194
1195     case etree_name:
1196       fold_name (tree);
1197       break;
1198
1199     default:
1200       FAIL ();
1201       memset (&expld.result, 0, sizeof (expld.result));
1202       break;
1203     }
1204 }
1205
1206 void
1207 exp_fold_tree (etree_type *tree, asection *current_section, bfd_vma *dotp)
1208 {
1209   expld.dot = *dotp;
1210   expld.dotp = dotp;
1211   expld.section = current_section;
1212   exp_fold_tree_1 (tree);
1213 }
1214
1215 void
1216 exp_fold_tree_no_dot (etree_type *tree)
1217 {
1218   expld.dot = 0;
1219   expld.dotp = NULL;
1220   expld.section = bfd_abs_section_ptr;
1221   exp_fold_tree_1 (tree);
1222 }
1223
1224 etree_type *
1225 exp_binop (int code, etree_type *lhs, etree_type *rhs)
1226 {
1227   etree_type value, *new_e;
1228
1229   value.type.node_code = code;
1230   value.type.filename = lhs->type.filename;
1231   value.type.lineno = lhs->type.lineno;
1232   value.binary.lhs = lhs;
1233   value.binary.rhs = rhs;
1234   value.type.node_class = etree_binary;
1235   exp_fold_tree_no_dot (&value);
1236   if (expld.result.valid_p)
1237     return exp_intop (expld.result.value);
1238
1239   new_e = (etree_type *) stat_alloc (sizeof (new_e->binary));
1240   memcpy (new_e, &value, sizeof (new_e->binary));
1241   return new_e;
1242 }
1243
1244 etree_type *
1245 exp_trinop (int code, etree_type *cond, etree_type *lhs, etree_type *rhs)
1246 {
1247   etree_type value, *new_e;
1248
1249   value.type.node_code = code;
1250   value.type.filename = cond->type.filename;
1251   value.type.lineno = cond->type.lineno;
1252   value.trinary.lhs = lhs;
1253   value.trinary.cond = cond;
1254   value.trinary.rhs = rhs;
1255   value.type.node_class = etree_trinary;
1256   exp_fold_tree_no_dot (&value);
1257   if (expld.result.valid_p)
1258     return exp_intop (expld.result.value);
1259
1260   new_e = (etree_type *) stat_alloc (sizeof (new_e->trinary));
1261   memcpy (new_e, &value, sizeof (new_e->trinary));
1262   return new_e;
1263 }
1264
1265 etree_type *
1266 exp_unop (int code, etree_type *child)
1267 {
1268   etree_type value, *new_e;
1269
1270   value.unary.type.node_code = code;
1271   value.unary.type.filename = child->type.filename;
1272   value.unary.type.lineno = child->type.lineno;
1273   value.unary.child = child;
1274   value.unary.type.node_class = etree_unary;
1275   exp_fold_tree_no_dot (&value);
1276   if (expld.result.valid_p)
1277     return exp_intop (expld.result.value);
1278
1279   new_e = (etree_type *) stat_alloc (sizeof (new_e->unary));
1280   memcpy (new_e, &value, sizeof (new_e->unary));
1281   return new_e;
1282 }
1283
1284 etree_type *
1285 exp_nameop (int code, const char *name)
1286 {
1287   etree_type value, *new_e;
1288
1289   value.name.type.node_code = code;
1290   value.name.type.filename = ldlex_filename ();
1291   value.name.type.lineno = lineno;
1292   value.name.name = name;
1293   value.name.type.node_class = etree_name;
1294
1295   exp_fold_tree_no_dot (&value);
1296   if (expld.result.valid_p)
1297     return exp_intop (expld.result.value);
1298
1299   new_e = (etree_type *) stat_alloc (sizeof (new_e->name));
1300   memcpy (new_e, &value, sizeof (new_e->name));
1301   return new_e;
1302
1303 }
1304
1305 static etree_type *
1306 exp_assop (const char *dst,
1307            etree_type *src,
1308            enum node_tree_enum class,
1309            bfd_boolean defsym,
1310            bfd_boolean hidden)
1311 {
1312   etree_type *n;
1313
1314   n = (etree_type *) stat_alloc (sizeof (n->assign));
1315   n->assign.type.node_code = '=';
1316   n->assign.type.filename = src->type.filename;
1317   n->assign.type.lineno = src->type.lineno;
1318   n->assign.type.node_class = class;
1319   n->assign.src = src;
1320   n->assign.dst = dst;
1321   n->assign.defsym = defsym;
1322   n->assign.hidden = hidden;
1323   return n;
1324 }
1325
1326 /* Handle linker script assignments and HIDDEN.  */
1327
1328 etree_type *
1329 exp_assign (const char *dst, etree_type *src, bfd_boolean hidden)
1330 {
1331   return exp_assop (dst, src, etree_assign, FALSE, hidden);
1332 }
1333
1334 /* Handle --defsym command-line option.  */
1335
1336 etree_type *
1337 exp_defsym (const char *dst, etree_type *src)
1338 {
1339   return exp_assop (dst, src, etree_assign, TRUE, FALSE);
1340 }
1341
1342 /* Handle PROVIDE.  */
1343
1344 etree_type *
1345 exp_provide (const char *dst, etree_type *src, bfd_boolean hidden)
1346 {
1347   return exp_assop (dst, src, etree_provide, FALSE, hidden);
1348 }
1349
1350 /* Handle ASSERT.  */
1351
1352 etree_type *
1353 exp_assert (etree_type *exp, const char *message)
1354 {
1355   etree_type *n;
1356
1357   n = (etree_type *) stat_alloc (sizeof (n->assert_s));
1358   n->assert_s.type.node_code = '!';
1359   n->assert_s.type.filename = exp->type.filename;
1360   n->assert_s.type.lineno = exp->type.lineno;
1361   n->assert_s.type.node_class = etree_assert;
1362   n->assert_s.child = exp;
1363   n->assert_s.message = message;
1364   return n;
1365 }
1366
1367 void
1368 exp_print_tree (etree_type *tree)
1369 {
1370   bfd_boolean function_like;
1371
1372   if (config.map_file == NULL)
1373     config.map_file = stderr;
1374
1375   if (tree == NULL)
1376     {
1377       minfo ("NULL TREE\n");
1378       return;
1379     }
1380
1381   switch (tree->type.node_class)
1382     {
1383     case etree_value:
1384       minfo ("0x%v", tree->value.value);
1385       return;
1386     case etree_rel:
1387       if (tree->rel.section->owner != NULL)
1388         minfo ("%B:", tree->rel.section->owner);
1389       minfo ("%s+0x%v", tree->rel.section->name, tree->rel.value);
1390       return;
1391     case etree_assign:
1392       fputs (tree->assign.dst, config.map_file);
1393       exp_print_token (tree->type.node_code, TRUE);
1394       exp_print_tree (tree->assign.src);
1395       break;
1396     case etree_provide:
1397     case etree_provided:
1398       fprintf (config.map_file, "PROVIDE (%s, ", tree->assign.dst);
1399       exp_print_tree (tree->assign.src);
1400       fputc (')', config.map_file);
1401       break;
1402     case etree_binary:
1403       function_like = FALSE;
1404       switch (tree->type.node_code)
1405         {
1406         case MAX_K:
1407         case MIN_K:
1408         case ALIGN_K:
1409         case DATA_SEGMENT_ALIGN:
1410         case DATA_SEGMENT_RELRO_END:
1411           function_like = TRUE;
1412           break;
1413         case SEGMENT_START:
1414           /* Special handling because arguments are in reverse order and
1415              the segment name is quoted.  */
1416           exp_print_token (tree->type.node_code, FALSE);
1417           fputs (" (\"", config.map_file);
1418           exp_print_tree (tree->binary.rhs);
1419           fputs ("\", ", config.map_file);
1420           exp_print_tree (tree->binary.lhs);
1421           fputc (')', config.map_file);
1422           return;
1423         }
1424       if (function_like)
1425         {
1426           exp_print_token (tree->type.node_code, FALSE);
1427           fputc (' ', config.map_file);
1428         }
1429       fputc ('(', config.map_file);
1430       exp_print_tree (tree->binary.lhs);
1431       if (function_like)
1432         fprintf (config.map_file, ", ");
1433       else
1434         exp_print_token (tree->type.node_code, TRUE);
1435       exp_print_tree (tree->binary.rhs);
1436       fputc (')', config.map_file);
1437       break;
1438     case etree_trinary:
1439       exp_print_tree (tree->trinary.cond);
1440       fputc ('?', config.map_file);
1441       exp_print_tree (tree->trinary.lhs);
1442       fputc (':', config.map_file);
1443       exp_print_tree (tree->trinary.rhs);
1444       break;
1445     case etree_unary:
1446       exp_print_token (tree->unary.type.node_code, FALSE);
1447       if (tree->unary.child)
1448         {
1449           fprintf (config.map_file, " (");
1450           exp_print_tree (tree->unary.child);
1451           fputc (')', config.map_file);
1452         }
1453       break;
1454
1455     case etree_assert:
1456       fprintf (config.map_file, "ASSERT (");
1457       exp_print_tree (tree->assert_s.child);
1458       fprintf (config.map_file, ", %s)", tree->assert_s.message);
1459       break;
1460
1461     case etree_name:
1462       if (tree->type.node_code == NAME)
1463         fputs (tree->name.name, config.map_file);
1464       else
1465         {
1466           exp_print_token (tree->type.node_code, FALSE);
1467           if (tree->name.name)
1468             fprintf (config.map_file, " (%s)", tree->name.name);
1469         }
1470       break;
1471     default:
1472       FAIL ();
1473       break;
1474     }
1475 }
1476
1477 bfd_vma
1478 exp_get_vma (etree_type *tree, bfd_vma def, char *name)
1479 {
1480   if (tree != NULL)
1481     {
1482       exp_fold_tree_no_dot (tree);
1483       if (expld.result.valid_p)
1484         return expld.result.value;
1485       else if (name != NULL && expld.phase != lang_mark_phase_enum)
1486         einfo (_("%F%S: nonconstant expression for %s\n"),
1487                tree, name);
1488     }
1489   return def;
1490 }
1491
1492 int
1493 exp_get_value_int (etree_type *tree, int def, char *name)
1494 {
1495   return exp_get_vma (tree, def, name);
1496 }
1497
1498 fill_type *
1499 exp_get_fill (etree_type *tree, fill_type *def, char *name)
1500 {
1501   fill_type *fill;
1502   size_t len;
1503   unsigned int val;
1504
1505   if (tree == NULL)
1506     return def;
1507
1508   exp_fold_tree_no_dot (tree);
1509   if (!expld.result.valid_p)
1510     {
1511       if (name != NULL && expld.phase != lang_mark_phase_enum)
1512         einfo (_("%F%S: nonconstant expression for %s\n"),
1513                tree, name);
1514       return def;
1515     }
1516
1517   if (expld.result.str != NULL && (len = strlen (expld.result.str)) != 0)
1518     {
1519       unsigned char *dst;
1520       unsigned char *s;
1521       fill = (fill_type *) xmalloc ((len + 1) / 2 + sizeof (*fill) - 1);
1522       fill->size = (len + 1) / 2;
1523       dst = fill->data;
1524       s = (unsigned char *) expld.result.str;
1525       val = 0;
1526       do
1527         {
1528           unsigned int digit;
1529
1530           digit = *s++ - '0';
1531           if (digit > 9)
1532             digit = (digit - 'A' + '0' + 10) & 0xf;
1533           val <<= 4;
1534           val += digit;
1535           --len;
1536           if ((len & 1) == 0)
1537             {
1538               *dst++ = val;
1539               val = 0;
1540             }
1541         }
1542       while (len != 0);
1543     }
1544   else
1545     {
1546       fill = (fill_type *) xmalloc (4 + sizeof (*fill) - 1);
1547       val = expld.result.value;
1548       fill->data[0] = (val >> 24) & 0xff;
1549       fill->data[1] = (val >> 16) & 0xff;
1550       fill->data[2] = (val >>  8) & 0xff;
1551       fill->data[3] = (val >>  0) & 0xff;
1552       fill->size = 4;
1553     }
1554   return fill;
1555 }
1556
1557 bfd_vma
1558 exp_get_abs_int (etree_type *tree, int def, char *name)
1559 {
1560   if (tree != NULL)
1561     {
1562       exp_fold_tree_no_dot (tree);
1563
1564       if (expld.result.valid_p)
1565         {
1566           if (expld.result.section != NULL)
1567             expld.result.value += expld.result.section->vma;
1568           return expld.result.value;
1569         }
1570       else if (name != NULL && expld.phase != lang_mark_phase_enum)
1571         {
1572           einfo (_("%F%S: nonconstant expression for %s\n"),
1573                  tree, name);
1574         }
1575     }
1576   return def;
1577 }
1578
1579 static bfd_vma
1580 align_n (bfd_vma value, bfd_vma align)
1581 {
1582   if (align <= 1)
1583     return value;
1584
1585   value = (value + align - 1) / align;
1586   return value * align;
1587 }
1588
1589 void
1590 ldexp_init (void)
1591 {
1592   /* The value "13" is ad-hoc, somewhat related to the expected number of
1593      assignments in a linker script.  */
1594   if (!bfd_hash_table_init_n (&definedness_table,
1595                               definedness_newfunc,
1596                               sizeof (struct definedness_hash_entry),
1597                               13))
1598     einfo (_("%P%F: can not create hash table: %E\n"));
1599 }
1600
1601 void
1602 ldexp_finish (void)
1603 {
1604   bfd_hash_table_free (&definedness_table);
1605 }