s/boolean/bfd_boolean/ s/true/TRUE/ s/false/FALSE/. Simplify
[deliverable/binutils-gdb.git] / ld / ldlang.c
index 6346a747b13e3328e243ad039c1f7c7f15f0966a..c2a11627a3ae7538b5d0f0ce66c7ac99a89ebacd 100644 (file)
@@ -3,22 +3,22 @@
    2001, 2002
    Free Software Foundation, Inc.
 
-This file is part of GLD, the Gnu Linker.
+   This file is part of GLD, the Gnu Linker.
 
-GLD is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+   GLD is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
 
-GLD is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   GLD is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GLD; see the file COPYING.  If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with GLD; see the file COPYING.  If not, write to the Free
+   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
 
 #include "bfd.h"
 #include "sysdep.h"
@@ -31,7 +31,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "ldmain.h"
 #include "ldexp.h"
 #include "ldlang.h"
-#include "ldgram.h"
+#include <ldgram.h>
 #include "ldlex.h"
 #include "ldmisc.h"
 #include "ldctor.h"
@@ -40,6 +40,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "fnmatch.h"
 #include "demangle.h"
 
+#ifndef offsetof
+#define offsetof(TYPE,MEMBER) ((size_t)&(((TYPE*)0)->MEMBER))
+#endif
+
 /* FORWARDS */
 static lang_statement_union_type *new_statement
   PARAMS ((enum statement_enum, size_t, lang_statement_list_type *));
@@ -51,9 +55,9 @@ static struct obstack stat_obstack;
 #define obstack_chunk_free free
 static const char *startup_file;
 static lang_statement_list_type input_file_chain;
-static boolean placed_commons = false;
+static bfd_boolean placed_commons = FALSE;
 static lang_output_section_statement_type *default_common_section;
-static boolean map_option_f;
+static bfd_boolean map_option_f;
 static bfd_vma print_dot;
 static lang_input_statement_type *first_file;
 static const char *current_target;
@@ -65,51 +69,77 @@ static void lang_for_each_statement_worker
   PARAMS ((void (*) (lang_statement_union_type *),
           lang_statement_union_type *));
 static lang_input_statement_type *new_afile
-  PARAMS ((const char *, lang_input_file_enum_type, const char *, boolean));
-static lang_memory_region_type *lang_memory_default PARAMS ((asection *));
-static void lang_map_flags PARAMS ((flagword));
-static void init_os PARAMS ((lang_output_section_statement_type *));
-static void exp_init_os PARAMS ((etree_type *));
-static void section_already_linked PARAMS ((bfd *, asection *, PTR));
+  PARAMS ((const char *, lang_input_file_enum_type, const char *,
+          bfd_boolean));
+static lang_memory_region_type *lang_memory_default
+  PARAMS ((asection *));
+static void lang_map_flags
+  PARAMS ((flagword));
+static void init_os
+  PARAMS ((lang_output_section_statement_type *));
+static void exp_init_os
+  PARAMS ((etree_type *));
+static void section_already_linked
+  PARAMS ((bfd *, asection *, PTR));
 static struct bfd_hash_entry *already_linked_newfunc
   PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
-static void already_linked_table_init PARAMS ((void));
-static void already_linked_table_free PARAMS ((void));
-static boolean wildcardp PARAMS ((const char *));
+static void already_linked_table_init
+  PARAMS ((void));
+static void already_linked_table_free
+  PARAMS ((void));
+static bfd_boolean wildcardp
+  PARAMS ((const char *));
 static lang_statement_union_type *wild_sort
   PARAMS ((lang_wild_statement_type *, struct wildcard_list *,
           lang_input_statement_type *, asection *));
 static void output_section_callback
   PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
           lang_input_statement_type *, PTR));
-static lang_input_statement_type *lookup_name PARAMS ((const char *));
-static boolean load_symbols
+static lang_input_statement_type *lookup_name
+  PARAMS ((const char *));
+static bfd_boolean load_symbols
   PARAMS ((lang_input_statement_type *, lang_statement_list_type *));
 static void wild
   PARAMS ((lang_wild_statement_type *,
           const char *, lang_output_section_statement_type *));
-static bfd *open_output PARAMS ((const char *));
-static void ldlang_open_output PARAMS ((lang_statement_union_type *));
-static void open_input_bfds PARAMS ((lang_statement_union_type *, boolean));
-static void lang_reasonable_defaults PARAMS ((void));
-static void insert_undefined PARAMS ((const char *));
-static void lang_place_undefineds PARAMS ((void));
+static bfd *open_output
+  PARAMS ((const char *));
+static void ldlang_open_output
+  PARAMS ((lang_statement_union_type *));
+static void open_input_bfds
+  PARAMS ((lang_statement_union_type *, bfd_boolean));
+static void lang_reasonable_defaults
+  PARAMS ((void));
+static void insert_undefined
+  PARAMS ((const char *));
+static void lang_place_undefineds
+  PARAMS ((void));
 static void map_input_to_output_sections
   PARAMS ((lang_statement_union_type *, const char *,
           lang_output_section_statement_type *));
+static void strip_excluded_output_sections
+  PARAMS ((void));
 static void print_output_section_statement
   PARAMS ((lang_output_section_statement_type *));
 static void print_assignment
   PARAMS ((lang_assignment_statement_type *,
           lang_output_section_statement_type *));
-static void print_input_statement PARAMS ((lang_input_statement_type *));
-static boolean print_one_symbol PARAMS ((struct bfd_link_hash_entry *, PTR));
-static void print_input_section PARAMS ((lang_input_section_type *));
-static void print_fill_statement PARAMS ((lang_fill_statement_type *));
-static void print_data_statement PARAMS ((lang_data_statement_type *));
-static void print_address_statement PARAMS ((lang_address_statement_type *));
-static void print_reloc_statement PARAMS ((lang_reloc_statement_type *));
-static void print_padding_statement PARAMS ((lang_padding_statement_type *));
+static void print_input_statement
+  PARAMS ((lang_input_statement_type *));
+static bfd_boolean print_one_symbol
+  PARAMS ((struct bfd_link_hash_entry *, PTR));
+static void print_input_section
+  PARAMS ((lang_input_section_type *));
+static void print_fill_statement
+  PARAMS ((lang_fill_statement_type *));
+static void print_data_statement
+  PARAMS ((lang_data_statement_type *));
+static void print_address_statement
+  PARAMS ((lang_address_statement_type *));
+static void print_reloc_statement
+  PARAMS ((lang_reloc_statement_type *));
+static void print_padding_statement
+  PARAMS ((lang_padding_statement_type *));
 static void print_wild_statement
   PARAMS ((lang_wild_statement_type *, lang_output_section_statement_type *));
 static void print_group
