X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Felf.c;h=24ca6df7c9e3cfef7883e933c37a30a49f8b0e86;hb=d270463e93aa77304932b1df0e2315ec3c0d3be8;hp=87c3cc7cb17b6b6f985188f49eb74cc6c2cd4953;hpb=41f8ce693c4a04811bf47a8df83c1a376a9f34f4;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf.c b/bfd/elf.c index 87c3cc7cb1..24ca6df7c9 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -1668,7 +1668,7 @@ bfd_elf_get_dyn_lib_class (bfd *abfd) } void -bfd_elf_set_dyn_lib_class (bfd *abfd, int lib_class) +bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class) { if (bfd_get_flavour (abfd) == bfd_target_elf_flavour && bfd_get_format (abfd) == bfd_object) @@ -2126,13 +2126,11 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) abfd->flags |= HAS_RELOC; return TRUE; } - break; case SHT_GNU_verdef: elf_dynverdef (abfd) = shindex; elf_tdata (abfd)->dynverdef_hdr = *hdr; return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); - break; case SHT_GNU_versym: if (hdr->sh_entsize != sizeof (Elf_External_Versym)) @@ -4662,13 +4660,15 @@ assign_file_positions_for_non_load_sections (bfd *abfd, hdr->sh_offset = hdr->bfd_section->filepos; else if ((hdr->sh_flags & SHF_ALLOC) != 0) { - ((*_bfd_error_handler) - (_("%B: warning: allocated section `%s' not in segment"), - abfd, - (hdr->bfd_section == NULL - ? "*unknown*" - : hdr->bfd_section->name))); - if ((abfd->flags & D_PAGED) != 0) + if (hdr->sh_size != 0) + ((*_bfd_error_handler) + (_("%B: warning: allocated section `%s' not in segment"), + abfd, + (hdr->bfd_section == NULL + ? "*unknown*" + : hdr->bfd_section->name))); + /* We don't need to page align empty sections. */ + if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0) off += vma_page_aligned_bias (hdr->sh_addr, off, bed->maxpagesize); else @@ -5950,9 +5950,17 @@ _bfd_elf_init_private_section_data (bfd *ibfd, output BFD section flags have been set to something different. elf_fake_sections will set ELF section type based on BFD section flags. */ - if (osec->flags == isec->flags - || (osec->flags == 0 && elf_section_type (osec) == SHT_NULL)) - elf_section_type (osec) = elf_section_type (isec); + if (osec->flags == isec->flags || !osec->flags) + { + BFD_ASSERT (osec->flags == isec->flags + || (!osec->flags + && elf_section_type (osec) == SHT_NULL)); + elf_section_type (osec) = elf_section_type (isec); + } + + /* FIXME: Is this correct for all OS/PROC specific flags? */ + elf_section_flags (osec) |= (elf_section_flags (isec) + & (SHF_MASKOS | SHF_MASKPROC)); /* Set things up for objcopy and relocatable link. The output SHT_GROUP section will have its elf_next_in_group pointing back