X-Git-Url: https://oss.titaniummirror.com/gitweb?p=msp430-binutils.git;a=blobdiff_plain;f=ld%2Femultempl%2Felf-generic.em;fp=ld%2Femultempl%2Felf-generic.em;h=cf4c2c82d04b37607720a9e4867227b8a577e85c;hp=94486f81d74ae29e011936422ebd193eb4e36945;hb=d5da4f291af551c0b8b79e1d4a9b173d60e5c10e;hpb=7b5ea4fcdf2819e070665ab5610f8b48e3867c10 diff --git a/ld/emultempl/elf-generic.em b/ld/emultempl/elf-generic.em index 94486f8..cf4c2c8 100644 --- a/ld/emultempl/elf-generic.em +++ b/ld/emultempl/elf-generic.em @@ -1,5 +1,5 @@ # This shell script emits a C file. -*- C -*- -# Copyright 2006, 2007 Free Software Foundation, Inc. +# Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # # This file is part of the GNU Binutils. # @@ -31,46 +31,37 @@ gld${EMULATION_NAME}_map_segments (bfd_boolean need_layout) do { - if (need_layout) - { - lang_reset_memory_regions (); - - /* Resize the sections. */ - lang_size_sections (NULL, TRUE); - - /* Redo special stuff. */ - ldemul_after_allocation (); - - /* Do the assignments again. */ - lang_do_assignments (); - - need_layout = FALSE; - } + lang_relax_sections (need_layout); + need_layout = FALSE; - if (output_bfd->xvec->flavour == bfd_target_elf_flavour + if (link_info.output_bfd->xvec->flavour == bfd_target_elf_flavour && !link_info.relocatable) { bfd_size_type phdr_size; - phdr_size = elf_tdata (output_bfd)->program_header_size; + phdr_size = elf_tdata (link_info.output_bfd)->program_header_size; /* If we don't have user supplied phdrs, throw away any previous linker generated program headers. */ if (lang_phdr_list == NULL) - elf_tdata (output_bfd)->segment_map = NULL; - if (!_bfd_elf_map_sections_to_segments (output_bfd, &link_info)) + elf_tdata (link_info.output_bfd)->segment_map = NULL; + if (!_bfd_elf_map_sections_to_segments (link_info.output_bfd, + &link_info)) einfo ("%F%P: map sections to segments failed: %E\n"); - if (phdr_size != elf_tdata (output_bfd)->program_header_size) + if (phdr_size + != elf_tdata (link_info.output_bfd)->program_header_size) { if (tries > 6) /* The first few times we allow any change to phdr_size . */ need_layout = TRUE; - else if (phdr_size < elf_tdata (output_bfd)->program_header_size) + else if (phdr_size + < elf_tdata (link_info.output_bfd)->program_header_size) /* After that we only allow the size to grow. */ need_layout = TRUE; else - elf_tdata (output_bfd)->program_header_size = phdr_size; + elf_tdata (link_info.output_bfd)->program_header_size + = phdr_size; } } }