@@ -118,51 +148,63 @@ static void print_statement
   PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
 static void print_statement_list
   PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
-static void print_statements PARAMS ((void));
+static void print_statements
+  PARAMS ((void));
 static void insert_pad
   PARAMS ((lang_statement_union_type **, fill_type *,
           unsigned int, asection *, bfd_vma));
 static bfd_vma size_input_section
   PARAMS ((lang_statement_union_type **, lang_output_section_statement_type *,
           fill_type *, bfd_vma));
-static void lang_finish PARAMS ((void));
-static void ignore_bfd_errors PARAMS ((const char *, ...));
-static void lang_check PARAMS ((void));
-static void lang_common PARAMS ((void));
-static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
-static void lang_place_orphans PARAMS ((void));
-static int topower PARAMS ((int));
-static void lang_set_startof PARAMS ((void));
+static void lang_finish
+  PARAMS ((void));
+static void ignore_bfd_errors
+  PARAMS ((const char *, ...));
+static void lang_check
+  PARAMS ((void));
+static void lang_common
+  PARAMS ((void));
+static bfd_boolean lang_one_common
+  PARAMS ((struct bfd_link_hash_entry *, PTR));
+static void lang_place_orphans
+  PARAMS ((void));
+static int topower
+  PARAMS ((int));
+static void lang_set_startof
+  PARAMS ((void));
 static void gc_section_callback
   PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
           lang_input_statement_type *, PTR));
-static void lang_get_regions PARAMS ((struct memory_region_struct **,
-                                     struct memory_region_struct **,
-                                     const char *, const char *, int));
-static void lang_record_phdrs PARAMS ((void));
-static void lang_gc_wild PARAMS ((lang_wild_statement_type *));
-static void lang_gc_sections_1 PARAMS ((lang_statement_union_type *));
-static void lang_gc_sections PARAMS ((void));
+static void lang_get_regions
+  PARAMS ((struct memory_region_struct **, struct memory_region_struct **,
+          const char *, const char *, int));
+static void lang_record_phdrs
+  PARAMS ((void));
+static void lang_gc_wild
+  PARAMS ((lang_wild_statement_type *));
+static void lang_gc_sections_1
+  PARAMS ((lang_statement_union_type *));
+static void lang_gc_sections
+  PARAMS ((void));
 static int lang_vers_match_lang_c
   PARAMS ((struct bfd_elf_version_expr *, const char *));
 static int lang_vers_match_lang_cplusplus
   PARAMS ((struct bfd_elf_version_expr *, const char *));
 static int lang_vers_match_lang_java
   PARAMS ((struct bfd_elf_version_expr *, const char *));
-static void lang_do_version_exports_section PARAMS ((void));
-static void lang_check_section_addresses PARAMS ((void));
+static void lang_do_version_exports_section
+  PARAMS ((void));
+static void lang_check_section_addresses
+  PARAMS ((void));
 static void os_region_check
   PARAMS ((lang_output_section_statement_type *,
           struct memory_region_struct *, etree_type *, bfd_vma));
 static bfd_vma lang_size_sections_1
   PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *,
-          lang_statement_union_type **, fill_type *, bfd_vma, boolean *));
-
-typedef void (*callback_t) PARAMS ((lang_wild_statement_type *,
-                                   struct wildcard_list *,
-                                   asection *,
-                                   lang_input_statement_type *,
-                                   PTR));
+          lang_statement_union_type **, fill_type *, bfd_vma, bfd_boolean *));
+typedef void (*callback_t)
+  PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
+          lang_input_statement_type *, PTR));
 static void walk_wild
   PARAMS ((lang_wild_statement_type *, callback_t, PTR));
 static void walk_wild_section
@@ -171,26 +213,31 @@ static void walk_wild_section
 static void walk_wild_file
   PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
           callback_t, PTR));
-
-static int    get_target PARAMS ((const bfd_target *, PTR));
-static void   stricpy PARAMS ((char *, char *));
-static void   strcut PARAMS ((char *, char *));
-static int    name_compare PARAMS ((char *, char *));
-static int    closest_target_match PARAMS ((const bfd_target *, PTR));
-static char * get_first_input_target PARAMS ((void));
+static int get_target
+  PARAMS ((const bfd_target *, PTR));
+static void stricpy
+  PARAMS ((char *, char *));
+static void strcut
+  PARAMS ((char *, char *));
+static int name_compare
+  PARAMS ((char *, char *));
+static int closest_target_match
+  PARAMS ((const bfd_target *, PTR));
+static char * get_first_input_target
+  PARAMS ((void));
 
 /* EXPORTS */
 lang_output_section_statement_type *abs_output_section;
 lang_statement_list_type lang_output_section_statement;
 lang_statement_list_type *stat_ptr = &statement_list;
 lang_statement_list_type file_chain = { NULL, NULL };
-const char *entry_symbol = NULL;
+struct bfd_sym_chain entry_symbol = { NULL, NULL };
 const char *entry_section = ".text";
-boolean entry_from_cmdline;
-boolean lang_has_input_file = false;
-boolean had_output_filename = false;
-boolean lang_float_flag = false;
-boolean delete_output_file_on_failure = false;
+bfd_boolean entry_from_cmdline;
+bfd_boolean lang_has_input_file = FALSE;
+bfd_boolean had_output_filename = FALSE;
+bfd_boolean lang_float_flag = FALSE;
+bfd_boolean delete_output_file_on_failure = FALSE;
 struct lang_nocrossrefs *nocrossref_list;
 struct unique_sections *unique_section_list;
 
