1 /* Linker command language support.
2    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005
4    Free Software Foundation, Inc.
5 
6    This file is part of GLD, the Gnu Linker.
7 
8    GLD 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 2, or (at your option)
11    any later version.
12 
13    GLD 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 GLD; see the file COPYING.  If not, write to the Free
20    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21    02110-1301, USA.  */
22 
23 #include "bfd.h"
24 #include "sysdep.h"
25 #include "libiberty.h"
26 #include "safe-ctype.h"
27 #include "obstack.h"
28 #include "bfdlink.h"
29 
30 #include "ld.h"
31 #include "ldmain.h"
32 #include "ldexp.h"
33 #include "ldlang.h"
34 #include <ldgram.h>
35 #include "ldlex.h"
36 #include "ldmisc.h"
37 #include "ldctor.h"
38 #include "ldfile.h"
39 #include "ldemul.h"
40 #include "fnmatch.h"
41 #include "demangle.h"
42 #include "hashtab.h"
43 
44 #ifndef offsetof
45 #define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
46 #endif
47 
48 /* Locals variables.  */
49 static struct obstack stat_obstack;
50 static struct obstack map_obstack;
51 
52 #define obstack_chunk_alloc xmalloc
53 #define obstack_chunk_free free
54 static const char *startup_file;
55 static lang_statement_list_type input_file_chain;
56 static bfd_boolean placed_commons = FALSE;
57 static bfd_boolean stripped_excluded_sections = FALSE;
58 static lang_output_section_statement_type *default_common_section;
59 static bfd_boolean map_option_f;
60 static bfd_vma print_dot;
61 static lang_input_statement_type *first_file;
62 static const char *current_target;
63 static const char *output_target;
64 static lang_statement_list_type statement_list;
65 static struct lang_phdr *lang_phdr_list;
66 static struct bfd_hash_table lang_definedness_table;
67 
68 /* Forward declarations.  */
69 static void exp_init_os (etree_type *);
70 static void init_map_userdata (bfd *, asection *, void *);
71 static lang_input_statement_type *lookup_name (const char *);
72 static bfd_boolean load_symbols (lang_input_statement_type *,
73 				 lang_statement_list_type *);
74 static struct bfd_hash_entry *lang_definedness_newfunc
75  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
76 static void insert_undefined (const char *);
77 static void print_all_symbols (asection *);
78 static bfd_boolean sort_def_symbol (struct bfd_link_hash_entry *, void *);
79 static void print_statement (lang_statement_union_type *,
80 			     lang_output_section_statement_type *);
81 static void print_statement_list (lang_statement_union_type *,
82 				  lang_output_section_statement_type *);
83 static void print_statements (void);
84 static bfd_boolean lang_one_common (struct bfd_link_hash_entry *, void *);
85 static void lang_record_phdrs (void);
86 static void lang_do_version_exports_section (void);
87 
88 /* Exported variables.  */
89 lang_output_section_statement_type *abs_output_section;
90 lang_statement_list_type lang_output_section_statement;
91 lang_statement_list_type *stat_ptr = &statement_list;
92 lang_statement_list_type file_chain = { NULL, NULL };
93 struct bfd_sym_chain entry_symbol = { NULL, NULL };
94 static const char *entry_symbol_default = "start";
95 const char *entry_section = ".text";
96 bfd_boolean entry_from_cmdline;
97 bfd_boolean lang_has_input_file = FALSE;
98 bfd_boolean had_output_filename = FALSE;
99 bfd_boolean lang_float_flag = FALSE;
100 bfd_boolean delete_output_file_on_failure = FALSE;
101 struct lang_nocrossrefs *nocrossref_list;
102 static struct unique_sections *unique_section_list;
103 static bfd_boolean ldlang_sysrooted_script = FALSE;
104 
105  /* Functions that traverse the linker script and might evaluate
106     DEFINED() need to increment this.  */
107 int lang_statement_iteration = 0;
108 
109 etree_type *base; /* Relocation base - or null */
110 
111 /* Return TRUE if the PATTERN argument is a wildcard pattern.
112    Although backslashes are treated specially if a pattern contains
113    wildcards, we do not consider the mere presence of a backslash to
114    be enough to cause the pattern to be treated as a wildcard.
115    That lets us handle DOS filenames more naturally.  */
116 #define wildcardp(pattern) (strpbrk ((pattern), "?*[") != NULL)
117 
118 #define new_stat(x, y) \
119   (x##_type *) new_statement (x##_enum, sizeof (x##_type), y)
120 
121 #define outside_section_address(q) \
122   ((q)->output_offset + (q)->output_section->vma)
123 
124 #define outside_symbol_address(q) \
125   ((q)->value + outside_section_address (q->section))
126 
127 #define SECTION_NAME_MAP_LENGTH (16)
128 
129 void *
stat_alloc(size_t size)130 stat_alloc (size_t size)
131 {
132   return obstack_alloc (&stat_obstack, size);
133 }
134 
135 bfd_boolean
unique_section_p(const asection * sec)136 unique_section_p (const asection *sec)
137 {
138   struct unique_sections *unam;
139   const char *secnam;
140 
141   if (link_info.relocatable
142       && sec->owner != NULL
143       && bfd_is_group_section (sec->owner, sec))
144     return TRUE;
145 
146   secnam = sec->name;
147   for (unam = unique_section_list; unam; unam = unam->next)
148     if (wildcardp (unam->name)
149 	? fnmatch (unam->name, secnam, 0) == 0
150 	: strcmp (unam->name, secnam) == 0)
151       {
152 	return TRUE;
153       }
154 
155   return FALSE;
156 }
157 
158 /* Generic traversal routines for finding matching sections.  */
159 
160 /* Try processing a section against a wildcard.  This just calls
161    the callback unless the filename exclusion list is present
162    and excludes the file.  It's hardly ever present so this
163    function is very fast.  */
164 
165 static void
walk_wild_consider_section(lang_wild_statement_type * ptr,lang_input_statement_type * file,asection * s,struct wildcard_list * sec,callback_t callback,void * data)166 walk_wild_consider_section (lang_wild_statement_type *ptr,
167 			    lang_input_statement_type *file,
168 			    asection *s,
169 			    struct wildcard_list *sec,
170 			    callback_t callback,
171 			    void *data)
172 {
173   bfd_boolean skip = FALSE;
174   struct name_list *list_tmp;
175 
176   /* Don't process sections from files which were
177      excluded.  */
178   for (list_tmp = sec->spec.exclude_name_list;
179        list_tmp;
180        list_tmp = list_tmp->next)
181     {
182       bfd_boolean is_wildcard = wildcardp (list_tmp->name);
183       if (is_wildcard)
184 	skip = fnmatch (list_tmp->name, file->filename, 0) == 0;
185       else
186 	skip = strcmp (list_tmp->name, file->filename) == 0;
187 
188       /* If this file is part of an archive, and the archive is
189 	 excluded, exclude this file.  */
190       if (! skip && file->the_bfd != NULL
191 	  && file->the_bfd->my_archive != NULL
192 	  && file->the_bfd->my_archive->filename != NULL)
193 	{
194 	  if (is_wildcard)
195 	    skip = fnmatch (list_tmp->name,
196 			    file->the_bfd->my_archive->filename,
197 			    0) == 0;
198 	  else
199 	    skip = strcmp (list_tmp->name,
200 			   file->the_bfd->my_archive->filename) == 0;
201 	}
202 
203       if (skip)
204 	break;
205     }
206 
207   if (!skip)
208     (*callback) (ptr, sec, s, file, data);
209 }
210 
211 /* Lowest common denominator routine that can handle everything correctly,
212    but slowly.  */
213 
214 static void
walk_wild_section_general(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)215 walk_wild_section_general (lang_wild_statement_type *ptr,
216 			   lang_input_statement_type *file,
217 			   callback_t callback,
218 			   void *data)
219 {
220   asection *s;
221   struct wildcard_list *sec;
222 
223   for (s = file->the_bfd->sections; s != NULL; s = s->next)
224     {
225       sec = ptr->section_list;
226       if (sec == NULL)
227 	(*callback) (ptr, sec, s, file, data);
228 
229       while (sec != NULL)
230 	{
231 	  bfd_boolean skip = FALSE;
232 
233 	  if (sec->spec.name != NULL)
234 	    {
235 	      const char *sname = bfd_get_section_name (file->the_bfd, s);
236 
237 	      if (wildcardp (sec->spec.name))
238 		skip = fnmatch (sec->spec.name, sname, 0) != 0;
239 	      else
240 		skip = strcmp (sec->spec.name, sname) != 0;
241 	    }
242 
243 	  if (!skip)
244 	    walk_wild_consider_section (ptr, file, s, sec, callback, data);
245 
246 	  sec = sec->next;
247 	}
248     }
249 }
250 
251 /* Routines to find a single section given its name.  If there's more
252    than one section with that name, we report that.  */
253 
254 typedef struct
255 {
256   asection *found_section;
257   bfd_boolean multiple_sections_found;
258 } section_iterator_callback_data;
259 
260 static bfd_boolean
section_iterator_callback(bfd * bfd ATTRIBUTE_UNUSED,asection * s,void * data)261 section_iterator_callback (bfd *bfd ATTRIBUTE_UNUSED, asection *s, void *data)
262 {
263   section_iterator_callback_data *d = data;
264 
265   if (d->found_section != NULL)
266     {
267       d->multiple_sections_found = TRUE;
268       return TRUE;
269     }
270 
271   d->found_section = s;
272   return FALSE;
273 }
274 
275 static asection *
find_section(lang_input_statement_type * file,struct wildcard_list * sec,bfd_boolean * multiple_sections_found)276 find_section (lang_input_statement_type *file,
277 	      struct wildcard_list *sec,
278 	      bfd_boolean *multiple_sections_found)
279 {
280   section_iterator_callback_data cb_data = { NULL, FALSE };
281 
282   bfd_get_section_by_name_if (file->the_bfd, sec->spec.name,
283 			      section_iterator_callback, &cb_data);
284   *multiple_sections_found = cb_data.multiple_sections_found;
285   return cb_data.found_section;
286 }
287 
288 /* Code for handling simple wildcards without going through fnmatch,
289    which can be expensive because of charset translations etc.  */
290 
291 /* A simple wild is a literal string followed by a single '*',
292    where the literal part is at least 4 characters long.  */
293 
294 static bfd_boolean
is_simple_wild(const char * name)295 is_simple_wild (const char *name)
296 {
297   size_t len = strcspn (name, "*?[");
298   return len >= 4 && name[len] == '*' && name[len + 1] == '\0';
299 }
300 
301 static bfd_boolean
match_simple_wild(const char * pattern,const char * name)302 match_simple_wild (const char *pattern, const char *name)
303 {
304   /* The first four characters of the pattern are guaranteed valid
305      non-wildcard characters.  So we can go faster.  */
306   if (pattern[0] != name[0] || pattern[1] != name[1]
307       || pattern[2] != name[2] || pattern[3] != name[3])
308     return FALSE;
309 
310   pattern += 4;
311   name += 4;
312   while (*pattern != '*')
313     if (*name++ != *pattern++)
314       return FALSE;
315 
316   return TRUE;
317 }
318 
319 /* Specialized, optimized routines for handling different kinds of
320    wildcards */
321 
322 static void
walk_wild_section_specs1_wild0(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)323 walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr,
324 				lang_input_statement_type *file,
325 				callback_t callback,
326 				void *data)
327 {
328   /* We can just do a hash lookup for the section with the right name.
329      But if that lookup discovers more than one section with the name
330      (should be rare), we fall back to the general algorithm because
331      we would otherwise have to sort the sections to make sure they
332      get processed in the bfd's order.  */
333   bfd_boolean multiple_sections_found;
334   struct wildcard_list *sec0 = ptr->handler_data[0];
335   asection *s0 = find_section (file, sec0, &multiple_sections_found);
336 
337   if (multiple_sections_found)
338     walk_wild_section_general (ptr, file, callback, data);
339   else if (s0)
340     walk_wild_consider_section (ptr, file, s0, sec0, callback, data);
341 }
342 
343 static void
walk_wild_section_specs1_wild1(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)344 walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr,
345 				lang_input_statement_type *file,
346 				callback_t callback,
347 				void *data)
348 {
349   asection *s;
350   struct wildcard_list *wildsec0 = ptr->handler_data[0];
351 
352   for (s = file->the_bfd->sections; s != NULL; s = s->next)
353     {
354       const char *sname = bfd_get_section_name (file->the_bfd, s);
355       bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname);
356 
357       if (!skip)
358 	walk_wild_consider_section (ptr, file, s, wildsec0, callback, data);
359     }
360 }
361 
362 static void
walk_wild_section_specs2_wild1(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)363 walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr,
364 				lang_input_statement_type *file,
365 				callback_t callback,
366 				void *data)
367 {
368   asection *s;
369   struct wildcard_list *sec0 = ptr->handler_data[0];
370   struct wildcard_list *wildsec1 = ptr->handler_data[1];
371   bfd_boolean multiple_sections_found;
372   asection *s0 = find_section (file, sec0, &multiple_sections_found);
373 
374   if (multiple_sections_found)
375     {
376       walk_wild_section_general (ptr, file, callback, data);
377       return;
378     }
379 
380   /* Note that if the section was not found, s0 is NULL and
381      we'll simply never succeed the s == s0 test below.  */
382   for (s = file->the_bfd->sections; s != NULL; s = s->next)
383     {
384       /* Recall that in this code path, a section cannot satisfy more
385 	 than one spec, so if s == s0 then it cannot match
386 	 wildspec1.  */
387       if (s == s0)
388 	walk_wild_consider_section (ptr, file, s, sec0, callback, data);
389       else
390 	{
391 	  const char *sname = bfd_get_section_name (file->the_bfd, s);
392 	  bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
393 
394 	  if (!skip)
395 	    walk_wild_consider_section (ptr, file, s, wildsec1, callback,
396 					data);
397 	}
398     }
399 }
400 
401 static void
walk_wild_section_specs3_wild2(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)402 walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr,
403 				lang_input_statement_type *file,
404 				callback_t callback,
405 				void *data)
406 {
407   asection *s;
408   struct wildcard_list *sec0 = ptr->handler_data[0];
409   struct wildcard_list *wildsec1 = ptr->handler_data[1];
410   struct wildcard_list *wildsec2 = ptr->handler_data[2];
411   bfd_boolean multiple_sections_found;
412   asection *s0 = find_section (file, sec0, &multiple_sections_found);
413 
414   if (multiple_sections_found)
415     {
416       walk_wild_section_general (ptr, file, callback, data);
417       return;
418     }
419 
420   for (s = file->the_bfd->sections; s != NULL; s = s->next)
421     {
422       if (s == s0)
423 	walk_wild_consider_section (ptr, file, s, sec0, callback, data);
424       else
425 	{
426 	  const char *sname = bfd_get_section_name (file->the_bfd, s);
427 	  bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
428 
429 	  if (!skip)
430 	    walk_wild_consider_section (ptr, file, s, wildsec1, callback, data);
431 	  else
432 	    {
433 	      skip = !match_simple_wild (wildsec2->spec.name, sname);
434 	      if (!skip)
435 		walk_wild_consider_section (ptr, file, s, wildsec2, callback,
436 					    data);
437 	    }
438 	}
439     }
440 }
441 
442 static void
walk_wild_section_specs4_wild2(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)443 walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr,
444 				lang_input_statement_type *file,
445 				callback_t callback,
446 				void *data)
447 {
448   asection *s;
449   struct wildcard_list *sec0 = ptr->handler_data[0];
450   struct wildcard_list *sec1 = ptr->handler_data[1];
451   struct wildcard_list *wildsec2 = ptr->handler_data[2];
452   struct wildcard_list *wildsec3 = ptr->handler_data[3];
453   bfd_boolean multiple_sections_found;
454   asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1;
455 
456   if (multiple_sections_found)
457     {
458       walk_wild_section_general (ptr, file, callback, data);
459       return;
460     }
461 
462   s1 = find_section (file, sec1, &multiple_sections_found);
463   if (multiple_sections_found)
464     {
465       walk_wild_section_general (ptr, file, callback, data);
466       return;
467     }
468 
469   for (s = file->the_bfd->sections; s != NULL; s = s->next)
470     {
471       if (s == s0)
472 	walk_wild_consider_section (ptr, file, s, sec0, callback, data);
473       else
474 	if (s == s1)
475 	  walk_wild_consider_section (ptr, file, s, sec1, callback, data);
476 	else
477 	  {
478 	    const char *sname = bfd_get_section_name (file->the_bfd, s);
479 	    bfd_boolean skip = !match_simple_wild (wildsec2->spec.name,
480 						   sname);
481 
482 	    if (!skip)
483 	      walk_wild_consider_section (ptr, file, s, wildsec2, callback,
484 					  data);
485 	    else
486 	      {
487 		skip = !match_simple_wild (wildsec3->spec.name, sname);
488 		if (!skip)
489 		  walk_wild_consider_section (ptr, file, s, wildsec3,
490 					      callback, data);
491 	      }
492 	  }
493     }
494 }
495 
496 static void
walk_wild_section(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)497 walk_wild_section (lang_wild_statement_type *ptr,
498 		   lang_input_statement_type *file,
499 		   callback_t callback,
500 		   void *data)
501 {
502   if (file->just_syms_flag)
503     return;
504 
505   (*ptr->walk_wild_section_handler) (ptr, file, callback, data);
506 }
507 
508 /* Returns TRUE when name1 is a wildcard spec that might match
509    something name2 can match.  We're conservative: we return FALSE
510    only if the prefixes of name1 and name2 are different up to the
511    first wildcard character.  */
512 
513 static bfd_boolean
wild_spec_can_overlap(const char * name1,const char * name2)514 wild_spec_can_overlap (const char *name1, const char *name2)
515 {
516   size_t prefix1_len = strcspn (name1, "?*[");
517   size_t prefix2_len = strcspn (name2, "?*[");
518   size_t min_prefix_len;
519 
520   /* Note that if there is no wildcard character, then we treat the
521      terminating 0 as part of the prefix.  Thus ".text" won't match
522      ".text." or ".text.*", for example.  */
523   if (name1[prefix1_len] == '\0')
524     prefix1_len++;
525   if (name2[prefix2_len] == '\0')
526     prefix2_len++;
527 
528   min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len;
529 
530   return memcmp (name1, name2, min_prefix_len) == 0;
531 }
532 
533 /* Select specialized code to handle various kinds of wildcard
534    statements.  */
535 
536 static void
analyze_walk_wild_section_handler(lang_wild_statement_type * ptr)537 analyze_walk_wild_section_handler (lang_wild_statement_type *ptr)
538 {
539   int sec_count = 0;
540   int wild_name_count = 0;
541   struct wildcard_list *sec;
542   int signature;
543   int data_counter;
544 
545   ptr->walk_wild_section_handler = walk_wild_section_general;
546 
547   /* Count how many wildcard_specs there are, and how many of those
548      actually use wildcards in the name.  Also, bail out if any of the
549      wildcard names are NULL. (Can this actually happen?
550      walk_wild_section used to test for it.)  And bail out if any
551      of the wildcards are more complex than a simple string
552      ending in a single '*'.  */
553   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
554     {
555       ++sec_count;
556       if (sec->spec.name == NULL)
557 	return;
558       if (wildcardp (sec->spec.name))
559 	{
560 	  ++wild_name_count;
561 	  if (!is_simple_wild (sec->spec.name))
562 	    return;
563 	}
564     }
565 
566   /* The zero-spec case would be easy to optimize but it doesn't
567      happen in practice.  Likewise, more than 4 specs doesn't
568      happen in practice.  */
569   if (sec_count == 0 || sec_count > 4)
570     return;
571 
572   /* Check that no two specs can match the same section.  */
573   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
574     {
575       struct wildcard_list *sec2;
576       for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next)
577 	{
578 	  if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name))
579 	    return;
580 	}
581     }
582 
583   signature = (sec_count << 8) + wild_name_count;
584   switch (signature)
585     {
586     case 0x0100:
587       ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0;
588       break;
589     case 0x0101:
590       ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1;
591       break;
592     case 0x0201:
593       ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1;
594       break;
595     case 0x0302:
596       ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2;
597       break;
598     case 0x0402:
599       ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2;
600       break;
601     default:
602       return;
603     }
604 
605   /* Now fill the data array with pointers to the specs, first the
606      specs with non-wildcard names, then the specs with wildcard
607      names.  It's OK to process the specs in different order from the
608      given order, because we've already determined that no section
609      will match more than one spec.  */
610   data_counter = 0;
611   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
612     if (!wildcardp (sec->spec.name))
613       ptr->handler_data[data_counter++] = sec;
614   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
615     if (wildcardp (sec->spec.name))
616       ptr->handler_data[data_counter++] = sec;
617 }
618 
619 /* Handle a wild statement for a single file F.  */
620 
621 static void
walk_wild_file(lang_wild_statement_type * s,lang_input_statement_type * f,callback_t callback,void * data)622 walk_wild_file (lang_wild_statement_type *s,
623 		lang_input_statement_type *f,
624 		callback_t callback,
625 		void *data)
626 {
627   if (f->the_bfd == NULL
628       || ! bfd_check_format (f->the_bfd, bfd_archive))
629     walk_wild_section (s, f, callback, data);
630   else
631     {
632       bfd *member;
633 
634       /* This is an archive file.  We must map each member of the
635 	 archive separately.  */
636       member = bfd_openr_next_archived_file (f->the_bfd, NULL);
637       while (member != NULL)
638 	{
639 	  /* When lookup_name is called, it will call the add_symbols
640 	     entry point for the archive.  For each element of the
641 	     archive which is included, BFD will call ldlang_add_file,
642 	     which will set the usrdata field of the member to the
643 	     lang_input_statement.  */
644 	  if (member->usrdata != NULL)
645 	    {
646 	      walk_wild_section (s, member->usrdata, callback, data);
647 	    }
648 
649 	  member = bfd_openr_next_archived_file (f->the_bfd, member);
650 	}
651     }
652 }
653 
654 static void
walk_wild(lang_wild_statement_type * s,callback_t callback,void * data)655 walk_wild (lang_wild_statement_type *s, callback_t callback, void *data)
656 {
657   const char *file_spec = s->filename;
658 
659   if (file_spec == NULL)
660     {
661       /* Perform the iteration over all files in the list.  */
662       LANG_FOR_EACH_INPUT_STATEMENT (f)
663 	{
664 	  walk_wild_file (s, f, callback, data);
665 	}
666     }
667   else if (wildcardp (file_spec))
668     {
669       LANG_FOR_EACH_INPUT_STATEMENT (f)
670 	{
671 	  if (fnmatch (file_spec, f->filename, FNM_FILE_NAME) == 0)
672 	    walk_wild_file (s, f, callback, data);
673 	}
674     }
675   else
676     {
677       lang_input_statement_type *f;
678 
679       /* Perform the iteration over a single file.  */
680       f = lookup_name (file_spec);
681       if (f)
682 	walk_wild_file (s, f, callback, data);
683     }
684 }
685 
686 /* lang_for_each_statement walks the parse tree and calls the provided
687    function for each node.  */
688 
689 static void
lang_for_each_statement_worker(void (* func)(lang_statement_union_type *),lang_statement_union_type * s)690 lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
691 				lang_statement_union_type *s)
692 {
693   for (; s != NULL; s = s->header.next)
694     {
695       func (s);
696 
697       switch (s->header.type)
698 	{
699 	case lang_constructors_statement_enum:
700 	  lang_for_each_statement_worker (func, constructor_list.head);
701 	  break;
702 	case lang_output_section_statement_enum:
703 	  lang_for_each_statement_worker
704 	    (func, s->output_section_statement.children.head);
705 	  break;
706 	case lang_wild_statement_enum:
707 	  lang_for_each_statement_worker (func,
708 					  s->wild_statement.children.head);
709 	  break;
710 	case lang_group_statement_enum:
711 	  lang_for_each_statement_worker (func,
712 					  s->group_statement.children.head);
713 	  break;
714 	case lang_data_statement_enum:
715 	case lang_reloc_statement_enum:
716 	case lang_object_symbols_statement_enum:
717 	case lang_output_statement_enum:
718 	case lang_target_statement_enum:
719 	case lang_input_section_enum:
720 	case lang_input_statement_enum:
721 	case lang_assignment_statement_enum:
722 	case lang_padding_statement_enum:
723 	case lang_address_statement_enum:
724 	case lang_fill_statement_enum:
725 	  break;
726 	default:
727 	  FAIL ();
728 	  break;
729 	}
730     }
731 }
732 
733 void
lang_for_each_statement(void (* func)(lang_statement_union_type *))734 lang_for_each_statement (void (*func) (lang_statement_union_type *))
735 {
736   lang_for_each_statement_worker (func, statement_list.head);
737 }
738 
739 /*----------------------------------------------------------------------*/
740 
741 void
lang_list_init(lang_statement_list_type * list)742 lang_list_init (lang_statement_list_type *list)
743 {
744   list->head = NULL;
745   list->tail = &list->head;
746 }
747 
748 /* Build a new statement node for the parse tree.  */
749 
750 static lang_statement_union_type *
new_statement(enum statement_enum type,size_t size,lang_statement_list_type * list)751 new_statement (enum statement_enum type,
752 	       size_t size,
753 	       lang_statement_list_type *list)
754 {
755   lang_statement_union_type *new;
756 
757   new = stat_alloc (size);
758   new->header.type = type;
759   new->header.next = NULL;
760   lang_statement_append (list, new, &new->header.next);
761   return new;
762 }
763 
764 /* Build a new input file node for the language.  There are several
765    ways in which we treat an input file, eg, we only look at symbols,
766    or prefix it with a -l etc.
767 
768    We can be supplied with requests for input files more than once;
769    they may, for example be split over several lines like foo.o(.text)
770    foo.o(.data) etc, so when asked for a file we check that we haven't
771    got it already so we don't duplicate the bfd.  */
772 
773 static lang_input_statement_type *
new_afile(const char * name,lang_input_file_enum_type file_type,const char * target,bfd_boolean add_to_list)774 new_afile (const char *name,
775 	   lang_input_file_enum_type file_type,
776 	   const char *target,
777 	   bfd_boolean add_to_list)
778 {
779   lang_input_statement_type *p;
780 
781   if (add_to_list)
782     p = new_stat (lang_input_statement, stat_ptr);
783   else
784     {
785       p = stat_alloc (sizeof (lang_input_statement_type));
786       p->header.next = NULL;
787     }
788 
789   lang_has_input_file = TRUE;
790   p->target = target;
791   p->sysrooted = FALSE;
792   switch (file_type)
793     {
794     case lang_input_file_is_symbols_only_enum:
795       p->filename = name;
796       p->is_archive = FALSE;
797       p->real = TRUE;
798       p->local_sym_name = name;
799       p->just_syms_flag = TRUE;
800       p->search_dirs_flag = FALSE;
801       break;
802     case lang_input_file_is_fake_enum:
803       p->filename = name;
804       p->is_archive = FALSE;
805       p->real = FALSE;
806       p->local_sym_name = name;
807       p->just_syms_flag = FALSE;
808       p->search_dirs_flag = FALSE;
809       break;
810     case lang_input_file_is_l_enum:
811       p->is_archive = TRUE;
812       p->filename = name;
813       p->real = TRUE;
814       p->local_sym_name = concat ("-l", name, NULL);
815       p->just_syms_flag = FALSE;
816       p->search_dirs_flag = TRUE;
817       break;
818     case lang_input_file_is_marker_enum:
819       p->filename = name;
820       p->is_archive = FALSE;
821       p->real = FALSE;
822       p->local_sym_name = name;
823       p->just_syms_flag = FALSE;
824       p->search_dirs_flag = TRUE;
825       break;
826     case lang_input_file_is_search_file_enum:
827       p->sysrooted = ldlang_sysrooted_script;
828       p->filename = name;
829       p->is_archive = FALSE;
830       p->real = TRUE;
831       p->local_sym_name = name;
832       p->just_syms_flag = FALSE;
833       p->search_dirs_flag = TRUE;
834       break;
835     case lang_input_file_is_file_enum:
836       p->filename = name;
837       p->is_archive = FALSE;
838       p->real = TRUE;
839       p->local_sym_name = name;
840       p->just_syms_flag = FALSE;
841       p->search_dirs_flag = FALSE;
842       break;
843     default:
844       FAIL ();
845     }
846   p->the_bfd = NULL;
847   p->asymbols = NULL;
848   p->next_real_file = NULL;
849   p->next = NULL;
850   p->symbol_count = 0;
851   p->dynamic = config.dynamic_link;
852   p->add_needed = add_needed;
853   p->as_needed = as_needed;
854   p->whole_archive = whole_archive;
855   p->loaded = FALSE;
856   lang_statement_append (&input_file_chain,
857 			 (lang_statement_union_type *) p,
858 			 &p->next_real_file);
859   return p;
860 }
861 
862 lang_input_statement_type *
lang_add_input_file(const char * name,lang_input_file_enum_type file_type,const char * target)863 lang_add_input_file (const char *name,
864 		     lang_input_file_enum_type file_type,
865 		     const char *target)
866 {
867   lang_has_input_file = TRUE;
868   return new_afile (name, file_type, target, TRUE);
869 }
870 
871 /* Build enough state so that the parser can build its tree.  */
872 
873 void
lang_init(void)874 lang_init (void)
875 {
876   obstack_begin (&stat_obstack, 1000);
877 
878   stat_ptr = &statement_list;
879 
880   lang_list_init (stat_ptr);
881 
882   lang_list_init (&input_file_chain);
883   lang_list_init (&lang_output_section_statement);
884   lang_list_init (&file_chain);
885   first_file = lang_add_input_file (NULL, lang_input_file_is_marker_enum,
886 				    NULL);
887   abs_output_section =
888     lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
889 
890   abs_output_section->bfd_section = bfd_abs_section_ptr;
891 
892   /* The value "3" is ad-hoc, somewhat related to the expected number of
893      DEFINED expressions in a linker script.  For most default linker
894      scripts, there are none.  Why a hash table then?  Well, it's somewhat
895      simpler to re-use working machinery than using a linked list in terms
896      of code-complexity here in ld, besides the initialization which just
897      looks like other code here.  */
898   if (!bfd_hash_table_init_n (&lang_definedness_table,
899 			      lang_definedness_newfunc, 3))
900     einfo (_("%P%F: out of memory during initialization"));
901 }
902 
903 /*----------------------------------------------------------------------
904   A region is an area of memory declared with the
905   MEMORY {  name:org=exp, len=exp ... }
906   syntax.
907 
908   We maintain a list of all the regions here.
909 
910   If no regions are specified in the script, then the default is used
911   which is created when looked up to be the entire data space.
912 
913   If create is true we are creating a region inside a MEMORY block.
914   In this case it is probably an error to create a region that has
915   already been created.  If we are not inside a MEMORY block it is
916   dubious to use an undeclared region name (except DEFAULT_MEMORY_REGION)
917   and so we issue a warning.  */
918 
919 static lang_memory_region_type *lang_memory_region_list;
920 static lang_memory_region_type **lang_memory_region_list_tail
921   = &lang_memory_region_list;
922 
923 lang_memory_region_type *
lang_memory_region_lookup(const char * const name,bfd_boolean create)924 lang_memory_region_lookup (const char *const name, bfd_boolean create)
925 {
926   lang_memory_region_type *p;
927   lang_memory_region_type *new;
928 
929   /* NAME is NULL for LMA memspecs if no region was specified.  */
930   if (name == NULL)
931     return NULL;
932 
933   for (p = lang_memory_region_list; p != NULL; p = p->next)
934     if (strcmp (p->name, name) == 0)
935       {
936 	if (create)
937 	  einfo (_("%P:%S: warning: redeclaration of memory region '%s'\n"),
938 		 name);
939 	return p;
940       }
941 
942   if (!create && strcmp (name, DEFAULT_MEMORY_REGION))
943     einfo (_("%P:%S: warning: memory region %s not declared\n"), name);
944 
945   new = stat_alloc (sizeof (lang_memory_region_type));
946 
947   new->name = xstrdup (name);
948   new->next = NULL;
949 
950   *lang_memory_region_list_tail = new;
951   lang_memory_region_list_tail = &new->next;
952   new->origin = 0;
953   new->flags = 0;
954   new->not_flags = 0;
955   new->length = ~(bfd_size_type) 0;
956   new->current = 0;
957   new->had_full_message = FALSE;
958 
959   return new;
960 }
961 
962 static lang_memory_region_type *
lang_memory_default(asection * section)963 lang_memory_default (asection *section)
964 {
965   lang_memory_region_type *p;
966 
967   flagword sec_flags = section->flags;
968 
969   /* Override SEC_DATA to mean a writable section.  */
970   if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
971     sec_flags |= SEC_DATA;
972 
973   for (p = lang_memory_region_list; p != NULL; p = p->next)
974     {
975       if ((p->flags & sec_flags) != 0
976 	  && (p->not_flags & sec_flags) == 0)
977 	{
978 	  return p;
979 	}
980     }
981   return lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
982 }
983 
984 static lang_output_section_statement_type *
lang_output_section_find_1(const char * const name,int constraint)985 lang_output_section_find_1 (const char *const name, int constraint)
986 {
987   lang_output_section_statement_type *lookup;
988 
989   for (lookup = &lang_output_section_statement.head->output_section_statement;
990        lookup != NULL;
991        lookup = lookup->next)
992     {
993       if (strcmp (name, lookup->name) == 0
994 	  && lookup->constraint != -1
995 	  && (constraint == 0
996 	      || (constraint == lookup->constraint
997 		  && constraint != SPECIAL)))
998 	return lookup;
999     }
1000   return NULL;
1001 }
1002 
1003 lang_output_section_statement_type *
lang_output_section_find(const char * const name)1004 lang_output_section_find (const char *const name)
1005 {
1006   return lang_output_section_find_1 (name, 0);
1007 }
1008 
1009 static lang_output_section_statement_type *
lang_output_section_statement_lookup_1(const char * const name,int constraint)1010 lang_output_section_statement_lookup_1 (const char *const name, int constraint)
1011 {
1012   lang_output_section_statement_type *lookup;
1013 
1014   lookup = lang_output_section_find_1 (name, constraint);
1015   if (lookup == NULL)
1016     {
1017       lookup = new_stat (lang_output_section_statement, stat_ptr);
1018       lookup->region = NULL;
1019       lookup->lma_region = NULL;
1020       lookup->fill = 0;
1021       lookup->block_value = 1;
1022       lookup->name = name;
1023 
1024       lookup->next = NULL;
1025       lookup->bfd_section = NULL;
1026       lookup->processed = 0;
1027       lookup->constraint = constraint;
1028       lookup->ignored = FALSE;
1029       lookup->sectype = normal_section;
1030       lookup->addr_tree = NULL;
1031       lang_list_init (&lookup->children);
1032 
1033       lookup->memspec = NULL;
1034       lookup->flags = 0;
1035       lookup->subsection_alignment = -1;
1036       lookup->section_alignment = -1;
1037       lookup->load_base = NULL;
1038       lookup->update_dot_tree = NULL;
1039       lookup->phdrs = NULL;
1040 
1041       lang_statement_append (&lang_output_section_statement,
1042 			     (lang_statement_union_type *) lookup,
1043 			     (lang_statement_union_type **) &lookup->next);
1044     }
1045   return lookup;
1046 }
1047 
1048 lang_output_section_statement_type *
lang_output_section_statement_lookup(const char * const name)1049 lang_output_section_statement_lookup (const char *const name)
1050 {
1051   return lang_output_section_statement_lookup_1 (name, 0);
1052 }
1053 
1054 /* A variant of lang_output_section_find used by place_orphan.
1055    Returns the output statement that should precede a new output
1056    statement for SEC.  If an exact match is found on certain flags,
1057    sets *EXACT too.  */
1058 
1059 lang_output_section_statement_type *
lang_output_section_find_by_flags(const asection * sec,lang_output_section_statement_type ** exact)1060 lang_output_section_find_by_flags (const asection *sec,
1061 				   lang_output_section_statement_type **exact)
1062 {
1063   lang_output_section_statement_type *first, *look, *found;
1064   flagword flags;
1065 
1066   /* We know the first statement on this list is *ABS*.  May as well
1067      skip it.  */
1068   first = &lang_output_section_statement.head->output_section_statement;
1069   first = first->next;
1070 
1071   /* First try for an exact match.  */
1072   found = NULL;
1073   for (look = first; look; look = look->next)
1074     {
1075       flags = look->flags;
1076       if (look->bfd_section != NULL)
1077 	flags = look->bfd_section->flags;
1078       flags ^= sec->flags;
1079       if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY
1080 		     | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1081 	found = look;
1082     }
1083   if (found != NULL)
1084     {
1085       *exact = found;
1086       return found;
1087     }
1088 
1089   if (sec->flags & SEC_CODE)
1090     {
1091       /* Try for a rw code section.  */
1092       for (look = first; look; look = look->next)
1093 	{
1094 	  flags = look->flags;
1095 	  if (look->bfd_section != NULL)
1096 	    flags = look->bfd_section->flags;
1097 	  flags ^= sec->flags;
1098 	  if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1099 			 | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1100 	    found = look;
1101 	}
1102       return found;
1103     }
1104 
1105   if (sec->flags & (SEC_READONLY | SEC_THREAD_LOCAL))
1106     {
1107       /* .rodata can go after .text, .sdata2 after .rodata.  */
1108       for (look = first; look; look = look->next)
1109 	{
1110 	  flags = look->flags;
1111 	  if (look->bfd_section != NULL)
1112 	    flags = look->bfd_section->flags;
1113 	  flags ^= sec->flags;
1114 	  if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1115 			 | SEC_READONLY))
1116 	      && !(look->flags & (SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1117 	    found = look;
1118 	}
1119       return found;
1120     }
1121 
1122   if (sec->flags & SEC_SMALL_DATA)
1123     {
1124       /* .sdata goes after .data, .sbss after .sdata.  */
1125       for (look = first; look; look = look->next)
1126 	{
1127 	  flags = look->flags;
1128 	  if (look->bfd_section != NULL)
1129 	    flags = look->bfd_section->flags;
1130 	  flags ^= sec->flags;
1131 	  if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1132 			 | SEC_THREAD_LOCAL))
1133 	      || ((look->flags & SEC_SMALL_DATA)
1134 		  && !(sec->flags & SEC_HAS_CONTENTS)))
1135 	    found = look;
1136 	}
1137       return found;
1138     }
1139 
1140   if (sec->flags & SEC_HAS_CONTENTS)
1141     {
1142       /* .data goes after .rodata.  */
1143       for (look = first; look; look = look->next)
1144 	{
1145 	  flags = look->flags;
1146 	  if (look->bfd_section != NULL)
1147 	    flags = look->bfd_section->flags;
1148 	  flags ^= sec->flags;
1149 	  if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1150 			 | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1151 	    found = look;
1152 	}
1153       return found;
1154     }
1155 
1156   /* .bss goes last.  */
1157   for (look = first; look; look = look->next)
1158     {
1159       flags = look->flags;
1160       if (look->bfd_section != NULL)
1161 	flags = look->bfd_section->flags;
1162       flags ^= sec->flags;
1163       if (!(flags & SEC_ALLOC))
1164 	found = look;
1165     }
1166 
1167   return found;
1168 }
1169 
1170 /* Find the last output section before given output statement.
1171    Used by place_orphan.  */
1172 
1173 static asection *
output_prev_sec_find(lang_output_section_statement_type * os)1174 output_prev_sec_find (lang_output_section_statement_type *os)
1175 {
1176   asection *s = (asection *) NULL;
1177   lang_output_section_statement_type *lookup;
1178 
1179   for (lookup = &lang_output_section_statement.head->output_section_statement;
1180        lookup != NULL;
1181        lookup = lookup->next)
1182     {
1183       if (lookup->constraint == -1)
1184 	continue;
1185       if (lookup == os)
1186 	return s;
1187 
1188       if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
1189 	s = lookup->bfd_section;
1190     }
1191 
1192   return NULL;
1193 }
1194 
1195 lang_output_section_statement_type *
lang_insert_orphan(lang_input_statement_type * file,asection * s,const char * secname,lang_output_section_statement_type * after,struct orphan_save * place,etree_type * address,lang_statement_list_type * add_child)1196 lang_insert_orphan (lang_input_statement_type *file,
1197 		    asection *s,
1198 		    const char *secname,
1199 		    lang_output_section_statement_type *after,
1200 		    struct orphan_save *place,
1201 		    etree_type *address,
1202 		    lang_statement_list_type *add_child)
1203 {
1204   lang_statement_list_type *old;
1205   lang_statement_list_type add;
1206   const char *ps;
1207   etree_type *load_base;
1208   lang_output_section_statement_type *os;
1209   lang_output_section_statement_type **os_tail;
1210 
1211   /* Start building a list of statements for this section.
1212      First save the current statement pointer.  */
1213   old = stat_ptr;
1214 
1215   /* If we have found an appropriate place for the output section
1216      statements for this orphan, add them to our own private list,
1217      inserting them later into the global statement list.  */
1218   if (after != NULL)
1219     {
1220       stat_ptr = &add;
1221       lang_list_init (stat_ptr);
1222     }
1223 
1224   ps = NULL;
1225   if (config.build_constructors)
1226     {
1227       /* If the name of the section is representable in C, then create
1228 	 symbols to mark the start and the end of the section.  */
1229       for (ps = secname; *ps != '\0'; ps++)
1230 	if (! ISALNUM ((unsigned char) *ps) && *ps != '_')
1231 	  break;
1232       if (*ps == '\0')
1233 	{
1234 	  char *symname;
1235 	  etree_type *e_align;
1236 
1237 	  symname = (char *) xmalloc (ps - secname + sizeof "__start_" + 1);
1238 	  symname[0] = bfd_get_symbol_leading_char (output_bfd);
1239 	  sprintf (symname + (symname[0] != 0), "__start_%s", secname);
1240 	  e_align = exp_unop (ALIGN_K,
1241 			      exp_intop ((bfd_vma) 1 << s->alignment_power));
1242 	  lang_add_assignment (exp_assop ('=', ".", e_align));
1243 	  lang_add_assignment (exp_assop ('=', symname,
1244 					  exp_nameop (NAME, ".")));
1245 	}
1246     }
1247 
1248   if (link_info.relocatable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
1249     address = exp_intop (0);
1250 
1251   load_base = NULL;
1252   if (after != NULL && after->load_base != NULL)
1253     {
1254       etree_type *lma_from_vma;
1255       lma_from_vma = exp_binop ('-', after->load_base,
1256 				exp_nameop (ADDR, after->name));
1257       load_base = exp_binop ('+', lma_from_vma,
1258 			     exp_nameop (ADDR, secname));
1259     }
1260 
1261   os_tail = ((lang_output_section_statement_type **)
1262 	     lang_output_section_statement.tail);
1263   os = lang_enter_output_section_statement (secname, address, 0, NULL, NULL,
1264 					    load_base, 0);
1265 
1266   if (add_child == NULL)
1267     add_child = &os->children;
1268   lang_add_section (add_child, s, os, file);
1269 
1270   lang_leave_output_section_statement (0, "*default*", NULL, NULL);
1271 
1272   if (config.build_constructors && *ps == '\0')
1273     {
1274       char *symname;
1275 
1276       /* lang_leave_ouput_section_statement resets stat_ptr.
1277 	 Put stat_ptr back where we want it.  */
1278       if (after != NULL)
1279 	stat_ptr = &add;
1280 
1281       symname = (char *) xmalloc (ps - secname + sizeof "__stop_" + 1);
1282       symname[0] = bfd_get_symbol_leading_char (output_bfd);
1283       sprintf (symname + (symname[0] != 0), "__stop_%s", secname);
1284       lang_add_assignment (exp_assop ('=', symname,
1285 				      exp_nameop (NAME, ".")));
1286     }
1287 
1288   /* Restore the global list pointer.  */
1289   if (after != NULL)
1290     stat_ptr = old;
1291 
1292   if (after != NULL && os->bfd_section != NULL)
1293     {
1294       asection *snew, *as;
1295 
1296       snew = os->bfd_section;
1297 
1298       /* Shuffle the bfd section list to make the output file look
1299 	 neater.  This is really only cosmetic.  */
1300       if (place->section == NULL
1301 	  && after != (&lang_output_section_statement.head
1302 		       ->output_section_statement))
1303 	{
1304 	  asection *bfd_section = after->bfd_section;
1305 
1306 	  /* If the output statement hasn't been used to place any input
1307 	     sections (and thus doesn't have an output bfd_section),
1308 	     look for the closest prior output statement having an
1309 	     output section.  */
1310 	  if (bfd_section == NULL)
1311 	    bfd_section = output_prev_sec_find (after);
1312 
1313 	  if (bfd_section != NULL && bfd_section != snew)
1314 	    place->section = &bfd_section->next;
1315 	}
1316 
1317       if (place->section == NULL)
1318 	place->section = &output_bfd->sections;
1319 
1320       as = *place->section;
1321       if (as != snew && as->prev != snew)
1322 	{
1323 	  /* Unlink the section.  */
1324 	  bfd_section_list_remove (output_bfd, snew);
1325 
1326 	  /* Now tack it back on in the right place.  */
1327 	  bfd_section_list_insert_before (output_bfd, as, snew);
1328 	}
1329 
1330       /* Save the end of this list.  Further ophans of this type will
1331 	 follow the one we've just added.  */
1332       place->section = &snew->next;
1333 
1334       /* The following is non-cosmetic.  We try to put the output
1335 	 statements in some sort of reasonable order here, because they
1336 	 determine the final load addresses of the orphan sections.
1337 	 In addition, placing output statements in the wrong order may
1338 	 require extra segments.  For instance, given a typical
1339 	 situation of all read-only sections placed in one segment and
1340 	 following that a segment containing all the read-write
1341 	 sections, we wouldn't want to place an orphan read/write
1342 	 section before or amongst the read-only ones.  */
1343       if (add.head != NULL)
1344 	{
1345 	  lang_output_section_statement_type *newly_added_os;
1346 
1347 	  if (place->stmt == NULL)
1348 	    {
1349 	      lang_statement_union_type **where;
1350 	      lang_statement_union_type **assign = NULL;
1351 
1352 	      /* Look for a suitable place for the new statement list.
1353 		 The idea is to skip over anything that might be inside
1354 		 a SECTIONS {} statement in a script, before we find
1355 		 another output_section_statement.  Assignments to "dot"
1356 		 before an output section statement are assumed to
1357 		 belong to it.  */
1358 	      for (where = &after->header.next;
1359 		   *where != NULL;
1360 		   where = &(*where)->header.next)
1361 		{
1362 		  switch ((*where)->header.type)
1363 		    {
1364 		    case lang_assignment_statement_enum:
1365 		      if (assign == NULL)
1366 			{
1367 			  lang_assignment_statement_type *ass;
1368 			  ass = &(*where)->assignment_statement;
1369 			  if (ass->exp->type.node_class != etree_assert
1370 			      && ass->exp->assign.dst[0] == '.'
1371 			      && ass->exp->assign.dst[1] == 0)
1372 			    assign = where;
1373 			}
1374 		      continue;
1375 		    case lang_wild_statement_enum:
1376 		    case lang_input_section_enum:
1377 		    case lang_object_symbols_statement_enum:
1378 		    case lang_fill_statement_enum:
1379 		    case lang_data_statement_enum:
1380 		    case lang_reloc_statement_enum:
1381 		    case lang_padding_statement_enum:
1382 		    case lang_constructors_statement_enum:
1383 		      assign = NULL;
1384 		      continue;
1385 		    case lang_output_section_statement_enum:
1386 		      if (assign != NULL)
1387 			where = assign;
1388 		    case lang_input_statement_enum:
1389 		    case lang_address_statement_enum:
1390 		    case lang_target_statement_enum:
1391 		    case lang_output_statement_enum:
1392 		    case lang_group_statement_enum:
1393 		    case lang_afile_asection_pair_statement_enum:
1394 		      break;
1395 		    }
1396 		  break;
1397 		}
1398 
1399 	      *add.tail = *where;
1400 	      *where = add.head;
1401 
1402 	      place->os_tail = &after->next;
1403 	    }
1404 	  else
1405 	    {
1406 	      /* Put it after the last orphan statement we added.  */
1407 	      *add.tail = *place->stmt;
1408 	      *place->stmt = add.head;
1409 	    }
1410 
1411 	  /* Fix the global list pointer if we happened to tack our
1412 	     new list at the tail.  */
1413 	  if (*old->tail == add.head)
1414 	    old->tail = add.tail;
1415 
1416 	  /* Save the end of this list.  */
1417 	  place->stmt = add.tail;
1418 
1419 	  /* Do the same for the list of output section statements.  */
1420 	  newly_added_os = *os_tail;
1421 	  *os_tail = NULL;
1422 	  newly_added_os->next = *place->os_tail;
1423 	  *place->os_tail = newly_added_os;
1424 	  place->os_tail = &newly_added_os->next;
1425 
1426 	  /* Fixing the global list pointer here is a little different.
1427 	     We added to the list in lang_enter_output_section_statement,
1428 	     trimmed off the new output_section_statment above when
1429 	     assigning *os_tail = NULL, but possibly added it back in
1430 	     the same place when assigning *place->os_tail.  */
1431 	  if (*os_tail == NULL)
1432 	    lang_output_section_statement.tail
1433 	      = (lang_statement_union_type **) os_tail;
1434 	}
1435     }
1436   return os;
1437 }
1438 
1439 static void
lang_map_flags(flagword flag)1440 lang_map_flags (flagword flag)
1441 {
1442   if (flag & SEC_ALLOC)
1443     minfo ("a");
1444 
1445   if (flag & SEC_CODE)
1446     minfo ("x");
1447 
1448   if (flag & SEC_READONLY)
1449     minfo ("r");
1450 
1451   if (flag & SEC_DATA)
1452     minfo ("w");
1453 
1454   if (flag & SEC_LOAD)
1455     minfo ("l");
1456 }
1457 
1458 void
lang_map(void)1459 lang_map (void)
1460 {
1461   lang_memory_region_type *m;
1462   bfd *p;
1463 
1464   minfo (_("\nMemory Configuration\n\n"));
1465   fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
1466 	   _("Name"), _("Origin"), _("Length"), _("Attributes"));
1467 
1468   for (m = lang_memory_region_list; m != NULL; m = m->next)
1469     {
1470       char buf[100];
1471       int len;
1472 
1473       fprintf (config.map_file, "%-16s ", m->name);
1474 
1475       sprintf_vma (buf, m->origin);
1476       minfo ("0x%s ", buf);
1477       len = strlen (buf);
1478       while (len < 16)
1479 	{
1480 	  print_space ();
1481 	  ++len;
1482 	}
1483 
1484       minfo ("0x%V", m->length);
1485       if (m->flags || m->not_flags)
1486 	{
1487 #ifndef BFD64
1488 	  minfo ("        ");
1489 #endif
1490 	  if (m->flags)
1491 	    {
1492 	      print_space ();
1493 	      lang_map_flags (m->flags);
1494 	    }
1495 
1496 	  if (m->not_flags)
1497 	    {
1498 	      minfo (" !");
1499 	      lang_map_flags (m->not_flags);
1500 	    }
1501 	}
1502 
1503       print_nl ();
1504     }
1505 
1506   fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
1507 
1508   if (! command_line.reduce_memory_overheads)
1509     {
1510       obstack_begin (&map_obstack, 1000);
1511       for (p = link_info.input_bfds; p != (bfd *) NULL; p = p->link_next)
1512 	bfd_map_over_sections (p, init_map_userdata, 0);
1513       bfd_link_hash_traverse (link_info.hash, sort_def_symbol, 0);
1514     }
1515   print_statements ();
1516 }
1517 
1518 static void
init_map_userdata(abfd,sec,data)1519 init_map_userdata (abfd, sec, data)
1520      bfd *abfd ATTRIBUTE_UNUSED;
1521      asection *sec;
1522      void *data ATTRIBUTE_UNUSED;
1523 {
1524   fat_section_userdata_type *new_data
1525     = ((fat_section_userdata_type *) (stat_alloc
1526 				      (sizeof (fat_section_userdata_type))));
1527 
1528   ASSERT (get_userdata (sec) == NULL);
1529   get_userdata (sec) = new_data;
1530   new_data->map_symbol_def_tail = &new_data->map_symbol_def_head;
1531 }
1532 
1533 static bfd_boolean
sort_def_symbol(hash_entry,info)1534 sort_def_symbol (hash_entry, info)
1535      struct bfd_link_hash_entry *hash_entry;
1536      void *info ATTRIBUTE_UNUSED;
1537 {
1538   if (hash_entry->type == bfd_link_hash_defined
1539       || hash_entry->type == bfd_link_hash_defweak)
1540     {
1541       struct fat_user_section_struct *ud;
1542       struct map_symbol_def *def;
1543 
1544       ud = get_userdata (hash_entry->u.def.section);
1545       if  (! ud)
1546 	{
1547 	  /* ??? What do we have to do to initialize this beforehand?  */
1548 	  /* The first time we get here is bfd_abs_section...  */
1549 	  init_map_userdata (0, hash_entry->u.def.section, 0);
1550 	  ud = get_userdata (hash_entry->u.def.section);
1551 	}
1552       else if  (!ud->map_symbol_def_tail)
1553 	ud->map_symbol_def_tail = &ud->map_symbol_def_head;
1554 
1555       def = obstack_alloc (&map_obstack, sizeof *def);
1556       def->entry = hash_entry;
1557       *(ud->map_symbol_def_tail) = def;
1558       ud->map_symbol_def_tail = &def->next;
1559     }
1560   return TRUE;
1561 }
1562 
1563 /* Initialize an output section.  */
1564 
1565 static void
init_os(lang_output_section_statement_type * s)1566 init_os (lang_output_section_statement_type *s)
1567 {
1568   if (s->bfd_section != NULL)
1569     return;
1570 
1571   if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
1572     einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
1573 
1574   s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
1575   if (s->bfd_section == NULL)
1576     s->bfd_section = bfd_make_section (output_bfd, s->name);
1577   if (s->bfd_section == NULL)
1578     {
1579       einfo (_("%P%F: output format %s cannot represent section called %s\n"),
1580 	     output_bfd->xvec->name, s->name);
1581     }
1582   s->bfd_section->output_section = s->bfd_section;
1583 
1584   /* We initialize an output sections output offset to minus its own
1585      vma to allow us to output a section through itself.  */
1586   s->bfd_section->output_offset = 0;
1587   if (!command_line.reduce_memory_overheads)
1588     {
1589       fat_section_userdata_type *new
1590 	= stat_alloc (sizeof (fat_section_userdata_type));
1591       memset (new, 0, sizeof (fat_section_userdata_type));
1592       get_userdata (s->bfd_section) = new;
1593     }
1594 
1595 
1596   /* If there is a base address, make sure that any sections it might
1597      mention are initialized.  */
1598   if (s->addr_tree != NULL)
1599     exp_init_os (s->addr_tree);
1600 
1601   if (s->load_base != NULL)
1602     exp_init_os (s->load_base);
1603 }
1604 
1605 /* Make sure that all output sections mentioned in an expression are
1606    initialized.  */
1607 
1608 static void
exp_init_os(etree_type * exp)1609 exp_init_os (etree_type *exp)
1610 {
1611   switch (exp->type.node_class)
1612     {
1613     case etree_assign:
1614       exp_init_os (exp->assign.src);
1615       break;
1616 
1617     case etree_binary:
1618       exp_init_os (exp->binary.lhs);
1619       exp_init_os (exp->binary.rhs);
1620       break;
1621 
1622     case etree_trinary:
1623       exp_init_os (exp->trinary.cond);
1624       exp_init_os (exp->trinary.lhs);
1625       exp_init_os (exp->trinary.rhs);
1626       break;
1627 
1628     case etree_assert:
1629       exp_init_os (exp->assert_s.child);
1630       break;
1631 
1632     case etree_unary:
1633       exp_init_os (exp->unary.child);
1634       break;
1635 
1636     case etree_name:
1637       switch (exp->type.node_code)
1638 	{
1639 	case ADDR:
1640 	case LOADADDR:
1641 	case SIZEOF:
1642 	  {
1643 	    lang_output_section_statement_type *os;
1644 
1645 	    os = lang_output_section_find (exp->name.name);
1646 	    if (os != NULL && os->bfd_section == NULL)
1647 	      init_os (os);
1648 	  }
1649 	}
1650       break;
1651 
1652     default:
1653       break;
1654     }
1655 }
1656 
1657 static void
section_already_linked(bfd * abfd,asection * sec,void * data)1658 section_already_linked (bfd *abfd, asection *sec, void *data)
1659 {
1660   lang_input_statement_type *entry = data;
1661 
1662   /* If we are only reading symbols from this object, then we want to
1663      discard all sections.  */
1664   if (entry->just_syms_flag)
1665     {
1666       bfd_link_just_syms (abfd, sec, &link_info);
1667       return;
1668     }
1669 
1670   if (!(abfd->flags & DYNAMIC))
1671     bfd_section_already_linked (abfd, sec);
1672 }
1673 
1674 /* The wild routines.
1675 
1676    These expand statements like *(.text) and foo.o to a list of
1677    explicit actions, like foo.o(.text), bar.o(.text) and
1678    foo.o(.text, .data).  */
1679 
1680 /* Add SECTION to the output section OUTPUT.  Do this by creating a
1681    lang_input_section statement which is placed at PTR.  FILE is the
1682    input file which holds SECTION.  */
1683 
1684 void
lang_add_section(lang_statement_list_type * ptr,asection * section,lang_output_section_statement_type * output,lang_input_statement_type * file)1685 lang_add_section (lang_statement_list_type *ptr,
1686 		  asection *section,
1687 		  lang_output_section_statement_type *output,
1688 		  lang_input_statement_type *file)
1689 {
1690   flagword flags = section->flags;
1691   bfd_boolean discard;
1692 
1693   /* Discard sections marked with SEC_EXCLUDE.  */
1694   discard = (flags & SEC_EXCLUDE) != 0;
1695 
1696   /* Discard input sections which are assigned to a section named
1697      DISCARD_SECTION_NAME.  */
1698   if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
1699     discard = TRUE;
1700 
1701   /* Discard debugging sections if we are stripping debugging
1702      information.  */
1703   if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
1704       && (flags & SEC_DEBUGGING) != 0)
1705     discard = TRUE;
1706 
1707   if (discard)
1708     {
1709       if (section->output_section == NULL)
1710 	{
1711 	  /* This prevents future calls from assigning this section.  */
1712 	  section->output_section = bfd_abs_section_ptr;
1713 	}
1714       return;
1715     }
1716 
1717   if (section->output_section == NULL)
1718     {
1719       bfd_boolean first;
1720       lang_input_section_type *new;
1721       flagword flags;
1722 
1723       if (output->bfd_section == NULL)
1724 	init_os (output);
1725 
1726       first = ! output->bfd_section->linker_has_input;
1727       output->bfd_section->linker_has_input = 1;
1728 
1729       if (!link_info.relocatable
1730 	  && !stripped_excluded_sections)
1731 	{
1732 	  asection *s = output->bfd_section->map_tail.s;
1733 	  output->bfd_section->map_tail.s = section;
1734 	  section->map_head.s = NULL;
1735 	  section->map_tail.s = s;
1736 	  if (s != NULL)
1737 	    s->map_head.s = section;
1738 	  else
1739 	    output->bfd_section->map_head.s = section;
1740 	}
1741 
1742       /* Add a section reference to the list.  */
1743       new = new_stat (lang_input_section, ptr);
1744 
1745       new->section = section;
1746       new->ifile = file;
1747       section->output_section = output->bfd_section;
1748 
1749       flags = section->flags;
1750 
1751       /* We don't copy the SEC_NEVER_LOAD flag from an input section
1752 	 to an output section, because we want to be able to include a
1753 	 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1754 	 section (I don't know why we want to do this, but we do).
1755 	 build_link_order in ldwrite.c handles this case by turning
1756 	 the embedded SEC_NEVER_LOAD section into a fill.  */
1757 
1758       flags &= ~ SEC_NEVER_LOAD;
1759 
1760       /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1761 	 already been processed.  One reason to do this is that on pe
1762 	 format targets, .text$foo sections go into .text and it's odd
1763 	 to see .text with SEC_LINK_ONCE set.  */
1764 
1765       if (! link_info.relocatable)
1766 	flags &= ~ (SEC_LINK_ONCE | SEC_LINK_DUPLICATES);
1767 
1768       /* If this is not the first input section, and the SEC_READONLY
1769 	 flag is not currently set, then don't set it just because the
1770 	 input section has it set.  */
1771 
1772       if (! first && (output->bfd_section->flags & SEC_READONLY) == 0)
1773 	flags &= ~ SEC_READONLY;
1774 
1775       /* Keep SEC_MERGE and SEC_STRINGS only if they are the same.  */
1776       if (! first
1777 	  && ((output->bfd_section->flags & (SEC_MERGE | SEC_STRINGS))
1778 	      != (flags & (SEC_MERGE | SEC_STRINGS))
1779 	      || ((flags & SEC_MERGE)
1780 		  && output->bfd_section->entsize != section->entsize)))
1781 	{
1782 	  output->bfd_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
1783 	  flags &= ~ (SEC_MERGE | SEC_STRINGS);
1784 	}
1785 
1786       output->bfd_section->flags |= flags;
1787 
1788       if (flags & SEC_MERGE)
1789 	output->bfd_section->entsize = section->entsize;
1790 
1791       /* If SEC_READONLY is not set in the input section, then clear
1792 	 it from the output section.  */
1793       if ((section->flags & SEC_READONLY) == 0)
1794 	output->bfd_section->flags &= ~SEC_READONLY;
1795 
1796       switch (output->sectype)
1797 	{
1798 	case normal_section:
1799 	  break;
1800 	case dsect_section:
1801 	case copy_section:
1802 	case info_section:
1803 	case overlay_section:
1804 	  output->bfd_section->flags &= ~SEC_ALLOC;
1805 	  break;
1806 	case noload_section:
1807 	  output->bfd_section->flags &= ~SEC_LOAD;
1808 	  output->bfd_section->flags |= SEC_NEVER_LOAD;
1809 	  break;
1810 	}
1811 
1812       /* Copy over SEC_SMALL_DATA.  */
1813       if (section->flags & SEC_SMALL_DATA)
1814 	output->bfd_section->flags |= SEC_SMALL_DATA;
1815 
1816       if (section->alignment_power > output->bfd_section->alignment_power)
1817 	output->bfd_section->alignment_power = section->alignment_power;
1818 
1819       /* If supplied an alignment, then force it.  */
1820       if (output->section_alignment != -1)
1821 	output->bfd_section->alignment_power = output->section_alignment;
1822 
1823       if (bfd_get_arch (section->owner) == bfd_arch_tic54x
1824 	  && (section->flags & SEC_TIC54X_BLOCK) != 0)
1825 	{
1826 	  output->bfd_section->flags |= SEC_TIC54X_BLOCK;
1827 	  /* FIXME: This value should really be obtained from the bfd...  */
1828 	  output->block_value = 128;
1829 	}
1830     }
1831 }
1832 
1833 /* Compare sections ASEC and BSEC according to SORT.  */
1834 
1835 static int
compare_section(sort_type sort,asection * asec,asection * bsec)1836 compare_section (sort_type sort, asection *asec, asection *bsec)
1837 {
1838   int ret;
1839 
1840   switch (sort)
1841     {
1842     default:
1843       abort ();
1844 
1845     case by_alignment_name:
1846       ret = (bfd_section_alignment (bsec->owner, bsec)
1847 	     - bfd_section_alignment (asec->owner, asec));
1848       if (ret)
1849 	break;
1850       /* Fall through.  */
1851 
1852     case by_name:
1853       ret = strcmp (bfd_get_section_name (asec->owner, asec),
1854 		    bfd_get_section_name (bsec->owner, bsec));
1855       break;
1856 
1857     case by_name_alignment:
1858       ret = strcmp (bfd_get_section_name (asec->owner, asec),
1859 		    bfd_get_section_name (bsec->owner, bsec));
1860       if (ret)
1861 	break;
1862       /* Fall through.  */
1863 
1864     case by_alignment:
1865       ret = (bfd_section_alignment (bsec->owner, bsec)
1866 	     - bfd_section_alignment (asec->owner, asec));
1867       break;
1868     }
1869 
1870   return ret;
1871 }
1872 
1873 /* Handle wildcard sorting.  This returns the lang_input_section which
1874    should follow the one we are going to create for SECTION and FILE,
1875    based on the sorting requirements of WILD.  It returns NULL if the
1876    new section should just go at the end of the current list.  */
1877 
1878 static lang_statement_union_type *
wild_sort(lang_wild_statement_type * wild,struct wildcard_list * sec,lang_input_statement_type * file,asection * section)1879 wild_sort (lang_wild_statement_type *wild,
1880 	   struct wildcard_list *sec,
1881 	   lang_input_statement_type *file,
1882 	   asection *section)
1883 {
1884   const char *section_name;
1885   lang_statement_union_type *l;
1886 
1887   if (!wild->filenames_sorted
1888       && (sec == NULL || sec->spec.sorted == none))
1889     return NULL;
1890 
1891   section_name = bfd_get_section_name (file->the_bfd, section);
1892   for (l = wild->children.head; l != NULL; l = l->header.next)
1893     {
1894       lang_input_section_type *ls;
1895 
1896       if (l->header.type != lang_input_section_enum)
1897 	continue;
1898       ls = &l->input_section;
1899 
1900       /* Sorting by filename takes precedence over sorting by section
1901 	 name.  */
1902 
1903       if (wild->filenames_sorted)
1904 	{
1905 	  const char *fn, *ln;
1906 	  bfd_boolean fa, la;
1907 	  int i;
1908 
1909 	  /* The PE support for the .idata section as generated by
1910 	     dlltool assumes that files will be sorted by the name of
1911 	     the archive and then the name of the file within the
1912 	     archive.  */
1913 
1914 	  if (file->the_bfd != NULL
1915 	      && bfd_my_archive (file->the_bfd) != NULL)
1916 	    {
1917 	      fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
1918 	      fa = TRUE;
1919 	    }
1920 	  else
1921 	    {
1922 	      fn = file->filename;
1923 	      fa = FALSE;
1924 	    }
1925 
1926 	  if (ls->ifile->the_bfd != NULL
1927 	      && bfd_my_archive (ls->ifile->the_bfd) != NULL)
1928 	    {
1929 	      ln = bfd_get_filename (bfd_my_archive (ls->ifile->the_bfd));
1930 	      la = TRUE;
1931 	    }
1932 	  else
1933 	    {
1934 	      ln = ls->ifile->filename;
1935 	      la = FALSE;
1936 	    }
1937 
1938 	  i = strcmp (fn, ln);
1939 	  if (i > 0)
1940 	    continue;
1941 	  else if (i < 0)
1942 	    break;
1943 
1944 	  if (fa || la)
1945 	    {
1946 	      if (fa)
1947 		fn = file->filename;
1948 	      if (la)
1949 		ln = ls->ifile->filename;
1950 
1951 	      i = strcmp (fn, ln);
1952 	      if (i > 0)
1953 		continue;
1954 	      else if (i < 0)
1955 		break;
1956 	    }
1957 	}
1958 
1959       /* Here either the files are not sorted by name, or we are
1960 	 looking at the sections for this file.  */
1961 
1962       if (sec != NULL && sec->spec.sorted != none)
1963 	{
1964 	  if (compare_section (sec->spec.sorted, section,
1965 			       ls->section) < 0)
1966 	    break;
1967 	}
1968     }
1969 
1970   return l;
1971 }
1972 
1973 /* Expand a wild statement for a particular FILE.  SECTION may be
1974    NULL, in which case it is a wild card.  */
1975 
1976 static void
output_section_callback(lang_wild_statement_type * ptr,struct wildcard_list * sec,asection * section,lang_input_statement_type * file,void * output)1977 output_section_callback (lang_wild_statement_type *ptr,
1978 			 struct wildcard_list *sec,
1979 			 asection *section,
1980 			 lang_input_statement_type *file,
1981 			 void *output)
1982 {
1983   lang_statement_union_type *before;
1984 
1985   /* Exclude sections that match UNIQUE_SECTION_LIST.  */
1986   if (unique_section_p (section))
1987     return;
1988 
1989   before = wild_sort (ptr, sec, file, section);
1990 
1991   /* Here BEFORE points to the lang_input_section which
1992      should follow the one we are about to add.  If BEFORE
1993      is NULL, then the section should just go at the end
1994      of the current list.  */
1995 
1996   if (before == NULL)
1997     lang_add_section (&ptr->children, section,
1998 		      (lang_output_section_statement_type *) output,
1999 		      file);
2000   else
2001     {
2002       lang_statement_list_type list;
2003       lang_statement_union_type **pp;
2004 
2005       lang_list_init (&list);
2006       lang_add_section (&list, section,
2007 			(lang_output_section_statement_type *) output,
2008 			file);
2009 
2010       /* If we are discarding the section, LIST.HEAD will
2011 	 be NULL.  */
2012       if (list.head != NULL)
2013 	{
2014 	  ASSERT (list.head->header.next == NULL);
2015 
2016 	  for (pp = &ptr->children.head;
2017 	       *pp != before;
2018 	       pp = &(*pp)->header.next)
2019 	    ASSERT (*pp != NULL);
2020 
2021 	  list.head->header.next = *pp;
2022 	  *pp = list.head;
2023 	}
2024     }
2025 }
2026 
2027 /* Check if all sections in a wild statement for a particular FILE
2028    are readonly.  */
2029 
2030 static void
check_section_callback(lang_wild_statement_type * ptr ATTRIBUTE_UNUSED,struct wildcard_list * sec ATTRIBUTE_UNUSED,asection * section,lang_input_statement_type * file ATTRIBUTE_UNUSED,void * data)2031 check_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
2032 			struct wildcard_list *sec ATTRIBUTE_UNUSED,
2033 			asection *section,
2034 			lang_input_statement_type *file ATTRIBUTE_UNUSED,
2035 			void *data)
2036 {
2037   /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2038   if (unique_section_p (section))
2039     return;
2040 
2041   if (section->output_section == NULL && (section->flags & SEC_READONLY) == 0)
2042     ((lang_output_section_statement_type *) data)->all_input_readonly = FALSE;
2043 }
2044 
2045 /* This is passed a file name which must have been seen already and
2046    added to the statement tree.  We will see if it has been opened
2047    already and had its symbols read.  If not then we'll read it.  */
2048 
2049 static lang_input_statement_type *
lookup_name(const char * name)2050 lookup_name (const char *name)
2051 {
2052   lang_input_statement_type *search;
2053 
2054   for (search = (lang_input_statement_type *) input_file_chain.head;
2055        search != NULL;
2056        search = (lang_input_statement_type *) search->next_real_file)
2057     {
2058       /* Use the local_sym_name as the name of the file that has
2059 	 already been loaded as filename might have been transformed
2060 	 via the search directory lookup mechanism.  */
2061       const char * filename = search->local_sym_name;
2062 
2063       if (filename == NULL && name == NULL)
2064 	return search;
2065       if (filename != NULL
2066 	  && name != NULL
2067 	  && strcmp (filename, name) == 0)
2068 	break;
2069     }
2070 
2071   if (search == NULL)
2072     search = new_afile (name, lang_input_file_is_search_file_enum,
2073 			default_target, FALSE);
2074 
2075   /* If we have already added this file, or this file is not real
2076      (FIXME: can that ever actually happen?) or the name is NULL
2077      (FIXME: can that ever actually happen?) don't add this file.  */
2078   if (search->loaded
2079       || ! search->real
2080       || search->filename == NULL)
2081     return search;
2082 
2083   if (! load_symbols (search, NULL))
2084     return NULL;
2085 
2086   return search;
2087 }
2088 
2089 /* Save LIST as a list of libraries whose symbols should not be exported.  */
2090 
2091 struct excluded_lib
2092 {
2093   char *name;
2094   struct excluded_lib *next;
2095 };
2096 static struct excluded_lib *excluded_libs;
2097 
2098 void
add_excluded_libs(const char * list)2099 add_excluded_libs (const char *list)
2100 {
2101   const char *p = list, *end;
2102 
2103   while (*p != '\0')
2104     {
2105       struct excluded_lib *entry;
2106       end = strpbrk (p, ",:");
2107       if (end == NULL)
2108 	end = p + strlen (p);
2109       entry = xmalloc (sizeof (*entry));
2110       entry->next = excluded_libs;
2111       entry->name = xmalloc (end - p + 1);
2112       memcpy (entry->name, p, end - p);
2113       entry->name[end - p] = '\0';
2114       excluded_libs = entry;
2115       if (*end == '\0')
2116         break;
2117       p = end + 1;
2118     }
2119 }
2120 
2121 static void
check_excluded_libs(bfd * abfd)2122 check_excluded_libs (bfd *abfd)
2123 {
2124   struct excluded_lib *lib = excluded_libs;
2125 
2126   while (lib)
2127     {
2128       int len = strlen (lib->name);
2129       const char *filename = lbasename (abfd->filename);
2130 
2131       if (strcmp (lib->name, "ALL") == 0)
2132 	{
2133 	  abfd->no_export = TRUE;
2134 	  return;
2135 	}
2136 
2137       if (strncmp (lib->name, filename, len) == 0
2138 	  && (filename[len] == '\0'
2139 	      || (filename[len] == '.' && filename[len + 1] == 'a'
2140 		  && filename[len + 2] == '\0')))
2141 	{
2142 	  abfd->no_export = TRUE;
2143 	  return;
2144 	}
2145 
2146       lib = lib->next;
2147     }
2148 }
2149 
2150 /* Get the symbols for an input file.  */
2151 
2152 static bfd_boolean
load_symbols(lang_input_statement_type * entry,lang_statement_list_type * place)2153 load_symbols (lang_input_statement_type *entry,
2154 	      lang_statement_list_type *place)
2155 {
2156   char **matching;
2157 
2158   if (entry->loaded)
2159     return TRUE;
2160 
2161   ldfile_open_file (entry);
2162 
2163   if (! bfd_check_format (entry->the_bfd, bfd_archive)
2164       && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
2165     {
2166       bfd_error_type err;
2167       lang_statement_list_type *hold;
2168       bfd_boolean bad_load = TRUE;
2169       bfd_boolean save_ldlang_sysrooted_script;
2170 
2171       err = bfd_get_error ();
2172 
2173       /* See if the emulation has some special knowledge.  */
2174       if (ldemul_unrecognized_file (entry))
2175 	return TRUE;
2176 
2177       if (err == bfd_error_file_ambiguously_recognized)
2178 	{
2179 	  char **p;
2180 
2181 	  einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
2182 	  einfo (_("%B: matching formats:"), entry->the_bfd);
2183 	  for (p = matching; *p != NULL; p++)
2184 	    einfo (" %s", *p);
2185 	  einfo ("%F\n");
2186 	}
2187       else if (err != bfd_error_file_not_recognized
2188 	       || place == NULL)
2189 	  einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
2190       else
2191 	bad_load = FALSE;
2192 
2193       bfd_close (entry->the_bfd);
2194       entry->the_bfd = NULL;
2195 
2196       /* Try to interpret the file as a linker script.  */
2197       ldfile_open_command_file (entry->filename);
2198 
2199       hold = stat_ptr;
2200       stat_ptr = place;
2201       save_ldlang_sysrooted_script = ldlang_sysrooted_script;
2202       ldlang_sysrooted_script = entry->sysrooted;
2203 
2204       ldfile_assumed_script = TRUE;
2205       parser_input = input_script;
2206       /* We want to use the same -Bdynamic/-Bstatic as the one for
2207 	 ENTRY.  */
2208       config.dynamic_link = entry->dynamic;
2209       yyparse ();
2210       ldfile_assumed_script = FALSE;
2211 
2212       ldlang_sysrooted_script = save_ldlang_sysrooted_script;
2213       stat_ptr = hold;
2214 
2215       return ! bad_load;
2216     }
2217 
2218   if (ldemul_recognized_file (entry))
2219     return TRUE;
2220 
2221   /* We don't call ldlang_add_file for an archive.  Instead, the
2222      add_symbols entry point will call ldlang_add_file, via the
2223      add_archive_element callback, for each element of the archive
2224      which is used.  */
2225   switch (bfd_get_format (entry->the_bfd))
2226     {
2227     default:
2228       break;
2229 
2230     case bfd_object:
2231       ldlang_add_file (entry);
2232       if (trace_files || trace_file_tries)
2233 	info_msg ("%I\n", entry);
2234       break;
2235 
2236     case bfd_archive:
2237       check_excluded_libs (entry->the_bfd);
2238 
2239       if (entry->whole_archive)
2240 	{
2241 	  bfd *member = NULL;
2242 	  bfd_boolean loaded = TRUE;
2243 
2244 	  for (;;)
2245 	    {
2246 	      member = bfd_openr_next_archived_file (entry->the_bfd, member);
2247 
2248 	      if (member == NULL)
2249 		break;
2250 
2251 	      if (! bfd_check_format (member, bfd_object))
2252 		{
2253 		  einfo (_("%F%B: member %B in archive is not an object\n"),
2254 			 entry->the_bfd, member);
2255 		  loaded = FALSE;
2256 		}
2257 
2258 	      if (! ((*link_info.callbacks->add_archive_element)
2259 		     (&link_info, member, "--whole-archive")))
2260 		abort ();
2261 
2262 	      if (! bfd_link_add_symbols (member, &link_info))
2263 		{
2264 		  einfo (_("%F%B: could not read symbols: %E\n"), member);
2265 		  loaded = FALSE;
2266 		}
2267 	    }
2268 
2269 	  entry->loaded = loaded;
2270 	  return loaded;
2271 	}
2272       break;
2273     }
2274 
2275   if (bfd_link_add_symbols (entry->the_bfd, &link_info))
2276     entry->loaded = TRUE;
2277   else
2278     einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
2279 
2280   return entry->loaded;
2281 }
2282 
2283 /* Handle a wild statement.  S->FILENAME or S->SECTION_LIST or both
2284    may be NULL, indicating that it is a wildcard.  Separate
2285    lang_input_section statements are created for each part of the
2286    expansion; they are added after the wild statement S.  OUTPUT is
2287    the output section.  */
2288 
2289 static void
wild(lang_wild_statement_type * s,const char * target ATTRIBUTE_UNUSED,lang_output_section_statement_type * output)2290 wild (lang_wild_statement_type *s,
2291       const char *target ATTRIBUTE_UNUSED,
2292       lang_output_section_statement_type *output)
2293 {
2294   struct wildcard_list *sec;
2295 
2296   walk_wild (s, output_section_callback, output);
2297 
2298   for (sec = s->section_list; sec != NULL; sec = sec->next)
2299     {
2300       if (default_common_section != NULL)
2301 	break;
2302       if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
2303 	{
2304 	  /* Remember the section that common is going to in case we
2305 	     later get something which doesn't know where to put it.  */
2306 	  default_common_section = output;
2307 	}
2308     }
2309 }
2310 
2311 /* Return TRUE iff target is the sought target.  */
2312 
2313 static int
get_target(const bfd_target * target,void * data)2314 get_target (const bfd_target *target, void *data)
2315 {
2316   const char *sought = data;
2317 
2318   return strcmp (target->name, sought) == 0;
2319 }
2320 
2321 /* Like strcpy() but convert to lower case as well.  */
2322 
2323 static void
stricpy(char * dest,char * src)2324 stricpy (char *dest, char *src)
2325 {
2326   char c;
2327 
2328   while ((c = *src++) != 0)
2329     *dest++ = TOLOWER (c);
2330 
2331   *dest = 0;
2332 }
2333 
2334 /* Remove the first occurrence of needle (if any) in haystack
2335    from haystack.  */
2336 
2337 static void
strcut(char * haystack,char * needle)2338 strcut (char *haystack, char *needle)
2339 {
2340   haystack = strstr (haystack, needle);
2341 
2342   if (haystack)
2343     {
2344       char *src;
2345 
2346       for (src = haystack + strlen (needle); *src;)
2347 	*haystack++ = *src++;
2348 
2349       *haystack = 0;
2350     }
2351 }
2352 
2353 /* Compare two target format name strings.
2354    Return a value indicating how "similar" they are.  */
2355 
2356 static int
name_compare(char * first,char * second)2357 name_compare (char *first, char *second)
2358 {
2359   char *copy1;
2360   char *copy2;
2361   int result;
2362 
2363   copy1 = xmalloc (strlen (first) + 1);
2364   copy2 = xmalloc (strlen (second) + 1);
2365 
2366   /* Convert the names to lower case.  */
2367   stricpy (copy1, first);
2368   stricpy (copy2, second);
2369 
2370   /* Remove size and endian strings from the name.  */
2371   strcut (copy1, "big");
2372   strcut (copy1, "little");
2373   strcut (copy2, "big");
2374   strcut (copy2, "little");
2375 
2376   /* Return a value based on how many characters match,
2377      starting from the beginning.   If both strings are
2378      the same then return 10 * their length.  */
2379   for (result = 0; copy1[result] == copy2[result]; result++)
2380     if (copy1[result] == 0)
2381       {
2382 	result *= 10;
2383 	break;
2384       }
2385 
2386   free (copy1);
2387   free (copy2);
2388 
2389   return result;
2390 }
2391 
2392 /* Set by closest_target_match() below.  */
2393 static const bfd_target *winner;
2394 
2395 /* Scan all the valid bfd targets looking for one that has the endianness
2396    requirement that was specified on the command line, and is the nearest
2397    match to the original output target.  */
2398 
2399 static int
closest_target_match(const bfd_target * target,void * data)2400 closest_target_match (const bfd_target *target, void *data)
2401 {
2402   const bfd_target *original = data;
2403 
2404   if (command_line.endian == ENDIAN_BIG
2405       && target->byteorder != BFD_ENDIAN_BIG)
2406     return 0;
2407 
2408   if (command_line.endian == ENDIAN_LITTLE
2409       && target->byteorder != BFD_ENDIAN_LITTLE)
2410     return 0;
2411 
2412   /* Must be the same flavour.  */
2413   if (target->flavour != original->flavour)
2414     return 0;
2415 
2416   /* If we have not found a potential winner yet, then record this one.  */
2417   if (winner == NULL)
2418     {
2419       winner = target;
2420       return 0;
2421     }
2422 
2423   /* Oh dear, we now have two potential candidates for a successful match.
2424      Compare their names and choose the better one.  */
2425   if (name_compare (target->name, original->name)
2426       > name_compare (winner->name, original->name))
2427     winner = target;
2428 
2429   /* Keep on searching until wqe have checked them all.  */
2430   return 0;
2431 }
2432 
2433 /* Return the BFD target format of the first input file.  */
2434 
2435 static char *
get_first_input_target(void)2436 get_first_input_target (void)
2437 {
2438   char *target = NULL;
2439 
2440   LANG_FOR_EACH_INPUT_STATEMENT (s)
2441     {
2442       if (s->header.type == lang_input_statement_enum
2443 	  && s->real)
2444 	{
2445 	  ldfile_open_file (s);
2446 
2447 	  if (s->the_bfd != NULL
2448 	      && bfd_check_format (s->the_bfd, bfd_object))
2449 	    {
2450 	      target = bfd_get_target (s->the_bfd);
2451 
2452 	      if (target != NULL)
2453 		break;
2454 	    }
2455 	}
2456     }
2457 
2458   return target;
2459 }
2460 
2461 const char *
lang_get_output_target(void)2462 lang_get_output_target (void)
2463 {
2464   const char *target;
2465 
2466   /* Has the user told us which output format to use?  */
2467   if (output_target != NULL)
2468     return output_target;
2469 
2470   /* No - has the current target been set to something other than
2471      the default?  */
2472   if (current_target != default_target)
2473     return current_target;
2474 
2475   /* No - can we determine the format of the first input file?  */
2476   target = get_first_input_target ();
2477   if (target != NULL)
2478     return target;
2479 
2480   /* Failed - use the default output target.  */
2481   return default_target;
2482 }
2483 
2484 /* Open the output file.  */
2485 
2486 static bfd *
open_output(const char * name)2487 open_output (const char *name)
2488 {
2489   bfd *output;
2490 
2491   output_target = lang_get_output_target ();
2492 
2493   /* Has the user requested a particular endianness on the command
2494      line?  */
2495   if (command_line.endian != ENDIAN_UNSET)
2496     {
2497       const bfd_target *target;
2498       enum bfd_endian desired_endian;
2499 
2500       /* Get the chosen target.  */
2501       target = bfd_search_for_target (get_target, (void *) output_target);
2502 
2503       /* If the target is not supported, we cannot do anything.  */
2504       if (target != NULL)
2505 	{
2506 	  if (command_line.endian == ENDIAN_BIG)
2507 	    desired_endian = BFD_ENDIAN_BIG;
2508 	  else
2509 	    desired_endian = BFD_ENDIAN_LITTLE;
2510 
2511 	  /* See if the target has the wrong endianness.  This should
2512 	     not happen if the linker script has provided big and
2513 	     little endian alternatives, but some scrips don't do
2514 	     this.  */
2515 	  if (target->byteorder != desired_endian)
2516 	    {
2517 	      /* If it does, then see if the target provides
2518 		 an alternative with the correct endianness.  */
2519 	      if (target->alternative_target != NULL
2520 		  && (target->alternative_target->byteorder == desired_endian))
2521 		output_target = target->alternative_target->name;
2522 	      else
2523 		{
2524 		  /* Try to find a target as similar as possible to
2525 		     the default target, but which has the desired
2526 		     endian characteristic.  */
2527 		  bfd_search_for_target (closest_target_match,
2528 					 (void *) target);
2529 
2530 		  /* Oh dear - we could not find any targets that
2531 		     satisfy our requirements.  */
2532 		  if (winner == NULL)
2533 		    einfo (_("%P: warning: could not find any targets"
2534 			     " that match endianness requirement\n"));
2535 		  else
2536 		    output_target = winner->name;
2537 		}
2538 	    }
2539 	}
2540     }
2541 
2542   output = bfd_openw (name, output_target);
2543 
2544   if (output == NULL)
2545     {
2546       if (bfd_get_error () == bfd_error_invalid_target)
2547 	einfo (_("%P%F: target %s not found\n"), output_target);
2548 
2549       einfo (_("%P%F: cannot open output file %s: %E\n"), name);
2550     }
2551 
2552   delete_output_file_on_failure = TRUE;
2553 
2554   if (! bfd_set_format (output, bfd_object))
2555     einfo (_("%P%F:%s: can not make object file: %E\n"), name);
2556   if (! bfd_set_arch_mach (output,
2557 			   ldfile_output_architecture,
2558 			   ldfile_output_machine))
2559     einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
2560 
2561   link_info.hash = bfd_link_hash_table_create (output);
2562   if (link_info.hash == NULL)
2563     einfo (_("%P%F: can not create link hash table: %E\n"));
2564 
2565   bfd_set_gp_size (output, g_switch_value);
2566   return output;
2567 }
2568 
2569 static void
ldlang_open_output(lang_statement_union_type * statement)2570 ldlang_open_output (lang_statement_union_type *statement)
2571 {
2572   switch (statement->header.type)
2573     {
2574     case lang_output_statement_enum:
2575       ASSERT (output_bfd == NULL);
2576       output_bfd = open_output (statement->output_statement.name);
2577       ldemul_set_output_arch ();
2578       if (config.magic_demand_paged && !link_info.relocatable)
2579 	output_bfd->flags |= D_PAGED;
2580       else
2581 	output_bfd->flags &= ~D_PAGED;
2582       if (config.text_read_only)
2583 	output_bfd->flags |= WP_TEXT;
2584       else
2585 	output_bfd->flags &= ~WP_TEXT;
2586       if (link_info.traditional_format)
2587 	output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
2588       else
2589 	output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
2590       break;
2591 
2592     case lang_target_statement_enum:
2593       current_target = statement->target_statement.target;
2594       break;
2595     default:
2596       break;
2597     }
2598 }
2599 
2600 /* Convert between addresses in bytes and sizes in octets.
2601    For currently supported targets, octets_per_byte is always a power
2602    of two, so we can use shifts.  */
2603 #define TO_ADDR(X) ((X) >> opb_shift)
2604 #define TO_SIZE(X) ((X) << opb_shift)
2605 
2606 /* Support the above.  */
2607 static unsigned int opb_shift = 0;
2608 
2609 static void
init_opb(void)2610 init_opb (void)
2611 {
2612   unsigned x = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2613 					      ldfile_output_machine);
2614   opb_shift = 0;
2615   if (x > 1)
2616     while ((x & 1) == 0)
2617       {
2618 	x >>= 1;
2619 	++opb_shift;
2620       }
2621   ASSERT (x == 1);
2622 }
2623 
2624 /* Open all the input files.  */
2625 
2626 static void
open_input_bfds(lang_statement_union_type * s,bfd_boolean force)2627 open_input_bfds (lang_statement_union_type *s, bfd_boolean force)
2628 {
2629   for (; s != NULL; s = s->header.next)
2630     {
2631       switch (s->header.type)
2632 	{
2633 	case lang_constructors_statement_enum:
2634 	  open_input_bfds (constructor_list.head, force);
2635 	  break;
2636 	case lang_output_section_statement_enum:
2637 	  open_input_bfds (s->output_section_statement.children.head, force);
2638 	  break;
2639 	case lang_wild_statement_enum:
2640 	  /* Maybe we should load the file's symbols.  */
2641 	  if (s->wild_statement.filename
2642 	      && ! wildcardp (s->wild_statement.filename))
2643 	    lookup_name (s->wild_statement.filename);
2644 	  open_input_bfds (s->wild_statement.children.head, force);
2645 	  break;
2646 	case lang_group_statement_enum:
2647 	  {
2648 	    struct bfd_link_hash_entry *undefs;
2649 
2650 	    /* We must continually search the entries in the group
2651 	       until no new symbols are added to the list of undefined
2652 	       symbols.  */
2653 
2654 	    do
2655 	      {
2656 		undefs = link_info.hash->undefs_tail;
2657 		open_input_bfds (s->group_statement.children.head, TRUE);
2658 	      }
2659 	    while (undefs != link_info.hash->undefs_tail);
2660 	  }
2661 	  break;
2662 	case lang_target_statement_enum:
2663 	  current_target = s->target_statement.target;
2664 	  break;
2665 	case lang_input_statement_enum:
2666 	  if (s->input_statement.real)
2667 	    {
2668 	      lang_statement_list_type add;
2669 
2670 	      s->input_statement.target = current_target;
2671 
2672 	      /* If we are being called from within a group, and this
2673 		 is an archive which has already been searched, then
2674 		 force it to be researched unless the whole archive
2675 		 has been loaded already.  */
2676 	      if (force
2677 		  && !s->input_statement.whole_archive
2678 		  && s->input_statement.loaded
2679 		  && bfd_check_format (s->input_statement.the_bfd,
2680 				       bfd_archive))
2681 		s->input_statement.loaded = FALSE;
2682 
2683 	      lang_list_init (&add);
2684 
2685 	      if (! load_symbols (&s->input_statement, &add))
2686 		config.make_executable = FALSE;
2687 
2688 	      if (add.head != NULL)
2689 		{
2690 		  *add.tail = s->header.next;
2691 		  s->header.next = add.head;
2692 		}
2693 	    }
2694 	  break;
2695 	default:
2696 	  break;
2697 	}
2698     }
2699 }
2700 
2701 /* Add a symbol to a hash of symbols used in DEFINED (NAME) expressions.  */
2702 
2703 void
lang_track_definedness(const char * name)2704 lang_track_definedness (const char *name)
2705 {
2706   if (bfd_hash_lookup (&lang_definedness_table, name, TRUE, FALSE) == NULL)
2707     einfo (_("%P%F: bfd_hash_lookup failed creating symbol %s\n"), name);
2708 }
2709 
2710 /* New-function for the definedness hash table.  */
2711 
2712 static struct bfd_hash_entry *
lang_definedness_newfunc(struct bfd_hash_entry * entry,struct bfd_hash_table * table ATTRIBUTE_UNUSED,const char * name ATTRIBUTE_UNUSED)2713 lang_definedness_newfunc (struct bfd_hash_entry *entry,
2714 			  struct bfd_hash_table *table ATTRIBUTE_UNUSED,
2715 			  const char *name ATTRIBUTE_UNUSED)
2716 {
2717   struct lang_definedness_hash_entry *ret
2718     = (struct lang_definedness_hash_entry *) entry;
2719 
2720   if (ret == NULL)
2721     ret = (struct lang_definedness_hash_entry *)
2722       bfd_hash_allocate (table, sizeof (struct lang_definedness_hash_entry));
2723 
2724   if (ret == NULL)
2725     einfo (_("%P%F: bfd_hash_allocate failed creating symbol %s\n"), name);
2726 
2727   ret->iteration = -1;
2728   return &ret->root;
2729 }
2730 
2731 /* Return the iteration when the definition of NAME was last updated.  A
2732    value of -1 means that the symbol is not defined in the linker script
2733    or the command line, but may be defined in the linker symbol table.  */
2734 
2735 int
lang_symbol_definition_iteration(const char * name)2736 lang_symbol_definition_iteration (const char *name)
2737 {
2738   struct lang_definedness_hash_entry *defentry
2739     = (struct lang_definedness_hash_entry *)
2740     bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
2741 
2742   /* We've already created this one on the presence of DEFINED in the
2743      script, so it can't be NULL unless something is borked elsewhere in
2744      the code.  */
2745   if (defentry == NULL)
2746     FAIL ();
2747 
2748   return defentry->iteration;
2749 }
2750 
2751 /* Update the definedness state of NAME.  */
2752 
2753 void
lang_update_definedness(const char * name,struct bfd_link_hash_entry * h)2754 lang_update_definedness (const char *name, struct bfd_link_hash_entry *h)
2755 {
2756   struct lang_definedness_hash_entry *defentry
2757     = (struct lang_definedness_hash_entry *)
2758     bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
2759 
2760   /* We don't keep track of symbols not tested with DEFINED.  */
2761   if (defentry == NULL)
2762     return;
2763 
2764   /* If the symbol was already defined, and not from an earlier statement
2765      iteration, don't update the definedness iteration, because that'd
2766      make the symbol seem defined in the linker script at this point, and
2767      it wasn't; it was defined in some object.  If we do anyway, DEFINED
2768      would start to yield false before this point and the construct "sym =
2769      DEFINED (sym) ? sym : X;" would change sym to X despite being defined
2770      in an object.  */
2771   if (h->type != bfd_link_hash_undefined
2772       && h->type != bfd_link_hash_common
2773       && h->type != bfd_link_hash_new
2774       && defentry->iteration == -1)
2775     return;
2776 
2777   defentry->iteration = lang_statement_iteration;
2778 }
2779 
2780 /* Add the supplied name to the symbol table as an undefined reference.
2781    This is a two step process as the symbol table doesn't even exist at
2782    the time the ld command line is processed.  First we put the name
2783    on a list, then, once the output file has been opened, transfer the
2784    name to the symbol table.  */
2785 
2786 typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
2787 
2788 #define ldlang_undef_chain_list_head entry_symbol.next
2789 
2790 void
ldlang_add_undef(const char * const name)2791 ldlang_add_undef (const char *const name)
2792 {
2793   ldlang_undef_chain_list_type *new =
2794     stat_alloc (sizeof (ldlang_undef_chain_list_type));
2795 
2796   new->next = ldlang_undef_chain_list_head;
2797   ldlang_undef_chain_list_head = new;
2798 
2799   new->name = xstrdup (name);
2800 
2801   if (output_bfd != NULL)
2802     insert_undefined (new->name);
2803 }
2804 
2805 /* Insert NAME as undefined in the symbol table.  */
2806 
2807 static void
insert_undefined(const char * name)2808 insert_undefined (const char *name)
2809 {
2810   struct bfd_link_hash_entry *h;
2811 
2812   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, FALSE, TRUE);
2813   if (h == NULL)
2814     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
2815   if (h->type == bfd_link_hash_new)
2816     {
2817       h->type = bfd_link_hash_undefined;
2818       h->u.undef.abfd = NULL;
2819       bfd_link_add_undef (link_info.hash, h);
2820     }
2821 }
2822 
2823 /* Run through the list of undefineds created above and place them
2824    into the linker hash table as undefined symbols belonging to the
2825    script file.  */
2826 
2827 static void
lang_place_undefineds(void)2828 lang_place_undefineds (void)
2829 {
2830   ldlang_undef_chain_list_type *ptr;
2831 
2832   for (ptr = ldlang_undef_chain_list_head; ptr != NULL; ptr = ptr->next)
2833     insert_undefined (ptr->name);
2834 }
2835 
2836 /* Check for all readonly or some readwrite sections.  */
2837 
2838 static void
check_input_sections(lang_statement_union_type * s,lang_output_section_statement_type * output_section_statement)2839 check_input_sections
2840   (lang_statement_union_type *s,
2841    lang_output_section_statement_type *output_section_statement)
2842 {
2843   for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2844     {
2845       switch (s->header.type)
2846       {
2847       case lang_wild_statement_enum:
2848 	walk_wild (&s->wild_statement, check_section_callback,
2849 		   output_section_statement);
2850 	if (! output_section_statement->all_input_readonly)
2851 	  return;
2852 	break;
2853       case lang_constructors_statement_enum:
2854 	check_input_sections (constructor_list.head,
2855 			      output_section_statement);
2856 	if (! output_section_statement->all_input_readonly)
2857 	  return;
2858 	break;
2859       case lang_group_statement_enum:
2860 	check_input_sections (s->group_statement.children.head,
2861 			      output_section_statement);
2862 	if (! output_section_statement->all_input_readonly)
2863 	  return;
2864 	break;
2865       default:
2866 	break;
2867       }
2868     }
2869 }
2870 
2871 /* Update wildcard statements if needed.  */
2872 
2873 static void
update_wild_statements(lang_statement_union_type * s)2874 update_wild_statements (lang_statement_union_type *s)
2875 {
2876   struct wildcard_list *sec;
2877 
2878   switch (sort_section)
2879     {
2880     default:
2881       FAIL ();
2882 
2883     case none:
2884       break;
2885 
2886     case by_name:
2887     case by_alignment:
2888       for (; s != NULL; s = s->header.next)
2889 	{
2890 	  switch (s->header.type)
2891 	    {
2892 	    default:
2893 	      break;
2894 
2895 	    case lang_wild_statement_enum:
2896 	      sec = s->wild_statement.section_list;
2897 	      if (sec != NULL)
2898 		{
2899 		  switch (sec->spec.sorted)
2900 		    {
2901 		    case none:
2902 		      sec->spec.sorted = sort_section;
2903 		      break;
2904 		    case by_name:
2905 		      if (sort_section == by_alignment)
2906 			sec->spec.sorted = by_name_alignment;
2907 		      break;
2908 		    case by_alignment:
2909 		      if (sort_section == by_name)
2910 			sec->spec.sorted = by_alignment_name;
2911 		      break;
2912 		    default:
2913 		      break;
2914 		    }
2915 		}
2916 	      break;
2917 
2918 	    case lang_constructors_statement_enum:
2919 	      update_wild_statements (constructor_list.head);
2920 	      break;
2921 
2922 	    case lang_output_section_statement_enum:
2923 	      update_wild_statements
2924 		(s->output_section_statement.children.head);
2925 	      break;
2926 
2927 	    case lang_group_statement_enum:
2928 	      update_wild_statements (s->group_statement.children.head);
2929 	      break;
2930 	    }
2931 	}
2932       break;
2933     }
2934 }
2935 
2936 /* Open input files and attach to output sections.  */
2937 
2938 static void
map_input_to_output_sections(lang_statement_union_type * s,const char * target,lang_output_section_statement_type * os)2939 map_input_to_output_sections
2940   (lang_statement_union_type *s, const char *target,
2941    lang_output_section_statement_type *os)
2942 {
2943   for (; s != NULL; s = s->header.next)
2944     {
2945       switch (s->header.type)
2946 	{
2947 	case lang_wild_statement_enum:
2948 	  wild (&s->wild_statement, target, os);
2949 	  break;
2950 	case lang_constructors_statement_enum:
2951 	  map_input_to_output_sections (constructor_list.head,
2952 					target,
2953 					os);
2954 	  break;
2955 	case lang_output_section_statement_enum:
2956 	  if (s->output_section_statement.constraint)
2957 	    {
2958 	      if (s->output_section_statement.constraint != ONLY_IF_RW
2959 		  && s->output_section_statement.constraint != ONLY_IF_RO)
2960 		break;
2961 	      s->output_section_statement.all_input_readonly = TRUE;
2962 	      check_input_sections (s->output_section_statement.children.head,
2963 				    &s->output_section_statement);
2964 	      if ((s->output_section_statement.all_input_readonly
2965 		   && s->output_section_statement.constraint == ONLY_IF_RW)
2966 		  || (!s->output_section_statement.all_input_readonly
2967 		      && s->output_section_statement.constraint == ONLY_IF_RO))
2968 		{
2969 		  s->output_section_statement.constraint = -1;
2970 		  break;
2971 		}
2972 	    }
2973 
2974 	  map_input_to_output_sections (s->output_section_statement.children.head,
2975 					target,
2976 					&s->output_section_statement);
2977 	  break;
2978 	case lang_output_statement_enum:
2979 	  break;
2980 	case lang_target_statement_enum:
2981 	  target = s->target_statement.target;
2982 	  break;
2983 	case lang_group_statement_enum:
2984 	  map_input_to_output_sections (s->group_statement.children.head,
2985 					target,
2986 					os);
2987 	  break;
2988 	case lang_data_statement_enum:
2989 	  /* Make sure that any sections mentioned in the expression
2990 	     are initialized.  */
2991 	  exp_init_os (s->data_statement.exp);
2992 	  if (os != NULL && os->bfd_section == NULL)
2993 	    init_os (os);
2994 	  /* The output section gets contents, and then we inspect for
2995 	     any flags set in the input script which override any ALLOC.  */
2996 	  os->bfd_section->flags |= SEC_HAS_CONTENTS;
2997 	  if (!(os->flags & SEC_NEVER_LOAD))
2998 	    os->bfd_section->flags |= SEC_ALLOC | SEC_LOAD;
2999 	  break;
3000 	case lang_fill_statement_enum:
3001 	case lang_input_section_enum:
3002 	case lang_object_symbols_statement_enum:
3003 	case lang_reloc_statement_enum:
3004 	case lang_padding_statement_enum:
3005 	case lang_input_statement_enum:
3006 	  if (os != NULL && os->bfd_section == NULL)
3007 	    init_os (os);
3008 	  break;
3009 	case lang_assignment_statement_enum:
3010 	  if (os != NULL && os->bfd_section == NULL)
3011 	    init_os (os);
3012 
3013 	  /* Make sure that any sections mentioned in the assignment
3014 	     are initialized.  */
3015 	  exp_init_os (s->assignment_statement.exp);
3016 	  break;
3017 	case lang_afile_asection_pair_statement_enum:
3018 	  FAIL ();
3019 	  break;
3020 	case lang_address_statement_enum:
3021 	  /* Mark the specified section with the supplied address.
3022 
3023 	     If this section was actually a segment marker, then the
3024 	     directive is ignored if the linker script explicitly
3025 	     processed the segment marker.  Originally, the linker
3026 	     treated segment directives (like -Ttext on the
3027 	     command-line) as section directives.  We honor the
3028 	     section directive semantics for backwards compatibilty;
3029 	     linker scripts that do not specifically check for
3030 	     SEGMENT_START automatically get the old semantics.  */
3031 	  if (!s->address_statement.segment
3032 	      || !s->address_statement.segment->used)
3033 	    {
3034 	      lang_output_section_statement_type *aos
3035 		= (lang_output_section_statement_lookup
3036 		   (s->address_statement.section_name));
3037 
3038 	      if (aos->bfd_section == NULL)
3039 		init_os (aos);
3040 	      aos->addr_tree = s->address_statement.address;
3041 	    }
3042 	  break;
3043 	}
3044     }
3045 }
3046 
3047 /* An output section might have been removed after its statement was
3048    added.  For example, ldemul_before_allocation can remove dynamic
3049    sections if they turn out to be not needed.  Clean them up here.  */
3050 
3051 void
strip_excluded_output_sections(void)3052 strip_excluded_output_sections (void)
3053 {
3054   lang_output_section_statement_type *os;
3055   unsigned int gc_sections;
3056 
3057   /* Run lang_size_sections (if not already done) to ensure that all
3058      symbols defined in the linker script are put in the bfd hash
3059      table.  */
3060   if (expld.phase != lang_mark_phase_enum)
3061     {
3062       expld.phase = lang_mark_phase_enum;
3063       expld.dataseg.phase = exp_dataseg_none;
3064       one_lang_size_sections_pass (NULL, FALSE);
3065       lang_reset_memory_regions ();
3066     }
3067 
3068   /* Now call into bfd_gc_sections to mark all sections defining global
3069      symbols with SEC_KEEP.  */
3070   gc_sections = link_info.gc_sections;
3071   link_info.gc_sections = 0;
3072   bfd_gc_sections (output_bfd, &link_info);
3073   link_info.gc_sections = gc_sections;
3074 
3075   for (os = &lang_output_section_statement.head->output_section_statement;
3076        os != NULL;
3077        os = os->next)
3078     {
3079       asection *output_section;
3080       bfd_boolean exclude;
3081 
3082       if (os->constraint == -1)
3083 	continue;
3084 
3085       output_section = os->bfd_section;
3086       if (output_section == NULL)
3087 	continue;
3088 
3089       exclude = TRUE;
3090       if (output_section->map_head.s != NULL)
3091 	{
3092 	  asection *s;
3093 
3094 	  for (s = output_section->map_head.s; s != NULL;
3095 	       s = s->map_head.s)
3096 	    if ((s->flags & SEC_EXCLUDE) == 0)
3097 	      {
3098 		exclude = FALSE;
3099 		break;
3100 	      }
3101 
3102 	  output_section->map_head.link_order = NULL;
3103 	  output_section->map_tail.link_order = NULL;
3104 	}
3105 
3106       if (exclude
3107 	  && (output_section->flags & SEC_KEEP) == 0
3108 	  && output_section->rawsize == 0
3109 	  && !bfd_is_abs_section (output_section))
3110 	{
3111 	  /* We don't set bfd_section to NULL since bfd_section of the
3112 	     removed output section statement may still be used.  */
3113 	  os->ignored = TRUE;
3114 	  output_section->flags |= SEC_EXCLUDE;
3115 
3116 	  if (!bfd_section_removed_from_list (output_bfd,
3117 					      output_section))
3118 	    {
3119 	      bfd_section_list_remove (output_bfd, output_section);
3120 	      output_bfd->section_count--;
3121 	    }
3122 	}
3123     }
3124 
3125   /* Stop future calls to lang_add_section from messing with map_head
3126      and map_tail link_order fields.  */
3127   stripped_excluded_sections = TRUE;
3128 }
3129 
3130 static void
print_output_section_statement(lang_output_section_statement_type * output_section_statement)3131 print_output_section_statement
3132   (lang_output_section_statement_type *output_section_statement)
3133 {
3134   asection *section = output_section_statement->bfd_section;
3135   int len;
3136 
3137   if (output_section_statement != abs_output_section)
3138     {
3139       minfo ("\n%s", output_section_statement->name);
3140 
3141       if (section != NULL)
3142 	{
3143 	  print_dot = section->vma;
3144 
3145 	  len = strlen (output_section_statement->name);
3146 	  if (len >= SECTION_NAME_MAP_LENGTH - 1)
3147 	    {
3148 	      print_nl ();
3149 	      len = 0;
3150 	    }
3151 	  while (len < SECTION_NAME_MAP_LENGTH)
3152 	    {
3153 	      print_space ();
3154 	      ++len;
3155 	    }
3156 
3157 	  minfo ("0x%V %W", section->vma, section->size);
3158 
3159 	  if (output_section_statement->load_base != NULL)
3160 	    {
3161 	      bfd_vma addr;
3162 
3163 	      addr = exp_get_abs_int (output_section_statement->load_base, 0,
3164 				      "load base");
3165 	      minfo (_(" load address 0x%V"), addr);
3166 	    }
3167 	}
3168 
3169       print_nl ();
3170     }
3171 
3172   print_statement_list (output_section_statement->children.head,
3173 			output_section_statement);
3174 }
3175 
3176 /* Scan for the use of the destination in the right hand side
3177    of an expression.  In such cases we will not compute the
3178    correct expression, since the value of DST that is used on
3179    the right hand side will be its final value, not its value
3180    just before this expression is evaluated.  */
3181 
3182 static bfd_boolean
scan_for_self_assignment(const char * dst,etree_type * rhs)3183 scan_for_self_assignment (const char * dst, etree_type * rhs)
3184 {
3185   if (rhs == NULL || dst == NULL)
3186     return FALSE;
3187 
3188   switch (rhs->type.node_class)
3189     {
3190     case etree_binary:
3191       return scan_for_self_assignment (dst, rhs->binary.lhs)
3192 	||   scan_for_self_assignment (dst, rhs->binary.rhs);
3193 
3194     case etree_trinary:
3195       return scan_for_self_assignment (dst, rhs->trinary.lhs)
3196 	||   scan_for_self_assignment (dst, rhs->trinary.rhs);
3197 
3198     case etree_assign:
3199     case etree_provided:
3200     case etree_provide:
3201       if (strcmp (dst, rhs->assign.dst) == 0)
3202 	return TRUE;
3203       return scan_for_self_assignment (dst, rhs->assign.src);
3204 
3205     case etree_unary:
3206       return scan_for_self_assignment (dst, rhs->unary.child);
3207 
3208     case etree_value:
3209       if (rhs->value.str)
3210 	return strcmp (dst, rhs->value.str) == 0;
3211       return FALSE;
3212 
3213     case etree_name:
3214       if (rhs->name.name)
3215 	return strcmp (dst, rhs->name.name) == 0;
3216       return FALSE;
3217 
3218     default:
3219       break;
3220     }
3221 
3222   return FALSE;
3223 }
3224 
3225 
3226 static void
print_assignment(lang_assignment_statement_type * assignment,lang_output_section_statement_type * output_section)3227 print_assignment (lang_assignment_statement_type *assignment,
3228 		  lang_output_section_statement_type *output_section)
3229 {
3230   unsigned int i;
3231   bfd_boolean is_dot;
3232   bfd_boolean computation_is_valid = TRUE;
3233   etree_type *tree;
3234 
3235   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
3236     print_space ();
3237 
3238   if (assignment->exp->type.node_class == etree_assert)
3239     {
3240       is_dot = FALSE;
3241       tree = assignment->exp->assert_s.child;
3242       computation_is_valid = TRUE;
3243     }
3244   else
3245     {
3246       const char *dst = assignment->exp->assign.dst;
3247 
3248       is_dot = (dst[0] == '.' && dst[1] == 0);
3249       tree = assignment->exp->assign.src;
3250       computation_is_valid = is_dot || (scan_for_self_assignment (dst, tree) == FALSE);
3251     }
3252 
3253   exp_fold_tree (tree, output_section->bfd_section, &print_dot);
3254   if (expld.result.valid_p)
3255     {
3256       bfd_vma value;
3257 
3258       if (computation_is_valid)
3259 	{
3260 	  value = expld.result.value;
3261 
3262 	  if (expld.result.section)
3263 	    value += expld.result.section->vma;
3264 
3265 	  minfo ("0x%V", value);
3266 	  if (is_dot)
3267 	    print_dot = value;
3268 	}
3269       else
3270 	{
3271 	  struct bfd_link_hash_entry *h;
3272 
3273 	  h = bfd_link_hash_lookup (link_info.hash, assignment->exp->assign.dst,
3274 				    FALSE, FALSE, TRUE);
3275 	  if (h)
3276 	    {
3277 	      value = h->u.def.value;
3278 
3279 	      if (expld.result.section)
3280 	      value += expld.result.section->vma;
3281 
3282 	      minfo ("[0x%V]", value);
3283 	    }
3284 	  else
3285 	    minfo ("[unresolved]");
3286 	}
3287     }
3288   else
3289     {
3290       minfo ("*undef*   ");
3291 #ifdef BFD64
3292       minfo ("        ");
3293 #endif
3294     }
3295 
3296   minfo ("                ");
3297   exp_print_tree (assignment->exp);
3298   print_nl ();
3299 }
3300 
3301 static void
print_input_statement(lang_input_statement_type * statm)3302 print_input_statement (lang_input_statement_type *statm)
3303 {
3304   if (statm->filename != NULL)
3305     {
3306       fprintf (config.map_file, "LOAD %s\n", statm->filename);
3307     }
3308 }
3309 
3310 /* Print all symbols defined in a particular section.  This is called
3311    via bfd_link_hash_traverse, or by print_all_symbols.  */
3312 
3313 static bfd_boolean
print_one_symbol(struct bfd_link_hash_entry * hash_entry,void * ptr)3314 print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
3315 {
3316   asection *sec = ptr;
3317 
3318   if ((hash_entry->type == bfd_link_hash_defined
3319        || hash_entry->type == bfd_link_hash_defweak)
3320       && sec == hash_entry->u.def.section)
3321     {
3322       int i;
3323 
3324       for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
3325 	print_space ();
3326       minfo ("0x%V   ",
3327 	     (hash_entry->u.def.value
3328 	      + hash_entry->u.def.section->output_offset
3329 	      + hash_entry->u.def.section->output_section->vma));
3330 
3331       minfo ("             %T\n", hash_entry->root.string);
3332     }
3333 
3334   return TRUE;
3335 }
3336 
3337 static void
print_all_symbols(sec)3338 print_all_symbols (sec)
3339      asection *sec;
3340 {
3341   struct fat_user_section_struct *ud = get_userdata (sec);
3342   struct map_symbol_def *def;
3343 
3344   if (!ud)
3345     return;
3346 
3347   *ud->map_symbol_def_tail = 0;
3348   for (def = ud->map_symbol_def_head; def; def = def->next)
3349     print_one_symbol (def->entry, sec);
3350 }
3351 
3352 /* Print information about an input section to the map file.  */
3353 
3354 static void
print_input_section(lang_input_section_type * in)3355 print_input_section (lang_input_section_type *in)
3356 {
3357   asection *i = in->section;
3358   bfd_size_type size = i->size;
3359 
3360   init_opb ();
3361   if (size != 0)
3362     {
3363       int len;
3364       bfd_vma addr;
3365 
3366       print_space ();
3367       minfo ("%s", i->name);
3368 
3369       len = 1 + strlen (i->name);
3370       if (len >= SECTION_NAME_MAP_LENGTH - 1)
3371 	{
3372 	  print_nl ();
3373 	  len = 0;
3374 	}
3375       while (len < SECTION_NAME_MAP_LENGTH)
3376 	{
3377 	  print_space ();
3378 	  ++len;
3379 	}
3380 
3381       if (i->output_section != NULL && (i->flags & SEC_EXCLUDE) == 0)
3382 	addr = i->output_section->vma + i->output_offset;
3383       else
3384 	{
3385 	  addr = print_dot;
3386 	  size = 0;
3387 	}
3388 
3389       minfo ("0x%V %W %B\n", addr, TO_ADDR (size), i->owner);
3390 
3391       if (size != i->rawsize && i->rawsize != 0)
3392 	{
3393 	  len = SECTION_NAME_MAP_LENGTH + 3;
3394 #ifdef BFD64
3395 	  len += 16;
3396 #else
3397 	  len += 8;
3398 #endif
3399 	  while (len > 0)
3400 	    {
3401 	      print_space ();
3402 	      --len;
3403 	    }
3404 
3405 	  minfo (_("%W (size before relaxing)\n"), i->rawsize);
3406 	}
3407 
3408       if (i->output_section != NULL && (i->flags & SEC_EXCLUDE) == 0)
3409 	{
3410 	  if (command_line.reduce_memory_overheads)
3411 	    bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
3412 	  else
3413 	    print_all_symbols (i);
3414 
3415 	  print_dot = addr + TO_ADDR (size);
3416 	}
3417     }
3418 }
3419 
3420 static void
print_fill_statement(lang_fill_statement_type * fill)3421 print_fill_statement (lang_fill_statement_type *fill)
3422 {
3423   size_t size;
3424   unsigned char *p;
3425   fputs (" FILL mask 0x", config.map_file);
3426   for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
3427     fprintf (config.map_file, "%02x", *p);
3428   fputs ("\n", config.map_file);
3429 }
3430 
3431 static void
print_data_statement(lang_data_statement_type * data)3432 print_data_statement (lang_data_statement_type *data)
3433 {
3434   int i;
3435   bfd_vma addr;
3436   bfd_size_type size;
3437   const char *name;
3438 
3439   init_opb ();
3440   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
3441     print_space ();
3442 
3443   addr = data->output_vma;
3444   if (data->output_section != NULL)
3445     addr += data->output_section->vma;
3446 
3447   switch (data->type)
3448     {
3449     default:
3450       abort ();
3451     case BYTE:
3452       size = BYTE_SIZE;
3453       name = "BYTE";
3454       break;
3455     case SHORT:
3456       size = SHORT_SIZE;
3457       name = "SHORT";
3458       break;
3459     case LONG:
3460       size = LONG_SIZE;
3461       name = "LONG";
3462       break;
3463     case QUAD:
3464       size = QUAD_SIZE;
3465       name = "QUAD";
3466       break;
3467     case SQUAD:
3468       size = QUAD_SIZE;
3469       name = "SQUAD";
3470       break;
3471     }
3472 
3473   minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
3474 
3475   if (data->exp->type.node_class != etree_value)
3476     {
3477       print_space ();
3478       exp_print_tree (data->exp);
3479     }
3480 
3481   print_nl ();
3482 
3483   print_dot = addr + TO_ADDR (size);
3484 }
3485 
3486 /* Print an address statement.  These are generated by options like
3487    -Ttext.  */
3488 
3489 static void
print_address_statement(lang_address_statement_type * address)3490 print_address_statement (lang_address_statement_type *address)
3491 {
3492   minfo (_("Address of section %s set to "), address->section_name);
3493   exp_print_tree (address->address);
3494   print_nl ();
3495 }
3496 
3497 /* Print a reloc statement.  */
3498 
3499 static void
print_reloc_statement(lang_reloc_statement_type * reloc)3500 print_reloc_statement (lang_reloc_statement_type *reloc)
3501 {
3502   int i;
3503   bfd_vma addr;
3504   bfd_size_type size;
3505 
3506   init_opb ();
3507   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
3508     print_space ();
3509 
3510   addr = reloc->output_vma;
3511   if (reloc->output_section != NULL)
3512     addr += reloc->output_section->vma;
3513 
3514   size = bfd_get_reloc_size (reloc->howto);
3515 
3516   minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
3517 
3518   if (reloc->name != NULL)
3519     minfo ("%s+", reloc->name);
3520   else
3521     minfo ("%s+", reloc->section->name);
3522 
3523   exp_print_tree (reloc->addend_exp);
3524 
3525   print_nl ();
3526 
3527   print_dot = addr + TO_ADDR (size);
3528 }
3529 
3530 static void
print_padding_statement(lang_padding_statement_type * s)3531 print_padding_statement (lang_padding_statement_type *s)
3532 {
3533   int len;
3534   bfd_vma addr;
3535 
3536   init_opb ();
3537   minfo (" *fill*");
3538 
3539   len = sizeof " *fill*" - 1;
3540   while (len < SECTION_NAME_MAP_LENGTH)
3541     {
3542       print_space ();
3543       ++len;
3544     }
3545 
3546   addr = s->output_offset;
3547   if (s->output_section != NULL)
3548     addr += s->output_section->vma;
3549   minfo ("0x%V %W ", addr, (bfd_vma) s->size);
3550 
3551   if (s->fill->size != 0)
3552     {
3553       size_t size;
3554       unsigned char *p;
3555       for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
3556 	fprintf (config.map_file, "%02x", *p);
3557     }
3558 
3559   print_nl ();
3560 
3561   print_dot = addr + TO_ADDR (s->size);
3562 }
3563 
3564 static void
print_wild_statement(lang_wild_statement_type * w,lang_output_section_statement_type * os)3565 print_wild_statement (lang_wild_statement_type *w,
3566 		      lang_output_section_statement_type *os)
3567 {
3568   struct wildcard_list *sec;
3569 
3570   print_space ();
3571 
3572   if (w->filenames_sorted)
3573     minfo ("SORT(");
3574   if (w->filename != NULL)
3575     minfo ("%s", w->filename);
3576   else
3577     minfo ("*");
3578   if (w->filenames_sorted)
3579     minfo (")");
3580 
3581   minfo ("(");
3582   for (sec = w->section_list; sec; sec = sec->next)
3583     {
3584       if (sec->spec.sorted)
3585 	minfo ("SORT(");
3586       if (sec->spec.exclude_name_list != NULL)
3587 	{
3588 	  name_list *tmp;
3589 	  minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
3590 	  for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
3591 	    minfo (" %s", tmp->name);
3592 	  minfo (") ");
3593 	}
3594       if (sec->spec.name != NULL)
3595 	minfo ("%s", sec->spec.name);
3596       else
3597 	minfo ("*");
3598       if (sec->spec.sorted)
3599 	minfo (")");
3600       if (sec->next)
3601 	minfo (" ");
3602     }
3603   minfo (")");
3604 
3605   print_nl ();
3606 
3607   print_statement_list (w->children.head, os);
3608 }
3609 
3610 /* Print a group statement.  */
3611 
3612 static void
print_group(lang_group_statement_type * s,lang_output_section_statement_type * os)3613 print_group (lang_group_statement_type *s,
3614 	     lang_output_section_statement_type *os)
3615 {
3616   fprintf (config.map_file, "START GROUP\n");
3617   print_statement_list (s->children.head, os);
3618   fprintf (config.map_file, "END GROUP\n");
3619 }
3620 
3621 /* Print the list of statements in S.
3622    This can be called for any statement type.  */
3623 
3624 static void
print_statement_list(lang_statement_union_type * s,lang_output_section_statement_type * os)3625 print_statement_list (lang_statement_union_type *s,
3626 		      lang_output_section_statement_type *os)
3627 {
3628   while (s != NULL)
3629     {
3630       print_statement (s, os);
3631       s = s->header.next;
3632     }
3633 }
3634 
3635 /* Print the first statement in statement list S.
3636    This can be called for any statement type.  */
3637 
3638 static void
print_statement(lang_statement_union_type * s,lang_output_section_statement_type * os)3639 print_statement (lang_statement_union_type *s,
3640 		 lang_output_section_statement_type *os)
3641 {
3642   switch (s->header.type)
3643     {
3644     default:
3645       fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
3646       FAIL ();
3647       break;
3648     case lang_constructors_statement_enum:
3649       if (constructor_list.head != NULL)
3650 	{
3651 	  if (constructors_sorted)
3652 	    minfo (" SORT (CONSTRUCTORS)\n");
3653 	  else
3654 	    minfo (" CONSTRUCTORS\n");
3655 	  print_statement_list (constructor_list.head, os);
3656 	}
3657       break;
3658     case lang_wild_statement_enum:
3659       print_wild_statement (&s->wild_statement, os);
3660       break;
3661     case lang_address_statement_enum:
3662       print_address_statement (&s->address_statement);
3663       break;
3664     case lang_object_symbols_statement_enum:
3665       minfo (" CREATE_OBJECT_SYMBOLS\n");
3666       break;
3667     case lang_fill_statement_enum:
3668       print_fill_statement (&s->fill_statement);
3669       break;
3670     case lang_data_statement_enum:
3671       print_data_statement (&s->data_statement);
3672       break;
3673     case lang_reloc_statement_enum:
3674       print_reloc_statement (&s->reloc_statement);
3675       break;
3676     case lang_input_section_enum:
3677       print_input_section (&s->input_section);
3678       break;
3679     case lang_padding_statement_enum:
3680       print_padding_statement (&s->padding_statement);
3681       break;
3682     case lang_output_section_statement_enum:
3683       print_output_section_statement (&s->output_section_statement);
3684       break;
3685     case lang_assignment_statement_enum:
3686       print_assignment (&s->assignment_statement, os);
3687       break;
3688     case lang_target_statement_enum:
3689       fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
3690       break;
3691     case lang_output_statement_enum:
3692       minfo ("OUTPUT(%s", s->output_statement.name);
3693       if (output_target != NULL)
3694 	minfo (" %s", output_target);
3695       minfo (")\n");
3696       break;
3697     case lang_input_statement_enum:
3698       print_input_statement (&s->input_statement);
3699       break;
3700     case lang_group_statement_enum:
3701       print_group (&s->group_statement, os);
3702       break;
3703     case lang_afile_asection_pair_statement_enum:
3704       FAIL ();
3705       break;
3706     }
3707 }
3708 
3709 static void
print_statements(void)3710 print_statements (void)
3711 {
3712   print_statement_list (statement_list.head, abs_output_section);
3713 }
3714 
3715 /* Print the first N statements in statement list S to STDERR.
3716    If N == 0, nothing is printed.
3717    If N < 0, the entire list is printed.
3718    Intended to be called from GDB.  */
3719 
3720 void
dprint_statement(lang_statement_union_type * s,int n)3721 dprint_statement (lang_statement_union_type *s, int n)
3722 {
3723   FILE *map_save = config.map_file;
3724 
3725   config.map_file = stderr;
3726 
3727   if (n < 0)
3728     print_statement_list (s, abs_output_section);
3729   else
3730     {
3731       while (s && --n >= 0)
3732 	{
3733 	  print_statement (s, abs_output_section);
3734 	  s = s->header.next;
3735 	}
3736     }
3737 
3738   config.map_file = map_save;
3739 }
3740 
3741 static void
insert_pad(lang_statement_union_type ** ptr,fill_type * fill,unsigned int alignment_needed,asection * output_section,bfd_vma dot)3742 insert_pad (lang_statement_union_type **ptr,
3743 	    fill_type *fill,
3744 	    unsigned int alignment_needed,
3745 	    asection *output_section,
3746 	    bfd_vma dot)
3747 {
3748   static fill_type zero_fill = { 1, { 0 } };
3749   lang_statement_union_type *pad = NULL;
3750 
3751   if (ptr != &statement_list.head)
3752     pad = ((lang_statement_union_type *)
3753 	   ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
3754   if (pad != NULL
3755       && pad->header.type == lang_padding_statement_enum
3756       && pad->padding_statement.output_section == output_section)
3757     {
3758       /* Use the existing pad statement.  */
3759     }
3760   else if ((pad = *ptr) != NULL
3761       && pad->header.type == lang_padding_statement_enum
3762       && pad->padding_statement.output_section == output_section)
3763     {
3764       /* Use the existing pad statement.  */
3765     }
3766   else
3767     {
3768       /* Make a new padding statement, linked into existing chain.  */
3769       pad = stat_alloc (sizeof (lang_padding_statement_type));
3770       pad->header.next = *ptr;
3771       *ptr = pad;
3772       pad->header.type = lang_padding_statement_enum;
3773       pad->padding_statement.output_section = output_section;
3774       if (fill == NULL)
3775 	fill = &zero_fill;
3776       pad->padding_statement.fill = fill;
3777     }
3778   pad->padding_statement.output_offset = dot - output_section->vma;
3779   pad->padding_statement.size = alignment_needed;
3780   output_section->size += alignment_needed;
3781 }
3782 
3783 /* Work out how much this section will move the dot point.  */
3784 
3785 static bfd_vma
size_input_section(lang_statement_union_type ** this_ptr,lang_output_section_statement_type * output_section_statement,fill_type * fill,bfd_vma dot)3786 size_input_section
3787   (lang_statement_union_type **this_ptr,
3788    lang_output_section_statement_type *output_section_statement,
3789    fill_type *fill,
3790    bfd_vma dot)
3791 {
3792   lang_input_section_type *is = &((*this_ptr)->input_section);
3793   asection *i = is->section;
3794 
3795   if (!is->ifile->just_syms_flag && (i->flags & SEC_EXCLUDE) == 0)
3796     {
3797       unsigned int alignment_needed;
3798       asection *o;
3799 
3800       /* Align this section first to the input sections requirement,
3801 	 then to the output section's requirement.  If this alignment
3802 	 is greater than any seen before, then record it too.  Perform
3803 	 the alignment by inserting a magic 'padding' statement.  */
3804 
3805       if (output_section_statement->subsection_alignment != -1)
3806 	i->alignment_power = output_section_statement->subsection_alignment;
3807 
3808       o = output_section_statement->bfd_section;
3809       if (o->alignment_power < i->alignment_power)
3810 	o->alignment_power = i->alignment_power;
3811 
3812       alignment_needed = align_power (dot, i->alignment_power) - dot;
3813 
3814       if (alignment_needed != 0)
3815 	{
3816 	  insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
3817 	  dot += alignment_needed;
3818 	}
3819 
3820       /* Remember where in the output section this input section goes.  */
3821 
3822       i->output_offset = dot - o->vma;
3823 
3824       /* Mark how big the output section must be to contain this now.  */
3825       dot += TO_ADDR (i->size);
3826       o->size = TO_SIZE (dot - o->vma);
3827     }
3828   else
3829     {
3830       i->output_offset = i->vma - output_section_statement->bfd_section->vma;
3831     }
3832 
3833   return dot;
3834 }
3835 
3836 static int
sort_sections_by_lma(const void * arg1,const void * arg2)3837 sort_sections_by_lma (const void *arg1, const void *arg2)
3838 {
3839   const asection *sec1 = *(const asection **) arg1;
3840   const asection *sec2 = *(const asection **) arg2;
3841 
3842   if (bfd_section_lma (sec1->owner, sec1)
3843       < bfd_section_lma (sec2->owner, sec2))
3844     return -1;
3845   else if (bfd_section_lma (sec1->owner, sec1)
3846 	   > bfd_section_lma (sec2->owner, sec2))
3847     return 1;
3848 
3849   return 0;
3850 }
3851 
3852 #define IGNORE_SECTION(s) \
3853   ((s->flags & SEC_NEVER_LOAD) != 0				\
3854    || (s->flags & SEC_ALLOC) == 0				\
3855    || ((s->flags & SEC_THREAD_LOCAL) != 0			\
3856 	&& (s->flags & SEC_LOAD) == 0))
3857 
3858 /* Check to see if any allocated sections overlap with other allocated
3859    sections.  This can happen if a linker script specifies the output
3860    section addresses of the two sections.  */
3861 
3862 static void
lang_check_section_addresses(void)3863 lang_check_section_addresses (void)
3864 {
3865   asection *s, *os;
3866   asection **sections, **spp;
3867   unsigned int count;
3868   bfd_vma s_start;
3869   bfd_vma s_end;
3870   bfd_vma os_start;
3871   bfd_vma os_end;
3872   bfd_size_type amt;
3873 
3874   if (bfd_count_sections (output_bfd) <= 1)
3875     return;
3876 
3877   amt = bfd_count_sections (output_bfd) * sizeof (asection *);
3878   sections = xmalloc (amt);
3879 
3880   /* Scan all sections in the output list.  */
3881   count = 0;
3882   for (s = output_bfd->sections; s != NULL; s = s->next)
3883     {
3884       /* Only consider loadable sections with real contents.  */
3885       if (IGNORE_SECTION (s) || s->size == 0)
3886 	continue;
3887 
3888       sections[count] = s;
3889       count++;
3890     }
3891 
3892   if (count <= 1)
3893     return;
3894 
3895   qsort (sections, (size_t) count, sizeof (asection *),
3896 	 sort_sections_by_lma);
3897 
3898   spp = sections;
3899   s = *spp++;
3900   s_start = bfd_section_lma (output_bfd, s);
3901   s_end = s_start + TO_ADDR (s->size) - 1;
3902   for (count--; count; count--)
3903     {
3904       /* We must check the sections' LMA addresses not their VMA
3905 	 addresses because overlay sections can have overlapping VMAs
3906 	 but they must have distinct LMAs.  */
3907       os = s;
3908       os_start = s_start;
3909       os_end = s_end;
3910       s = *spp++;
3911       s_start = bfd_section_lma (output_bfd, s);
3912       s_end = s_start + TO_ADDR (s->size) - 1;
3913 
3914       /* Look for an overlap.  */
3915       if (s_end >= os_start && s_start <= os_end)
3916 	einfo (_("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
3917 	       s->name, s_start, s_end, os->name, os_start, os_end);
3918     }
3919 
3920   free (sections);
3921 }
3922 
3923 /* Make sure the new address is within the region.  We explicitly permit the
3924    current address to be at the exact end of the region when the address is
3925    non-zero, in case the region is at the end of addressable memory and the
3926    calculation wraps around.  */
3927 
3928 static void
os_region_check(lang_output_section_statement_type * os,lang_memory_region_type * region,etree_type * tree,bfd_vma base)3929 os_region_check (lang_output_section_statement_type *os,
3930 		 lang_memory_region_type *region,
3931 		 etree_type *tree,
3932 		 bfd_vma base)
3933 {
3934   if ((region->current < region->origin
3935        || (region->current - region->origin > region->length))
3936       && ((region->current != region->origin + region->length)
3937 	  || base == 0))
3938     {
3939       if (tree != NULL)
3940 	{
3941 	  einfo (_("%X%P: address 0x%v of %B section %s"
3942 		   " is not within region %s\n"),
3943 		 region->current,
3944 		 os->bfd_section->owner,
3945 		 os->bfd_section->name,
3946 		 region->name);
3947 	}
3948       else
3949 	{
3950 	  einfo (_("%X%P: region %s is full (%B section %s)\n"),
3951 		 region->name,
3952 		 os->bfd_section->owner,
3953 		 os->bfd_section->name);
3954 	}
3955       /* Reset the region pointer.  */
3956       region->current = region->origin;
3957     }
3958 }
3959 
3960 /* Set the sizes for all the output sections.  */
3961 
3962 static bfd_vma
lang_size_sections_1(lang_statement_union_type * s,lang_output_section_statement_type * output_section_statement,lang_statement_union_type ** prev,fill_type * fill,bfd_vma dot,bfd_boolean * relax,bfd_boolean check_regions)3963 lang_size_sections_1
3964   (lang_statement_union_type *s,
3965    lang_output_section_statement_type *output_section_statement,
3966    lang_statement_union_type **prev,
3967    fill_type *fill,
3968    bfd_vma dot,
3969    bfd_boolean *relax,
3970    bfd_boolean check_regions)
3971 {
3972   /* Size up the sections from their constituent parts.  */
3973   for (; s != NULL; s = s->header.next)
3974     {
3975       switch (s->header.type)
3976 	{
3977 	case lang_output_section_statement_enum:
3978 	  {
3979 	    bfd_vma newdot, after;
3980 	    lang_output_section_statement_type *os;
3981 
3982 	    os = &s->output_section_statement;
3983 	    if (os->bfd_section == NULL)
3984 	      /* This section was removed or never actually created.  */
3985 	      break;
3986 
3987 	    /* If this is a COFF shared library section, use the size and
3988 	       address from the input section.  FIXME: This is COFF
3989 	       specific; it would be cleaner if there were some other way
3990 	       to do this, but nothing simple comes to mind.  */
3991 	    if ((bfd_get_flavour (output_bfd) == bfd_target_ecoff_flavour
3992 		 || bfd_get_flavour (output_bfd) == bfd_target_coff_flavour)
3993 		&& (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
3994 	      {
3995 		asection *input;
3996 
3997 		if (os->children.head == NULL
3998 		    || os->children.head->header.next != NULL
3999 		    || (os->children.head->header.type
4000 			!= lang_input_section_enum))
4001 		  einfo (_("%P%X: Internal error on COFF shared library"
4002 			   " section %s\n"), os->name);
4003 
4004 		input = os->children.head->input_section.section;
4005 		bfd_set_section_vma (os->bfd_section->owner,
4006 				     os->bfd_section,
4007 				     bfd_section_vma (input->owner, input));
4008 		os->bfd_section->size = input->size;
4009 		break;
4010 	      }
4011 
4012 	    if (bfd_is_abs_section (os->bfd_section))
4013 	      {
4014 		/* No matter what happens, an abs section starts at zero.  */
4015 		ASSERT (os->bfd_section->vma == 0);
4016 	      }
4017 	    else
4018 	      {
4019 		if (os->addr_tree == NULL)
4020 		  {
4021 		    /* No address specified for this section, get one
4022 		       from the region specification.  */
4023 		    if (os->region == NULL
4024 			|| ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4025 			    && os->region->name[0] == '*'
4026 			    && strcmp (os->region->name,
4027 				       DEFAULT_MEMORY_REGION) == 0))
4028 		      {
4029 			os->region = lang_memory_default (os->bfd_section);
4030 		      }
4031 
4032 		    /* If a loadable section is using the default memory
4033 		       region, and some non default memory regions were
4034 		       defined, issue an error message.  */
4035 		    if (!IGNORE_SECTION (os->bfd_section)
4036 			&& ! link_info.relocatable
4037 			&& check_regions
4038 			&& strcmp (os->region->name,
4039 				   DEFAULT_MEMORY_REGION) == 0
4040 			&& lang_memory_region_list != NULL
4041 			&& (strcmp (lang_memory_region_list->name,
4042 				    DEFAULT_MEMORY_REGION) != 0
4043 			    || lang_memory_region_list->next != NULL)
4044 			&& expld.phase != lang_mark_phase_enum)
4045 		      {
4046 			/* By default this is an error rather than just a
4047 			   warning because if we allocate the section to the
4048 			   default memory region we can end up creating an
4049 			   excessively large binary, or even seg faulting when
4050 			   attempting to perform a negative seek.  See
4051 			   sources.redhat.com/ml/binutils/2003-04/msg00423.html
4052 			   for an example of this.  This behaviour can be
4053 			   overridden by the using the --no-check-sections
4054 			   switch.  */
4055 			if (command_line.check_section_addresses)
4056 			  einfo (_("%P%F: error: no memory region specified"
4057 				   " for loadable section `%s'\n"),
4058 				 bfd_get_section_name (output_bfd,
4059 						       os->bfd_section));
4060 			else
4061 			  einfo (_("%P: warning: no memory region specified"
4062 				   " for loadable section `%s'\n"),
4063 				 bfd_get_section_name (output_bfd,
4064 						       os->bfd_section));
4065 		      }
4066 
4067 		    newdot = os->region->current;
4068 
4069 		    if (os->section_alignment == -1)
4070 		      {
4071 			bfd_vma savedot = newdot;
4072 			newdot = align_power (newdot,
4073 					      os->bfd_section->alignment_power);
4074 
4075 			if (newdot != savedot
4076 			    && config.warn_section_align
4077 			    && expld.phase != lang_mark_phase_enum)
4078 			  einfo (_("%P: warning: changing start of section"
4079 				   " %s by %lu bytes\n"),
4080 				 os->name, (unsigned long) (newdot - savedot));
4081 		      }
4082 		  }
4083 		else
4084 		  {
4085 		    newdot = dot;
4086 		    os->processed = -1;
4087 		    exp_fold_tree (os->addr_tree, bfd_abs_section_ptr,
4088 				   &newdot);
4089 		    os->processed = 0;
4090 
4091 		    if (!expld.result.valid_p
4092 			&& expld.phase != lang_mark_phase_enum)
4093 		      einfo (_("%F%S: non constant or forward reference"
4094 			       " address expression for section %s\n"),
4095 			     os->name);
4096 
4097 		    newdot = expld.result.value + expld.result.section->vma;
4098 		  }
4099 
4100 		/* The section starts here.
4101 		   First, align to what the section needs.  */
4102 
4103 		if (os->section_alignment != -1)
4104 		  newdot = align_power (newdot, os->section_alignment);
4105 
4106 		bfd_set_section_vma (0, os->bfd_section, newdot);
4107 
4108 		os->bfd_section->output_offset = 0;
4109 	      }
4110 
4111 	    lang_size_sections_1 (os->children.head, os, &os->children.head,
4112 				  os->fill, newdot, relax, check_regions);
4113 
4114 	    os->processed = 1;
4115 
4116 	    if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4117 	      {
4118 		ASSERT (os->bfd_section->size == 0);
4119 		break;
4120 	      }
4121 
4122 	    dot = os->bfd_section->vma;
4123 
4124 	    /* Put the section within the requested block size, or
4125 	       align at the block boundary.  */
4126 	    after = ((dot
4127 		      + TO_ADDR (os->bfd_section->size)
4128 		      + os->block_value - 1)
4129 		     & - (bfd_vma) os->block_value);
4130 
4131 	    os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
4132 
4133 	    /* .tbss sections effectively have zero size.  */
4134 	    if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
4135 		|| (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
4136 		|| link_info.relocatable)
4137 	      dot += TO_ADDR (os->bfd_section->size);
4138 
4139 	    if (os->update_dot_tree != 0)
4140 	      exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
4141 
4142 	    /* Update dot in the region ?
4143 	       We only do this if the section is going to be allocated,
4144 	       since unallocated sections do not contribute to the region's
4145 	       overall size in memory.
4146 
4147 	       If the SEC_NEVER_LOAD bit is not set, it will affect the
4148 	       addresses of sections after it. We have to update
4149 	       dot.  */
4150 	    if (os->region != NULL
4151 		&& ((os->bfd_section->flags & SEC_NEVER_LOAD) == 0
4152 		    || (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))))
4153 	      {
4154 		os->region->current = dot;
4155 
4156 		if (check_regions)
4157 		  /* Make sure the new address is within the region.  */
4158 		  os_region_check (os, os->region, os->addr_tree,
4159 				   os->bfd_section->vma);
4160 
4161 		/* If there's no load address specified, use the run
4162 		   region as the load region.  */
4163 		if (os->lma_region == NULL && os->load_base == NULL)
4164 		  os->lma_region = os->region;
4165 
4166 		if (os->lma_region != NULL && os->lma_region != os->region)
4167 		  {
4168 		    /* Set load_base, which will be handled later.  */
4169 		    os->load_base = exp_intop (os->lma_region->current);
4170 		    os->lma_region->current +=
4171 		      TO_ADDR (os->bfd_section->size);
4172 		    if (check_regions)
4173 		      os_region_check (os, os->lma_region, NULL,
4174 				       os->bfd_section->lma);
4175 		  }
4176 	      }
4177 	  }
4178 	  break;
4179 
4180 	case lang_constructors_statement_enum:
4181 	  dot = lang_size_sections_1 (constructor_list.head,
4182 				      output_section_statement,
4183 				      &s->wild_statement.children.head,
4184 				      fill, dot, relax, check_regions);
4185 	  break;
4186 
4187 	case lang_data_statement_enum:
4188 	  {
4189 	    unsigned int size = 0;
4190 
4191 	    s->data_statement.output_vma =
4192 	      dot - output_section_statement->bfd_section->vma;
4193 	    s->data_statement.output_section =
4194 	      output_section_statement->bfd_section;
4195 
4196 	    /* We might refer to provided symbols in the expression, and
4197 	       need to mark them as needed.  */
4198 	    exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
4199 
4200 	    switch (s->data_statement.type)
4201 	      {
4202 	      default:
4203 		abort ();
4204 	      case QUAD:
4205 	      case SQUAD:
4206 		size = QUAD_SIZE;
4207 		break;
4208 	      case LONG:
4209 		size = LONG_SIZE;
4210 		break;
4211 	      case SHORT:
4212 		size = SHORT_SIZE;
4213 		break;
4214 	      case BYTE:
4215 		size = BYTE_SIZE;
4216 		break;
4217 	      }
4218 	    if (size < TO_SIZE ((unsigned) 1))
4219 	      size = TO_SIZE ((unsigned) 1);
4220 	    dot += TO_ADDR (size);
4221 	    output_section_statement->bfd_section->size += size;
4222 	  }
4223 	  break;
4224 
4225 	case lang_reloc_statement_enum:
4226 	  {
4227 	    int size;
4228 
4229 	    s->reloc_statement.output_vma =
4230 	      dot - output_section_statement->bfd_section->vma;
4231 	    s->reloc_statement.output_section =
4232 	      output_section_statement->bfd_section;
4233 	    size = bfd_get_reloc_size (s->reloc_statement.howto);
4234 	    dot += TO_ADDR (size);
4235 	    output_section_statement->bfd_section->size += size;
4236 	  }
4237 	  break;
4238 
4239 	case lang_wild_statement_enum:
4240 	  dot = lang_size_sections_1 (s->wild_statement.children.head,
4241 				      output_section_statement,
4242 				      &s->wild_statement.children.head,
4243 				      fill, dot, relax, check_regions);
4244 	  break;
4245 
4246 	case lang_object_symbols_statement_enum:
4247 	  link_info.create_object_symbols_section =
4248 	    output_section_statement->bfd_section;
4249 	  break;
4250 
4251 	case lang_output_statement_enum:
4252 	case lang_target_statement_enum:
4253 	  break;
4254 
4255 	case lang_input_section_enum:
4256 	  {
4257 	    asection *i;
4258 
4259 	    i = (*prev)->input_section.section;
4260 	    if (relax)
4261 	      {
4262 		bfd_boolean again;
4263 
4264 		if (! bfd_relax_section (i->owner, i, &link_info, &again))
4265 		  einfo (_("%P%F: can't relax section: %E\n"));
4266 		if (again)
4267 		  *relax = TRUE;
4268 	      }
4269 	    dot = size_input_section (prev, output_section_statement,
4270 				      output_section_statement->fill, dot);
4271 	  }
4272 	  break;
4273 
4274 	case lang_input_statement_enum:
4275 	  break;
4276 
4277 	case lang_fill_statement_enum:
4278 	  s->fill_statement.output_section =
4279 	    output_section_statement->bfd_section;
4280 
4281 	  fill = s->fill_statement.fill;
4282 	  break;
4283 
4284 	case lang_assignment_statement_enum:
4285 	  {
4286 	    bfd_vma newdot = dot;
4287 
4288 	    exp_fold_tree (s->assignment_statement.exp,
4289 			   output_section_statement->bfd_section,
4290 			   &newdot);
4291 
4292 	    if (newdot != dot && !output_section_statement->ignored)
4293 	      {
4294 		if (output_section_statement == abs_output_section)
4295 		  {
4296 		    /* If we don't have an output section, then just adjust
4297 		       the default memory address.  */
4298 		    lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
4299 					       FALSE)->current = newdot;
4300 		  }
4301 		else
4302 		  {
4303 		    /* Insert a pad after this statement.  We can't
4304 		       put the pad before when relaxing, in case the
4305 		       assignment references dot.  */
4306 		    insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
4307 				output_section_statement->bfd_section, dot);
4308 
4309 		    /* Don't neuter the pad below when relaxing.  */
4310 		    s = s->header.next;
4311 
4312 		    /* If dot is advanced, this implies that the section
4313 		       should have space allocated to it, unless the
4314 		       user has explicitly stated that the section
4315 		       should never be loaded.  */
4316 		    if (!(output_section_statement->flags
4317 			  & (SEC_NEVER_LOAD | SEC_ALLOC)))
4318 		      output_section_statement->bfd_section->flags |= SEC_ALLOC;
4319 		  }
4320 		dot = newdot;
4321 	      }
4322 	  }
4323 	  break;
4324 
4325 	case lang_padding_statement_enum:
4326 	  /* If this is the first time lang_size_sections is called,
4327 	     we won't have any padding statements.  If this is the
4328 	     second or later passes when relaxing, we should allow
4329 	     padding to shrink.  If padding is needed on this pass, it
4330 	     will be added back in.  */
4331 	  s->padding_statement.size = 0;
4332 
4333 	  /* Make sure output_offset is valid.  If relaxation shrinks
4334 	     the section and this pad isn't needed, it's possible to
4335 	     have output_offset larger than the final size of the
4336 	     section.  bfd_set_section_contents will complain even for
4337 	     a pad size of zero.  */
4338 	  s->padding_statement.output_offset
4339 	    = dot - output_section_statement->bfd_section->vma;
4340 	  break;
4341 
4342 	case lang_group_statement_enum:
4343 	  dot = lang_size_sections_1 (s->group_statement.children.head,
4344 				      output_section_statement,
4345 				      &s->group_statement.children.head,
4346 				      fill, dot, relax, check_regions);
4347 	  break;
4348 
4349 	default:
4350 	  FAIL ();
4351 	  break;
4352 
4353 	  /* We can only get here when relaxing is turned on.  */
4354 	case lang_address_statement_enum:
4355 	  break;
4356 	}
4357       prev = &s->header.next;
4358     }
4359   return dot;
4360 }
4361 
4362 void
one_lang_size_sections_pass(bfd_boolean * relax,bfd_boolean check_regions)4363 one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
4364 {
4365   lang_statement_iteration++;
4366   lang_size_sections_1 (statement_list.head, abs_output_section,
4367 			&statement_list.head, 0, 0, relax, check_regions);
4368 }
4369 
4370 void
lang_size_sections(bfd_boolean * relax,bfd_boolean check_regions)4371 lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
4372 {
4373   expld.phase = lang_allocating_phase_enum;
4374   expld.dataseg.phase = exp_dataseg_none;
4375 
4376   one_lang_size_sections_pass (relax, check_regions);
4377   if (expld.dataseg.phase == exp_dataseg_end_seen
4378       && link_info.relro && expld.dataseg.relro_end)
4379     {
4380       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
4381 	 to put expld.dataseg.relro on a (common) page boundary.  */
4382       bfd_vma old_min_base, relro_end, maxpage;
4383 
4384       expld.dataseg.phase = exp_dataseg_relro_adjust;
4385       old_min_base = expld.dataseg.min_base;
4386       maxpage = expld.dataseg.maxpagesize;
4387       expld.dataseg.base += (-expld.dataseg.relro_end
4388 			     & (expld.dataseg.pagesize - 1));
4389       /* Compute the expected PT_GNU_RELRO segment end.  */
4390       relro_end = (expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
4391 		  & ~(expld.dataseg.pagesize - 1);
4392       if (old_min_base + maxpage < expld.dataseg.base)
4393 	{
4394 	  expld.dataseg.base -= maxpage;
4395 	  relro_end -= maxpage;
4396 	}
4397       one_lang_size_sections_pass (relax, check_regions);
4398       if (expld.dataseg.relro_end > relro_end)
4399 	{
4400 	  /* The alignment of sections between DATA_SEGMENT_ALIGN
4401 	     and DATA_SEGMENT_RELRO_END caused huge padding to be
4402 	     inserted at DATA_SEGMENT_RELRO_END.  Try some other base.  */
4403 	  asection *sec;
4404 	  unsigned int max_alignment_power = 0;
4405 
4406 	  /* Find maximum alignment power of sections between
4407 	     DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END.  */
4408 	  for (sec = output_bfd->sections; sec; sec = sec->next)
4409 	    if (sec->vma >= expld.dataseg.base
4410 		&& sec->vma < expld.dataseg.relro_end
4411 		&& sec->alignment_power > max_alignment_power)
4412 	      max_alignment_power = sec->alignment_power;
4413 
4414 	  if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
4415 	    {
4416 	      if (expld.dataseg.base - (1 << max_alignment_power)
4417 		  < old_min_base)
4418 		expld.dataseg.base += expld.dataseg.pagesize;
4419 	      expld.dataseg.base -= (1 << max_alignment_power);
4420 	      one_lang_size_sections_pass (relax, check_regions);
4421 	    }
4422 	}
4423       link_info.relro_start = expld.dataseg.base;
4424       link_info.relro_end = expld.dataseg.relro_end;
4425     }
4426   else if (expld.dataseg.phase == exp_dataseg_end_seen)
4427     {
4428       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
4429 	 a page could be saved in the data segment.  */
4430       bfd_vma first, last;
4431 
4432       first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
4433       last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
4434       if (first && last
4435 	  && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
4436 	      != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
4437 	  && first + last <= expld.dataseg.pagesize)
4438 	{
4439 	  expld.dataseg.phase = exp_dataseg_adjust;
4440 	  one_lang_size_sections_pass (relax, check_regions);
4441 	}
4442     }
4443 
4444   expld.phase = lang_final_phase_enum;
4445 }
4446 
4447 /* Worker function for lang_do_assignments.  Recursiveness goes here.  */
4448 
4449 static bfd_vma
lang_do_assignments_1(lang_statement_union_type * s,lang_output_section_statement_type * output_section_statement,fill_type * fill,bfd_vma dot)4450 lang_do_assignments_1
4451   (lang_statement_union_type *s,
4452    lang_output_section_statement_type *output_section_statement,
4453    fill_type *fill,
4454    bfd_vma dot)
4455 {
4456   for (; s != NULL; s = s->header.next)
4457     {
4458       switch (s->header.type)
4459 	{
4460 	case lang_constructors_statement_enum:
4461 	  dot = lang_do_assignments_1 (constructor_list.head,
4462 				       output_section_statement,
4463 				       fill,
4464 				       dot);
4465 	  break;
4466 
4467 	case lang_output_section_statement_enum:
4468 	  {
4469 	    lang_output_section_statement_type *os;
4470 
4471 	    os = &(s->output_section_statement);
4472 	    if (os->bfd_section != NULL && !os->ignored)
4473 	      {
4474 		dot = os->bfd_section->vma;
4475 		lang_do_assignments_1 (os->children.head, os, os->fill, dot);
4476 		/* .tbss sections effectively have zero size.  */
4477 		if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
4478 		    || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
4479 		    || link_info.relocatable)
4480 		  dot += TO_ADDR (os->bfd_section->size);
4481 	      }
4482 	    if (os->load_base)
4483 	      {
4484 		/* If nothing has been placed into the output section then
4485 		   it won't have a bfd_section.  */
4486 		if (os->bfd_section && !os->ignored)
4487 		  {
4488 		    os->bfd_section->lma
4489 		      = exp_get_abs_int (os->load_base, 0, "load base");
4490 		  }
4491 	      }
4492 	  }
4493 	  break;
4494 
4495 	case lang_wild_statement_enum:
4496 
4497 	  dot = lang_do_assignments_1 (s->wild_statement.children.head,
4498 				       output_section_statement,
4499 				       fill, dot);
4500 	  break;
4501 
4502 	case lang_object_symbols_statement_enum:
4503 	case lang_output_statement_enum:
4504 	case lang_target_statement_enum:
4505 	  break;
4506 
4507 	case lang_data_statement_enum:
4508 	  exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
4509 	  if (expld.result.valid_p)
4510 	    s->data_statement.value = (expld.result.value
4511 				       + expld.result.section->vma);
4512 	  else
4513 	    einfo (_("%F%P: invalid data statement\n"));
4514 	  {
4515 	    unsigned int size;
4516 	    switch (s->data_statement.type)
4517 	      {
4518 	      default:
4519 		abort ();
4520 	      case QUAD:
4521 	      case SQUAD:
4522 		size = QUAD_SIZE;
4523 		break;
4524 	      case LONG:
4525 		size = LONG_SIZE;
4526 		break;
4527 	      case SHORT:
4528 		size = SHORT_SIZE;
4529 		break;
4530 	      case BYTE:
4531 		size = BYTE_SIZE;
4532 		break;
4533 	      }
4534 	    if (size < TO_SIZE ((unsigned) 1))
4535 	      size = TO_SIZE ((unsigned) 1);
4536 	    dot += TO_ADDR (size);
4537 	  }
4538 	  break;
4539 
4540 	case lang_reloc_statement_enum:
4541 	  exp_fold_tree (s->reloc_statement.addend_exp,
4542 			 bfd_abs_section_ptr, &dot);
4543 	  if (expld.result.valid_p)
4544 	    s->reloc_statement.addend_value = expld.result.value;
4545 	  else
4546 	    einfo (_("%F%P: invalid reloc statement\n"));
4547 	  dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
4548 	  break;
4549 
4550 	case lang_input_section_enum:
4551 	  {
4552 	    asection *in = s->input_section.section;
4553 
4554 	    if ((in->flags & SEC_EXCLUDE) == 0)
4555 	      dot += TO_ADDR (in->size);
4556 	  }
4557 	  break;
4558 
4559 	case lang_input_statement_enum:
4560 	  break;
4561 
4562 	case lang_fill_statement_enum:
4563 	  fill = s->fill_statement.fill;
4564 	  break;
4565 
4566 	case lang_assignment_statement_enum:
4567 	  exp_fold_tree (s->assignment_statement.exp,
4568 			 output_section_statement->bfd_section,
4569 			 &dot);
4570 	  break;
4571 
4572 	case lang_padding_statement_enum:
4573 	  dot += TO_ADDR (s->padding_statement.size);
4574 	  break;
4575 
4576 	case lang_group_statement_enum:
4577 	  dot = lang_do_assignments_1 (s->group_statement.children.head,
4578 				       output_section_statement,
4579 				       fill, dot);
4580 	  break;
4581 
4582 	default:
4583 	  FAIL ();
4584 	  break;
4585 
4586 	case lang_address_statement_enum:
4587 	  break;
4588 	}
4589     }
4590   return dot;
4591 }
4592 
4593 void
lang_do_assignments(void)4594 lang_do_assignments (void)
4595 {
4596   lang_statement_iteration++;
4597   lang_do_assignments_1 (statement_list.head, abs_output_section, NULL, 0);
4598 }
4599 
4600 /* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
4601    operator .startof. (section_name), it produces an undefined symbol
4602    .startof.section_name.  Similarly, when it sees
4603    .sizeof. (section_name), it produces an undefined symbol
4604    .sizeof.section_name.  For all the output sections, we look for
4605    such symbols, and set them to the correct value.  */
4606 
4607 static void
lang_set_startof(void)4608 lang_set_startof (void)
4609 {
4610   asection *s;
4611 
4612   if (link_info.relocatable)
4613     return;
4614 
4615   for (s = output_bfd->sections; s != NULL; s = s->next)
4616     {
4617       const char *secname;
4618       char *buf;
4619       struct bfd_link_hash_entry *h;
4620 
4621       secname = bfd_get_section_name (output_bfd, s);
4622       buf = xmalloc (10 + strlen (secname));
4623 
4624       sprintf (buf, ".startof.%s", secname);
4625       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
4626       if (h != NULL && h->type == bfd_link_hash_undefined)
4627 	{
4628 	  h->type = bfd_link_hash_defined;
4629 	  h->u.def.value = bfd_get_section_vma (output_bfd, s);
4630 	  h->u.def.section = bfd_abs_section_ptr;
4631 	}
4632 
4633       sprintf (buf, ".sizeof.%s", secname);
4634       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
4635       if (h != NULL && h->type == bfd_link_hash_undefined)
4636 	{
4637 	  h->type = bfd_link_hash_defined;
4638 	  h->u.def.value = TO_ADDR (s->size);
4639 	  h->u.def.section = bfd_abs_section_ptr;
4640 	}
4641 
4642       free (buf);
4643     }
4644 }
4645 
4646 static void
lang_finish(void)4647 lang_finish (void)
4648 {
4649   struct bfd_link_hash_entry *h;
4650   bfd_boolean warn;
4651 
4652   if (link_info.relocatable || link_info.shared)
4653     warn = FALSE;
4654   else
4655     warn = TRUE;
4656 
4657   if (entry_symbol.name == NULL)
4658     {
4659       /* No entry has been specified.  Look for the default entry, but
4660 	 don't warn if we don't find it.  */
4661       entry_symbol.name = entry_symbol_default;
4662       warn = FALSE;
4663     }
4664 
4665   h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
4666 			    FALSE, FALSE, TRUE);
4667   if (h != NULL
4668       && (h->type == bfd_link_hash_defined
4669 	  || h->type == bfd_link_hash_defweak)
4670       && h->u.def.section->output_section != NULL)
4671     {
4672       bfd_vma val;
4673 
4674       val = (h->u.def.value
4675 	     + bfd_get_section_vma (output_bfd,
4676 				    h->u.def.section->output_section)
4677 	     + h->u.def.section->output_offset);
4678       if (! bfd_set_start_address (output_bfd, val))
4679 	einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
4680     }
4681   else
4682     {
4683       bfd_vma val;
4684       const char *send;
4685 
4686       /* We couldn't find the entry symbol.  Try parsing it as a
4687 	 number.  */
4688       val = bfd_scan_vma (entry_symbol.name, &send, 0);
4689       if (*send == '\0')
4690 	{
4691 	  if (! bfd_set_start_address (output_bfd, val))
4692 	    einfo (_("%P%F: can't set start address\n"));
4693 	}
4694       else
4695 	{
4696 	  asection *ts;
4697 
4698 	  /* Can't find the entry symbol, and it's not a number.  Use
4699 	     the first address in the text section.  */
4700 	  ts = bfd_get_section_by_name (output_bfd, entry_section);
4701 	  if (ts != NULL)
4702 	    {
4703 	      if (warn)
4704 		einfo (_("%P: warning: cannot find entry symbol %s;"
4705 			 " defaulting to %V\n"),
4706 		       entry_symbol.name,
4707 		       bfd_get_section_vma (output_bfd, ts));
4708 	      if (! bfd_set_start_address (output_bfd,
4709 					   bfd_get_section_vma (output_bfd,
4710 								ts)))
4711 		einfo (_("%P%F: can't set start address\n"));
4712 	    }
4713 	  else
4714 	    {
4715 	      if (warn)
4716 		einfo (_("%P: warning: cannot find entry symbol %s;"
4717 			 " not setting start address\n"),
4718 		       entry_symbol.name);
4719 	    }
4720 	}
4721     }
4722 
4723   /* Don't bfd_hash_table_free (&lang_definedness_table);
4724      map file output may result in a call of lang_track_definedness.  */
4725 }
4726 
4727 /* This is a small function used when we want to ignore errors from
4728    BFD.  */
4729 
4730 static void
ignore_bfd_errors(const char * s ATTRIBUTE_UNUSED,...)4731 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
4732 {
4733   /* Don't do anything.  */
4734 }
4735 
4736 /* Check that the architecture of all the input files is compatible
4737    with the output file.  Also call the backend to let it do any
4738    other checking that is needed.  */
4739 
4740 static void
lang_check(void)4741 lang_check (void)
4742 {
4743   lang_statement_union_type *file;
4744   bfd *input_bfd;
4745   const bfd_arch_info_type *compatible;
4746 
4747   for (file = file_chain.head; file != NULL; file = file->input_statement.next)
4748     {
4749       input_bfd = file->input_statement.the_bfd;
4750       compatible
4751 	= bfd_arch_get_compatible (input_bfd, output_bfd,
4752 				   command_line.accept_unknown_input_arch);
4753 
4754       /* In general it is not possible to perform a relocatable
4755 	 link between differing object formats when the input
4756 	 file has relocations, because the relocations in the
4757 	 input format may not have equivalent representations in
4758 	 the output format (and besides BFD does not translate
4759 	 relocs for other link purposes than a final link).  */
4760       if ((link_info.relocatable || link_info.emitrelocations)
4761 	  && (compatible == NULL
4762 	      || bfd_get_flavour (input_bfd) != bfd_get_flavour (output_bfd))
4763 	  && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
4764 	{
4765 	  einfo (_("%P%F: Relocatable linking with relocations from"
4766 		   " format %s (%B) to format %s (%B) is not supported\n"),
4767 		 bfd_get_target (input_bfd), input_bfd,
4768 		 bfd_get_target (output_bfd), output_bfd);
4769 	  /* einfo with %F exits.  */
4770 	}
4771 
4772       if (compatible == NULL)
4773 	{
4774 	  if (command_line.warn_mismatch)
4775 	    einfo (_("%P: warning: %s architecture of input file `%B'"
4776 		     " is incompatible with %s output\n"),
4777 		   bfd_printable_name (input_bfd), input_bfd,
4778 		   bfd_printable_name (output_bfd));
4779 	}
4780       else if (bfd_count_sections (input_bfd))
4781 	{
4782 	  /* If the input bfd has no contents, it shouldn't set the
4783 	     private data of the output bfd.  */
4784 
4785 	  bfd_error_handler_type pfn = NULL;
4786 
4787 	  /* If we aren't supposed to warn about mismatched input
4788 	     files, temporarily set the BFD error handler to a
4789 	     function which will do nothing.  We still want to call
4790 	     bfd_merge_private_bfd_data, since it may set up
4791 	     information which is needed in the output file.  */
4792 	  if (! command_line.warn_mismatch)
4793 	    pfn = bfd_set_error_handler (ignore_bfd_errors);
4794 	  if (! bfd_merge_private_bfd_data (input_bfd, output_bfd))
4795 	    {
4796 	      if (command_line.warn_mismatch)
4797 		einfo (_("%P%X: failed to merge target specific data"
4798 			 " of file %B\n"), input_bfd);
4799 	    }
4800 	  if (! command_line.warn_mismatch)
4801 	    bfd_set_error_handler (pfn);
4802 	}
4803     }
4804 }
4805 
4806 /* Look through all the global common symbols and attach them to the
4807    correct section.  The -sort-common command line switch may be used
4808    to roughly sort the entries by size.  */
4809 
4810 static void
lang_common(void)4811 lang_common (void)
4812 {
4813   if (command_line.inhibit_common_definition)
4814     return;
4815   if (link_info.relocatable
4816       && ! command_line.force_common_definition)
4817     return;
4818 
4819   if (! config.sort_common)
4820     bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
4821   else
4822     {
4823       int power;
4824 
4825       for (power = 4; power >= 0; power--)
4826 	bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
4827     }
4828 }
4829 
4830 /* Place one common symbol in the correct section.  */
4831 
4832 static bfd_boolean
lang_one_common(struct bfd_link_hash_entry * h,void * info)4833 lang_one_common (struct bfd_link_hash_entry *h, void *info)
4834 {
4835   unsigned int power_of_two;
4836   bfd_vma size;
4837   asection *section;
4838 
4839   if (h->type != bfd_link_hash_common)
4840     return TRUE;
4841 
4842   size = h->u.c.size;
4843   power_of_two = h->u.c.p->alignment_power;
4844 
4845   if (config.sort_common
4846       && power_of_two < (unsigned int) *(int *) info)
4847     return TRUE;
4848 
4849   section = h->u.c.p->section;
4850 
4851   /* Increase the size of the section to align the common sym.  */
4852   section->size += ((bfd_vma) 1 << (power_of_two + opb_shift)) - 1;
4853   section->size &= (- (bfd_vma) 1 << (power_of_two + opb_shift));
4854 
4855   /* Adjust the alignment if necessary.  */
4856   if (power_of_two > section->alignment_power)
4857     section->alignment_power = power_of_two;
4858 
4859   /* Change the symbol from common to defined.  */
4860   h->type = bfd_link_hash_defined;
4861   h->u.def.section = section;
4862   h->u.def.value = section->size;
4863 
4864   /* Increase the size of the section.  */
4865   section->size += size;
4866 
4867   /* Make sure the section is allocated in memory, and make sure that
4868      it is no longer a common section.  */
4869   section->flags |= SEC_ALLOC;
4870   section->flags &= ~SEC_IS_COMMON;
4871 
4872   if (config.map_file != NULL)
4873     {
4874       static bfd_boolean header_printed;
4875       int len;
4876       char *name;
4877       char buf[50];
4878 
4879       if (! header_printed)
4880 	{
4881 	  minfo (_("\nAllocating common symbols\n"));
4882 	  minfo (_("Common symbol       size              file\n\n"));
4883 	  header_printed = TRUE;
4884 	}
4885 
4886       name = demangle (h->root.string);
4887       minfo ("%s", name);
4888       len = strlen (name);
4889       free (name);
4890 
4891       if (len >= 19)
4892 	{
4893 	  print_nl ();
4894 	  len = 0;
4895 	}
4896       while (len < 20)
4897 	{
4898 	  print_space ();
4899 	  ++len;
4900 	}
4901 
4902       minfo ("0x");
4903       if (size <= 0xffffffff)
4904 	sprintf (buf, "%lx", (unsigned long) size);
4905       else
4906 	sprintf_vma (buf, size);
4907       minfo ("%s", buf);
4908       len = strlen (buf);
4909 
4910       while (len < 16)
4911 	{
4912 	  print_space ();
4913 	  ++len;
4914 	}
4915 
4916       minfo ("%B\n", section->owner);
4917     }
4918 
4919   return TRUE;
4920 }
4921 
4922 /* Run through the input files and ensure that every input section has
4923    somewhere to go.  If one is found without a destination then create
4924    an input request and place it into the statement tree.  */
4925 
4926 static void
lang_place_orphans(void)4927 lang_place_orphans (void)
4928 {
4929   LANG_FOR_EACH_INPUT_STATEMENT (file)
4930     {
4931       asection *s;
4932 
4933       for (s = file->the_bfd->sections; s != NULL; s = s->next)
4934 	{
4935 	  if (s->output_section == NULL)
4936 	    {
4937 	      /* This section of the file is not attached, root
4938 		 around for a sensible place for it to go.  */
4939 
4940 	      if (file->just_syms_flag)
4941 		bfd_link_just_syms (file->the_bfd, s, &link_info);
4942 	      else if ((s->flags & SEC_EXCLUDE) != 0)
4943 		s->output_section = bfd_abs_section_ptr;
4944 	      else if (strcmp (s->name, "COMMON") == 0)
4945 		{
4946 		  /* This is a lonely common section which must have
4947 		     come from an archive.  We attach to the section
4948 		     with the wildcard.  */
4949 		  if (! link_info.relocatable
4950 		      || command_line.force_common_definition)
4951 		    {
4952 		      if (default_common_section == NULL)
4953 			{
4954 			  default_common_section =
4955 			    lang_output_section_statement_lookup (".bss");
4956 
4957 			}
4958 		      lang_add_section (&default_common_section->children, s,
4959 					default_common_section, file);
4960 		    }
4961 		}
4962 	      else if (ldemul_place_orphan (file, s))
4963 		;
4964 	      else
4965 		{
4966 		  lang_output_section_statement_type *os;
4967 
4968 		  os = lang_output_section_statement_lookup (s->name);
4969 		  lang_add_section (&os->children, s, os, file);
4970 		}
4971 	    }
4972 	}
4973     }
4974 }
4975 
4976 void
lang_set_flags(lang_memory_region_type * ptr,const char * flags,int invert)4977 lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
4978 {
4979   flagword *ptr_flags;
4980 
4981   ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
4982   while (*flags)
4983     {
4984       switch (*flags)
4985 	{
4986 	case 'A': case 'a':
4987 	  *ptr_flags |= SEC_ALLOC;
4988 	  break;
4989 
4990 	case 'R': case 'r':
4991 	  *ptr_flags |= SEC_READONLY;
4992 	  break;
4993 
4994 	case 'W': case 'w':
4995 	  *ptr_flags |= SEC_DATA;
4996 	  break;
4997 
4998 	case 'X': case 'x':
4999 	  *ptr_flags |= SEC_CODE;
5000 	  break;
5001 
5002 	case 'L': case 'l':
5003 	case 'I': case 'i':
5004 	  *ptr_flags |= SEC_LOAD;
5005 	  break;
5006 
5007 	default:
5008 	  einfo (_("%P%F: invalid syntax in flags\n"));
5009 	  break;
5010 	}
5011       flags++;
5012     }
5013 }
5014 
5015 /* Call a function on each input file.  This function will be called
5016    on an archive, but not on the elements.  */
5017 
5018 void
lang_for_each_input_file(void (* func)(lang_input_statement_type *))5019 lang_for_each_input_file (void (*func) (lang_input_statement_type *))
5020 {
5021   lang_input_statement_type *f;
5022 
5023   for (f = (lang_input_statement_type *) input_file_chain.head;
5024        f != NULL;
5025        f = (lang_input_statement_type *) f->next_real_file)
5026     func (f);
5027 }
5028 
5029 /* Call a function on each file.  The function will be called on all
5030    the elements of an archive which are included in the link, but will
5031    not be called on the archive file itself.  */
5032 
5033 void
lang_for_each_file(void (* func)(lang_input_statement_type *))5034 lang_for_each_file (void (*func) (lang_input_statement_type *))
5035 {
5036   LANG_FOR_EACH_INPUT_STATEMENT (f)
5037     {
5038       func (f);
5039     }
5040 }
5041 
5042 void
ldlang_add_file(lang_input_statement_type * entry)5043 ldlang_add_file (lang_input_statement_type *entry)
5044 {
5045   bfd **pp;
5046 
5047   lang_statement_append (&file_chain,
5048 			 (lang_statement_union_type *) entry,
5049 			 &entry->next);
5050 
5051   /* The BFD linker needs to have a list of all input BFDs involved in
5052      a link.  */
5053   ASSERT (entry->the_bfd->link_next == NULL);
5054   ASSERT (entry->the_bfd != output_bfd);
5055   for (pp = &link_info.input_bfds; *pp != NULL; pp = &(*pp)->link_next)
5056     ;
5057   *pp = entry->the_bfd;
5058   entry->the_bfd->usrdata = entry;
5059   bfd_set_gp_size (entry->the_bfd, g_switch_value);
5060 
5061   /* Look through the sections and check for any which should not be
5062      included in the link.  We need to do this now, so that we can
5063      notice when the backend linker tries to report multiple
5064      definition errors for symbols which are in sections we aren't
5065      going to link.  FIXME: It might be better to entirely ignore
5066      symbols which are defined in sections which are going to be
5067      discarded.  This would require modifying the backend linker for
5068      each backend which might set the SEC_LINK_ONCE flag.  If we do
5069      this, we should probably handle SEC_EXCLUDE in the same way.  */
5070 
5071   bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
5072 }
5073 
5074 void
lang_add_output(const char * name,int from_script)5075 lang_add_output (const char *name, int from_script)
5076 {
5077   /* Make -o on command line override OUTPUT in script.  */
5078   if (!had_output_filename || !from_script)
5079     {
5080       output_filename = name;
5081       had_output_filename = TRUE;
5082     }
5083 }
5084 
5085 static lang_output_section_statement_type *current_section;
5086 
5087 static int
topower(int x)5088 topower (int x)
5089 {
5090   unsigned int i = 1;
5091   int l;
5092 
5093   if (x < 0)
5094     return -1;
5095 
5096   for (l = 0; l < 32; l++)
5097     {
5098       if (i >= (unsigned int) x)
5099 	return l;
5100       i <<= 1;
5101     }
5102 
5103   return 0;
5104 }
5105 
5106 lang_output_section_statement_type *
lang_enter_output_section_statement(const char * output_section_statement_name,etree_type * address_exp,enum section_type sectype,etree_type * align,etree_type * subalign,etree_type * ebase,int constraint)5107 lang_enter_output_section_statement (const char *output_section_statement_name,
5108 				     etree_type *address_exp,
5109 				     enum section_type sectype,
5110 				     etree_type *align,
5111 				     etree_type *subalign,
5112 				     etree_type *ebase,
5113 				     int constraint)
5114 {
5115   lang_output_section_statement_type *os;
5116 
5117   current_section =
5118    os =
5119     lang_output_section_statement_lookup_1 (output_section_statement_name,
5120 					    constraint);
5121 
5122   /* Make next things chain into subchain of this.  */
5123 
5124   if (os->addr_tree == NULL)
5125     {
5126       os->addr_tree = address_exp;
5127     }
5128   os->sectype = sectype;
5129   if (sectype != noload_section)
5130     os->flags = SEC_NO_FLAGS;
5131   else
5132     os->flags = SEC_NEVER_LOAD;
5133   os->block_value = 1;
5134   stat_ptr = &os->children;
5135 
5136   os->subsection_alignment =
5137     topower (exp_get_value_int (subalign, -1, "subsection alignment"));
5138   os->section_alignment =
5139     topower (exp_get_value_int (align, -1, "section alignment"));
5140 
5141   os->load_base = ebase;
5142   return os;
5143 }
5144 
5145 void
lang_final(void)5146 lang_final (void)
5147 {
5148   lang_output_statement_type *new =
5149     new_stat (lang_output_statement, stat_ptr);
5150 
5151   new->name = output_filename;
5152 }
5153 
5154 /* Reset the current counters in the regions.  */
5155 
5156 void
lang_reset_memory_regions(void)5157 lang_reset_memory_regions (void)
5158 {
5159   lang_memory_region_type *p = lang_memory_region_list;
5160   asection *o;
5161   lang_output_section_statement_type *os;
5162 
5163   for (p = lang_memory_region_list; p != NULL; p = p->next)
5164     {
5165       p->old_length = (bfd_size_type) (p->current - p->origin);
5166       p->current = p->origin;
5167     }
5168 
5169   for (os = &lang_output_section_statement.head->output_section_statement;
5170        os != NULL;
5171        os = os->next)
5172     os->processed = 0;
5173 
5174   for (o = output_bfd->sections; o != NULL; o = o->next)
5175     {
5176       /* Save the last size for possible use by bfd_relax_section.  */
5177       o->rawsize = o->size;
5178       o->size = 0;
5179     }
5180 }
5181 
5182 /* Worker for lang_gc_sections_1.  */
5183 
5184 static void
gc_section_callback(lang_wild_statement_type * ptr,struct wildcard_list * sec ATTRIBUTE_UNUSED,asection * section,lang_input_statement_type * file ATTRIBUTE_UNUSED,void * data ATTRIBUTE_UNUSED)5185 gc_section_callback (lang_wild_statement_type *ptr,
5186 		     struct wildcard_list *sec ATTRIBUTE_UNUSED,
5187 		     asection *section,
5188 		     lang_input_statement_type *file ATTRIBUTE_UNUSED,
5189 		     void *data ATTRIBUTE_UNUSED)
5190 {
5191   /* If the wild pattern was marked KEEP, the member sections
5192      should be as well.  */
5193   if (ptr->keep_sections)
5194     section->flags |= SEC_KEEP;
5195 }
5196 
5197 /* Iterate over sections marking them against GC.  */
5198 
5199 static void
lang_gc_sections_1(lang_statement_union_type * s)5200 lang_gc_sections_1 (lang_statement_union_type *s)
5201 {
5202   for (; s != NULL; s = s->header.next)
5203     {
5204       switch (s->header.type)
5205 	{
5206 	case lang_wild_statement_enum:
5207 	  walk_wild (&s->wild_statement, gc_section_callback, NULL);
5208 	  break;
5209 	case lang_constructors_statement_enum:
5210 	  lang_gc_sections_1 (constructor_list.head);
5211 	  break;
5212 	case lang_output_section_statement_enum:
5213 	  lang_gc_sections_1 (s->output_section_statement.children.head);
5214 	  break;
5215 	case lang_group_statement_enum:
5216 	  lang_gc_sections_1 (s->group_statement.children.head);
5217 	  break;
5218 	default:
5219 	  break;
5220 	}
5221     }
5222 }
5223 
5224 static void
lang_gc_sections(void)5225 lang_gc_sections (void)
5226 {
5227   struct bfd_link_hash_entry *h;
5228   ldlang_undef_chain_list_type *ulist;
5229 
5230   /* Keep all sections so marked in the link script.  */
5231 
5232   lang_gc_sections_1 (statement_list.head);
5233 
5234   /* Keep all sections containing symbols undefined on the command-line,
5235      and the section containing the entry symbol.  */
5236 
5237   for (ulist = link_info.gc_sym_list; ulist; ulist = ulist->next)
5238     {
5239       h = bfd_link_hash_lookup (link_info.hash, ulist->name,
5240 				FALSE, FALSE, FALSE);
5241 
5242       if (h != NULL
5243 	  && (h->type == bfd_link_hash_defined
5244 	      || h->type == bfd_link_hash_defweak)
5245 	  && ! bfd_is_abs_section (h->u.def.section))
5246 	{
5247 	  h->u.def.section->flags |= SEC_KEEP;
5248 	}
5249     }
5250 
5251   /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
5252      the special case of debug info.  (See bfd/stabs.c)
5253      Twiddle the flag here, to simplify later linker code.  */
5254   if (link_info.relocatable)
5255     {
5256       LANG_FOR_EACH_INPUT_STATEMENT (f)
5257 	{
5258 	  asection *sec;
5259 	  for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
5260 	    if ((sec->flags & SEC_DEBUGGING) == 0)
5261 	      sec->flags &= ~SEC_EXCLUDE;
5262 	}
5263     }
5264 
5265   if (link_info.gc_sections)
5266     bfd_gc_sections (output_bfd, &link_info);
5267 }
5268 
5269 void
lang_process(void)5270 lang_process (void)
5271 {
5272   current_target = default_target;
5273 
5274   /* Open the output file.  */
5275   lang_for_each_statement (ldlang_open_output);
5276   init_opb ();
5277 
5278   ldemul_create_output_section_statements ();
5279 
5280   /* Add to the hash table all undefineds on the command line.  */
5281   lang_place_undefineds ();
5282 
5283   if (!bfd_section_already_linked_table_init ())
5284     einfo (_("%P%F: Failed to create hash table\n"));
5285 
5286   /* Create a bfd for each input file.  */
5287   current_target = default_target;
5288   open_input_bfds (statement_list.head, FALSE);
5289 
5290   link_info.gc_sym_list = &entry_symbol;
5291   if (entry_symbol.name == NULL)
5292     link_info.gc_sym_list = ldlang_undef_chain_list_head;
5293 
5294   ldemul_after_open ();
5295 
5296   bfd_section_already_linked_table_free ();
5297 
5298   /* Make sure that we're not mixing architectures.  We call this
5299      after all the input files have been opened, but before we do any
5300      other processing, so that any operations merge_private_bfd_data
5301      does on the output file will be known during the rest of the
5302      link.  */
5303   lang_check ();
5304 
5305   /* Handle .exports instead of a version script if we're told to do so.  */
5306   if (command_line.version_exports_section)
5307     lang_do_version_exports_section ();
5308 
5309   /* Build all sets based on the information gathered from the input
5310      files.  */
5311   ldctor_build_sets ();
5312 
5313   /* Remove unreferenced sections if asked to.  */
5314   lang_gc_sections ();
5315 
5316   /* Size up the common data.  */
5317   lang_common ();
5318 
5319   /* Update wild statements.  */
5320   update_wild_statements (statement_list.head);
5321 
5322   /* Run through the contours of the script and attach input sections
5323      to the correct output sections.  */
5324   map_input_to_output_sections (statement_list.head, NULL, NULL);
5325 
5326   /* Find any sections not attached explicitly and handle them.  */
5327   lang_place_orphans ();
5328 
5329   if (! link_info.relocatable)
5330     {
5331       asection *found;
5332 
5333       /* Merge SEC_MERGE sections.  This has to be done after GC of
5334 	 sections, so that GCed sections are not merged, but before
5335 	 assigning dynamic symbols, since removing whole input sections
5336 	 is hard then.  */
5337       bfd_merge_sections (output_bfd, &link_info);
5338 
5339       /* Look for a text section and set the readonly attribute in it.  */
5340       found = bfd_get_section_by_name (output_bfd, ".text");
5341 
5342       if (found != NULL)
5343 	{
5344 	  if (config.text_read_only)
5345 	    found->flags |= SEC_READONLY;
5346 	  else
5347 	    found->flags &= ~SEC_READONLY;
5348 	}
5349     }
5350 
5351   /* Do anything special before sizing sections.  This is where ELF
5352      and other back-ends size dynamic sections.  */
5353   ldemul_before_allocation ();
5354 
5355   /* We must record the program headers before we try to fix the
5356      section positions, since they will affect SIZEOF_HEADERS.  */
5357   lang_record_phdrs ();
5358 
5359   /* Size up the sections.  */
5360   lang_size_sections (NULL, !command_line.relax);
5361 
5362   /* Now run around and relax if we can.  */
5363   if (command_line.relax)
5364     {
5365       /* Keep relaxing until bfd_relax_section gives up.  */
5366       bfd_boolean relax_again;
5367 
5368       do
5369 	{
5370 	  relax_again = FALSE;
5371 
5372 	  /* Note: pe-dll.c does something like this also.  If you find
5373 	     you need to change this code, you probably need to change
5374 	     pe-dll.c also.  DJ  */
5375 
5376 	  /* Do all the assignments with our current guesses as to
5377 	     section sizes.  */
5378 	  lang_do_assignments ();
5379 
5380 	  /* We must do this after lang_do_assignments, because it uses
5381 	     size.  */
5382 	  lang_reset_memory_regions ();
5383 
5384 	  /* Perform another relax pass - this time we know where the
5385 	     globals are, so can make a better guess.  */
5386 	  lang_size_sections (&relax_again, FALSE);
5387 
5388 	  /* If the normal relax is done and the relax finalize pass
5389 	     is not performed yet, we perform another relax pass.  */
5390 	  if (!relax_again && link_info.need_relax_finalize)
5391 	    {
5392 	      link_info.need_relax_finalize = FALSE;
5393 	      relax_again = TRUE;
5394 	    }
5395 	}
5396       while (relax_again);
5397 
5398       /* Final extra sizing to report errors.  */
5399       lang_do_assignments ();
5400       lang_reset_memory_regions ();
5401       lang_size_sections (NULL, TRUE);
5402     }
5403 
5404   /* See if anything special should be done now we know how big
5405      everything is.  */
5406   ldemul_after_allocation ();
5407 
5408   /* Fix any .startof. or .sizeof. symbols.  */
5409   lang_set_startof ();
5410 
5411   /* Do all the assignments, now that we know the final resting places
5412      of all the symbols.  */
5413 
5414   lang_do_assignments ();
5415 
5416   /* Make sure that the section addresses make sense.  */
5417   if (! link_info.relocatable
5418       && command_line.check_section_addresses)
5419     lang_check_section_addresses ();
5420 
5421   /* Final stuffs.  */
5422   ldemul_finish ();
5423   lang_finish ();
5424 }
5425 
5426 /* EXPORTED TO YACC */
5427 
5428 void
lang_add_wild(struct wildcard_spec * filespec,struct wildcard_list * section_list,bfd_boolean keep_sections)5429 lang_add_wild (struct wildcard_spec *filespec,
5430 	       struct wildcard_list *section_list,
5431 	       bfd_boolean keep_sections)
5432 {
5433   struct wildcard_list *curr, *next;
5434   lang_wild_statement_type *new;
5435 
5436   /* Reverse the list as the parser puts it back to front.  */
5437   for (curr = section_list, section_list = NULL;
5438        curr != NULL;
5439        section_list = curr, curr = next)
5440     {
5441       if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
5442 	placed_commons = TRUE;
5443 
5444       next = curr->next;
5445       curr->next = section_list;
5446     }
5447 
5448   if (filespec != NULL && filespec->name != NULL)
5449     {
5450       if (strcmp (filespec->name, "*") == 0)
5451 	filespec->name = NULL;
5452       else if (! wildcardp (filespec->name))
5453 	lang_has_input_file = TRUE;
5454     }
5455 
5456   new = new_stat (lang_wild_statement, stat_ptr);
5457   new->filename = NULL;
5458   new->filenames_sorted = FALSE;
5459   if (filespec != NULL)
5460     {
5461       new->filename = filespec->name;
5462       new->filenames_sorted = filespec->sorted == by_name;
5463     }
5464   new->section_list = section_list;
5465   new->keep_sections = keep_sections;
5466   lang_list_init (&new->children);
5467   analyze_walk_wild_section_handler (new);
5468 }
5469 
5470 void
lang_section_start(const char * name,etree_type * address,const segment_type * segment)5471 lang_section_start (const char *name, etree_type *address,
5472 		    const segment_type *segment)
5473 {
5474   lang_address_statement_type *ad;
5475 
5476   ad = new_stat (lang_address_statement, stat_ptr);
5477   ad->section_name = name;
5478   ad->address = address;
5479   ad->segment = segment;
5480 }
5481 
5482 /* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
5483    because of a -e argument on the command line, or zero if this is
5484    called by ENTRY in a linker script.  Command line arguments take
5485    precedence.  */
5486 
5487 void
lang_add_entry(const char * name,bfd_boolean cmdline)5488 lang_add_entry (const char *name, bfd_boolean cmdline)
5489 {
5490   if (entry_symbol.name == NULL
5491       || cmdline
5492       || ! entry_from_cmdline)
5493     {
5494       entry_symbol.name = name;
5495       entry_from_cmdline = cmdline;
5496     }
5497 }
5498 
5499 /* Set the default start symbol to NAME.  .em files should use this,
5500    not lang_add_entry, to override the use of "start" if neither the
5501    linker script nor the command line specifies an entry point.  NAME
5502    must be permanently allocated.  */
5503 void
lang_default_entry(const char * name)5504 lang_default_entry (const char *name)
5505 {
5506   entry_symbol_default = name;
5507 }
5508 
5509 void
lang_add_target(const char * name)5510 lang_add_target (const char *name)
5511 {
5512   lang_target_statement_type *new = new_stat (lang_target_statement,
5513 					      stat_ptr);
5514 
5515   new->target = name;
5516 
5517 }
5518 
5519 void
lang_add_map(const char * name)5520 lang_add_map (const char *name)
5521 {
5522   while (*name)
5523     {
5524       switch (*name)
5525 	{
5526 	case 'F':
5527 	  map_option_f = TRUE;
5528 	  break;
5529 	}
5530       name++;
5531     }
5532 }
5533 
5534 void
lang_add_fill(fill_type * fill)5535 lang_add_fill (fill_type *fill)
5536 {
5537   lang_fill_statement_type *new = new_stat (lang_fill_statement,
5538 					    stat_ptr);
5539 
5540   new->fill = fill;
5541 }
5542 
5543 void
lang_add_data(int type,union etree_union * exp)5544 lang_add_data (int type, union etree_union *exp)
5545 {
5546 
5547   lang_data_statement_type *new = new_stat (lang_data_statement,
5548 					    stat_ptr);
5549 
5550   new->exp = exp;
5551   new->type = type;
5552 
5553 }
5554 
5555 /* Create a new reloc statement.  RELOC is the BFD relocation type to
5556    generate.  HOWTO is the corresponding howto structure (we could
5557    look this up, but the caller has already done so).  SECTION is the
5558    section to generate a reloc against, or NAME is the name of the
5559    symbol to generate a reloc against.  Exactly one of SECTION and
5560    NAME must be NULL.  ADDEND is an expression for the addend.  */
5561 
5562 void
lang_add_reloc(bfd_reloc_code_real_type reloc,reloc_howto_type * howto,asection * section,const char * name,union etree_union * addend)5563 lang_add_reloc (bfd_reloc_code_real_type reloc,
5564 		reloc_howto_type *howto,
5565 		asection *section,
5566 		const char *name,
5567 		union etree_union *addend)
5568 {
5569   lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
5570 
5571   p->reloc = reloc;
5572   p->howto = howto;
5573   p->section = section;
5574   p->name = name;
5575   p->addend_exp = addend;
5576 
5577   p->addend_value = 0;
5578   p->output_section = NULL;
5579   p->output_vma = 0;
5580 }
5581 
5582 lang_assignment_statement_type *
lang_add_assignment(etree_type * exp)5583 lang_add_assignment (etree_type *exp)
5584 {
5585   lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
5586 						  stat_ptr);
5587 
5588   new->exp = exp;
5589   return new;
5590 }
5591 
5592 void
lang_add_attribute(enum statement_enum attribute)5593 lang_add_attribute (enum statement_enum attribute)
5594 {
5595   new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
5596 }
5597 
5598 void
lang_startup(const char * name)5599 lang_startup (const char *name)
5600 {
5601   if (startup_file != NULL)
5602     {
5603       einfo (_("%P%Fmultiple STARTUP files\n"));
5604     }
5605   first_file->filename = name;
5606   first_file->local_sym_name = name;
5607   first_file->real = TRUE;
5608 
5609   startup_file = name;
5610 }
5611 
5612 void
lang_float(bfd_boolean maybe)5613 lang_float (bfd_boolean maybe)
5614 {
5615   lang_float_flag = maybe;
5616 }
5617 
5618 
5619 /* Work out the load- and run-time regions from a script statement, and
5620    store them in *LMA_REGION and *REGION respectively.
5621 
5622    MEMSPEC is the name of the run-time region, or the value of
5623    DEFAULT_MEMORY_REGION if the statement didn't specify one.
5624    LMA_MEMSPEC is the name of the load-time region, or null if the
5625    statement didn't specify one.HAVE_LMA_P is TRUE if the statement
5626    had an explicit load address.
5627 
5628    It is an error to specify both a load region and a load address.  */
5629 
5630 static void
lang_get_regions(lang_memory_region_type ** region,lang_memory_region_type ** lma_region,const char * memspec,const char * lma_memspec,bfd_boolean have_lma,bfd_boolean have_vma)5631 lang_get_regions (lang_memory_region_type **region,
5632 		  lang_memory_region_type **lma_region,
5633 		  const char *memspec,
5634 		  const char *lma_memspec,
5635 		  bfd_boolean have_lma,
5636 		  bfd_boolean have_vma)
5637 {
5638   *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
5639 
5640   /* If no runtime region or VMA has been specified, but the load region
5641      has been specified, then use the load region for the runtime region
5642      as well.  */
5643   if (lma_memspec != NULL
5644       && ! have_vma
5645       && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
5646     *region = *lma_region;
5647   else
5648     *region = lang_memory_region_lookup (memspec, FALSE);
5649 
5650   if (have_lma && lma_memspec != 0)
5651     einfo (_("%X%P:%S: section has both a load address and a load region\n"));
5652 }
5653 
5654 void
lang_leave_output_section_statement(fill_type * fill,const char * memspec,lang_output_section_phdr_list * phdrs,const char * lma_memspec)5655 lang_leave_output_section_statement (fill_type *fill, const char *memspec,
5656 				     lang_output_section_phdr_list *phdrs,
5657 				     const char *lma_memspec)
5658 {
5659   lang_get_regions (&current_section->region,
5660 		    &current_section->lma_region,
5661 		    memspec, lma_memspec,
5662 		    current_section->load_base != NULL,
5663 		    current_section->addr_tree != NULL);
5664   current_section->fill = fill;
5665   current_section->phdrs = phdrs;
5666   stat_ptr = &statement_list;
5667 }
5668 
5669 /* Create an absolute symbol with the given name with the value of the
5670    address of first byte of the section named.
5671 
5672    If the symbol already exists, then do nothing.  */
5673 
5674 void
lang_abs_symbol_at_beginning_of(const char * secname,const char * name)5675 lang_abs_symbol_at_beginning_of (const char *secname, const char *name)
5676 {
5677   struct bfd_link_hash_entry *h;
5678 
5679   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
5680   if (h == NULL)
5681     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
5682 
5683   if (h->type == bfd_link_hash_new
5684       || h->type == bfd_link_hash_undefined)
5685     {
5686       asection *sec;
5687 
5688       h->type = bfd_link_hash_defined;
5689 
5690       sec = bfd_get_section_by_name (output_bfd, secname);
5691       if (sec == NULL)
5692 	h->u.def.value = 0;
5693       else
5694 	h->u.def.value = bfd_get_section_vma (output_bfd, sec);
5695 
5696       h->u.def.section = bfd_abs_section_ptr;
5697     }
5698 }
5699 
5700 /* Create an absolute symbol with the given name with the value of the
5701    address of the first byte after the end of the section named.
5702 
5703    If the symbol already exists, then do nothing.  */
5704 
5705 void
lang_abs_symbol_at_end_of(const char * secname,const char * name)5706 lang_abs_symbol_at_end_of (const char *secname, const char *name)
5707 {
5708   struct bfd_link_hash_entry *h;
5709 
5710   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
5711   if (h == NULL)
5712     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
5713 
5714   if (h->type == bfd_link_hash_new
5715       || h->type == bfd_link_hash_undefined)
5716     {
5717       asection *sec;
5718 
5719       h->type = bfd_link_hash_defined;
5720 
5721       sec = bfd_get_section_by_name (output_bfd, secname);
5722       if (sec == NULL)
5723 	h->u.def.value = 0;
5724       else
5725 	h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
5726 			  + TO_ADDR (sec->size));
5727 
5728       h->u.def.section = bfd_abs_section_ptr;
5729     }
5730 }
5731 
5732 void
lang_statement_append(lang_statement_list_type * list,lang_statement_union_type * element,lang_statement_union_type ** field)5733 lang_statement_append (lang_statement_list_type *list,
5734 		       lang_statement_union_type *element,
5735 		       lang_statement_union_type **field)
5736 {
5737   *(list->tail) = element;
5738   list->tail = field;
5739 }
5740 
5741 /* Set the output format type.  -oformat overrides scripts.  */
5742 
5743 void
lang_add_output_format(const char * format,const char * big,const char * little,int from_script)5744 lang_add_output_format (const char *format,
5745 			const char *big,
5746 			const char *little,
5747 			int from_script)
5748 {
5749   if (output_target == NULL || !from_script)
5750     {
5751       if (command_line.endian == ENDIAN_BIG
5752 	  && big != NULL)
5753 	format = big;
5754       else if (command_line.endian == ENDIAN_LITTLE
5755 	       && little != NULL)
5756 	format = little;
5757 
5758       output_target = format;
5759     }
5760 }
5761 
5762 /* Enter a group.  This creates a new lang_group_statement, and sets
5763    stat_ptr to build new statements within the group.  */
5764 
5765 void
lang_enter_group(void)5766 lang_enter_group (void)
5767 {
5768   lang_group_statement_type *g;
5769 
5770   g = new_stat (lang_group_statement, stat_ptr);
5771   lang_list_init (&g->children);
5772   stat_ptr = &g->children;
5773 }
5774 
5775 /* Leave a group.  This just resets stat_ptr to start writing to the
5776    regular list of statements again.  Note that this will not work if
5777    groups can occur inside anything else which can adjust stat_ptr,
5778    but currently they can't.  */
5779 
5780 void
lang_leave_group(void)5781 lang_leave_group (void)
5782 {
5783   stat_ptr = &statement_list;
5784 }
5785 
5786 /* Add a new program header.  This is called for each entry in a PHDRS
5787    command in a linker script.  */
5788 
5789 void
lang_new_phdr(const char * name,etree_type * type,bfd_boolean filehdr,bfd_boolean phdrs,etree_type * at,etree_type * flags)5790 lang_new_phdr (const char *name,
5791 	       etree_type *type,
5792 	       bfd_boolean filehdr,
5793 	       bfd_boolean phdrs,
5794 	       etree_type *at,
5795 	       etree_type *flags)
5796 {
5797   struct lang_phdr *n, **pp;
5798 
5799   n = stat_alloc (sizeof (struct lang_phdr));
5800   n->next = NULL;
5801   n->name = name;
5802   n->type = exp_get_value_int (type, 0, "program header type");
5803   n->filehdr = filehdr;
5804   n->phdrs = phdrs;
5805   n->at = at;
5806   n->flags = flags;
5807 
5808   for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
5809     ;
5810   *pp = n;
5811 }
5812 
5813 /* Record the program header information in the output BFD.  FIXME: We
5814    should not be calling an ELF specific function here.  */
5815 
5816 static void
lang_record_phdrs(void)5817 lang_record_phdrs (void)
5818 {
5819   unsigned int alc;
5820   asection **secs;
5821   lang_output_section_phdr_list *last;
5822   struct lang_phdr *l;
5823   lang_output_section_statement_type *os;
5824 
5825   alc = 10;
5826   secs = xmalloc (alc * sizeof (asection *));
5827   last = NULL;
5828   for (l = lang_phdr_list; l != NULL; l = l->next)
5829     {
5830       unsigned int c;
5831       flagword flags;
5832       bfd_vma at;
5833 
5834       c = 0;
5835       for (os = &lang_output_section_statement.head->output_section_statement;
5836 	   os != NULL;
5837 	   os = os->next)
5838 	{
5839 	  lang_output_section_phdr_list *pl;
5840 
5841 	  if (os->constraint == -1)
5842 	    continue;
5843 
5844 	  pl = os->phdrs;
5845 	  if (pl != NULL)
5846 	    last = pl;
5847 	  else
5848 	    {
5849 	      if (os->sectype == noload_section
5850 		  || os->bfd_section == NULL
5851 		  || (os->bfd_section->flags & SEC_ALLOC) == 0)
5852 		continue;
5853 	      pl = last;
5854 	    }
5855 
5856 	  if (os->bfd_section == NULL)
5857 	    continue;
5858 
5859 	  for (; pl != NULL; pl = pl->next)
5860 	    {
5861 	      if (strcmp (pl->name, l->name) == 0)
5862 		{
5863 		  if (c >= alc)
5864 		    {
5865 		      alc *= 2;
5866 		      secs = xrealloc (secs, alc * sizeof (asection *));
5867 		    }
5868 		  secs[c] = os->bfd_section;
5869 		  ++c;
5870 		  pl->used = TRUE;
5871 		}
5872 	    }
5873 	}
5874 
5875       if (l->flags == NULL)
5876 	flags = 0;
5877       else
5878 	flags = exp_get_vma (l->flags, 0, "phdr flags");
5879 
5880       if (l->at == NULL)
5881 	at = 0;
5882       else
5883 	at = exp_get_vma (l->at, 0, "phdr load address");
5884 
5885       if (! bfd_record_phdr (output_bfd, l->type,
5886 			     l->flags != NULL, flags, l->at != NULL,
5887 			     at, l->filehdr, l->phdrs, c, secs))
5888 	einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
5889     }
5890 
5891   free (secs);
5892 
5893   /* Make sure all the phdr assignments succeeded.  */
5894   for (os = &lang_output_section_statement.head->output_section_statement;
5895        os != NULL;
5896        os = os->next)
5897     {
5898       lang_output_section_phdr_list *pl;
5899 
5900       if (os->constraint == -1
5901 	  || os->bfd_section == NULL)
5902 	continue;
5903 
5904       for (pl = os->phdrs;
5905 	   pl != NULL;
5906 	   pl = pl->next)
5907 	if (! pl->used && strcmp (pl->name, "NONE") != 0)
5908 	  einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
5909 		 os->name, pl->name);
5910     }
5911 }
5912 
5913 /* Record a list of sections which may not be cross referenced.  */
5914 
5915 void
lang_add_nocrossref(lang_nocrossref_type * l)5916 lang_add_nocrossref (lang_nocrossref_type *l)
5917 {
5918   struct lang_nocrossrefs *n;
5919 
5920   n = xmalloc (sizeof *n);
5921   n->next = nocrossref_list;
5922   n->list = l;
5923   nocrossref_list = n;
5924 
5925   /* Set notice_all so that we get informed about all symbols.  */
5926   link_info.notice_all = TRUE;
5927 }
5928 
5929 /* Overlay handling.  We handle overlays with some static variables.  */
5930 
5931 /* The overlay virtual address.  */
5932 static etree_type *overlay_vma;
5933 /* And subsection alignment.  */
5934 static etree_type *overlay_subalign;
5935 
5936 /* An expression for the maximum section size seen so far.  */
5937 static etree_type *overlay_max;
5938 
5939 /* A list of all the sections in this overlay.  */
5940 
5941 struct overlay_list {
5942   struct overlay_list *next;
5943   lang_output_section_statement_type *os;
5944 };
5945 
5946 static struct overlay_list *overlay_list;
5947 
5948 /* Start handling an overlay.  */
5949 
5950 void
lang_enter_overlay(etree_type * vma_expr,etree_type * subalign)5951 lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
5952 {
5953   /* The grammar should prevent nested overlays from occurring.  */
5954   ASSERT (overlay_vma == NULL
5955 	  && overlay_subalign == NULL
5956 	  && overlay_max == NULL);
5957 
5958   overlay_vma = vma_expr;
5959   overlay_subalign = subalign;
5960 }
5961 
5962 /* Start a section in an overlay.  We handle this by calling
5963    lang_enter_output_section_statement with the correct VMA.
5964    lang_leave_overlay sets up the LMA and memory regions.  */
5965 
5966 void
lang_enter_overlay_section(const char * name)5967 lang_enter_overlay_section (const char *name)
5968 {
5969   struct overlay_list *n;
5970   etree_type *size;
5971 
5972   lang_enter_output_section_statement (name, overlay_vma, normal_section,
5973 				       0, overlay_subalign, 0, 0);
5974 
5975   /* If this is the first section, then base the VMA of future
5976      sections on this one.  This will work correctly even if `.' is
5977      used in the addresses.  */
5978   if (overlay_list == NULL)
5979     overlay_vma = exp_nameop (ADDR, name);
5980 
5981   /* Remember the section.  */
5982   n = xmalloc (sizeof *n);
5983   n->os = current_section;
5984   n->next = overlay_list;
5985   overlay_list = n;
5986 
5987   size = exp_nameop (SIZEOF, name);
5988 
5989   /* Arrange to work out the maximum section end address.  */
5990   if (overlay_max == NULL)
5991     overlay_max = size;
5992   else
5993     overlay_max = exp_binop (MAX_K, overlay_max, size);
5994 }
5995 
5996 /* Finish a section in an overlay.  There isn't any special to do
5997    here.  */
5998 
5999 void
lang_leave_overlay_section(fill_type * fill,lang_output_section_phdr_list * phdrs)6000 lang_leave_overlay_section (fill_type *fill,
6001 			    lang_output_section_phdr_list *phdrs)
6002 {
6003   const char *name;
6004   char *clean, *s2;
6005   const char *s1;
6006   char *buf;
6007 
6008   name = current_section->name;
6009 
6010   /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
6011      region and that no load-time region has been specified.  It doesn't
6012      really matter what we say here, since lang_leave_overlay will
6013      override it.  */
6014   lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
6015 
6016   /* Define the magic symbols.  */
6017 
6018   clean = xmalloc (strlen (name) + 1);
6019   s2 = clean;
6020   for (s1 = name; *s1 != '\0'; s1++)
6021     if (ISALNUM (*s1) || *s1 == '_')
6022       *s2++ = *s1;
6023   *s2 = '\0';
6024 
6025   buf = xmalloc (strlen (clean) + sizeof "__load_start_");
6026   sprintf (buf, "__load_start_%s", clean);
6027   lang_add_assignment (exp_assop ('=', buf,
6028 				  exp_nameop (LOADADDR, name)));
6029 
6030   buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
6031   sprintf (buf, "__load_stop_%s", clean);
6032   lang_add_assignment (exp_assop ('=', buf,
6033 				  exp_binop ('+',
6034 					     exp_nameop (LOADADDR, name),
6035 					     exp_nameop (SIZEOF, name))));
6036 
6037   free (clean);
6038 }
6039 
6040 /* Finish an overlay.  If there are any overlay wide settings, this
6041    looks through all the sections in the overlay and sets them.  */
6042 
6043 void
lang_leave_overlay(etree_type * lma_expr,int nocrossrefs,fill_type * fill,const char * memspec,lang_output_section_phdr_list * phdrs,const char * lma_memspec)6044 lang_leave_overlay (etree_type *lma_expr,
6045 		    int nocrossrefs,
6046 		    fill_type *fill,
6047 		    const char *memspec,
6048 		    lang_output_section_phdr_list *phdrs,
6049 		    const char *lma_memspec)
6050 {
6051   lang_memory_region_type *region;
6052   lang_memory_region_type *lma_region;
6053   struct overlay_list *l;
6054   lang_nocrossref_type *nocrossref;
6055 
6056   lang_get_regions (&region, &lma_region,
6057 		    memspec, lma_memspec,
6058 		    lma_expr != NULL, FALSE);
6059 
6060   nocrossref = NULL;
6061 
6062   /* After setting the size of the last section, set '.' to end of the
6063      overlay region.  */
6064   if (overlay_list != NULL)
6065     overlay_list->os->update_dot_tree
6066       = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
6067 
6068   l = overlay_list;
6069   while (l != NULL)
6070     {
6071       struct overlay_list *next;
6072 
6073       if (fill != NULL && l->os->fill == NULL)
6074 	l->os->fill = fill;
6075 
6076       l->os->region = region;
6077       l->os->lma_region = lma_region;
6078 
6079       /* The first section has the load address specified in the
6080 	 OVERLAY statement.  The rest are worked out from that.
6081 	 The base address is not needed (and should be null) if
6082 	 an LMA region was specified.  */
6083       if (l->next == 0)
6084 	l->os->load_base = lma_expr;
6085       else if (lma_region == 0)
6086 	l->os->load_base = exp_binop ('+',
6087 				      exp_nameop (LOADADDR, l->next->os->name),
6088 				      exp_nameop (SIZEOF, l->next->os->name));
6089 
6090       if (phdrs != NULL && l->os->phdrs == NULL)
6091 	l->os->phdrs = phdrs;
6092 
6093       if (nocrossrefs)
6094 	{
6095 	  lang_nocrossref_type *nc;
6096 
6097 	  nc = xmalloc (sizeof *nc);
6098 	  nc->name = l->os->name;
6099 	  nc->next = nocrossref;
6100 	  nocrossref = nc;
6101 	}
6102 
6103       next = l->next;
6104       free (l);
6105       l = next;
6106     }
6107 
6108   if (nocrossref != NULL)
6109     lang_add_nocrossref (nocrossref);
6110 
6111   overlay_vma = NULL;
6112   overlay_list = NULL;
6113   overlay_max = NULL;
6114 }
6115 
6116 /* Version handling.  This is only useful for ELF.  */
6117 
6118 /* This global variable holds the version tree that we build.  */
6119 
6120 struct bfd_elf_version_tree *lang_elf_version_info;
6121 
6122 /* If PREV is NULL, return first version pattern matching particular symbol.
6123    If PREV is non-NULL, return first version pattern matching particular
6124    symbol after PREV (previously returned by lang_vers_match).  */
6125 
6126 static struct bfd_elf_version_expr *
lang_vers_match(struct bfd_elf_version_expr_head * head,struct bfd_elf_version_expr * prev,const char * sym)6127 lang_vers_match (struct bfd_elf_version_expr_head *head,
6128 		 struct bfd_elf_version_expr *prev,
6129 		 const char *sym)
6130 {
6131   const char *cxx_sym = sym;
6132   const char *java_sym = sym;
6133   struct bfd_elf_version_expr *expr = NULL;
6134 
6135   if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
6136     {
6137       cxx_sym = cplus_demangle (sym, DMGL_PARAMS | DMGL_ANSI);
6138       if (!cxx_sym)
6139 	cxx_sym = sym;
6140     }
6141   if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
6142     {
6143       java_sym = cplus_demangle (sym, DMGL_JAVA);
6144       if (!java_sym)
6145 	java_sym = sym;
6146     }
6147 
6148   if (head->htab && (prev == NULL || prev->symbol))
6149     {
6150       struct bfd_elf_version_expr e;
6151 
6152       switch (prev ? prev->mask : 0)
6153 	{
6154 	  case 0:
6155 	    if (head->mask & BFD_ELF_VERSION_C_TYPE)
6156 	      {
6157 		e.symbol = sym;
6158 		expr = htab_find (head->htab, &e);
6159 		while (expr && strcmp (expr->symbol, sym) == 0)
6160 		  if (expr->mask == BFD_ELF_VERSION_C_TYPE)
6161 		    goto out_ret;
6162 		else
6163 		  expr = expr->next;
6164 	      }
6165 	    /* Fallthrough */
6166 	  case BFD_ELF_VERSION_C_TYPE:
6167 	    if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
6168 	      {
6169 		e.symbol = cxx_sym;
6170 		expr = htab_find (head->htab, &e);
6171 		while (expr && strcmp (expr->symbol, cxx_sym) == 0)
6172 		  if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
6173 		    goto out_ret;
6174 		else
6175 		  expr = expr->next;
6176 	      }
6177 	    /* Fallthrough */
6178 	  case BFD_ELF_VERSION_CXX_TYPE:
6179 	    if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
6180 	      {
6181 		e.symbol = java_sym;
6182 		expr = htab_find (head->htab, &e);
6183 		while (expr && strcmp (expr->symbol, java_sym) == 0)
6184 		  if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
6185 		    goto out_ret;
6186 		else
6187 		  expr = expr->next;
6188 	      }
6189 	    /* Fallthrough */
6190 	  default:
6191 	    break;
6192 	}
6193     }
6194 
6195   /* Finally, try the wildcards.  */
6196   if (prev == NULL || prev->symbol)
6197     expr = head->remaining;
6198   else
6199     expr = prev->next;
6200   while (expr)
6201     {
6202       const char *s;
6203 
6204       if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
6205 	break;
6206 
6207       if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
6208 	s = java_sym;
6209       else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
6210 	s = cxx_sym;
6211       else
6212 	s = sym;
6213       if (fnmatch (expr->pattern, s, 0) == 0)
6214 	break;
6215       expr = expr->next;
6216     }
6217 
6218 out_ret:
6219   if (cxx_sym != sym)
6220     free ((char *) cxx_sym);
6221   if (java_sym != sym)
6222     free ((char *) java_sym);
6223   return expr;
6224 }
6225 
6226 /* Return NULL if the PATTERN argument is a glob pattern, otherwise,
6227    return a string pointing to the symbol name.  */
6228 
6229 static const char *
realsymbol(const char * pattern)6230 realsymbol (const char *pattern)
6231 {
6232   const char *p;
6233   bfd_boolean changed = FALSE, backslash = FALSE;
6234   char *s, *symbol = xmalloc (strlen (pattern) + 1);
6235 
6236   for (p = pattern, s = symbol; *p != '\0'; ++p)
6237     {
6238       /* It is a glob pattern only if there is no preceding
6239 	 backslash.  */
6240       if (! backslash && (*p == '?' || *p == '*' || *p == '['))
6241 	{
6242 	  free (symbol);
6243 	  return NULL;
6244 	}
6245 
6246       if (backslash)
6247 	{
6248 	  /* Remove the preceding backslash.  */
6249 	  *(s - 1) = *p;
6250 	  changed = TRUE;
6251 	}
6252       else
6253 	*s++ = *p;
6254 
6255       backslash = *p == '\\';
6256     }
6257 
6258   if (changed)
6259     {
6260       *s = '\0';
6261       return symbol;
6262     }
6263   else
6264     {
6265       free (symbol);
6266       return pattern;
6267     }
6268 }
6269 
6270 /* This is called for each variable name or match expression.  */
6271 
6272 struct bfd_elf_version_expr *
lang_new_vers_pattern(struct bfd_elf_version_expr * orig,const char * new,const char * lang)6273 lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
6274 		       const char *new,
6275 		       const char *lang)
6276 {
6277   struct bfd_elf_version_expr *ret;
6278 
6279   ret = xmalloc (sizeof *ret);
6280   ret->next = orig;
6281   ret->pattern = new;
6282   ret->symver = 0;
6283   ret->script = 0;
6284   ret->symbol = realsymbol (new);
6285 
6286   if (lang == NULL || strcasecmp (lang, "C") == 0)
6287     ret->mask = BFD_ELF_VERSION_C_TYPE;
6288   else if (strcasecmp (lang, "C++") == 0)
6289     ret->mask = BFD_ELF_VERSION_CXX_TYPE;
6290   else if (strcasecmp (lang, "Java") == 0)
6291     ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
6292   else
6293     {
6294       einfo (_("%X%P: unknown language `%s' in version information\n"),
6295 	     lang);
6296       ret->mask = BFD_ELF_VERSION_C_TYPE;
6297     }
6298 
6299   return ldemul_new_vers_pattern (ret);
6300 }
6301 
6302 /* This is called for each set of variable names and match
6303    expressions.  */
6304 
6305 struct bfd_elf_version_tree *
lang_new_vers_node(struct bfd_elf_version_expr * globals,struct bfd_elf_version_expr * locals)6306 lang_new_vers_node (struct bfd_elf_version_expr *globals,
6307 		    struct bfd_elf_version_expr *locals)
6308 {
6309   struct bfd_elf_version_tree *ret;
6310 
6311   ret = xcalloc (1, sizeof *ret);
6312   ret->globals.list = globals;
6313   ret->locals.list = locals;
6314   ret->match = lang_vers_match;
6315   ret->name_indx = (unsigned int) -1;
6316   return ret;
6317 }
6318 
6319 /* This static variable keeps track of version indices.  */
6320 
6321 static int version_index;
6322 
6323 static hashval_t
version_expr_head_hash(const void * p)6324 version_expr_head_hash (const void *p)
6325 {
6326   const struct bfd_elf_version_expr *e = p;
6327 
6328   return htab_hash_string (e->symbol);
6329 }
6330 
6331 static int
version_expr_head_eq(const void * p1,const void * p2)6332 version_expr_head_eq (const void *p1, const void *p2)
6333 {
6334   const struct bfd_elf_version_expr *e1 = p1;
6335   const struct bfd_elf_version_expr *e2 = p2;
6336 
6337   return strcmp (e1->symbol, e2->symbol) == 0;
6338 }
6339 
6340 static void
lang_finalize_version_expr_head(struct bfd_elf_version_expr_head * head)6341 lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
6342 {
6343   size_t count = 0;
6344   struct bfd_elf_version_expr *e, *next;
6345   struct bfd_elf_version_expr **list_loc, **remaining_loc;
6346 
6347   for (e = head->list; e; e = e->next)
6348     {
6349       if (e->symbol)
6350 	count++;
6351       head->mask |= e->mask;
6352     }
6353 
6354   if (count)
6355     {
6356       head->htab = htab_create (count * 2, version_expr_head_hash,
6357 				version_expr_head_eq, NULL);
6358       list_loc = &head->list;
6359       remaining_loc = &head->remaining;
6360       for (e = head->list; e; e = next)
6361 	{
6362 	  next = e->next;
6363 	  if (!e->symbol)
6364 	    {
6365 	      *remaining_loc = e;
6366 	      remaining_loc = &e->next;
6367 	    }
6368 	  else
6369 	    {
6370 	      void **loc = htab_find_slot (head->htab, e, INSERT);
6371 
6372 	      if (*loc)
6373 		{
6374 		  struct bfd_elf_version_expr *e1, *last;
6375 
6376 		  e1 = *loc;
6377 		  last = NULL;
6378 		  do
6379 		    {
6380 		      if (e1->mask == e->mask)
6381 			{
6382 			  last = NULL;
6383 			  break;
6384 			}
6385 		      last = e1;
6386 		      e1 = e1->next;
6387 		    }
6388 		  while (e1 && strcmp (e1->symbol, e->symbol) == 0);
6389 
6390 		  if (last == NULL)
6391 		    {
6392 		      /* This is a duplicate.  */
6393 		      /* FIXME: Memory leak.  Sometimes pattern is not
6394 			 xmalloced alone, but in larger chunk of memory.  */
6395 		      /* free (e->symbol); */
6396 		      free (e);
6397 		    }
6398 		  else
6399 		    {
6400 		      e->next = last->next;
6401 		      last->next = e;
6402 		    }
6403 		}
6404 	      else
6405 		{
6406 		  *loc = e;
6407 		  *list_loc = e;
6408 		  list_loc = &e->next;
6409 		}
6410 	    }
6411 	}
6412       *remaining_loc = NULL;
6413       *list_loc = head->remaining;
6414     }
6415   else
6416     head->remaining = head->list;
6417 }
6418 
6419 /* This is called when we know the name and dependencies of the
6420    version.  */
6421 
6422 void
lang_register_vers_node(const char * name,struct bfd_elf_version_tree * version,struct bfd_elf_version_deps * deps)6423 lang_register_vers_node (const char *name,
6424 			 struct bfd_elf_version_tree *version,
6425 			 struct bfd_elf_version_deps *deps)
6426 {
6427   struct bfd_elf_version_tree *t, **pp;
6428   struct bfd_elf_version_expr *e1;
6429 
6430   if (name == NULL)
6431     name = "";
6432 
6433   if ((name[0] == '\0' && lang_elf_version_info != NULL)
6434       || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
6435     {
6436       einfo (_("%X%P: anonymous version tag cannot be combined"
6437 	       " with other version tags\n"));
6438       free (version);
6439       return;
6440     }
6441 
6442   /* Make sure this node has a unique name.  */
6443   for (t = lang_elf_version_info; t != NULL; t = t->next)
6444     if (strcmp (t->name, name) == 0)
6445       einfo (_("%X%P: duplicate version tag `%s'\n"), name);
6446 
6447   lang_finalize_version_expr_head (&version->globals);
6448   lang_finalize_version_expr_head (&version->locals);
6449 
6450   /* Check the global and local match names, and make sure there
6451      aren't any duplicates.  */
6452 
6453   for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
6454     {
6455       for (t = lang_elf_version_info; t != NULL; t = t->next)
6456 	{
6457 	  struct bfd_elf_version_expr *e2;
6458 
6459 	  if (t->locals.htab && e1->symbol)
6460 	    {
6461 	      e2 = htab_find (t->locals.htab, e1);
6462 	      while (e2 && strcmp (e1->symbol, e2->symbol) == 0)
6463 		{
6464 		  if (e1->mask == e2->mask)
6465 		    einfo (_("%X%P: duplicate expression `%s'"
6466 			     " in version information\n"), e1->symbol);
6467 		  e2 = e2->next;
6468 		}
6469 	    }
6470 	  else if (!e1->symbol)
6471 	    for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
6472 	      if (strcmp (e1->pattern, e2->pattern) == 0
6473 		  && e1->mask == e2->mask)
6474 		einfo (_("%X%P: duplicate expression `%s'"
6475 			 " in version information\n"), e1->pattern);
6476 	}
6477     }
6478 
6479   for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
6480     {
6481       for (t = lang_elf_version_info; t != NULL; t = t->next)
6482 	{
6483 	  struct bfd_elf_version_expr *e2;
6484 
6485 	  if (t->globals.htab && e1->symbol)
6486 	    {
6487 	      e2 = htab_find (t->globals.htab, e1);
6488 	      while (e2 && strcmp (e1->symbol, e2->symbol) == 0)
6489 		{
6490 		  if (e1->mask == e2->mask)
6491 		    einfo (_("%X%P: duplicate expression `%s'"
6492 			     " in version information\n"),
6493 			   e1->symbol);
6494 		  e2 = e2->next;
6495 		}
6496 	    }
6497 	  else if (!e1->symbol)
6498 	    for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
6499 	      if (strcmp (e1->pattern, e2->pattern) == 0
6500 		  && e1->mask == e2->mask)
6501 		einfo (_("%X%P: duplicate expression `%s'"
6502 			 " in version information\n"), e1->pattern);
6503 	}
6504     }
6505 
6506   version->deps = deps;
6507   version->name = name;
6508   if (name[0] != '\0')
6509     {
6510       ++version_index;
6511       version->vernum = version_index;
6512     }
6513   else
6514     version->vernum = 0;
6515 
6516   for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
6517     ;
6518   *pp = version;
6519 }
6520 
6521 /* This is called when we see a version dependency.  */
6522 
6523 struct bfd_elf_version_deps *
lang_add_vers_depend(struct bfd_elf_version_deps * list,const char * name)6524 lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
6525 {
6526   struct bfd_elf_version_deps *ret;
6527   struct bfd_elf_version_tree *t;
6528 
6529   ret = xmalloc (sizeof *ret);
6530   ret->next = list;
6531 
6532   for (t = lang_elf_version_info; t != NULL; t = t->next)
6533     {
6534       if (strcmp (t->name, name) == 0)
6535 	{
6536 	  ret->version_needed = t;
6537 	  return ret;
6538 	}
6539     }
6540 
6541   einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
6542 
6543   return ret;
6544 }
6545 
6546 static void
lang_do_version_exports_section(void)6547 lang_do_version_exports_section (void)
6548 {
6549   struct bfd_elf_version_expr *greg = NULL, *lreg;
6550 
6551   LANG_FOR_EACH_INPUT_STATEMENT (is)
6552     {
6553       asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
6554       char *contents, *p;
6555       bfd_size_type len;
6556 
6557       if (sec == NULL)
6558 	continue;
6559 
6560       len = sec->size;
6561       contents = xmalloc (len);
6562       if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
6563 	einfo (_("%X%P: unable to read .exports section contents\n"), sec);
6564 
6565       p = contents;
6566       while (p < contents + len)
6567 	{
6568 	  greg = lang_new_vers_pattern (greg, p, NULL);
6569 	  p = strchr (p, '\0') + 1;
6570 	}
6571 
6572       /* Do not free the contents, as we used them creating the regex.  */
6573 
6574       /* Do not include this section in the link.  */
6575       sec->flags |= SEC_EXCLUDE;
6576     }
6577 
6578   lreg = lang_new_vers_pattern (NULL, "*", NULL);
6579   lang_register_vers_node (command_line.version_exports_section,
6580 			   lang_new_vers_node (greg, lreg), NULL);
6581 }
6582 
6583 void
lang_add_unique(const char * name)6584 lang_add_unique (const char *name)
6585 {
6586   struct unique_sections *ent;
6587 
6588   for (ent = unique_section_list; ent; ent = ent->next)
6589     if (strcmp (ent->name, name) == 0)
6590       return;
6591 
6592   ent = xmalloc (sizeof *ent);
6593   ent->name = xstrdup (name);
6594   ent->next = unique_section_list;
6595   unique_section_list = ent;
6596 }
6597