diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 541611d884..fee1f1776c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +Mon Mar 6 23:31:36 1995 Doug Evans + + * elfcode.h (elf_sort_hdrs): Keep SHT_NOBITS sections after + !SHT_NOBITS ones. + Mon Mar 6 09:53:08 1995 Jeff Law (law@snake.cs.utah.edu) * cpu-hppa.c (arch_info_struct): Support both PA1.0 and PA1.1 diff --git a/bfd/elfcode.h b/bfd/elfcode.h index 36e2243dc7..72908ca582 100644 --- a/bfd/elfcode.h +++ b/bfd/elfcode.h @@ -867,7 +867,9 @@ elf_object_p (abfd) /* Check that the ELF e_machine field matches what this particular BFD format expects. */ - if (ebd->elf_machine_code != i_ehdrp->e_machine) + if (ebd->elf_machine_code != i_ehdrp->e_machine + && (ebd->elf_machine_alt1 == 0 || i_ehdrp->e_machine != ebd->elf_machine_alt1) + && (ebd->elf_machine_alt2 == 0 || i_ehdrp->e_machine != ebd->elf_machine_alt2)) { const bfd_target * const *target_ptr; @@ -2265,8 +2267,21 @@ elf_sort_hdrs (arg1, arg2) return -1; else if (hdr1->sh_addr > hdr2->sh_addr) return 1; + if (hdr1->sh_size == 0) + { + if (hdr2->sh_size == 0) + { + /* Put !SHT_NOBITS sections before SHT_NOBITS ones. + The main loop in map_program_segments requires this. */ + return (hdr1->sh_type == SHT_NOBITS) - (hdr2->sh_type == SHT_NOBITS); + } + else + return -1; + } + else if (hdr2->sh_size == 0) + return 1; /* Put !SHT_NOBITS sections before SHT_NOBITS ones. - The main loop in map_program_segments assumes this. */ + The main loop in map_program_segments requires this. */ return (hdr1->sh_type == SHT_NOBITS) - (hdr2->sh_type == SHT_NOBITS); } else @@ -3764,7 +3779,9 @@ elf_core_file_p (abfd) /* Check that the ELF e_machine field matches what this particular BFD format expects. */ - if (ebd->elf_machine_code != i_ehdrp->e_machine) + if (ebd->elf_machine_code != i_ehdrp->e_machine + && (ebd->elf_machine_alt1 == 0 || i_ehdrp->e_machine != ebd->elf_machine_alt1) + && (ebd->elf_machine_alt2 == 0 || i_ehdrp->e_machine != ebd->elf_machine_alt2)) { const bfd_target * const *target_ptr;