@@ -222,7 +269,7 @@ stat_alloc (size)
   return obstack_alloc (&stat_obstack, size);
 }
 
-boolean
+bfd_boolean
 unique_section_p (secnam)
      const char *secnam;
 {
@@ -233,10 +280,10 @@ unique_section_p (secnam)
        ? fnmatch (unam->name, secnam, 0) == 0
        : strcmp (unam->name, secnam) == 0)
       {
-       return true;
+       return TRUE;
       }
 
-  return false;
+  return FALSE;
 }
 
 /* Generic traversal routines for finding matching sections.  */
@@ -263,7 +310,7 @@ walk_wild_section (ptr, file, callback, data)
 
       while (sec != NULL)
        {
-         boolean skip = false;
+         bfd_boolean skip = FALSE;
          struct name_list *list_tmp;
 
          /* Don't process sections from files which were
@@ -485,7 +532,7 @@ new_afile (name, file_type, target, add_to_list)
      const char *name;
      lang_input_file_enum_type file_type;
      const char *target;
-     boolean add_to_list;
+     bfd_boolean add_to_list;
 {
   lang_input_statement_type *p;
 
@@ -498,57 +545,57 @@ new_afile (name, file_type, target, add_to_list)
       p->header.next = NULL;
     }
 
-  lang_has_input_file = true;
+  lang_has_input_file = TRUE;
   p->target = target;
   switch (file_type)
     {
     case lang_input_file_is_symbols_only_enum:
       p->filename = name;
-      p->is_archive = false;
-      p->real = true;
+      p->is_archive = FALSE;
+      p->real = TRUE;
       p->local_sym_name = name;
-      p->just_syms_flag = true;
-      p->search_dirs_flag = false;
+      p->just_syms_flag = TRUE;
+      p->search_dirs_flag = FALSE;
       break;
     case lang_input_file_is_fake_enum:
       p->filename = name;
-      p->is_archive = false;
-      p->real = false;
+      p->is_archive = FALSE;
+      p->real = FALSE;
       p->local_sym_name = name;
-      p->just_syms_flag = false;
-      p->search_dirs_flag = false;
+      p->just_syms_flag = FALSE;
+      p->search_dirs_flag = FALSE;
       break;
     case lang_input_file_is_l_enum:
-      p->is_archive = true;
+      p->is_archive = TRUE;
       p->filename = name;
-      p->real = true;
+      p->real = TRUE;
       p->local_sym_name = concat ("-l", name, (const char *) NULL);
-      p->just_syms_flag = false;
-      p->search_dirs_flag = true;
+      p->just_syms_flag = FALSE;
+      p->search_dirs_flag = TRUE;
       break;
     case lang_input_file_is_marker_enum:
       p->filename = name;
-      p->is_archive = false;
-      p->real = false;
+      p->is_archive = FALSE;
+      p->real = FALSE;
       p->local_sym_name = name;
-      p->just_syms_flag = false;
-      p->search_dirs_flag = true;
+      p->just_syms_flag = FALSE;
+      p->search_dirs_flag = TRUE;
       break;
     case lang_input_file_is_search_file_enum:
       p->filename = name;
-      p->is_archive = false;
-      p->real = true;
+      p->is_archive = FALSE;
+      p->real = TRUE;
       p->local_sym_name = name;
-      p->just_syms_flag = false;
-      p->search_dirs_flag = true;
+      p->just_syms_flag = FALSE;
+      p->search_dirs_flag = TRUE;
       break;
     case lang_input_file_is_file_enum:
       p->filename = name;
-      p->is_archive = false;
-      p->real = true;
+      p->is_archive = FALSE;
+      p->real = TRUE;
       p->local_sym_name = name;
-      p->just_syms_flag = false;
-      p->search_dirs_flag = false;
+      p->just_syms_flag = FALSE;
+      p->search_dirs_flag = FALSE;
       break;
     default:
       FAIL ();
@@ -560,7 +607,7 @@ new_afile (name, file_type, target, add_to_list)
   p->symbol_count = 0;
   p->dynamic = config.dynamic_link;
   p->whole_archive = whole_archive;
-  p->loaded = false;
+  p->loaded = FALSE;
   lang_statement_append (&input_file_chain,
                         (lang_statement_union_type *) p,
                         &p->next_real_file);
@@ -573,8 +620,8 @@ lang_add_input_file (name, file_type, target)
      lang_input_file_enum_type file_type;
      const char *target;
 {
-  lang_has_input_file = true;
-  return new_afile (name, file_type, target, true);
+  lang_has_input_file = TRUE;
+  return new_afile (name, file_type, target, TRUE);
 }
 
 /* Build enough state so that the parser can build its tree.  */
@@ -664,7 +711,7 @@ lang_memory_region_lookup (name)
     new->not_flags = 0;
     new->length = ~(bfd_size_type) 0;
     new->current = 0;
-    new->had_full_message = false;
+    new->had_full_message = FALSE;
 
     return new;
   }
@@ -735,7 +782,7 @@ lang_output_section_statement_lookup (name)
 
       lookup->next = (lang_statement_union_type *) NULL;
       lookup->bfd_section = (asection *) NULL;
-      lookup->processed = false;
+      lookup->processed = FALSE;
       lookup->sectype = normal_section;
       lookup->addr_tree = (etree_type *) NULL;
       lang_list_init (&lookup->children);
