* ldlang.c (lang_one_common): Set SEC_ALLOC in any section where
[external/binutils.git] / ld / ldlang.c
1 /* Linker command language support.
2    Copyright (C) 1991, 92, 93, 94 Free Software Foundation, Inc.
3
4 This file is part of GLD, the Gnu Linker.
5
6 GLD is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 1, or (at your option)
9 any later version.
10
11 GLD is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GLD; see the file COPYING.  If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20 #include "bfd.h"
21 #include "sysdep.h"
22 #include "libiberty.h"
23 #include "bfdlink.h"
24
25 #include "ld.h"
26 #include "ldmain.h"
27 #include "ldgram.h"
28 #include "ldexp.h"
29 #include "ldlang.h"
30 #include "ldemul.h"
31 #include "ldlex.h"
32 #include "ldmisc.h"
33 #include "ldctor.h"
34 #include "ldfile.h"
35
36 /* FORWARDS */
37 static void print_statements PARAMS ((void));
38 static void print_statement PARAMS ((lang_statement_union_type *,
39                                       lang_output_section_statement_type *));
40 static lang_statement_union_type *new_statement PARAMS ((enum statement_enum,
41                                                          size_t,
42                                                          lang_statement_list_type*));
43
44
45 /* LOCALS */
46 static struct obstack stat_obstack;
47
48 #define obstack_chunk_alloc xmalloc
49 #define obstack_chunk_free free
50 static CONST char *startup_file;
51 static lang_statement_list_type input_file_chain;
52 static boolean placed_commons = false;
53 static lang_output_section_statement_type *default_common_section;
54 static boolean map_option_f;
55 static bfd_vma print_dot;
56 static lang_input_statement_type *first_file;
57 static lang_statement_list_type lang_output_section_statement;
58 static CONST char *current_target;
59 static CONST char *output_target;
60 static int longest_section_name = 8;
61 static lang_statement_list_type statement_list;
62
63 static void print_size PARAMS ((size_t value));
64 static void print_alignment PARAMS ((unsigned int value));
65 static void print_fill PARAMS ((fill_type value));
66 static void print_section PARAMS ((const char *name));
67 static void lang_for_each_statement_worker
68   PARAMS ((void (*func) (lang_statement_union_type *),
69            lang_statement_union_type *s));
70 static lang_input_statement_type *new_afile
71   PARAMS ((const char *name, lang_input_file_enum_type file_type,
72            const char *target, boolean add_to_list));
73 static void print_flags PARAMS ((int *ignore_flags));
74 static void init_os PARAMS ((lang_output_section_statement_type *s));
75 static void wild_section PARAMS ((lang_wild_statement_type *ptr,
76                                   const char *section,
77                                   lang_input_statement_type *file,
78                                   lang_output_section_statement_type *output));
79 static lang_input_statement_type *lookup_name PARAMS ((const char *name));
80 static void load_symbols PARAMS ((lang_input_statement_type *entry,
81                                   lang_statement_list_type *));
82 static void wild PARAMS ((lang_wild_statement_type *s,
83                           const char *section, const char *file,
84                           const char *target,
85                           lang_output_section_statement_type *output));
86 static bfd *open_output PARAMS ((const char *name));
87 static void ldlang_open_output PARAMS ((lang_statement_union_type *statement));
88 static void open_input_bfds
89   PARAMS ((lang_statement_union_type *statement, boolean));
90 static void lang_reasonable_defaults PARAMS ((void));
91 static void lang_place_undefineds PARAMS ((void));
92 static void map_input_to_output_sections
93   PARAMS ((lang_statement_union_type *s,
94            const char *target,
95            lang_output_section_statement_type *output_section_statement));
96 static void print_output_section_statement
97   PARAMS ((lang_output_section_statement_type *output_section_statement));
98 static void print_assignment
99   PARAMS ((lang_assignment_statement_type *assignment,
100            lang_output_section_statement_type *output_section));
101 static void print_input_statement PARAMS ((lang_input_statement_type *statm));
102 static void print_input_section PARAMS ((lang_input_section_type *in));
103 static void print_fill_statement PARAMS ((lang_fill_statement_type *fill));
104 static void print_data_statement PARAMS ((lang_data_statement_type *data));
105 static void print_reloc_statement PARAMS ((lang_reloc_statement_type *reloc));
106 static void print_padding_statement PARAMS ((lang_padding_statement_type *s));
107 static void print_wild_statement
108   PARAMS ((lang_wild_statement_type *w,
109            lang_output_section_statement_type *os));
110 static void print_group
111   PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *));
112 static void print_statement PARAMS ((lang_statement_union_type *s,
113                                      lang_output_section_statement_type *os));
114 static void print_statements PARAMS ((void));
115 static bfd_vma insert_pad PARAMS ((lang_statement_union_type **this_ptr,
116                                    fill_type fill, unsigned int power,
117                                    asection *output_section_statement,
118                                    bfd_vma dot));
119 static bfd_vma size_input_section
120   PARAMS ((lang_statement_union_type **this_ptr,
121            lang_output_section_statement_type *output_section_statement,
122            fill_type fill, bfd_vma dot, boolean relax));
123 static void lang_finish PARAMS ((void));
124 static void lang_check PARAMS ((void));
125 static void lang_common PARAMS ((void));
126 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
127 static void lang_place_orphans PARAMS ((void));
128 static int topower PARAMS ((int));
129 static void reset_memory_regions PARAMS ((void));
130
131 /* EXPORTS */
132 lang_output_section_statement_type *abs_output_section;
133 lang_statement_list_type *stat_ptr = &statement_list;
134 lang_statement_list_type file_chain = { 0 };
135 static const char *entry_symbol = 0;
136 boolean lang_has_input_file = false;
137 boolean had_output_filename = false;
138 boolean lang_float_flag = false;
139 boolean delete_output_file_on_failure = false;
140
141 etree_type *base; /* Relocation base - or null */
142
143
144 #if defined(__STDC__) || defined(ALMOST_STDC)
145 #define cat(a,b) a##b
146 #else
147 #define cat(a,b) a/**/b
148 #endif
149
150 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
151
152 #define outside_section_address(q) ( (q)->output_offset + (q)->output_section->vma)
153
154 #define outside_symbol_address(q) ((q)->value +   outside_section_address(q->section))
155
156 PTR
157 stat_alloc (size)
158      size_t size;
159 {
160   return obstack_alloc (&stat_obstack, size);
161 }
162
163 static void
164 print_size (value)
165      size_t value;
166 {
167   fprintf (config.map_file, "%5x", (unsigned) value);
168 }
169
170 static void
171 print_alignment (value)
172      unsigned int value;
173 {
174   fprintf (config.map_file, "2**%1u", value);
175 }
176
177 static void
178 print_fill (value)
179      fill_type value;
180 {
181   fprintf (config.map_file, "%04x", (unsigned) value);
182 }
183
184 static void
185 print_section (name)
186      CONST char *name;
187 {
188   fprintf (config.map_file, "%*s", -longest_section_name, name);
189 }
190
191 /*----------------------------------------------------------------------
192   lang_for_each_statement walks the parse tree and calls the provided
193   function for each node
194 */
195
196 static void
197 lang_for_each_statement_worker (func, s)
198      void (*func) PARAMS ((lang_statement_union_type *));
199      lang_statement_union_type *s;
200 {
201   for (; s != (lang_statement_union_type *) NULL; s = s->next)
202     {
203       func (s);
204
205       switch (s->header.type)
206         {
207         case lang_constructors_statement_enum:
208           lang_for_each_statement_worker (func, constructor_list.head);
209           break;
210         case lang_output_section_statement_enum:
211           lang_for_each_statement_worker
212             (func,
213              s->output_section_statement.children.head);
214           break;
215         case lang_wild_statement_enum:
216           lang_for_each_statement_worker
217             (func,
218              s->wild_statement.children.head);
219           break;
220         case lang_group_statement_enum:
221           lang_for_each_statement_worker (func,
222                                           s->group_statement.children.head);
223           break;
224         case lang_data_statement_enum:
225         case lang_reloc_statement_enum:
226         case lang_object_symbols_statement_enum:
227         case lang_output_statement_enum:
228         case lang_target_statement_enum:
229         case lang_input_section_enum:
230         case lang_input_statement_enum:
231         case lang_assignment_statement_enum:
232         case lang_padding_statement_enum:
233         case lang_address_statement_enum:
234           break;
235         default:
236           FAIL ();
237           break;
238         }
239     }
240 }
241
242 void
243 lang_for_each_statement (func)
244      void (*func) PARAMS ((lang_statement_union_type *));
245 {
246   lang_for_each_statement_worker (func,
247                                   statement_list.head);
248 }
249
250 /*----------------------------------------------------------------------*/
251 void
252 lang_list_init (list)
253      lang_statement_list_type *list;
254 {
255   list->head = (lang_statement_union_type *) NULL;
256   list->tail = &list->head;
257 }
258
259 /*----------------------------------------------------------------------
260
261   build a new statement node for the parse tree
262
263  */
264
265 static
266 lang_statement_union_type *
267 new_statement (type, size, list)
268      enum statement_enum type;
269      size_t size;
270      lang_statement_list_type * list;
271 {
272   lang_statement_union_type *new = (lang_statement_union_type *)
273   stat_alloc (size);
274
275   new->header.type = type;
276   new->header.next = (lang_statement_union_type *) NULL;
277   lang_statement_append (list, new, &new->header.next);
278   return new;
279 }
280
281 /*
282   Build a new input file node for the language. There are several ways
283   in which we treat an input file, eg, we only look at symbols, or
284   prefix it with a -l etc.
285
286   We can be supplied with requests for input files more than once;
287   they may, for example be split over serveral lines like foo.o(.text)
288   foo.o(.data) etc, so when asked for a file we check that we havn't
289   got it already so we don't duplicate the bfd.
290
291  */
292 static lang_input_statement_type *
293 new_afile (name, file_type, target, add_to_list)
294      CONST char *name;
295      lang_input_file_enum_type file_type;
296      CONST char *target;
297      boolean add_to_list;
298 {
299   lang_input_statement_type *p;
300
301   if (add_to_list)
302     p = new_stat (lang_input_statement, stat_ptr);
303   else
304     {
305       p = ((lang_input_statement_type *)
306            stat_alloc (sizeof (lang_input_statement_type)));
307       p->header.next = NULL;
308     }
309
310   lang_has_input_file = true;
311   p->target = target;
312   p->complained = false;
313   switch (file_type)
314     {
315     case lang_input_file_is_symbols_only_enum:
316       p->filename = name;
317       p->is_archive = false;
318       p->real = true;
319       p->local_sym_name = name;
320       p->just_syms_flag = true;
321       p->search_dirs_flag = false;
322       break;
323     case lang_input_file_is_fake_enum:
324       p->filename = name;
325       p->is_archive = false;
326       p->real = false;
327       p->local_sym_name = name;
328       p->just_syms_flag = false;
329       p->search_dirs_flag = false;
330       break;
331     case lang_input_file_is_l_enum:
332       p->is_archive = true;
333       p->filename = name;
334       p->real = true;
335       p->local_sym_name = concat ("-l", name, (const char *) NULL);
336       p->just_syms_flag = false;
337       p->search_dirs_flag = true;
338       break;
339     case lang_input_file_is_marker_enum:
340       p->filename = name;
341       p->is_archive = false;
342       p->real = false;
343       p->local_sym_name = name;
344       p->just_syms_flag = false;
345       p->search_dirs_flag = true;
346       break;
347     case lang_input_file_is_search_file_enum:
348       p->filename = name;
349       p->is_archive = false;
350       p->real = true;
351       p->local_sym_name = name;
352       p->just_syms_flag = false;
353       p->search_dirs_flag = true;
354       break;
355     case lang_input_file_is_file_enum:
356       p->filename = name;
357       p->is_archive = false;
358       p->real = true;
359       p->local_sym_name = name;
360       p->just_syms_flag = false;
361       p->search_dirs_flag = false;
362       break;
363     default:
364       FAIL ();
365     }
366   p->the_bfd = (bfd *) NULL;
367   p->asymbols = (asymbol **) NULL;
368   p->next_real_file = (lang_statement_union_type *) NULL;
369   p->next = (lang_statement_union_type *) NULL;
370   p->symbol_count = 0;
371   p->common_output_section = (asection *) NULL;
372   p->loaded = false;
373   lang_statement_append (&input_file_chain,
374                          (lang_statement_union_type *) p,
375                          &p->next_real_file);
376   return p;
377 }
378
379 lang_input_statement_type *
380 lang_add_input_file (name, file_type, target)
381      CONST char *name;
382      lang_input_file_enum_type file_type;
383      CONST char *target;
384 {
385   lang_has_input_file = true;
386   return new_afile (name, file_type, target, true);
387 }
388
389 /* Build enough state so that the parser can build its tree */
390 void
391 lang_init ()
392 {
393   obstack_begin (&stat_obstack, 1000);
394
395   stat_ptr = &statement_list;
396
397   lang_list_init (stat_ptr);
398
399   lang_list_init (&input_file_chain);
400   lang_list_init (&lang_output_section_statement);
401   lang_list_init (&file_chain);
402   first_file = lang_add_input_file ((char *) NULL,
403                                     lang_input_file_is_marker_enum,
404                                     (char *) NULL);
405   abs_output_section = lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
406
407   abs_output_section->bfd_section = bfd_abs_section_ptr;
408
409 }
410
411 /*----------------------------------------------------------------------
412  A region is an area of memory declared with the
413  MEMORY {  name:org=exp, len=exp ... }
414  syntax.
415
416  We maintain a list of all the regions here
417
418  If no regions are specified in the script, then the default is used
419  which is created when looked up to be the entire data space
420 */
421
422 static lang_memory_region_type *lang_memory_region_list;
423 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
424
425 lang_memory_region_type *
426 lang_memory_region_lookup (name)
427      CONST char *CONST name;
428 {
429
430   lang_memory_region_type *p = lang_memory_region_list;
431
432   for (p = lang_memory_region_list;
433        p != (lang_memory_region_type *) NULL;
434        p = p->next)
435     {
436       if (strcmp (p->name, name) == 0)
437         {
438           return p;
439         }
440     }
441   if (strcmp (name, "*default*") == 0)
442     {
443       /* This is the default region, dig out first one on the list */
444       if (lang_memory_region_list != (lang_memory_region_type *) NULL)
445         {
446           return lang_memory_region_list;
447         }
448     }
449   {
450     lang_memory_region_type *new =
451     (lang_memory_region_type *) stat_alloc ((bfd_size_type) (sizeof (lang_memory_region_type)));
452
453     new->name = buystring (name);
454     new->next = (lang_memory_region_type *) NULL;
455
456     *lang_memory_region_list_tail = new;
457     lang_memory_region_list_tail = &new->next;
458     new->origin = 0;
459     new->length = ~(bfd_size_type)0;
460     new->current = 0;
461     new->had_full_message = false;
462
463     return new;
464   }
465 }
466
467
468 lang_output_section_statement_type *
469 lang_output_section_find (name)
470      CONST char *CONST name;
471 {
472   lang_statement_union_type *u;
473   lang_output_section_statement_type *lookup;
474
475   for (u = lang_output_section_statement.head;
476        u != (lang_statement_union_type *) NULL;
477        u = lookup->next)
478     {
479       lookup = &u->output_section_statement;
480       if (strcmp (name, lookup->name) == 0)
481         {
482           return lookup;
483         }
484     }
485   return (lang_output_section_statement_type *) NULL;
486 }
487
488 lang_output_section_statement_type *
489 lang_output_section_statement_lookup (name)
490      CONST char *CONST name;
491 {
492   lang_output_section_statement_type *lookup;
493
494   lookup = lang_output_section_find (name);
495   if (lookup == (lang_output_section_statement_type *) NULL)
496     {
497
498       lookup = (lang_output_section_statement_type *)
499         new_stat (lang_output_section_statement, stat_ptr);
500       lookup->region = (lang_memory_region_type *) NULL;
501       lookup->fill = 0;
502       lookup->block_value = 1;
503       lookup->name = name;
504
505       lookup->next = (lang_statement_union_type *) NULL;
506       lookup->bfd_section = (asection *) NULL;
507       lookup->processed = false;
508       lookup->loadable = 1;
509       lookup->addr_tree = (etree_type *) NULL;
510       lang_list_init (&lookup->children);
511
512       lookup->memspec = (CONST char *) NULL;
513       lookup->flags = 0;
514       lookup->subsection_alignment = -1;
515       lookup->section_alignment = -1;
516       lookup->load_base = (union etree_union *) NULL;
517
518       lang_statement_append (&lang_output_section_statement,
519                              (lang_statement_union_type *) lookup,
520                              &lookup->next);
521     }
522   return lookup;
523 }
524
525 /*ARGSUSED*/
526 static void
527 print_flags (ignore_flags)
528      int *ignore_flags;
529 {
530   fprintf (config.map_file, "(");
531 #if 0
532   if (flags->flag_read)
533     fprintf (outfile, "R");
534   if (flags->flag_write)
535     fprintf (outfile, "W");
536   if (flags->flag_executable)
537     fprintf (outfile, "X");
538   if (flags->flag_loadable)
539     fprintf (outfile, "L");
540 #endif
541  fprintf (config.map_file, ")");
542 }
543
544 void
545 lang_map ()
546 {
547   lang_memory_region_type *m;
548
549   fprintf (config.map_file, "**MEMORY CONFIGURATION**\n\n");
550 #ifdef HOST_64_BIT
551   fprintf (config.map_file, "name\t\torigin\t\tlength\t\tattributes\n");
552 #else
553   fprintf (config.map_file,
554            "name\t\torigin   length   r_size   c_size    is    attributes\n");
555
556 #endif
557   for (m = lang_memory_region_list;
558        m != (lang_memory_region_type *) NULL;
559        m = m->next)
560     {
561       fprintf (config.map_file, "%-16s", m->name);
562       print_address (m->origin);
563       print_space ();
564       print_address ((bfd_vma)m->length);
565       print_space ();
566       print_address ((bfd_vma)m->old_length);
567       print_space();
568       print_address (m->current - m->origin);
569       print_space();
570       if (m->old_length)
571        fprintf (config.map_file, " %2d%%  ",
572                 (int) ((m->current - m->origin) * 100 / m->old_length));
573       print_flags (&m->flags);
574       fprintf (config.map_file, "\n");
575     }
576   fprintf (config.map_file, "\n\n**LINK EDITOR MEMORY MAP**\n\n");
577   fprintf (config.map_file, "output   input     virtual\n");
578   fprintf (config.map_file, "section  section   address    tsize\n\n");
579
580   print_statements ();
581
582 }
583
584 /*
585  *
586  */
587 static void
588 init_os (s)
589      lang_output_section_statement_type * s;
590 {
591 /*  asection *section = bfd_get_section_by_name(output_bfd, s->name);*/
592   section_userdata_type *new =
593   (section_userdata_type *)
594   stat_alloc ((bfd_size_type) (sizeof (section_userdata_type)));
595
596   s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
597   if (s->bfd_section == (asection *) NULL)
598     s->bfd_section = bfd_make_section (output_bfd, s->name);
599   if (s->bfd_section == (asection *) NULL)
600     {
601       einfo ("%P%F: output format %s cannot represent section called %s\n",
602              output_bfd->xvec->name, s->name);
603     }
604   s->bfd_section->output_section = s->bfd_section;
605 /*  s->bfd_section->flags = s->flags;*/
606
607   /* We initialize an output sections output offset to minus its own */
608   /* vma to allow us to output a section through itself */
609   s->bfd_section->output_offset = 0;
610   get_userdata (s->bfd_section) = (PTR) new;
611
612 }
613
614 /***********************************************************************
615   The wild routines.
616
617   These expand statements like *(.text) and foo.o to a list of
618   explicit actions, like foo.o(.text), bar.o(.text) and
619   foo.o(.text,.data) .
620
621   The toplevel routine, wild, takes a statement, section, file and
622   target. If either the section or file is null it is taken to be the
623   wildcard. Seperate lang_input_section statements are created for
624   each part of the expanstion, and placed after the statement provided.
625
626 */
627
628 void
629 wild_doit (ptr, section, output, file)
630      lang_statement_list_type * ptr;
631      asection * section;
632      lang_output_section_statement_type * output;
633      lang_input_statement_type * file;
634 {
635   if (output->bfd_section == (asection *) NULL)
636     init_os (output);
637
638   if (section != (asection *) NULL
639       && section->output_section == (asection *) NULL)
640   {
641     /* Add a section reference to the list */
642     lang_input_section_type *new = new_stat (lang_input_section, ptr);
643
644     new->section = section;
645     new->ifile = file;
646     section->output_section = output->bfd_section;
647
648     /* We don't copy the SEC_NEVER_LOAD flag from an input section to
649        an output section, because we want to be able to include a
650        SEC_NEVER_LOAD section in the middle of an otherwise loaded
651        section (I don't know why we want to do this, but we do).
652        build_link_order in ldwrite.c handles this case by turning the
653        embedded SEC_NEVER_LOAD section into a fill.  */
654     section->output_section->flags |=
655       section->flags & (flagword) (~ SEC_NEVER_LOAD);
656
657     if (!output->loadable) 
658     {
659       /* Turn off load flag */
660       output->bfd_section->flags &= ~SEC_LOAD;
661       output->bfd_section->flags |= SEC_NEVER_LOAD;
662     }
663     if (section->alignment_power > output->bfd_section->alignment_power)
664     {
665       output->bfd_section->alignment_power = section->alignment_power;
666     }
667     /* If supplied an aligmnet, then force it */
668     if (output->section_alignment != -1)
669     {
670       output->bfd_section->alignment_power = output->section_alignment;
671     }
672   }
673 }
674
675 static void
676 wild_section (ptr, section, file, output)
677      lang_wild_statement_type *ptr;
678      const char *section;
679      lang_input_statement_type *file;
680      lang_output_section_statement_type *output;
681 {
682   if (file->just_syms_flag == false)
683     {
684       register asection *s;
685
686       for (s = file->the_bfd->sections; s != NULL; s = s->next)
687         {
688           /* Attach all sections named SECTION.  If SECTION is NULL,
689              then attach all sections.
690
691              Previously, if SECTION was NULL, this code did not call
692              wild_doit if the SEC_IS_COMMON flag was set for the
693              section.  I did not understand that, and I took it out.
694              --ian@cygnus.com.  */
695
696           if (section == NULL
697               || strcmp (bfd_get_section_name (file->the_bfd, s),
698                          section) == 0)
699             wild_doit (&ptr->children, s, output, file);
700         }
701     }
702 }
703
704 /* passed a file name (which must have been seen already and added to
705    the statement tree. We will see if it has been opened already and
706    had its symbols read. If not then we'll read it.
707
708    Archives are pecuilar here. We may open them once, but if they do
709    not define anything we need at the time, they won't have all their
710    symbols read. If we need them later, we'll have to redo it.  */
711 static lang_input_statement_type *
712 lookup_name (name)
713      CONST char *name;
714 {
715   lang_input_statement_type *search;
716
717   for (search = (lang_input_statement_type *) input_file_chain.head;
718        search != (lang_input_statement_type *) NULL;
719        search = (lang_input_statement_type *) search->next_real_file)
720     {
721       if (search->filename == (char *) NULL && name == (char *) NULL)
722         return search;
723       if (search->filename != (char *) NULL
724           && name != (char *) NULL
725           && strcmp (search->filename, name) == 0)
726         break;
727     }
728
729   if (search == (lang_input_statement_type *) NULL)
730     search = new_afile (name, lang_input_file_is_file_enum, default_target,
731                         false);
732
733   /* If we have already added this file, or this file is not real
734      (FIXME: can that ever actually happen?) or the name is NULL
735      (FIXME: can that ever actually happen?) don't add this file.  */
736   if (search->loaded
737       || ! search->real
738       || search->filename == (const char *) NULL)
739     return search;
740
741   load_symbols (search, (lang_statement_list_type *) NULL);
742
743   return search;
744 }
745
746 /* Get the symbols for an input file.  */
747
748 static void
749 load_symbols (entry, place)
750      lang_input_statement_type *entry;
751      lang_statement_list_type *place;
752 {
753   char **matching;
754
755   if (entry->loaded)
756     return;
757
758   ldfile_open_file (entry);
759
760   if (! bfd_check_format (entry->the_bfd, bfd_archive)
761       && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
762     {
763       bfd_error_type err;
764       lang_statement_list_type *hold;
765
766       err = bfd_get_error ();
767       if (err == bfd_error_file_ambiguously_recognized)
768         {
769           char **p;
770
771           einfo ("%B: file not recognized: %E\n", entry->the_bfd);
772           einfo ("%B: matching formats:", entry->the_bfd);
773           for (p = matching; *p != NULL; p++)
774             einfo (" %s", *p);
775           einfo ("%F\n");
776         }
777       else if (err != bfd_error_file_not_recognized
778                || place == NULL)
779         einfo ("%F%B: file not recognized: %E\n", entry->the_bfd);
780
781       /* Try to interpret the file as a linker script.  */
782
783       bfd_close (entry->the_bfd);
784       entry->the_bfd = NULL;
785
786       ldfile_open_command_file (entry->filename);
787
788       hold = stat_ptr;
789       stat_ptr = place;
790
791       ldfile_assumed_script = true;
792       parser_input = input_script;
793       yyparse ();
794       ldfile_assumed_script = false;
795
796       stat_ptr = hold;
797
798       return;
799     }
800
801   /* We don't call ldlang_add_file for an archive.  Instead, the
802      add_symbols entry point will call ldlang_add_file, via the
803      add_archive_element callback, for each element of the archive
804      which is used.  */
805   if (bfd_get_format (entry->the_bfd) == bfd_object)
806     {
807       ldlang_add_file (entry);
808       if (trace_files || trace_file_tries)
809         info_msg ("%I\n", entry);
810     }
811
812   if (! bfd_link_add_symbols (entry->the_bfd, &link_info))
813     einfo ("%F%B: could not read symbols: %E\n", entry->the_bfd);
814
815   entry->loaded = true;
816 }
817
818 static void
819 wild (s, section, file, target, output)
820      lang_wild_statement_type * s;
821      CONST char *section;
822      CONST char *file;
823      CONST char *target;
824      lang_output_section_statement_type * output;
825 {
826   lang_input_statement_type *f;
827
828   if (file == (char *) NULL)
829     {
830       /* Perform the iteration over all files in the list */
831       for (f = (lang_input_statement_type *) file_chain.head;
832            f != (lang_input_statement_type *) NULL;
833            f = (lang_input_statement_type *) f->next)
834         {
835           wild_section (s, section, f, output);
836         }
837     }
838   else
839     {
840       /* Perform the iteration over a single file */
841       wild_section (s, section, lookup_name (file), output);
842     }
843   if (section != (char *) NULL
844       && strcmp (section, "COMMON") == 0
845    && default_common_section == (lang_output_section_statement_type *) NULL)
846     {
847       /* Remember the section that common is going to incase we later
848          get something which doesn't know where to put it */
849       default_common_section = output;
850     }
851 }
852
853 /*
854   read in all the files
855   */
856
857 static bfd *
858 open_output (name)
859      CONST char *name;
860 {
861   bfd *output;
862
863   if (output_target == (char *) NULL)
864     {
865       if (current_target != (char *) NULL)
866         output_target = current_target;
867       else
868         output_target = default_target;
869     }
870   output = bfd_openw (name, output_target);
871
872   if (output == (bfd *) NULL)
873     {
874       if (bfd_get_error () == bfd_error_invalid_target)
875         {
876           einfo ("%P%F: target %s not found\n", output_target);
877         }
878       einfo ("%P%F: cannot open output file %s: %E\n", name);
879     }
880
881   delete_output_file_on_failure = 1;
882
883   /*  output->flags |= D_PAGED;*/
884
885   if (! bfd_set_format (output, bfd_object))
886     einfo ("%P%F:%s: can not make object file: %E\n", name);
887   if (! bfd_set_arch_mach (output,
888                            ldfile_output_architecture,
889                            ldfile_output_machine))
890     einfo ("%P%F:%s: can not set architecture: %E\n", name);
891
892   link_info.hash = bfd_link_hash_table_create (output);
893   if (link_info.hash == (struct bfd_link_hash_table *) NULL)
894     einfo ("%P%F: can not create link hash table: %E\n");
895
896   bfd_set_gp_size (output, g_switch_value);
897   return output;
898 }
899
900
901
902
903 static void
904 ldlang_open_output (statement)
905      lang_statement_union_type * statement;
906 {
907   switch (statement->header.type)
908     {
909     case lang_output_statement_enum:
910       ASSERT (output_bfd == (bfd *) NULL);
911       output_bfd = open_output (statement->output_statement.name);
912       ldemul_set_output_arch ();
913       if (config.magic_demand_paged && !link_info.relocateable)
914         output_bfd->flags |= D_PAGED;
915       else
916         output_bfd->flags &= ~D_PAGED;
917       if (config.text_read_only)
918         output_bfd->flags |= WP_TEXT;
919       else
920         output_bfd->flags &= ~WP_TEXT;
921       if (config.traditional_format)
922         output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
923       else
924         output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
925       break;
926
927     case lang_target_statement_enum:
928       current_target = statement->target_statement.target;
929       break;
930     default:
931       break;
932     }
933 }
934
935 /* Open all the input files.  */
936
937 static void
938 open_input_bfds (s, force)
939      lang_statement_union_type *s;
940      boolean force;
941 {
942   for (; s != (lang_statement_union_type *) NULL; s = s->next)
943     {
944       switch (s->header.type)
945         {
946         case lang_constructors_statement_enum:
947           open_input_bfds (constructor_list.head, force);
948           break;
949         case lang_output_section_statement_enum:
950           open_input_bfds (s->output_section_statement.children.head, force);
951           break;
952         case lang_wild_statement_enum:
953           /* Maybe we should load the file's symbols */
954           if (s->wild_statement.filename)
955             (void) lookup_name (s->wild_statement.filename);
956           open_input_bfds (s->wild_statement.children.head, force);
957           break;
958         case lang_group_statement_enum:
959           {
960             struct bfd_link_hash_entry *undefs;
961
962             /* We must continually search the entries in the group
963                until no new symbols are added to the list of undefined
964                symbols.  */
965
966             do
967               {
968                 undefs = link_info.hash->undefs_tail;
969                 open_input_bfds (s->group_statement.children.head, true);
970               }
971             while (undefs != link_info.hash->undefs_tail);
972           }
973           break;
974         case lang_target_statement_enum:
975           current_target = s->target_statement.target;
976           break;
977         case lang_input_statement_enum:
978           if (s->input_statement.real == true)
979             {
980               lang_statement_list_type add;
981
982               s->input_statement.target = current_target;
983
984               /* If we are being called from within a group, and this
985                  is an archive which has already been searched, then
986                  force it to be researched.  */
987               if (force
988                   && s->input_statement.loaded
989                   && bfd_check_format (s->input_statement.the_bfd,
990                                        bfd_archive))
991                 s->input_statement.loaded = false;
992
993               lang_list_init (&add);
994
995               load_symbols (&s->input_statement, &add);
996
997               if (add.head != NULL)
998                 {
999                   *add.tail = s->next;
1000                   s->next = add.head;
1001                 }
1002             }
1003           break;
1004         default:
1005           break;
1006         }
1007     }
1008 }
1009
1010 /* If there are [COMMONS] statements, put a wild one into the bss section */
1011
1012 static void
1013 lang_reasonable_defaults ()
1014 {
1015 #if 0
1016   lang_output_section_statement_lookup (".text");
1017   lang_output_section_statement_lookup (".data");
1018
1019   default_common_section =
1020     lang_output_section_statement_lookup (".bss");
1021
1022
1023   if (placed_commons == false)
1024     {
1025       lang_wild_statement_type *new =
1026       new_stat (lang_wild_statement,
1027                 &default_common_section->children);
1028
1029       new->section_name = "COMMON";
1030       new->filename = (char *) NULL;
1031       lang_list_init (&new->children);
1032     }
1033 #endif
1034
1035 }
1036
1037 /*
1038  Add the supplied name to the symbol table as an undefined reference.
1039  Remove items from the chain as we open input bfds
1040  */
1041 typedef struct ldlang_undef_chain_list
1042 {
1043   struct ldlang_undef_chain_list *next;
1044   char *name;
1045 }                       ldlang_undef_chain_list_type;
1046
1047 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
1048
1049 void
1050 ldlang_add_undef (name)
1051      CONST char *CONST name;
1052 {
1053   ldlang_undef_chain_list_type *new =
1054   (ldlang_undef_chain_list_type
1055    *) stat_alloc ((bfd_size_type) (sizeof (ldlang_undef_chain_list_type)));
1056
1057   new->next = ldlang_undef_chain_list_head;
1058   ldlang_undef_chain_list_head = new;
1059
1060   new->name = buystring (name);
1061 }
1062
1063 /* Run through the list of undefineds created above and place them
1064    into the linker hash table as undefined symbols belonging to the
1065    script file.
1066 */
1067 static void
1068 lang_place_undefineds ()
1069 {
1070   ldlang_undef_chain_list_type *ptr;
1071
1072   for (ptr = ldlang_undef_chain_list_head;
1073        ptr != (ldlang_undef_chain_list_type *) NULL;
1074        ptr = ptr->next)
1075     {
1076       struct bfd_link_hash_entry *h;
1077
1078       h = bfd_link_hash_lookup (link_info.hash, ptr->name, true, false, true);
1079       if (h == (struct bfd_link_hash_entry *) NULL)
1080         einfo ("%P%F: bfd_link_hash_lookup failed: %E");
1081       if (h->type == bfd_link_hash_new)
1082         {
1083           h->type = bfd_link_hash_undefined;
1084           h->u.undef.abfd = NULL;
1085           bfd_link_add_undef (link_info.hash, h);
1086         }
1087     }
1088 }
1089
1090 /* Open input files and attatch to output sections */
1091 static void
1092 map_input_to_output_sections (s, target, output_section_statement)
1093      lang_statement_union_type * s;
1094      CONST char *target;
1095      lang_output_section_statement_type * output_section_statement;
1096 {
1097   for (; s != (lang_statement_union_type *) NULL; s = s->next)
1098     {
1099       switch (s->header.type)
1100         {
1101
1102
1103         case lang_wild_statement_enum:
1104           wild (&s->wild_statement, s->wild_statement.section_name,
1105                 s->wild_statement.filename, target,
1106                 output_section_statement);
1107
1108           break;
1109         case lang_constructors_statement_enum:
1110           map_input_to_output_sections (constructor_list.head,
1111                                         target,
1112                                         output_section_statement);
1113           break;
1114         case lang_output_section_statement_enum:
1115           map_input_to_output_sections (s->output_section_statement.children.head,
1116                                         target,
1117                                         &s->output_section_statement);
1118           break;
1119         case lang_output_statement_enum:
1120           break;
1121         case lang_target_statement_enum:
1122           target = s->target_statement.target;
1123           break;
1124         case lang_group_statement_enum:
1125           map_input_to_output_sections (s->group_statement.children.head,
1126                                         target,
1127                                         output_section_statement);
1128           break;
1129         case lang_fill_statement_enum:
1130         case lang_input_section_enum:
1131         case lang_object_symbols_statement_enum:
1132         case lang_data_statement_enum:
1133         case lang_reloc_statement_enum:
1134         case lang_assignment_statement_enum:
1135         case lang_padding_statement_enum:
1136         case lang_input_statement_enum:
1137           if (output_section_statement != NULL
1138               && output_section_statement->bfd_section == NULL)
1139             init_os (output_section_statement);
1140           break;
1141         case lang_afile_asection_pair_statement_enum:
1142           FAIL ();
1143           break;
1144         case lang_address_statement_enum:
1145           /* Mark the specified section with the supplied address */
1146           {
1147             lang_output_section_statement_type *os =
1148               lang_output_section_statement_lookup
1149                 (s->address_statement.section_name);
1150
1151             if (os->bfd_section == NULL)
1152               init_os (os);
1153             os->addr_tree = s->address_statement.address;
1154           }
1155           break;
1156         }
1157     }
1158 }
1159
1160 static void
1161 print_output_section_statement (output_section_statement)
1162      lang_output_section_statement_type * output_section_statement;
1163 {
1164   asection *section = output_section_statement->bfd_section;
1165
1166   print_nl ();
1167   print_section (output_section_statement->name);
1168
1169
1170   if (section)
1171   {
1172     print_dot = section->vma;
1173     print_space ();
1174     print_section ("");
1175     print_space ();
1176     print_address (section->vma);
1177     print_space ();
1178     print_size (section->_raw_size);
1179     print_space ();
1180     print_size(section->_cooked_size);
1181     print_space ();
1182     print_alignment (section->alignment_power);
1183     print_space ();
1184 #if 0
1185     fprintf (config.map_file, "%s flags", output_section_statement->region->name);
1186     print_flags (stdout, &output_section_statement->flags);
1187 #endif
1188     if (section->flags & SEC_LOAD)
1189      fprintf (config.map_file, "load ");
1190     if (section->flags & SEC_ALLOC)
1191      fprintf (config.map_file, "alloc ");
1192     if (section->flags & SEC_RELOC)
1193      fprintf (config.map_file, "reloc ");
1194     if (section->flags & SEC_HAS_CONTENTS)
1195      fprintf (config.map_file, "contents ");
1196
1197   }
1198   else
1199   {
1200     fprintf (config.map_file, " (no attached output section)");
1201   }
1202   print_nl ();
1203   if (output_section_statement->load_base)
1204     {
1205       int b = exp_get_abs_int(output_section_statement->load_base,
1206                                 0, "output base", lang_final_phase_enum);
1207       fprintf (config.map_file, "Output address   %08x\n", b);
1208     }
1209   if (output_section_statement->section_alignment >= 0
1210       || output_section_statement->section_alignment >= 0) 
1211   {
1212     fprintf (config.map_file, "\t\t\t\t\tforced alignment ");
1213     if (output_section_statement->section_alignment >= 0) 
1214     {
1215       fprintf (config.map_file, "section 2**%d ",output_section_statement->section_alignment );
1216     }
1217     if ( output_section_statement->subsection_alignment >= 0) 
1218     {
1219       fprintf (config.map_file, "subsection 2**%d ",output_section_statement->subsection_alignment );
1220     }
1221   
1222     print_nl ();
1223   }
1224   print_statement (output_section_statement->children.head,
1225                    output_section_statement);
1226
1227 }
1228
1229 static void
1230 print_assignment (assignment, output_section)
1231      lang_assignment_statement_type * assignment;
1232      lang_output_section_statement_type * output_section;
1233 {
1234   etree_value_type result;
1235
1236   print_section ("");
1237   print_space ();
1238   print_section ("");
1239   print_space ();
1240   print_address (print_dot);
1241   print_space ();
1242   result = exp_fold_tree (assignment->exp->assign.src,
1243                           output_section,
1244                           lang_final_phase_enum,
1245                           print_dot,
1246                           &print_dot);
1247
1248   if (result.valid)
1249     {
1250       print_address (result.value);
1251     }
1252   else
1253     {
1254       fprintf (config.map_file, "*undefined*");
1255     }
1256   print_space ();
1257   exp_print_tree (assignment->exp);
1258
1259   fprintf (config.map_file, "\n");
1260 }
1261
1262 static void
1263 print_input_statement (statm)
1264      lang_input_statement_type * statm;
1265 {
1266   if (statm->filename != (char *) NULL)
1267     {
1268       fprintf (config.map_file, "LOAD %s\n", statm->filename);
1269     }
1270 }
1271
1272 /* Print all the defined symbols for the abfd provided by in the supplied
1273    section.
1274 */
1275
1276 static boolean 
1277 print_one_symbol (hash_entry, ptr)
1278 struct  bfd_link_hash_entry *hash_entry;
1279 PTR ptr;
1280 {
1281   asection * sec = (asection *)ptr;
1282
1283   if (hash_entry->type == bfd_link_hash_defined) 
1284     {
1285       if (sec == hash_entry->u.def.section) {
1286         print_section ("");
1287         fprintf (config.map_file, " ");
1288         print_section ("");
1289         fprintf (config.map_file, " ");
1290         print_address (hash_entry->u.def.value + outside_section_address (sec));
1291         fprintf (config.map_file, "              %s", hash_entry->root.string);
1292         print_nl ();
1293       }
1294     }
1295
1296   return true;
1297 }
1298
1299 static void
1300 print_input_section (in)
1301      lang_input_section_type * in;
1302 {
1303   asection *i = in->section;
1304   bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
1305
1306   if (size != 0)
1307     {
1308       print_section ("");
1309       fprintf (config.map_file, " ");
1310       print_section (i->name);
1311       fprintf (config.map_file, " ");
1312       if (i->output_section)
1313         {
1314           print_address (i->output_section->vma + i->output_offset);
1315           fprintf (config.map_file, " ");
1316           print_size (i->_raw_size);
1317           fprintf (config.map_file, " ");
1318           print_size(i->_cooked_size);
1319           fprintf (config.map_file, " ");
1320           print_alignment (i->alignment_power);
1321           fprintf (config.map_file, " ");
1322           if (in->ifile)
1323             {
1324
1325               bfd *abfd = in->ifile->the_bfd;
1326
1327               if (in->ifile->just_syms_flag == true)
1328                 {
1329                   fprintf (config.map_file, "symbols only ");
1330                 }
1331
1332               fprintf (config.map_file, " %s ", abfd->xvec->name);
1333               if (abfd->my_archive != (bfd *) NULL)
1334                 {
1335                   fprintf (config.map_file, "[%s]%s", abfd->my_archive->filename,
1336                            abfd->filename);
1337                 }
1338               else
1339                 {
1340                   fprintf (config.map_file, "%s", abfd->filename);
1341                 }
1342               fprintf (config.map_file, "(overhead %d bytes)", (int) bfd_alloc_size (abfd));
1343               print_nl ();
1344
1345               /* Print all the symbols */
1346               bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
1347             }
1348           else
1349             {
1350               print_nl ();
1351             }
1352
1353
1354           print_dot = outside_section_address (i) + size;
1355         }
1356       else
1357         {
1358           fprintf (config.map_file, "No output section allocated\n");
1359         }
1360     }
1361 }
1362
1363 static void
1364 print_fill_statement (fill)
1365      lang_fill_statement_type * fill;
1366 {
1367   fprintf (config.map_file, "FILL mask ");
1368   print_fill (fill->fill);
1369 }
1370
1371 static void
1372 print_data_statement (data)
1373      lang_data_statement_type * data;
1374 {
1375 /*  bfd_vma value; */
1376   print_section ("");
1377   print_space ();
1378   print_section ("");
1379   print_space ();
1380 /*  ASSERT(print_dot == data->output_vma);*/
1381
1382   print_address (data->output_vma + data->output_section->vma);
1383   print_space ();
1384   print_address (data->value);
1385   print_space ();
1386   switch (data->type)
1387     {
1388     case BYTE:
1389       fprintf (config.map_file, "BYTE ");
1390       print_dot += BYTE_SIZE;
1391       break;
1392     case SHORT:
1393       fprintf (config.map_file, "SHORT ");
1394       print_dot += SHORT_SIZE;
1395       break;
1396     case LONG:
1397       fprintf (config.map_file, "LONG ");
1398       print_dot += LONG_SIZE;
1399       break;
1400     case QUAD:
1401       fprintf (config.map_file, "QUAD ");
1402       print_dot += QUAD_SIZE;
1403       break;
1404     }
1405
1406   exp_print_tree (data->exp);
1407
1408   fprintf (config.map_file, "\n");
1409 }
1410
1411 /* Print a reloc statement.  */
1412
1413 static void
1414 print_reloc_statement (reloc)
1415      lang_reloc_statement_type *reloc;
1416 {
1417   print_section ("");
1418   print_space ();
1419   print_section ("");
1420   print_space ();
1421
1422 /*  ASSERT(print_dot == data->output_vma);*/
1423
1424   print_address (reloc->output_vma + reloc->output_section->vma);
1425   print_space ();
1426   print_address (reloc->addend_value);
1427   print_space ();
1428
1429   fprintf (config.map_file, "RELOC %s ", reloc->howto->name);
1430
1431   print_dot += bfd_get_reloc_size (reloc->howto);
1432
1433   exp_print_tree (reloc->addend_exp);
1434
1435   fprintf (config.map_file, "\n");
1436 }  
1437
1438 static void
1439 print_padding_statement (s)
1440      lang_padding_statement_type * s;
1441 {
1442   print_section ("");
1443   print_space ();
1444   print_section ("*fill*");
1445   print_space ();
1446   print_address (s->output_offset + s->output_section->vma);
1447   print_space ();
1448   print_size (s->size);
1449   print_space ();
1450   print_fill (s->fill);
1451   print_nl ();
1452
1453   print_dot = s->output_offset + s->output_section->vma + s->size;
1454
1455 }
1456
1457 static void
1458 print_wild_statement (w, os)
1459      lang_wild_statement_type * w;
1460      lang_output_section_statement_type * os;
1461 {
1462   fprintf (config.map_file, " from ");
1463   if (w->filename != (char *) NULL)
1464     {
1465       fprintf (config.map_file, "%s", w->filename);
1466     }
1467   else
1468     {
1469       fprintf (config.map_file, "*");
1470     }
1471   if (w->section_name != (char *) NULL)
1472     {
1473       fprintf (config.map_file, "(%s)", w->section_name);
1474     }
1475   else
1476     {
1477       fprintf (config.map_file, "(*)");
1478     }
1479   print_nl ();
1480   print_statement (w->children.head, os);
1481
1482 }
1483
1484 /* Print a group statement.  */
1485
1486 static void
1487 print_group (s, os)
1488      lang_group_statement_type *s;
1489      lang_output_section_statement_type *os;
1490 {
1491   fprintf (config.map_file, "START GROUP\n");
1492   print_statement (s->children.head, os);
1493   fprintf (config.map_file, "END GROUP\n");
1494 }
1495
1496 static void
1497 print_statement (s, os)
1498      lang_statement_union_type * s;
1499      lang_output_section_statement_type * os;
1500 {
1501   while (s)
1502     {
1503       switch (s->header.type)
1504         {
1505           case lang_constructors_statement_enum:
1506           fprintf (config.map_file, "constructors:\n");
1507           print_statement (constructor_list.head, os);
1508           break;
1509         case lang_wild_statement_enum:
1510           print_wild_statement (&s->wild_statement, os);
1511           break;
1512         default:
1513           fprintf (config.map_file, "Fail with %d\n", s->header.type);
1514           FAIL ();
1515           break;
1516         case lang_address_statement_enum:
1517           fprintf (config.map_file, "address\n");
1518           break;
1519         case lang_object_symbols_statement_enum:
1520           fprintf (config.map_file, "object symbols\n");
1521           break;
1522         case lang_fill_statement_enum:
1523           print_fill_statement (&s->fill_statement);
1524           break;
1525         case lang_data_statement_enum:
1526           print_data_statement (&s->data_statement);
1527           break;
1528         case lang_reloc_statement_enum:
1529           print_reloc_statement (&s->reloc_statement);
1530           break;
1531         case lang_input_section_enum:
1532           print_input_section (&s->input_section);
1533           break;
1534         case lang_padding_statement_enum:
1535           print_padding_statement (&s->padding_statement);
1536           break;
1537         case lang_output_section_statement_enum:
1538           print_output_section_statement (&s->output_section_statement);
1539           break;
1540         case lang_assignment_statement_enum:
1541           print_assignment (&s->assignment_statement,
1542                             os);
1543           break;
1544         case lang_target_statement_enum:
1545           fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
1546           break;
1547         case lang_output_statement_enum:
1548           fprintf (config.map_file, "OUTPUT(%s %s)\n",
1549                    s->output_statement.name,
1550                    output_target ? output_target : "");
1551           break;
1552         case lang_input_statement_enum:
1553           print_input_statement (&s->input_statement);
1554           break;
1555         case lang_group_statement_enum:
1556           print_group (&s->group_statement, os);
1557           break;
1558         case lang_afile_asection_pair_statement_enum:
1559           FAIL ();
1560           break;
1561         }
1562       s = s->next;
1563     }
1564 }
1565
1566
1567 static void
1568 print_statements ()
1569 {
1570   print_statement (statement_list.head,
1571                    abs_output_section);
1572
1573 }
1574
1575 static bfd_vma
1576 insert_pad (this_ptr, fill, power, output_section_statement, dot)
1577      lang_statement_union_type ** this_ptr;
1578      fill_type fill;
1579      unsigned int power;
1580      asection * output_section_statement;
1581      bfd_vma dot;
1582 {
1583   /* Align this section first to the
1584      input sections requirement, then
1585      to the output section's requirement.
1586      If this alignment is > than any seen before,
1587      then record it too. Perform the alignment by
1588      inserting a magic 'padding' statement.
1589      */
1590
1591   unsigned int alignment_needed = align_power (dot, power) - dot;
1592
1593   if (alignment_needed != 0)
1594     {
1595       lang_statement_union_type *new =
1596       (lang_statement_union_type *)
1597       stat_alloc ((bfd_size_type) (sizeof (lang_padding_statement_type)));
1598
1599       /* Link into existing chain */
1600       new->header.next = *this_ptr;
1601       *this_ptr = new;
1602       new->header.type = lang_padding_statement_enum;
1603       new->padding_statement.output_section = output_section_statement;
1604       new->padding_statement.output_offset =
1605         dot - output_section_statement->vma;
1606       new->padding_statement.fill = fill;
1607       new->padding_statement.size = alignment_needed;
1608     }
1609
1610
1611   /* Remember the most restrictive alignment */
1612   if (power > output_section_statement->alignment_power)
1613     {
1614       output_section_statement->alignment_power = power;
1615     }
1616   output_section_statement->_raw_size += alignment_needed;
1617   return alignment_needed + dot;
1618
1619 }
1620
1621 /* Work out how much this section will move the dot point */
1622 static bfd_vma
1623 size_input_section (this_ptr, output_section_statement, fill, dot, relax)
1624      lang_statement_union_type ** this_ptr;
1625      lang_output_section_statement_type * output_section_statement;
1626      fill_type fill;
1627      bfd_vma dot;
1628      boolean relax;
1629 {
1630   lang_input_section_type *is = &((*this_ptr)->input_section);
1631   asection *i = is->section;
1632
1633   if (is->ifile->just_syms_flag == false)
1634     {
1635       if (output_section_statement->subsection_alignment != -1)
1636        i->alignment_power =
1637         output_section_statement->subsection_alignment;
1638
1639       dot = insert_pad (this_ptr, fill, i->alignment_power,
1640                         output_section_statement->bfd_section, dot);
1641
1642       /* Remember where in the output section this input section goes */
1643
1644       i->output_offset = dot - output_section_statement->bfd_section->vma;
1645
1646       /* Mark how big the output section must be to contain this now
1647          */
1648       if (i->_cooked_size != 0)
1649         dot += i->_cooked_size;
1650       else
1651         dot += i->_raw_size;
1652       output_section_statement->bfd_section->_raw_size = dot - output_section_statement->bfd_section->vma;
1653     }
1654   else
1655     {
1656       i->output_offset = i->vma - output_section_statement->bfd_section->vma;
1657     }
1658
1659   return dot;
1660 }
1661
1662 /* This variable indicates whether bfd_relax_section should be called
1663    again.  */
1664
1665 static boolean relax_again;
1666
1667 /* Set the sizes for all the output sections.  */
1668
1669 bfd_vma
1670 lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
1671      lang_statement_union_type * s;
1672      lang_output_section_statement_type * output_section_statement;
1673      lang_statement_union_type ** prev;
1674      fill_type fill;
1675      bfd_vma dot;
1676      boolean relax;
1677 {
1678   /* Size up the sections from their constituent parts */
1679   for (; s != (lang_statement_union_type *) NULL; s = s->next)
1680   {
1681     switch (s->header.type)
1682     {
1683
1684      case lang_output_section_statement_enum:
1685      {
1686        bfd_vma after;
1687        lang_output_section_statement_type *os = &s->output_section_statement;
1688
1689        if (os->bfd_section == NULL)
1690          {
1691            /* This section was never actually created.  */
1692            break;
1693          }
1694
1695        /* If this is a COFF shared library section, use the size and
1696           address from the input section.  FIXME: This is COFF
1697           specific; it would be cleaner if there were some other way
1698           to do this, but nothing simple comes to mind.  */
1699        if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
1700          {
1701            asection *input;
1702
1703            if (os->children.head == NULL
1704                || os->children.head->next != NULL
1705                || os->children.head->header.type != lang_input_section_enum)
1706              einfo ("%P%X: Internal error on COFF shared library section %s",
1707                     os->name);
1708
1709            input = os->children.head->input_section.section;
1710            bfd_set_section_vma (os->bfd_section->owner,
1711                                 os->bfd_section,
1712                                 bfd_section_vma (input->owner, input));
1713            os->bfd_section->_raw_size = input->_raw_size;
1714            break;
1715          }
1716
1717        if (bfd_is_abs_section (os->bfd_section))
1718        {
1719          /* No matter what happens, an abs section starts at zero */
1720          ASSERT (os->bfd_section->vma == 0);
1721        }
1722        else
1723        {
1724          if (os->addr_tree == (etree_type *) NULL)
1725          {
1726            /* No address specified for this section, get one
1727               from the region specification
1728               */
1729            if (os->region == (lang_memory_region_type *) NULL)
1730            {
1731              os->region = lang_memory_region_lookup ("*default*");
1732            }
1733            dot = os->region->current;
1734            if (os->section_alignment == -1)
1735              dot = align_power (dot, os->bfd_section->alignment_power);
1736          }
1737          else
1738          {
1739            etree_value_type r;
1740
1741            r = exp_fold_tree (os->addr_tree,
1742                               abs_output_section,
1743                               lang_allocating_phase_enum,
1744                               dot, &dot);
1745            if (r.valid == false)
1746            {
1747              einfo ("%F%S: non constant address expression for section %s\n",
1748                     os->name);
1749            }
1750            dot = r.value;
1751          }
1752          /* The section starts here */
1753          /* First, align to what the section needs */
1754
1755          if (os->section_alignment != -1)
1756            dot = align_power (dot, os->section_alignment);
1757
1758          bfd_set_section_vma (0, os->bfd_section, dot);
1759          
1760          os->bfd_section->output_offset = 0;
1761        }
1762
1763        (void) lang_size_sections (os->children.head, os, &os->children.head,
1764                                   os->fill, dot, relax);
1765        /* Ignore the size of the input sections, use the vma and size to */
1766        /* align against */
1767
1768        after = ALIGN_N (os->bfd_section->vma +
1769                         os->bfd_section->_raw_size,
1770                         /* The coercion here is important, see ld.h.  */
1771                         (bfd_vma) os->block_value);
1772
1773        if (bfd_is_abs_section (os->bfd_section))
1774          ASSERT (after == os->bfd_section->vma);
1775        else
1776          os->bfd_section->_raw_size = after - os->bfd_section->vma;
1777        dot = os->bfd_section->vma + os->bfd_section->_raw_size;
1778        os->processed = true;
1779
1780        /* Replace into region ? */
1781        if (os->region != (lang_memory_region_type *) NULL)
1782        {
1783          os->region->current = dot;
1784          /* Make sure this isn't silly */
1785          if (( os->region->current
1786               > os->region->origin + os->region->length)
1787              || ( os->region->origin > os->region->current ))
1788            {
1789              einfo ("%X%P: region %s is full (%B section %s)\n",
1790                     os->region->name,
1791                     os->bfd_section->owner,
1792                     os->bfd_section->name);
1793              /* Reset the region pointer */
1794              os->region->current = 0;
1795
1796            }
1797
1798        }
1799
1800
1801      }
1802
1803       break;
1804      case lang_constructors_statement_enum:
1805       dot = lang_size_sections (constructor_list.head,
1806                                 output_section_statement,
1807                                 &s->wild_statement.children.head,
1808                                 fill,
1809                                 dot, relax);
1810       break;
1811
1812      case lang_data_statement_enum:
1813      {
1814        unsigned int size = 0;
1815
1816        s->data_statement.output_vma = dot - output_section_statement->bfd_section->vma;
1817        s->data_statement.output_section =
1818         output_section_statement->bfd_section;
1819
1820        switch (s->data_statement.type)
1821        {
1822         case QUAD:
1823          size = QUAD_SIZE;
1824          break;
1825         case LONG:
1826          size = LONG_SIZE;
1827          break;
1828         case SHORT:
1829          size = SHORT_SIZE;
1830          break;
1831         case BYTE:
1832          size = BYTE_SIZE;
1833          break;
1834
1835        }
1836        dot += size;
1837        output_section_statement->bfd_section->_raw_size += size;
1838      }
1839       break;
1840
1841      case lang_reloc_statement_enum:
1842      {
1843        int size;
1844
1845        s->reloc_statement.output_vma =
1846          dot - output_section_statement->bfd_section->vma;
1847        s->reloc_statement.output_section =
1848          output_section_statement->bfd_section;
1849        size = bfd_get_reloc_size (s->reloc_statement.howto);
1850        dot += size;
1851        output_section_statement->bfd_section->_raw_size += size;
1852      }
1853      break;
1854      
1855      case lang_wild_statement_enum:
1856
1857       dot = lang_size_sections (s->wild_statement.children.head,
1858                                 output_section_statement,
1859                                 &s->wild_statement.children.head,
1860
1861                                 fill, dot, relax);
1862
1863       break;
1864
1865      case lang_object_symbols_statement_enum:
1866       link_info.create_object_symbols_section =
1867         output_section_statement->bfd_section;
1868       break;
1869      case lang_output_statement_enum:
1870      case lang_target_statement_enum:
1871       break;
1872      case lang_input_section_enum:
1873       {
1874         asection *i;
1875
1876         i = (*prev)->input_section.section;
1877         if (! relax)
1878           i->_cooked_size = i->_raw_size;
1879         else
1880           {
1881             boolean again;
1882
1883             if (! bfd_relax_section (i->owner, i, &link_info, &again))
1884               einfo ("%P%F: can't relax section: %E\n");
1885             if (again)
1886               relax_again = true;
1887           }
1888         dot = size_input_section (prev,
1889                                   output_section_statement,
1890                                   output_section_statement->fill,
1891                                   dot, relax);
1892       }
1893       break;
1894      case lang_input_statement_enum:
1895       break;
1896      case lang_fill_statement_enum:
1897       s->fill_statement.output_section = output_section_statement->bfd_section;
1898
1899       fill = s->fill_statement.fill;
1900       break;
1901      case lang_assignment_statement_enum:
1902      {
1903        bfd_vma newdot = dot;
1904
1905        exp_fold_tree (s->assignment_statement.exp,
1906                       output_section_statement,
1907                       lang_allocating_phase_enum,
1908                       dot,
1909                       &newdot);
1910
1911        if (newdot != dot && !relax)
1912          {
1913            /* The assignment changed dot.  Insert a pad.  */
1914            if (output_section_statement == abs_output_section)
1915              {
1916                /* If we don't have an output section, then just adjust
1917                   the default memory address.  */
1918                lang_memory_region_lookup ("*default*")->current = newdot;
1919              }
1920            else
1921              {
1922                lang_statement_union_type *new =
1923                  ((lang_statement_union_type *)
1924                   stat_alloc (sizeof (lang_padding_statement_type)));
1925
1926                /* Link into existing chain */
1927                new->header.next = *prev;
1928                *prev = new;
1929                new->header.type = lang_padding_statement_enum;
1930                new->padding_statement.output_section =
1931                  output_section_statement->bfd_section;
1932                new->padding_statement.output_offset =
1933                  dot - output_section_statement->bfd_section->vma;
1934                new->padding_statement.fill = fill;
1935                new->padding_statement.size = newdot - dot;
1936                output_section_statement->bfd_section->_raw_size +=
1937                  new->padding_statement.size;
1938              }
1939
1940            dot = newdot;
1941          }
1942      }
1943      break;
1944
1945    case lang_padding_statement_enum:
1946      /* If we are relaxing, and this is not the first pass, some
1947         padding statements may have been inserted during previous
1948         passes.  We may have to move the padding statement to a new
1949         location if dot has a different value at this point in this
1950         pass than it did at this point in the previous pass.  */
1951      s->padding_statement.output_offset =
1952        dot - output_section_statement->bfd_section->vma;
1953      dot += s->padding_statement.size;
1954      break;
1955
1956      case lang_group_statement_enum:
1957        dot = lang_size_sections (s->group_statement.children.head,
1958                                  output_section_statement,
1959                                  &s->group_statement.children.head,
1960                                  fill, dot, relax);
1961        break;
1962
1963      default:
1964       FAIL ();
1965       break;
1966
1967       /* This can only get here when relaxing is turned on */
1968
1969      case lang_address_statement_enum:
1970       break;
1971     }
1972     prev = &s->header.next;
1973   }
1974   return dot;
1975 }
1976
1977 bfd_vma
1978 lang_do_assignments (s, output_section_statement, fill, dot)
1979      lang_statement_union_type * s;
1980      lang_output_section_statement_type * output_section_statement;
1981      fill_type fill;
1982      bfd_vma dot;
1983 {
1984   for (; s != (lang_statement_union_type *) NULL; s = s->next)
1985     {
1986       switch (s->header.type)
1987         {
1988         case lang_constructors_statement_enum:
1989           dot = lang_do_assignments (constructor_list.head,
1990                                      output_section_statement,
1991                                      fill,
1992                                      dot);
1993           break;
1994
1995         case lang_output_section_statement_enum:
1996           {
1997             lang_output_section_statement_type *os =
1998               &(s->output_section_statement);
1999
2000             if (os->bfd_section != NULL)
2001               {
2002                 dot = os->bfd_section->vma;
2003                 (void) lang_do_assignments (os->children.head, os,
2004                                             os->fill, dot);
2005                 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
2006               }
2007             if (os->load_base) 
2008               {
2009                 /* If nothing has been placed into the output section then
2010                    it won't have a bfd_section. */
2011                 if (os->bfd_section) 
2012                   {
2013                     os->bfd_section->lma 
2014                       = exp_get_abs_int(os->load_base, 0,"load base", lang_final_phase_enum);
2015                   }
2016               }
2017           }
2018           break;
2019         case lang_wild_statement_enum:
2020
2021           dot = lang_do_assignments (s->wild_statement.children.head,
2022                                      output_section_statement,
2023                                      fill, dot);
2024
2025           break;
2026
2027         case lang_object_symbols_statement_enum:
2028         case lang_output_statement_enum:
2029         case lang_target_statement_enum:
2030 #if 0
2031         case lang_common_statement_enum:
2032 #endif
2033           break;
2034         case lang_data_statement_enum:
2035           {
2036             etree_value_type value;
2037
2038             value = exp_fold_tree (s->data_statement.exp,
2039                                    abs_output_section,
2040                                    lang_final_phase_enum, dot, &dot);
2041             s->data_statement.value = value.value;
2042             if (value.valid == false)
2043               einfo ("%F%P: invalid data statement\n");
2044           }
2045           switch (s->data_statement.type)
2046             {
2047             case QUAD:
2048               dot += QUAD_SIZE;
2049               break;
2050             case LONG:
2051               dot += LONG_SIZE;
2052               break;
2053             case SHORT:
2054               dot += SHORT_SIZE;
2055               break;
2056             case BYTE:
2057               dot += BYTE_SIZE;
2058               break;
2059             }
2060           break;
2061
2062         case lang_reloc_statement_enum:
2063           {
2064             etree_value_type value;
2065
2066             value = exp_fold_tree (s->reloc_statement.addend_exp,
2067                                    abs_output_section,
2068                                    lang_final_phase_enum, dot, &dot);
2069             s->reloc_statement.addend_value = value.value;
2070             if (value.valid == false)
2071               einfo ("%F%P: invalid reloc statement\n");
2072           }
2073           dot += bfd_get_reloc_size (s->reloc_statement.howto);
2074           break;
2075
2076         case lang_input_section_enum:
2077           {
2078             asection *in = s->input_section.section;
2079
2080             if (in->_cooked_size != 0)
2081               dot += in->_cooked_size;
2082             else
2083               dot += in->_raw_size;
2084           }
2085           break;
2086
2087         case lang_input_statement_enum:
2088           break;
2089         case lang_fill_statement_enum:
2090           fill = s->fill_statement.fill;
2091           break;
2092         case lang_assignment_statement_enum:
2093           {
2094             exp_fold_tree (s->assignment_statement.exp,
2095                            output_section_statement,
2096                            lang_final_phase_enum,
2097                            dot,
2098                            &dot);
2099           }
2100
2101           break;
2102         case lang_padding_statement_enum:
2103           dot += s->padding_statement.size;
2104           break;
2105
2106         case lang_group_statement_enum:
2107           dot = lang_do_assignments (s->group_statement.children.head,
2108                                      output_section_statement,
2109                                      fill, dot);
2110
2111           break;
2112
2113         default:
2114           FAIL ();
2115           break;
2116         case lang_address_statement_enum:
2117           break;
2118         }
2119
2120     }
2121   return dot;
2122 }
2123
2124 static void
2125 lang_finish ()
2126 {
2127   struct bfd_link_hash_entry *h;
2128   boolean warn = link_info.relocateable ? false : true;
2129
2130   if (entry_symbol == (char *) NULL)
2131     {
2132       /* No entry has been specified.  Look for start, but don't warn
2133          if we don't find it.  */
2134       entry_symbol = "start";
2135       warn = false;
2136     }
2137
2138   h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true);
2139   if (h != (struct bfd_link_hash_entry *) NULL
2140       && h->type == bfd_link_hash_defined)
2141     {
2142       bfd_vma val;
2143
2144       val = (h->u.def.value
2145              + bfd_get_section_vma (output_bfd,
2146                                     h->u.def.section->output_section)
2147              + h->u.def.section->output_offset);
2148       if (! bfd_set_start_address (output_bfd, val))
2149         einfo ("%P%F:%s: can't set start address\n", entry_symbol);
2150     }
2151   else
2152     {
2153       asection *ts;
2154
2155       /* Can't find the entry symbol.  Use the first address in the
2156          text section.  */
2157       ts = bfd_get_section_by_name (output_bfd, ".text");
2158       if (ts != (asection *) NULL)
2159         {
2160           if (warn)
2161             einfo ("%P: warning: cannot find entry symbol %s; defaulting to %V\n",
2162                    entry_symbol, bfd_get_section_vma (output_bfd, ts));
2163           if (! bfd_set_start_address (output_bfd,
2164                                        bfd_get_section_vma (output_bfd, ts)))
2165             einfo ("%P%F: can't set start address\n");
2166         }
2167       else
2168         {
2169           if (warn)
2170             einfo ("%P: warning: cannot find entry symbol %s; not setting start address\n",
2171                    entry_symbol);
2172         }
2173     }
2174 }
2175
2176 /* Check that the architecture of all the input files is compatible
2177    with the output file.  */
2178
2179 static void
2180 lang_check ()
2181 {
2182   lang_statement_union_type *file;
2183   bfd *input_bfd;
2184   CONST bfd_arch_info_type *compatible;
2185
2186   for (file = file_chain.head;
2187        file != (lang_statement_union_type *) NULL;
2188        file = file->input_statement.next)
2189     {
2190       input_bfd = file->input_statement.the_bfd;
2191       compatible = bfd_arch_get_compatible (input_bfd,
2192                                             output_bfd);
2193       if (compatible == NULL)
2194         einfo ("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n",
2195                bfd_printable_name (input_bfd), input_bfd,
2196                bfd_printable_name (output_bfd));
2197     }
2198 }
2199
2200 /* Look through all the global common symbols and attach them to the
2201    correct section.  The -sort-common command line switch may be used
2202    to roughly sort the entries by size.  */
2203
2204 static void
2205 lang_common ()
2206 {
2207   if (link_info.relocateable
2208       && ! command_line.force_common_definition)
2209     return;
2210
2211   if (! config.sort_common)
2212     bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
2213   else
2214     {
2215       unsigned int power;
2216
2217       for (power = 1; power < 4; power++)
2218         bfd_link_hash_traverse (link_info.hash, lang_one_common,
2219                                 (PTR) &power);
2220     }
2221 }
2222
2223 /* Place one common symbol in the correct section.  */
2224
2225 static boolean
2226 lang_one_common (h, info)
2227      struct bfd_link_hash_entry *h;
2228      PTR info;
2229 {
2230   unsigned int power_of_two;
2231   bfd_vma size;
2232   asection *section;
2233
2234   if (h->type != bfd_link_hash_common)
2235     return true;
2236
2237   size = h->u.c.size;
2238   power_of_two = h->u.c.alignment_power;
2239
2240   if (config.sort_common
2241       && power_of_two < *(unsigned int *) info
2242       && *(unsigned int *) info < 4)
2243     return true;
2244
2245   section = h->u.c.section;
2246
2247   /* Increase the size of the section.  */
2248   section->_raw_size = ALIGN_N (section->_raw_size,
2249                                 (bfd_size_type) (1 << power_of_two));
2250
2251   /* Adjust the alignment if necessary.  */
2252   if (power_of_two > section->alignment_power)
2253     section->alignment_power = power_of_two;
2254
2255   /* Change the symbol from common to defined.  */
2256   h->type = bfd_link_hash_defined;
2257   h->u.def.section = section;
2258   h->u.def.value = section->_raw_size;
2259
2260   /* Increase the size of the section.  */
2261   section->_raw_size += size;
2262
2263   /* Make sure the section is allocated in memory.  */
2264   section->flags |= SEC_ALLOC;
2265
2266   if (config.map_file != NULL)
2267     fprintf (config.map_file, "Allocating common %s: %lx at %lx %s\n",
2268              h->root.string, (unsigned long) size,
2269              (unsigned long) h->u.def.value, section->owner->filename);
2270
2271   return true;
2272 }
2273
2274 /*
2275 run through the input files and ensure that every input
2276 section has somewhere to go. If one is found without
2277 a destination then create an input request and place it
2278 into the statement tree.
2279 */
2280
2281 static void
2282 lang_place_orphans ()
2283 {
2284   lang_input_statement_type *file;
2285
2286   for (file = (lang_input_statement_type *) file_chain.head;
2287        file != (lang_input_statement_type *) NULL;
2288        file = (lang_input_statement_type *) file->next)
2289     {
2290       asection *s;
2291
2292       if (file->just_syms_flag)
2293         continue;
2294
2295       for (s = file->the_bfd->sections;
2296            s != (asection *) NULL;
2297            s = s->next)
2298         {
2299           if (s->output_section == (asection *) NULL)
2300             {
2301               /* This section of the file is not attatched, root
2302                  around for a sensible place for it to go */
2303
2304               if (file->common_section == s)
2305                 {
2306                   /* This is a lonely common section which must
2307                      have come from an archive. We attatch to the
2308                      section with the wildcard  */
2309                   if (! link_info.relocateable
2310                       && ! command_line.force_common_definition)
2311                     {
2312                       if (default_common_section ==
2313                           (lang_output_section_statement_type *) NULL)
2314                         {
2315                           info_msg ("%P: no [COMMON] command, defaulting to .bss\n");
2316
2317                           default_common_section =
2318                             lang_output_section_statement_lookup (".bss");
2319
2320                         }
2321                       wild_doit (&default_common_section->children, s,
2322                                  default_common_section, file);
2323                     }
2324                 }
2325               else if (ldemul_place_orphan (file, s))
2326                 ;
2327               else
2328                 {
2329                   lang_output_section_statement_type *os =
2330                   lang_output_section_statement_lookup (s->name);
2331
2332                   wild_doit (&os->children, s, os, file);
2333                 }
2334             }
2335         }
2336     }
2337 }
2338
2339
2340 void
2341 lang_set_flags (ptr, flags)
2342      int *ptr;
2343      CONST char *flags;
2344 {
2345   boolean state = false;
2346
2347   *ptr = 0;
2348   while (*flags)
2349     {
2350       if (*flags == '!')
2351         {
2352           state = false;
2353           flags++;
2354         }
2355       else
2356         state = true;
2357       switch (*flags)
2358         {
2359         case 'R':
2360           /*      ptr->flag_read = state; */
2361           break;
2362         case 'W':
2363           /*      ptr->flag_write = state; */
2364           break;
2365         case 'X':
2366           /*      ptr->flag_executable= state;*/
2367           break;
2368         case 'L':
2369         case 'I':
2370           /*      ptr->flag_loadable= state;*/
2371           break;
2372         default:
2373           einfo ("%P%F: invalid syntax in flags\n");
2374           break;
2375         }
2376       flags++;
2377     }
2378 }
2379
2380 /* Call a function on each input file.  This function will be called
2381    on an archive, but not on the elements.  */
2382
2383 void
2384 lang_for_each_input_file (func)
2385      void (*func) PARAMS ((lang_input_statement_type *));
2386 {
2387   lang_input_statement_type *f;
2388
2389   for (f = (lang_input_statement_type *) input_file_chain.head;
2390        f != NULL;
2391        f = (lang_input_statement_type *) f->next_real_file)
2392     func (f);
2393 }
2394
2395 /* Call a function on each file.  The function will be called on all
2396    the elements of an archive which are included in the link, but will
2397    not be called on the archive file itself.  */
2398
2399 void
2400 lang_for_each_file (func)
2401      void (*func) PARAMS ((lang_input_statement_type *));
2402 {
2403   lang_input_statement_type *f;
2404
2405   for (f = (lang_input_statement_type *) file_chain.head;
2406        f != (lang_input_statement_type *) NULL;
2407        f = (lang_input_statement_type *) f->next)
2408     {
2409       func (f);
2410     }
2411 }
2412
2413 #if 0
2414
2415 /* Not used.  */
2416
2417 void
2418 lang_for_each_input_section (func)
2419      void (*func) PARAMS ((bfd * ab, asection * as));
2420 {
2421   lang_input_statement_type *f;
2422
2423   for (f = (lang_input_statement_type *) file_chain.head;
2424        f != (lang_input_statement_type *) NULL;
2425        f = (lang_input_statement_type *) f->next)
2426     {
2427       asection *s;
2428
2429       for (s = f->the_bfd->sections;
2430            s != (asection *) NULL;
2431            s = s->next)
2432         {
2433           func (f->the_bfd, s);
2434         }
2435     }
2436 }
2437
2438 #endif
2439
2440 void
2441 ldlang_add_file (entry)
2442      lang_input_statement_type * entry;
2443 {
2444   bfd **pp;
2445
2446   lang_statement_append (&file_chain,
2447                          (lang_statement_union_type *) entry,
2448                          &entry->next);
2449
2450   /* The BFD linker needs to have a list of all input BFDs involved in
2451      a link.  */
2452   ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
2453   ASSERT (entry->the_bfd != output_bfd);
2454   for (pp = &link_info.input_bfds;
2455        *pp != (bfd *) NULL;
2456        pp = &(*pp)->link_next)
2457     ;
2458   *pp = entry->the_bfd;
2459   entry->the_bfd->usrdata = (PTR) entry;
2460   bfd_set_gp_size (entry->the_bfd, g_switch_value);
2461 }
2462
2463 void
2464 lang_add_output (name, from_script)
2465      CONST char *name;
2466      int from_script;
2467 {
2468   /* Make -o on command line override OUTPUT in script.  */
2469   if (had_output_filename == false || !from_script)
2470     {
2471       output_filename = name;
2472       had_output_filename = true;
2473     }
2474 }
2475
2476
2477 static lang_output_section_statement_type *current_section;
2478
2479 static int topower(x)
2480      int x;
2481 {
2482   unsigned  int i = 1;
2483   int l;
2484   if (x < 0) return -1;
2485   for (l = 0; l < 32; l++) 
2486   {
2487     if (i >= x) return l;
2488     i<<=1;
2489   }
2490   return 0;
2491 }
2492 void
2493 lang_enter_output_section_statement (output_section_statement_name,
2494                                      address_exp, flags, block_value,
2495                                      align, subalign, ebase)
2496      const char *output_section_statement_name;
2497      etree_type * address_exp;
2498      int flags;
2499      bfd_vma block_value;
2500      etree_type *align;
2501      etree_type *subalign;
2502      etree_type *ebase;
2503 {
2504   lang_output_section_statement_type *os;
2505
2506   current_section =
2507    os =
2508     lang_output_section_statement_lookup (output_section_statement_name);
2509
2510
2511
2512   /* Add this statement to tree */
2513   /*  add_statement(lang_output_section_statement_enum,
2514       output_section_statement);*/
2515   /* Make next things chain into subchain of this */
2516
2517   if (os->addr_tree ==
2518       (etree_type *) NULL)
2519   {
2520     os->addr_tree =
2521      address_exp;
2522   }
2523   os->flags = flags;
2524   if (flags & SEC_NEVER_LOAD)
2525    os->loadable = 0;
2526   else
2527    os->loadable = 1;
2528   os->block_value = block_value ? block_value : 1;
2529   stat_ptr = &os->children;
2530
2531   os->subsection_alignment = topower(
2532    exp_get_value_int(subalign, -1,
2533                      "subsection alignment",
2534                      0));
2535   os->section_alignment = topower(
2536    exp_get_value_int(align, -1,
2537                      "section alignment", 0));
2538
2539   os->load_base = ebase;
2540 }
2541
2542
2543 void
2544 lang_final ()
2545 {
2546   lang_output_statement_type *new =
2547     new_stat (lang_output_statement, stat_ptr);
2548
2549   new->name = output_filename;
2550 }
2551
2552 /* Reset the current counters in the regions */
2553 static void
2554 reset_memory_regions ()
2555 {
2556   lang_memory_region_type *p = lang_memory_region_list;
2557
2558   for (p = lang_memory_region_list;
2559        p != (lang_memory_region_type *) NULL;
2560        p = p->next)
2561     {
2562       p->old_length = (bfd_size_type) (p->current - p->origin);
2563       p->current = p->origin;
2564     }
2565 }
2566
2567 void
2568 lang_process ()
2569 {
2570   lang_reasonable_defaults ();
2571   current_target = default_target;
2572
2573   lang_for_each_statement (ldlang_open_output); /* Open the output file */
2574
2575   ldemul_create_output_section_statements ();
2576
2577   /* Add to the hash table all undefineds on the command line */
2578   lang_place_undefineds ();
2579
2580   /* Create a bfd for each input file */
2581   current_target = default_target;
2582   open_input_bfds (statement_list.head, false);
2583
2584   /* Build all sets based on the information gathered from the input
2585      files.  */
2586   ldctor_build_sets ();
2587
2588   /* Size up the common data */
2589   lang_common ();
2590
2591   /* Run through the contours of the script and attatch input sections
2592      to the correct output sections
2593      */
2594   map_input_to_output_sections (statement_list.head, (char *) NULL,
2595                                 (lang_output_section_statement_type *) NULL);
2596
2597
2598   /* Find any sections not attatched explicitly and handle them */
2599   lang_place_orphans ();
2600
2601   ldemul_before_allocation ();
2602
2603   /* Now run around and relax if we can */
2604   if (command_line.relax)
2605     {
2606       /* First time round is a trial run to get the 'worst case'
2607          addresses of the objects if there was no relaxing.  */
2608       lang_size_sections (statement_list.head,
2609                           abs_output_section,
2610                           &(statement_list.head), 0, (bfd_vma) 0, false);
2611
2612
2613       reset_memory_regions ();
2614
2615       /* Keep relaxing until bfd_relax_section gives up.  */
2616       do
2617         {
2618           relax_again = false;
2619
2620           /* Do all the assignments with our current guesses as to
2621              section sizes.  */
2622           lang_do_assignments (statement_list.head,
2623                                abs_output_section,
2624                                (fill_type) 0, (bfd_vma) 0);
2625
2626           /* Perform another relax pass - this time we know where the
2627              globals are, so can make better guess.  */
2628           lang_size_sections (statement_list.head,
2629                               abs_output_section,
2630                               &(statement_list.head), 0, (bfd_vma) 0, true);
2631         }
2632       while (relax_again);
2633     }
2634   else
2635     {
2636       /* Size up the sections.  */
2637       lang_size_sections (statement_list.head,
2638                           abs_output_section,
2639                           &(statement_list.head), 0, (bfd_vma) 0, false);
2640     }
2641
2642   /* See if anything special should be done now we know how big
2643      everything is.  */
2644   ldemul_after_allocation ();
2645
2646   /* Do all the assignments, now that we know the final restingplaces
2647      of all the symbols */
2648
2649   lang_do_assignments (statement_list.head,
2650                        abs_output_section,
2651                        (fill_type) 0, (bfd_vma) 0);
2652
2653   /* Make sure that we're not mixing architectures */
2654
2655   lang_check ();
2656
2657   /* Final stuffs */
2658
2659   ldemul_finish ();
2660   lang_finish ();
2661 }
2662
2663 /* EXPORTED TO YACC */
2664
2665 void
2666 lang_add_wild (section_name, filename)
2667      CONST char *CONST section_name;
2668      CONST char *CONST filename;
2669 {
2670   lang_wild_statement_type *new = new_stat (lang_wild_statement,
2671                                             stat_ptr);
2672
2673   if (section_name != (char *) NULL && strcmp (section_name, "COMMON") == 0)
2674     {
2675       placed_commons = true;
2676     }
2677   if (filename != (char *) NULL)
2678     {
2679       lang_has_input_file = true;
2680     }
2681   new->section_name = section_name;
2682   new->filename = filename;
2683   lang_list_init (&new->children);
2684 }
2685
2686 void
2687 lang_section_start (name, address)
2688      CONST char *name;
2689      etree_type * address;
2690 {
2691   lang_address_statement_type *ad = new_stat (lang_address_statement, stat_ptr);
2692
2693   ad->section_name = name;
2694   ad->address = address;
2695 }
2696
2697 /* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
2698    because of a -e argument on the command line, or zero if this is
2699    called by ENTRY in a linker script.  Command line arguments take
2700    precedence.  */
2701
2702 void
2703 lang_add_entry (name, cmdline)
2704      CONST char *name;
2705      int cmdline;
2706 {
2707   static int from_cmdline;
2708
2709   if (entry_symbol == NULL
2710       || cmdline
2711       || ! from_cmdline)
2712     {
2713       entry_symbol = name;
2714       from_cmdline = cmdline;
2715     }
2716 }
2717
2718 void
2719 lang_add_target (name)
2720      CONST char *name;
2721 {
2722   lang_target_statement_type *new = new_stat (lang_target_statement,
2723                                               stat_ptr);
2724
2725   new->target = name;
2726
2727 }
2728
2729 void
2730 lang_add_map (name)
2731      CONST char *name;
2732 {
2733   while (*name)
2734     {
2735       switch (*name)
2736         {
2737           case 'F':
2738           map_option_f = true;
2739           break;
2740         }
2741       name++;
2742     }
2743 }
2744
2745 void
2746 lang_add_fill (exp)
2747      int exp;
2748 {
2749   lang_fill_statement_type *new = new_stat (lang_fill_statement,
2750                                             stat_ptr);
2751
2752   new->fill = exp;
2753 }
2754
2755 void
2756 lang_add_data (type, exp)
2757      int type;
2758      union etree_union *exp;
2759 {
2760
2761   lang_data_statement_type *new = new_stat (lang_data_statement,
2762                                             stat_ptr);
2763
2764   new->exp = exp;
2765   new->type = type;
2766
2767 }
2768
2769 /* Create a new reloc statement.  RELOC is the BFD relocation type to
2770    generate.  HOWTO is the corresponding howto structure (we could
2771    look this up, but the caller has already done so).  SECTION is the
2772    section to generate a reloc against, or NAME is the name of the
2773    symbol to generate a reloc against.  Exactly one of SECTION and
2774    NAME must be NULL.  ADDEND is an expression for the addend.  */
2775
2776 void
2777 lang_add_reloc (reloc, howto, section, name, addend)
2778      bfd_reloc_code_real_type reloc;
2779      const reloc_howto_type *howto;
2780      asection *section;
2781      const char *name;
2782      union etree_union *addend;
2783 {
2784   lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
2785   
2786   p->reloc = reloc;
2787   p->howto = howto;
2788   p->section = section;
2789   p->name = name;
2790   p->addend_exp = addend;
2791
2792   p->addend_value = 0;
2793   p->output_section = NULL;
2794   p->output_vma = 0;
2795 }
2796
2797 void
2798 lang_add_assignment (exp)
2799      etree_type * exp;
2800 {
2801   lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
2802                                                   stat_ptr);
2803
2804   new->exp = exp;
2805 }
2806
2807 void
2808 lang_add_attribute (attribute)
2809      enum statement_enum attribute;
2810 {
2811   new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
2812 }
2813
2814 void
2815 lang_startup (name)
2816      CONST char *name;
2817 {
2818   if (startup_file != (char *) NULL)
2819     {
2820       einfo ("%P%Fmultiple STARTUP files\n");
2821     }
2822   first_file->filename = name;
2823   first_file->local_sym_name = name;
2824   first_file->real = true;
2825
2826   startup_file = name;
2827 }
2828
2829 void
2830 lang_float (maybe)
2831      boolean maybe;
2832 {
2833   lang_float_flag = maybe;
2834 }
2835
2836 void
2837 lang_leave_output_section_statement (fill, memspec)
2838      bfd_vma fill;
2839      CONST char *memspec;
2840 {
2841   current_section->fill = fill;
2842   current_section->region = lang_memory_region_lookup (memspec);
2843   stat_ptr = &statement_list;
2844 }
2845
2846 /*
2847  Create an absolute symbol with the given name with the value of the
2848  address of first byte of the section named.
2849
2850  If the symbol already exists, then do nothing.
2851 */
2852 void
2853 lang_abs_symbol_at_beginning_of (secname, name)
2854      const char *secname;
2855      const char *name;
2856 {
2857   struct bfd_link_hash_entry *h;
2858
2859   h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
2860   if (h == (struct bfd_link_hash_entry *) NULL)
2861     einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
2862
2863   if (h->type == bfd_link_hash_new
2864       || h->type == bfd_link_hash_undefined)
2865     {
2866       asection *sec;
2867
2868       h->type = bfd_link_hash_defined;
2869
2870       sec = bfd_get_section_by_name (output_bfd, secname);
2871       if (sec == (asection *) NULL)
2872         h->u.def.value = 0;
2873       else
2874         h->u.def.value = bfd_get_section_vma (output_bfd, sec);
2875
2876       h->u.def.section = bfd_abs_section_ptr;
2877     }
2878 }
2879
2880 /*
2881  Create an absolute symbol with the given name with the value of the
2882  address of the first byte after the end of the section named.
2883
2884  If the symbol already exists, then do nothing.
2885 */
2886 void
2887 lang_abs_symbol_at_end_of (secname, name)
2888      const char *secname;
2889      const char *name;
2890 {
2891   struct bfd_link_hash_entry *h;
2892
2893   h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
2894   if (h == (struct bfd_link_hash_entry *) NULL)
2895     einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
2896
2897   if (h->type == bfd_link_hash_new
2898       || h->type == bfd_link_hash_undefined)
2899     {
2900       asection *sec;
2901
2902       h->type = bfd_link_hash_defined;
2903
2904       sec = bfd_get_section_by_name (output_bfd, secname);
2905       if (sec == (asection *) NULL)
2906         h->u.def.value = 0;
2907       else
2908         h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
2909                           + bfd_section_size (output_bfd, sec));
2910
2911       h->u.def.section = bfd_abs_section_ptr;
2912     }
2913 }
2914
2915 void
2916 lang_statement_append (list, element, field)
2917      lang_statement_list_type * list;
2918      lang_statement_union_type * element;
2919      lang_statement_union_type ** field;
2920 {
2921   *(list->tail) = element;
2922   list->tail = field;
2923 }
2924
2925 /* Set the output format type.  -oformat overrides scripts.  */
2926
2927 void
2928 lang_add_output_format (format, big, little, from_script)
2929      const char *format;
2930      const char *big;
2931      const char *little;
2932      int from_script;
2933 {
2934   if (output_target == NULL || !from_script)
2935     {
2936       if (command_line.endian == ENDIAN_BIG
2937           && big != NULL)
2938         format = big;
2939       else if (command_line.endian == ENDIAN_LITTLE
2940                && little != NULL)
2941         format = little;
2942
2943       output_target = format;
2944     }
2945 }
2946
2947 /* Enter a group.  This creates a new lang_group_statement, and sets
2948    stat_ptr to build new statements within the group.  */
2949
2950 void
2951 lang_enter_group ()
2952 {
2953   lang_group_statement_type *g;
2954
2955   g = new_stat (lang_group_statement, stat_ptr);
2956   lang_list_init (&g->children);
2957   stat_ptr = &g->children;
2958 }
2959
2960 /* Leave a group.  This just resets stat_ptr to start writing to the
2961    regular list of statements again.  Note that this will not work if
2962    groups can occur inside anything else which can adjust stat_ptr,
2963    but currently they can't.  */
2964
2965 void
2966 lang_leave_group ()
2967 {
2968   stat_ptr = &statement_list;
2969 }