[PATCH v1] LoongArch: Fix relaxation alignment with ld -r (PR 33236)

Alan Modra amodra@gmail.com
Wed Jun 10 22:50:10 GMT 2026


On Mon, Jun 08, 2026 at 02:24:01PM +0800, mengqinggang wrote:
> > diff --git a/ld/ldlang.c b/ld/ldlang.c
> > index 48dd33a49bb..8c3c287a3a0 100644
> > --- a/ld/ldlang.c
> > +++ b/ld/ldlang.c
> > @@ -5769,6 +5769,10 @@ size_input_section
> >       {
> >         bfd_size_type alignment_needed;
> > +      bool synthesize_align = bfd_link_relocatable (&link_info)
> > +			      && (i->flags & SEC_CODE) != 0
> > +			      && bfd_get_arch (i->owner) == bfd_arch_loongarch;
> > +
> >         /* Align this section first to the input sections requirement,
> >   	 then to the output section's requirement.  If this alignment
> >   	 is greater than any seen before, then record it too.  Perform
> > @@ -5788,7 +5792,9 @@ size_input_section
> >         alignment_needed = align_power (dot, i->alignment_power) - dot;
> > -      if (alignment_needed != 0)
> > +      /* If synthesized ALIGN may be needed, add one align section
> > +	 and one align relocation and disable the default handling.  */
> > +      if (alignment_needed != 0 && ! synthesize_align)
> >   	{
> >   	  insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
> >   	  dot += alignment_needed;

Architecture specific code isn't supposed to be in ldlang.c.  Yes, I
know there is a bfd_arch_tic54x test in there.  I don't like that one
either.

I haven't looked too deeply into what your patch does, but I think you
should be able to stop ldlang.c:size_input_section padding by changing
the input section alignment_power in add_align_section (and tweak
loongarch_add_align_relocs to not use the sec->alignment_power but
instead align_sec->size).

-- 
Alan Modra


More information about the Binutils mailing list