@@ -992,7 +1039,7 @@ section_already_linked (abfd, sec, data)
 
   already_linked_list =
     ((struct already_linked_hash_entry *)
-     bfd_hash_lookup (&already_linked_table, name, true, false));
+     bfd_hash_lookup (&already_linked_table, name, TRUE, FALSE));
 
   for (l = already_linked_list->entry; l != NULL; l = l->next)
     {
@@ -1095,13 +1142,13 @@ already_linked_table_free ()
    explicit actions, like foo.o(.text), bar.o(.text) and
    foo.o(.text, .data).  */
 
-/* Return true if the PATTERN argument is a wildcard pattern.
+/* Return TRUE if the PATTERN argument is a wildcard pattern.
    Although backslashes are treated specially if a pattern contains
    wildcards, we do not consider the mere presence of a backslash to
    be enough to cause the pattern to be treated as a wildcard.
    That lets us handle DOS filenames more naturally.  */
 
-static boolean
+static bfd_boolean
 wildcardp (pattern)
      const char *pattern;
 {
@@ -1111,8 +1158,8 @@ wildcardp (pattern)
     if (*s == '?'
        || *s == '*'
        || *s == '[')
-      return true;
-  return false;
+      return TRUE;
+  return FALSE;
 }
 
 /* Add SECTION to the output section OUTPUT.  Do this by creating a
@@ -1127,28 +1174,29 @@ lang_add_section (ptr, section, output, file)
      lang_input_statement_type *file;
 {
   flagword flags;
-  boolean discard;
+  bfd_boolean discard;
 
   flags = bfd_get_section_flags (section->owner, section);
 
-  discard = false;
+  discard = FALSE;
 
-  /* If we are doing a final link, discard sections marked with
-     SEC_EXCLUDE.  */
-  if (! link_info.relocateable
-      && (flags & SEC_EXCLUDE) != 0)
-    discard = true;
+  /* Discard sections marked with SEC_EXCLUDE if we are doing a final
+     link.  Discard debugging sections marked with SEC_EXCLUDE on a
+     relocatable link too.  */
+  if ((flags & SEC_EXCLUDE) != 0
+      && ((flags & SEC_DEBUGGING) != 0 || !link_info.relocateable))
+    discard = TRUE;
 
   /* Discard input sections which are assigned to a section named
      DISCARD_SECTION_NAME.  */
   if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
-    discard = true;
+    discard = TRUE;
 
   /* Discard debugging sections if we are stripping debugging
      information.  */
   if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
       && (flags & SEC_DEBUGGING) != 0)
