[PATCH v2] LoongArch: Add overflow check and new relaxations when relaxing pcalau12i+ld.d
Xi Ruoyao
xry111@xry111.site
Fri Nov 15 07:54:11 GMT 2024
On Fri, 2024-11-15 at 15:09 +0800, Lulu Cai wrote:
> On 11/15/24 2:13 PM, Xi Ruoyao wrote:
> > On Fri, 2024-11-15 at 10:51 +0800, Lulu Cai wrote:
> > > For pcalau12i+ld.d that can be relaxed, the relaxation is
> > > pcalau12i+ld.d => pcalau12i+addi.d => pcaddi and there is no
> > > overflow check.
> > >
> > > So the overflow check in the pcalau12i+ld.d relaxation and the
> > > relaxation of pcalau12i+ld.d => pcaddi are added.
> > >
> > > Changes from v1:
> > > * Add relaxation for pcalau12i+ld.d=>pcaddi.
> > Why do we need this?
> >
> > /* snip */
> >
> > > - if (relax_func (abfd, sec, sym_sec, rel, symval,
> > > - info, again, max_alignment)
> > > - && relax_func == loongarch_relax_pcala_ld)
> > > - loongarch_relax_pcala_addi (abfd, sec, sym_sec, rel, symval,
> > > - info, again, max_alignment);
> > If pcalau12i + ld.d can be relaxed to pcaddi, here the pair will be
> > relaxed to pcalau12i + addi.d by loongarch_relax_pcala_ld and then
> > further relaxed to pcaddi anyway.
> >
>
> The idea here is to do the relaxation of pcalau12i + ld.d once instead
> of twice if possible.
> But is this necessary in your opinion?
"If things are not broken don't fix it." Besides that there's another
reason to keep them separated:
A key difference between pcalau12i + ld.d => pcalau12i + addi.d and
pcalau12i + addi.d => pcaddi is the latter deletes bytes but the former
does not. So the latter must happens in elf_relax_section, but the
former can be moved to early_size_sections, like where
R_X86_64_GOTPCRELX is handled for x86_64.
Moving pcalau12i + ld.d => pcalau12i + addi.d earlier will allow us to
resolve https://github.com/loongson-community/discussions/issues/58. I
just have not got enough time to do the work myself...
--
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University
More information about the Binutils
mailing list