The ELF gABI says in part of sh_addralign: "The value of sh_addr must
be congruent to 0, modulo the value of sh_addralign."
* elf.c (elf_fake_sections): Ensure sh_addralign is such that
sh_addr mod sh_addalign is zero.
+2020-03-04 Alan Modra <amodra@gmail.com>
+
+ * elf.c (elf_fake_sections): Ensure sh_addralign is such that
+ sh_addr mod sh_addalign is zero.
+
2020-03-04 Alan Modra <amodra@gmail.com>
* format.c (bfd_check_format_matches): Call cleanup on error exit.
unsigned int sh_type;
const char *name = asect->name;
bfd_boolean delay_st_name_p = FALSE;
+ bfd_vma mask;
if (arg->failed)
{
arg->failed = TRUE;
return;
}
- this_hdr->sh_addralign = (bfd_vma) 1 << asect->alignment_power;
+ /* Set sh_addralign to the highest power of two given by alignment
+ consistent with the section VMA. Linker scripts can force VMA. */
+ mask = ((bfd_vma) 1 << asect->alignment_power) | this_hdr->sh_addr;
+ this_hdr->sh_addralign = mask & -mask;
/* The sh_entsize and sh_info fields may have been set already by
copy_private_section_data. */