-    discard = true;
+    discard = TRUE;
 
   if (discard)
     {
@@ -1162,7 +1210,7 @@ lang_add_section (ptr, section, output, file)
 
   if (section->output_section == NULL)
     {
-      boolean first;
+      bfd_boolean first;
       lang_input_section_type *new;
       flagword flags;
 
@@ -1217,7 +1265,7 @@ lang_add_section (ptr, section, output, file)
        }
 
       /* For now make .tbss normal section.  */
-      if (flags & SEC_THREAD_LOCAL)
+      if ((flags & SEC_THREAD_LOCAL) && ! link_info.relocateable)
        flags |= SEC_LOAD;
 
       section->output_section->flags |= flags;
@@ -1299,7 +1347,7 @@ wild_sort (wild, sec, file, section)
       if (wild->filenames_sorted)
        {
          const char *fn, *ln;
-         boolean fa, la;
+         bfd_boolean fa, la;
          int i;
 
          /* The PE support for the .idata section as generated by
@@ -1311,24 +1359,24 @@ wild_sort (wild, sec, file, section)
              && bfd_my_archive (file->the_bfd) != NULL)
            {
              fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
-             fa = true;
+             fa = TRUE;
            }
          else
            {
              fn = file->filename;
-             fa = false;
+             fa = FALSE;
            }
 
          if (ls->ifile->the_bfd != NULL
              && bfd_my_archive (ls->ifile->the_bfd) != NULL)
            {
              ln = bfd_get_filename (bfd_my_archive (ls->ifile->the_bfd));
-             la = true;
+             la = TRUE;
            }
          else
            {
              ln = ls->ifile->filename;
-             la = false;
+             la = FALSE;
            }
 
          i = strcmp (fn, ln);
@@ -1452,7 +1500,7 @@ lookup_name (name)
 
   if (search == (lang_input_statement_type *) NULL)
     search = new_afile (name, lang_input_file_is_file_enum, default_target,
-                       false);
+                       FALSE);
 
   /* If we have already added this file, or this file is not real
      (FIXME: can that ever actually happen?) or the name is NULL
@@ -1470,7 +1518,7 @@ lookup_name (name)
 
 /* Get the symbols for an input file.  */
 
-static boolean
+static bfd_boolean
 load_symbols (entry, place)
      lang_input_statement_type *entry;
      lang_statement_list_type *place;
@@ -1478,7 +1526,7 @@ load_symbols (entry, place)
   char **matching;
 
   if (entry->loaded)
-    return true;
+    return TRUE;
 
   ldfile_open_file (entry);
 
@@ -1487,13 +1535,13 @@ load_symbols (entry, place)
     {
       bfd_error_type err;
       lang_statement_list_type *hold;
-      boolean bad_load = true;
+      bfd_boolean bad_load = TRUE;
 
       err = bfd_get_error ();
 
       /* See if the emulation has some special knowledge.  */
       if (ldemul_unrecognized_file (entry))
-       return true;
+       return TRUE;
 
       if (err == bfd_error_file_ambiguously_recognized)
        {
@@ -1509,7 +1557,7 @@ load_symbols (entry, place)
               || place == NULL)
          einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
       else
-       bad_load = false;
+       bad_load = FALSE;
 
       bfd_close (entry->the_bfd);
       entry->the_bfd = NULL;
@@ -1520,10 +1568,10 @@ load_symbols (entry, place)
       hold = stat_ptr;
       stat_ptr = place;
 
-      ldfile_assumed_script = true;
+      ldfile_assumed_script = TRUE;
       parser_input = input_script;
       yyparse ();
-      ldfile_assumed_script = false;
+      ldfile_assumed_script = FALSE;
 
       stat_ptr = hold;
 
@@ -1531,7 +1579,7 @@ load_symbols (entry, place)
     }
 
   if (ldemul_recognized_file (entry))
-    return true;
+    return TRUE;
 
   /* We don't call ldlang_add_file for an archive.  Instead, the
      add_symbols entry point will call ldlang_add_file, via the
@@ -1552,7 +1600,7 @@ load_symbols (entry, place)
       if (entry->whole_archive)
        {
          bfd *member = NULL;
-         boolean loaded = true;
+         bfd_boolean loaded = TRUE;
 
          for (;;)
            {
@@ -1565,7 +1613,7 @@ load_symbols (entry, place)
                {
                  einfo (_("%F%B: member %B in archive is not an object\n"),
                         entry->the_bfd, member);
-                 loaded = false;
+                 loaded = FALSE;
                }
 
              if (! ((*link_info.callbacks->add_archive_element)
@@ -1575,7 +1623,7 @@ load_symbols (entry, place)
              if (! bfd_link_add_symbols (member, &link_info))
                {
                  einfo (_("%F%B: could not read symbols: %E\n"), member);
-                 loaded = false;
+                 loaded = FALSE;
                }
            }
 
@@ -1586,7 +1634,7 @@ load_symbols (entry, place)
     }
 
   if (bfd_link_add_symbols (entry->the_bfd, &link_info))
-    entry->loaded = true;
+    entry->loaded = TRUE;
   else
     einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
 
@@ -1622,7 +1670,7 @@ wild (s, target, output)
     }
 }
 
-/* Return true iff target is the sought target.  */
+/* Return TRUE iff target is the sought target.  */
 
 static int
 get_target (target, data)
@@ -1782,6 +1830,29 @@ get_first_input_target ()
   return target;
 }
 
+const char *
+lang_get_output_target ()
+{
+  const char *target;
+
+  /* Has the user told us which output format to use?  */
+  if (output_target != (char *) NULL)
+    return output_target;
+
+  /* No - has the current target been set to something other than
+     the default?  */
+  if (current_target != default_target)
+    return current_target;
+
+  /* No - can we determine the format of the first input file?  */
+  target = get_first_input_target ();
+  if (target != NULL)
+    return target;
+
+  /* Failed - use the default output target.  */
+  return default_target;
+}
+
 /* Open the output file.  */
 
 static bfd *
@@ -1790,24 +1861,7 @@ open_output (name)
 {
   bfd *output;
 
-  /* Has the user told us which output format to use?  */
-  if (output_target == (char *) NULL)
-    {
-      /* No - has the current target been set to something other than
-         the default?  */
-      if (current_target != default_target)
-       output_target = current_target;
-
-      /* No - can we determine the format of the first input file?  */
-      else
-       {
-         output_target = get_first_input_target ();
-
-         /* Failed - use the default output target.  */
-         if (output_target == NULL)
-           output_target = default_target;
-       }
-    }
+  output_target = lang_get_output_target ();
 
   /* Has the user requested a particular endianness on the command
      line?  */
@@ -1867,7 +1921,7 @@ open_output (name)
       einfo (_("%P%F: cannot open output file %s: %E\n"), name);
     }
 
-  delete_output_file_on_failure = true;
+  delete_output_file_on_failure = TRUE;
 
 #if 0
   output->flags |= D_PAGED;
@@ -1925,7 +1979,7 @@ ldlang_open_output (statement)
 static void
 open_input_bfds (s, force)
      lang_statement_union_type *s;
-     boolean force;
+     bfd_boolean force;
 {
   for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
     {
@@ -1955,7 +2009,7 @@ open_input_bfds (s, force)
            do
              {
                undefs = link_info.hash->undefs_tail;
-               open_input_bfds (s->group_statement.children.head, true);
+               open_input_bfds (s->group_statement.children.head, TRUE);
              }
            while (undefs != link_info.hash->undefs_tail);
          }
@@ -1979,12 +2033,12 @@ open_input_bfds (s, force)
                  && s->input_statement.loaded
                  && bfd_check_format (s->input_statement.the_bfd,
                                       bfd_archive))
-               s->input_statement.loaded = false;
+               s->input_statement.loaded = FALSE;
 
              lang_list_init (&add);
 
              if (! load_symbols (&s->input_statement, &add))
-               config.make_executable = false;
+               config.make_executable = FALSE;
 
              if (add.head != NULL)
                {
@@ -2011,7 +2065,7 @@ lang_reasonable_defaults ()
 
   default_common_section = lang_output_section_statement_lookup (".bss");
 
-  if (placed_commons == false)
+  if (!placed_commons)
     {
       lang_wild_statement_type *new =
       new_stat (lang_wild_statement,
@@ -2030,13 +2084,9 @@ lang_reasonable_defaults ()
    on a list, then, once the output file has been opened, transfer the
    name to the symbol table.  */
 
-typedef struct ldlang_undef_chain_list
-{
-  struct ldlang_undef_chain_list *next;
-  char *name;
-}                       ldlang_undef_chain_list_type;
+typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
 
-static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
+#define ldlang_undef_chain_list_head entry_symbol.next
 
 void
 ldlang_add_undef (name)
@@ -2063,7 +2113,7 @@ insert_undefined (name)
 {
   struct bfd_link_hash_entry *h;
 
-  h = bfd_link_hash_lookup (link_info.hash, name, true, false, true);
+  h = bfd_link_hash_lookup (link_info.hash, name, TRUE, FALSE, TRUE);
   if (h == (struct bfd_link_hash_entry *) NULL)
     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
   if (h->type == bfd_link_hash_new)
@@ -2165,6 +2215,41 @@ map_input_to_output_sections (s, target, output_section_statement)
     }
 }
 
+/* An output section might have been removed after its statement was
+   added.  For example, ldemul_before_allocation can remove dynamic
+   sections if they turn out to be not needed.  Clean them up here.  */
+
+static void
+strip_excluded_output_sections ()
+{
+  lang_statement_union_type *u;
+
+  for (u = lang_output_section_statement.head;
+       u != NULL;
+       u = u->output_section_statement.next)
+    {
+      lang_output_section_statement_type *os;
+      asection *s;
+
+      os = &u->output_section_statement;
+      s = os->bfd_section;
+      if (s != NULL && (s->flags & SEC_EXCLUDE) != 0)
+       {
+         asection **p;
+
+         os->bfd_section = NULL;
+
+         for (p = &output_bfd->sections; *p; p = &(*p)->next)
+           if (*p == s)
+             {
+               bfd_section_list_remove (output_bfd, p);
+               output_bfd->section_count--;
+               break;
+             }
+       }
+    }
+}
+
 static void
 print_output_section_statement (output_section_statement)
      lang_output_section_statement_type *output_section_statement;
@@ -2264,7 +2349,7 @@ print_input_statement (statm)
 /* Print all symbols defined in a particular section.  This is called
    via bfd_link_hash_traverse.  */
 
-static boolean
+static bfd_boolean
 print_one_symbol (hash_entry, ptr)
      struct bfd_link_hash_entry *hash_entry;
      PTR ptr;
@@ -2287,7 +2372,7 @@ print_one_symbol (hash_entry, ptr)
       minfo ("             %T\n", hash_entry->root.string);
     }
 
-  return true;
+  return TRUE;
 }
 
 /* Print information about an input section to the map file.  */
@@ -2529,10 +2614,10 @@ print_wild_statement (w, os)
       if (sec->spec.exclude_name_list != NULL)
        {
          name_list *tmp;
-         minfo ("EXCLUDE_FILE ( %s", sec->spec.exclude_name_list->name);
+         minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
          for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
-           minfo (", %s", tmp->name);
-         minfo (")");
+           minfo (" %s", tmp->name);
+         minfo (") ");
        }
       if (sec->spec.name != NULL)
        minfo ("%s", sec->spec.name);
@@ -2540,6 +2625,8 @@ print_wild_statement (w, os)
        minfo ("*");
       if (sec->spec.sorted)
        minfo (")");
+      if (sec->next)
+       minfo (" ");
     }
   minfo (")");
 
