diff options
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elfnn-riscv.c | 17 |
2 files changed, 16 insertions, 7 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index fe7f8ee..ded2898 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2019-08-28 Jim Wilson <jimw@sifive.com> + + * elfnn-riscv.c (_bfd_riscv_relax_lui): Add check to exclude abs + section when setting max_alignment. Update comment. + (_bfd_riscv_relax_pc): Likewise. + 2019-08-29 Alan Modra <amodra@gmail.com> PR 24891 diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index d14c29e..4729bae 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -3533,12 +3533,13 @@ _bfd_riscv_relax_lui (bfd *abfd, if (gp) { - /* If gp and the symbol are in the same output section, then - consider only that section's alignment. */ + /* If gp and the symbol are in the same output section, which is not the + abs section, then consider only that output section's alignment. */ struct bfd_link_hash_entry *h = bfd_link_hash_lookup (link_info->hash, RISCV_GP_SYMBOL, FALSE, FALSE, TRUE); - if (h->u.def.section->output_section == sym_sec->output_section) + if (h->u.def.section->output_section == sym_sec->output_section + && sym_sec->output_section != bfd_abs_section_ptr) max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power; } @@ -3767,11 +3768,13 @@ _bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED, if (gp) { - /* If gp and the symbol are in the same output section, then - consider only that section's alignment. */ + /* If gp and the symbol are in the same output section, which is not the + abs section, then consider only that output section's alignment. */ struct bfd_link_hash_entry *h = - bfd_link_hash_lookup (link_info->hash, RISCV_GP_SYMBOL, FALSE, FALSE, TRUE); - if (h->u.def.section->output_section == sym_sec->output_section) + bfd_link_hash_lookup (link_info->hash, RISCV_GP_SYMBOL, FALSE, FALSE, + TRUE); + if (h->u.def.section->output_section == sym_sec->output_section + && sym_sec->output_section != bfd_abs_section_ptr) max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power; } |