* ld-elf/comm-data.exp: Add XFAIL for arm*-*-* targets, referring
[deliverable/binutils-gdb.git] / ld / ldlang.c
index 2ecf62fc79c1df2788862e3f3c1c3658af9d53ca..680221122ad46824a3491dd84f774588bfa247e1 100644 (file)
@@ -1790,17 +1790,12 @@ lang_insert_orphan (asection *s,
       if (*ps == '\0')
        {
          char *symname;
-         etree_type *e_align;
 
          symname = (char *) xmalloc (ps - secname + sizeof "__start_" + 1);
          symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
          sprintf (symname + (symname[0] != 0), "__start_%s", secname);
-         e_align = exp_unop (ALIGN_K,
-                             exp_intop ((bfd_vma) 1 << s->alignment_power));
-         lang_add_assignment (exp_assign (".", e_align));
          lang_add_assignment (exp_provide (symname,
-                                           exp_unop (ABSOLUTE,
-                                                     exp_nameop (NAME, ".")),
+                                           exp_nameop (NAME, "."),
                                            FALSE));
        }
     }
@@ -2467,7 +2462,9 @@ wild_sort (lang_wild_statement_type *wild,
       /* Here either the files are not sorted by name, or we are
         looking at the sections for this file.  */
 
-      if (sec != NULL && sec->spec.sorted != none)
+      if (sec != NULL
+         && sec->spec.sorted != none
+         && sec->spec.sorted != by_none)
        if (compare_section (sec->spec.sorted, section, ls->section) < 0)
          break;
     }
@@ -2673,6 +2670,7 @@ load_symbols (lang_input_statement_type *entry,
     {
       bfd_error_type err;
       struct lang_input_statement_flags save_flags;
+      extern FILE *yyin;
 
       err = bfd_get_error ();
 
@@ -2720,6 +2718,9 @@ load_symbols (lang_input_statement_type *entry,
       save_flags.missing_file |= input_flags.missing_file;
       input_flags = save_flags;
       pop_stat_ptr ();
+      fclose (yyin);
+      yyin = NULL;
+      entry->flags.loaded = TRUE;
 
       return TRUE;
     }
@@ -2741,7 +2742,7 @@ load_symbols (lang_input_statement_type *entry,
       if (!entry->flags.reload)
 #endif
        ldlang_add_file (entry);
-      if (trace_files || trace_file_tries)
+      if (trace_files || verbose)
        info_msg ("%I\n", entry);
       break;
 
@@ -3229,6 +3230,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode)
 #endif
                  && !s->input_statement.flags.whole_archive
                  && s->input_statement.flags.loaded
+                 && s->input_statement.the_bfd != NULL
                  && bfd_check_format (s->input_statement.the_bfd,
                                       bfd_archive))
                s->input_statement.flags.loaded = FALSE;
@@ -3238,6 +3240,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode)
                       && plugin_insert == NULL
                       && s->input_statement.flags.loaded
                       && s->input_statement.flags.add_DT_NEEDED_for_regular
+                      && s->input_statement.the_bfd != NULL
                       && ((s->input_statement.the_bfd->flags) & DYNAMIC) != 0
                       && plugin_should_reload (s->input_statement.the_bfd))
                {
@@ -3283,7 +3286,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode)
 #endif
          break;
        case lang_assignment_statement_enum:
-         if (s->assignment_statement.exp->assign.hidden)
+         if (s->assignment_statement.exp->assign.defsym)
            /* This is from a --defsym on the command line.  */
            exp_fold_tree_no_dot (s->assignment_statement.exp);
          break;
@@ -3493,7 +3496,6 @@ update_wild_statements (lang_statement_union_type *s)
              break;
 
            case lang_wild_statement_enum:
-             sec = s->wild_statement.section_list;
              for (sec = s->wild_statement.section_list; sec != NULL;
                   sec = sec->next)
                {
@@ -3521,8 +3523,11 @@ update_wild_statements (lang_statement_union_type *s)
              break;
 
            case lang_output_section_statement_enum:
-             update_wild_statements
-               (s->output_section_statement.children.head);
+             /* Don't sort .init/.fini sections.  */
+             if (strcmp (s->output_section_statement.name, ".init") != 0
+                 && strcmp (s->output_section_statement.name, ".fini") != 0)
+               update_wild_statements
+                 (s->output_section_statement.children.head);
              break;
 
            case lang_group_statement_enum:
@@ -4589,7 +4594,8 @@ insert_pad (lang_statement_union_type **ptr,
     }
   pad->padding_statement.output_offset = dot - output_section->vma;
   pad->padding_statement.size = alignment_needed;
-  output_section->size += alignment_needed;
+  output_section->size = TO_SIZE (dot + TO_ADDR (alignment_needed)
+                                 - output_section->vma);
 }
 
 /* Work out how much this section will move the dot point.  */
@@ -5154,7 +5160,9 @@ lang_size_sections_1
            if (size < TO_SIZE ((unsigned) 1))
              size = TO_SIZE ((unsigned) 1);
            dot += TO_ADDR (size);
-           output_section_statement->bfd_section->size += size;
+           output_section_statement->bfd_section->size
+             = TO_SIZE (dot - output_section_statement->bfd_section->vma);
+
          }
          break;
 
@@ -5168,7 +5176,8 @@ lang_size_sections_1
              output_section_statement->bfd_section;
            size = bfd_get_reloc_size (s->reloc_statement.howto);
            dot += TO_ADDR (size);
-           output_section_statement->bfd_section->size += size;
+           output_section_statement->bfd_section->size
+             = TO_SIZE (dot - output_section_statement->bfd_section->vma);
          }
          break;
 
@@ -7432,7 +7441,7 @@ lang_leave_overlay (etree_type *lma_expr,
     {
       overlay_list->os->update_dot = 1;
       overlay_list->os->update_dot_tree
-       = exp_assign (".", exp_binop ('+', overlay_vma, overlay_max));
+       = exp_assign (".", exp_binop ('+', overlay_vma, overlay_max), FALSE);
     }
 
   l = overlay_list;
This page took 0.026662 seconds and 4 git commands to generate.