@@ -2734,7 +2821,7 @@ size_input_section (this_ptr, output_section_statement, fill, dot)
   lang_input_section_type *is = &((*this_ptr)->input_section);
   asection *i = is->section;
 
-  if (is->ifile->just_syms_flag == false)
+  if (!is->ifile->just_syms_flag)
     {
       unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
                                                    ldfile_output_machine);
@@ -2887,7 +2974,7 @@ lang_size_sections_1 (s, output_section_statement, prev, fill, dot, relax)
      lang_statement_union_type **prev;
      fill_type *fill;
      bfd_vma dot;
-     boolean *relax;
+     bfd_boolean *relax;
 {
   unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
                                                ldfile_output_machine);
@@ -2989,11 +3076,10 @@ lang_size_sections_1 (s, output_section_statement, prev, fill, dot, relax)
                                       abs_output_section,
                                       lang_allocating_phase_enum,
                                       dot, &dot);
-                   if (r.valid_p == false)
-                     {
-                       einfo (_("%F%S: non constant address expression for section %s\n"),
-                              os->name);
-                     }
+                   if (!r.valid_p)
+                     einfo (_("%F%S: non constant address expression for section %s\n"),
+                            os->name);
+
                    dot = r.value + r.section->bfd_section->vma;
                  }
 
@@ -3013,22 +3099,22 @@ lang_size_sections_1 (s, output_section_statement, prev, fill, dot, relax)
 
            /* Put the section within the requested block size, or
               align at the block boundary.  */
-           after = ALIGN_N (os->bfd_section->vma
+           after = align_n (os->bfd_section->vma
                             + os->bfd_section->_raw_size / opb,
-                            /* The coercion here is important, see ld.h.  */
                             (bfd_vma) os->block_value);
 
            if (bfd_is_abs_section (os->bfd_section))
              ASSERT (after == os->bfd_section->vma);
            else if ((os->bfd_section->flags & SEC_HAS_CONTENTS) == 0
-                    && (os->bfd_section->flags & SEC_THREAD_LOCAL))
+                    && (os->bfd_section->flags & SEC_THREAD_LOCAL)
+                    && ! link_info.relocateable)
              os->bfd_section->_raw_size = 0;
            else
              os->bfd_section->_raw_size =
                (after - os->bfd_section->vma) * opb;
 
            dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
-           os->processed = true;
+           os->processed = TRUE;
 
            if (os->update_dot_tree != 0)
              exp_fold_tree (os->update_dot_tree, abs_output_section,
@@ -3163,12 +3249,12 @@ lang_size_sections_1 (s, output_section_statement, prev, fill, dot, relax)
              }
            else
              {
-               boolean again;
+               bfd_boolean again;
 
                if (! bfd_relax_section (i->owner, i, &link_info, &again))
                  einfo (_("%P%F: can't relax section: %E\n"));
                if (again)
-                 *relax = true;
+                 *relax = TRUE;
              }
            dot = size_input_section (prev, output_section_statement,
                                      output_section_statement->fill, dot);
@@ -3261,7 +3347,7 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
      lang_statement_union_type **prev;
      fill_type *fill;
      bfd_vma dot;
-     boolean *relax;
+     bfd_boolean *relax;
 {
   bfd_vma result;
 
@@ -3360,7 +3446,7 @@ lang_do_assignments (s, output_section_statement, fill, dot)
                                   abs_output_section,
                                   lang_final_phase_enum, dot, &dot);
            s->data_statement.value = value.value;
-           if (value.valid_p == false)
+           if (!value.valid_p)
              einfo (_("%F%P: invalid data statement\n"));
          }
          {
@@ -3397,7 +3483,7 @@ lang_do_assignments (s, output_section_statement, fill, dot)
                                   abs_output_section,
                                   lang_final_phase_enum, dot, &dot);
            s->reloc_statement.addend_value = value.value;
-           if (value.valid_p == false)
+           if (!value.valid_p)
              einfo (_("%F%P: invalid reloc statement\n"));
          }
          dot += bfd_get_reloc_size (s->reloc_statement.howto) / opb;
@@ -3476,7 +3562,7 @@ lang_set_startof ()
       buf = xmalloc (10 + strlen (secname));
 
       sprintf (buf, ".startof.%s", secname);
-      h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
+      h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
       if (h != NULL && h->type == bfd_link_hash_undefined)
        {
          h->type = bfd_link_hash_defined;
@@ -3485,7 +3571,7 @@ lang_set_startof ()
        }
 
       sprintf (buf, ".sizeof.%s", secname);
-      h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
+      h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
       if (h != NULL && h->type == bfd_link_hash_undefined)
        {
          unsigned opb;
@@ -3508,22 +3594,23 @@ static void
 lang_finish ()
 {
   struct bfd_link_hash_entry *h;
-  boolean warn;
+  bfd_boolean warn;
 
   if (link_info.relocateable || link_info.shared)
-    warn = false;
+    warn = FALSE;
   else
-    warn = true;
+    warn = TRUE;
 
-  if (entry_symbol == (char *) NULL)
+  if (entry_symbol.name == (const char *) NULL)
     {
       /* No entry has been specified.  Look for start, but don't warn
         if we don't find it.  */
-      entry_symbol = "start";
-      warn = false;
+      entry_symbol.name = "start";
+      warn = FALSE;
     }
 
-  h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true);
+  h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
+                           FALSE, FALSE, TRUE);
   if (h != (struct bfd_link_hash_entry *) NULL
       && (h->type == bfd_link_hash_defined
          || h->type == bfd_link_hash_defweak)
@@ -3536,7 +3623,7 @@ lang_finish ()
                                    h->u.def.section->output_section)
             + h->u.def.section->output_offset);
       if (! bfd_set_start_address (output_bfd, val))
-       einfo (_("%P%F:%s: can't set start address\n"), entry_symbol);
+       einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
     }
   else
     {
@@ -3545,7 +3632,7 @@ lang_finish ()
 
       /* We couldn't find the entry symbol.  Try parsing it as a
          number.  */
-      val = bfd_scan_vma (entry_symbol, &send, 0);
+      val = bfd_scan_vma (entry_symbol.name, &send, 0);
       if (*send == '\0')
        {
          if (! bfd_set_start_address (output_bfd, val))
@@ -3562,7 +3649,8 @@ lang_finish ()
            {
              if (warn)
                einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
-                      entry_symbol, bfd_get_section_vma (output_bfd, ts));
+                      entry_symbol.name,
+                      bfd_get_section_vma (output_bfd, ts));
              if (! bfd_set_start_address (output_bfd,
                                           bfd_get_section_vma (output_bfd,
                                                                ts)))
@@ -3572,7 +3660,7 @@ lang_finish ()
            {
              if (warn)
                einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
-                      entry_symbol);
+                      entry_symbol.name);
            }
        }
     }
@@ -3687,7 +3775,7 @@ lang_common ()
 
 /* Place one common symbol in the correct section.  */
 
-static boolean
+static bfd_boolean
 lang_one_common (h, info)
      struct bfd_link_hash_entry *h;
      PTR info;
@@ -3699,20 +3787,20 @@ lang_one_common (h, info)
                                                ldfile_output_machine);
 
   if (h->type != bfd_link_hash_common)
-    return true;
+    return TRUE;
 
   size = h->u.c.size;
   power_of_two = h->u.c.p->alignment_power;
 
   if (config.sort_common
       && power_of_two < (unsigned int) *(int *) info)
-    return true;
+    return TRUE;
 
   section = h->u.c.p->section;
 
   /* Increase the size of the section.  */
-  section->_cooked_size = ALIGN_N ((section->_cooked_size + opb - 1) / opb,
-                                  (bfd_size_type) (1 << power_of_two)) * opb;
+  section->_cooked_size = align_n ((section->_cooked_size + opb - 1) / opb,
+                                  (bfd_vma) 1 << power_of_two) * opb;
 
   /* Adjust the alignment if necessary.  */
   if (power_of_two > section->alignment_power)
@@ -3733,7 +3821,7 @@ lang_one_common (h, info)
 
   if (config.map_file != NULL)
     {
-      static boolean header_printed;
+      static bfd_boolean header_printed;
       int len;
       char *name;
       char buf[50];
@@ -3742,7 +3830,7 @@ lang_one_common (h, info)
        {
          minfo (_("\nAllocating common symbols\n"));
          minfo (_("Common symbol       size              file\n\n"));
-         header_printed = true;
+         header_printed = TRUE;
        }
 
       name = demangle (h->root.string);
@@ -3778,7 +3866,7 @@ lang_one_common (h, info)
       minfo ("%B\n", section->owner);
     }
 
-  return true;
+  return TRUE;
 }
 
 /* Run through the input files and ensure that every input section has
@@ -3978,10 +4066,10 @@ lang_add_output (name, from_script)
      int from_script;
 {
   /* Make -o on command line override OUTPUT in script.  */
-  if (had_output_filename == false || !from_script)
+  if (!had_output_filename || !from_script)
     {
       output_filename = name;
-      had_output_filename = true;
+      had_output_filename = TRUE;
     }
 }
 
@@ -4138,28 +4226,19 @@ static void
 lang_gc_sections ()
 {
   struct bfd_link_hash_entry *h;
-  ldlang_undef_chain_list_type *ulist, fake_list_start;
+  ldlang_undef_chain_list_type *ulist;
 
   /* Keep all sections so marked in the link script.  */
 
   lang_gc_sections_1 (statement_list.head);
 
-  /* Keep all sections containing symbols undefined on the command-line.
-     Handle the entry symbol at the same time.  */
+  /* Keep all sections containing symbols undefined on the command-line,
+     and the section containing the entry symbol.  */
 
-  if (entry_symbol != NULL)
-    {
-      fake_list_start.next = ldlang_undef_chain_list_head;
-      fake_list_start.name = (char *) entry_symbol;
-      ulist = &fake_list_start;
-    }
-  else
-    ulist = ldlang_undef_chain_list_head;
-
-  for (; ulist; ulist = ulist->next)
+  for (ulist = link_info.gc_sym_list; ulist; ulist = ulist->next)
     {
       h = bfd_link_hash_lookup (link_info.hash, ulist->name,
-                               false, false, false);
+                               FALSE, FALSE, FALSE);
 
       if (h != (struct bfd_link_hash_entry *) NULL
          && (h->type == bfd_link_hash_defined
@@ -4191,7 +4270,11 @@ lang_process ()
 
   /* Create a bfd for each input file.  */
   current_target = default_target;
-  open_input_bfds (statement_list.head, false);
+  open_input_bfds (statement_list.head, FALSE);
+
+  link_info.gc_sym_list = &entry_symbol;
+  if (entry_symbol.name == NULL)
+    link_info.gc_sym_list = ldlang_undef_chain_list_head;
 
   ldemul_after_open ();
 
@@ -4251,6 +4334,9 @@ lang_process ()
      and other back-ends size dynamic sections.  */
   ldemul_before_allocation ();
 
+  if (!link_info.relocateable)
+    strip_excluded_output_sections ();
+
   /* We must record the program headers before we try to fix the
      section positions, since they will affect SIZEOF_HEADERS.  */
   lang_record_phdrs ();
@@ -4264,13 +4350,13 @@ lang_process ()
   if (command_line.relax)
     {
       /* Keep relaxing until bfd_relax_section gives up.  */
-      boolean relax_again;
+      bfd_boolean relax_again;
 
       do
        {
          lang_reset_memory_regions ();
 
-         relax_again = false;
+         relax_again = FALSE;
 
          /* Note: pe-dll.c does something like this also.  If you find
             you need to change this code, you probably need to change
@@ -4323,7 +4409,7 @@ void
 lang_add_wild (filespec, section_list, keep_sections)
      struct wildcard_spec *filespec;
      struct wildcard_list *section_list;
-     boolean keep_sections;
+     bfd_boolean keep_sections;
 {
   struct wildcard_list *curr, *next;
   lang_wild_statement_type *new;
@@ -4334,7 +4420,7 @@ lang_add_wild (filespec, section_list, keep_sections)
        section_list = curr, curr = next)
     {
       if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
-       placed_commons = true;
+       placed_commons = TRUE;
 
       next = curr->next;
       curr->next = section_list;
@@ -4345,12 +4431,12 @@ lang_add_wild (filespec, section_list, keep_sections)
       if (strcmp (filespec->name, "*") == 0)
        filespec->name = NULL;
       else if (! wildcardp (filespec->name))
-       lang_has_input_file = true;
+       lang_has_input_file = TRUE;
     }
 
   new = new_stat (lang_wild_statement, stat_ptr);
   new->filename = NULL;
-  new->filenames_sorted = false;
+  new->filenames_sorted = FALSE;
   if (filespec != NULL)
     {
       new->filename = filespec->name;
@@ -4381,13 +4467,13 @@ lang_section_start (name, address)
 void
 lang_add_entry (name, cmdline)
      const char *name;
-     boolean cmdline;
+     bfd_boolean cmdline;
 {
-  if (entry_symbol == NULL
+  if (entry_symbol.name == NULL
       || cmdline
       || ! entry_from_cmdline)
     {
-      entry_symbol = name;
+      entry_symbol.name = name;
       entry_from_cmdline = cmdline;
     }
 }
@@ -4412,7 +4498,7 @@ lang_add_map (name)
       switch (*name)
        {
        case 'F':
-         map_option_f = true;
+         map_option_f = TRUE;
          break;
        }
       name++;
@@ -4499,14 +4585,14 @@ lang_startup (name)
     }
   first_file->filename = name;
   first_file->local_sym_name = name;
-  first_file->real = true;
+  first_file->real = TRUE;
 
   startup_file = name;
 }
 
 void
 lang_float (maybe)
-     boolean maybe;
+     bfd_boolean maybe;
 {
   lang_float_flag = maybe;
 }
@@ -4518,7 +4604,7 @@ lang_float (maybe)
    MEMSPEC is the name of the run-time region, or "*default*" if the
    statement didn't specify one.  LMA_MEMSPEC is the name of the
    load-time region, or null if the statement didn't specify one.
-   HAVE_LMA_P is true if the statement had an explicit load address.
+   HAVE_LMA_P is TRUE if the statement had an explicit load address.
 
    It is an error to specify both a load region and a load address.  */
 
@@ -4569,7 +4655,7 @@ lang_abs_symbol_at_beginning_of (secname, name)
 {
   struct bfd_link_hash_entry *h;
 
-  h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
+  h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
   if (h == (struct bfd_link_hash_entry *) NULL)
     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
 
@@ -4602,7 +4688,7 @@ lang_abs_symbol_at_end_of (secname, name)
 {
   struct bfd_link_hash_entry *h;
 
-  h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
+  h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
   if (h == (struct bfd_link_hash_entry *) NULL)
     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
 
@@ -4688,8 +4774,8 @@ void
 lang_new_phdr (name, type, filehdr, phdrs, at, flags)
      const char *name;
      etree_type *type;
-     boolean filehdr;
-     boolean phdrs;
+     bfd_boolean filehdr;
+     bfd_boolean phdrs;
      etree_type *at;
      etree_type *flags;
 {
@@ -4768,7 +4854,7 @@ lang_record_phdrs ()
                    }
                  secs[c] = os->bfd_section;
                  ++c;
-                 pl->used = true;
+                 pl->used = TRUE;
                }
            }
        }
@@ -4826,7 +4912,7 @@ lang_add_nocrossref (l)
   nocrossref_list = n;
 
   /* Set notice_all so that we get informed about all symbols.  */
-  link_info.notice_all = true;
+  link_info.notice_all = TRUE;
 }
 \f
 /* Overlay handling.  We handle overlays with some static variables.  */
@@ -5045,7 +5131,7 @@ lang_vers_match_lang_cplusplus (expr, sym)
   if (!alt_sym)
     {
       /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
-        Should we early out false in this case?  */
+        Should we early out FALSE in this case?  */
       result = fnmatch (expr->pattern, sym, 0) == 0;
     }
   else
@@ -5072,7 +5158,7 @@ lang_vers_match_lang_java (expr, sym)
   if (!alt_sym)
     {
       /* cplus_demangle (also) returns NULL when it is not a Java symbol.
-        Should we early out false in this case?  */
+        Should we early out FALSE in this case?  */
       result = fnmatch (expr->pattern, sym, 0) == 0;
     }
   else
@@ -5097,6 +5183,8 @@ lang_new_vers_pattern (orig, new, lang)
   ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
   ret->next = orig;
   ret->pattern = new;
+  ret->symver = 0;
+  ret->script = 0;
 
   if (lang == NULL || strcasecmp (lang, "C") == 0)
     ret->match = lang_vers_match_lang_c;
This page took 0.044251 seconds and 4 git commands to generate.