[MIPS] Can we have R_MIPS_PC64?

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

[MIPS] Can we have R_MIPS_PC64?

Fangrui Song-2
R_MIPS_PC32 exists as a GNU extension.
R_MIPS_PC64 existed, but was removed by https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=4030e8f62467c29b782aa2480e1e452b8e458699
(like all the old commits, the description just recorded what the commit *did*. There was no *why*.)

This just makes certain things unnecessarily complex.

* DW_EH_PE_pcrel|DW_EH_PE_sdata8 => ?
* __patchable_function_entries has to have the SHF_WRITE flag on MIPS https://gcc.gnu.org/ml/gcc/2020-01/msg00106.html
   .quad foo - . => Error: PC-relative reference to a different section
Reply | Threaded
Open this post in threaded view
|

Re: [MIPS] Can we have R_MIPS_PC64?

Andrew Pinski-3
On Tue, Feb 4, 2020 at 11:20 PM Fangrui Song <[hidden email]> wrote:
>
> R_MIPS_PC32 exists as a GNU extension.
> R_MIPS_PC64 existed, but was removed by https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=4030e8f62467c29b782aa2480e1e452b8e458699
> (like all the old commits, the description just recorded what the commit *did*. There was no *why*.)

But the why is recorded still in the mail archives:
https://sourceware.org/ml/binutils/2004-04/msg00657.html

Thanks,
Andrew Pinski


>
> This just makes certain things unnecessarily complex.
>
> * DW_EH_PE_pcrel|DW_EH_PE_sdata8 => ?
> * __patchable_function_entries has to have the SHF_WRITE flag on MIPS https://gcc.gnu.org/ml/gcc/2020-01/msg00106.html
>    .quad foo - . => Error: PC-relative reference to a different section
Reply | Threaded
Open this post in threaded view
|

Re: [MIPS] Can we have R_MIPS_PC64?

Andrew Pinski-3
On Wed, Feb 5, 2020 at 12:59 AM Andrew Pinski <[hidden email]> wrote:
>
> On Tue, Feb 4, 2020 at 11:20 PM Fangrui Song <[hidden email]> wrote:
> >
> > R_MIPS_PC32 exists as a GNU extension.
> > R_MIPS_PC64 existed, but was removed by https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=4030e8f62467c29b782aa2480e1e452b8e458699
> > (like all the old commits, the description just recorded what the commit *did*. There was no *why*.)
>
> But the why is recorded still in the mail archives:
> https://sourceware.org/ml/binutils/2004-04/msg00657.html

See the GCC side of the reason:
https://gcc.gnu.org/ml/gcc-patches/2004-04/msg01093.html


Thanks,
Andrew Pinski

>
> Thanks,
> Andrew Pinski
>
>
> >
> > This just makes certain things unnecessarily complex.
> >
> > * DW_EH_PE_pcrel|DW_EH_PE_sdata8 => ?
> > * __patchable_function_entries has to have the SHF_WRITE flag on MIPS https://gcc.gnu.org/ml/gcc/2020-01/msg00106.html
> >    .quad foo - . => Error: PC-relative reference to a different section
Reply | Threaded
Open this post in threaded view
|

Re: [MIPS] Can we have R_MIPS_PC64?

Andrew Pinski-3
On Wed, Feb 5, 2020 at 1:04 AM Andrew Pinski <[hidden email]> wrote:

>
> On Wed, Feb 5, 2020 at 12:59 AM Andrew Pinski <[hidden email]> wrote:
> >
> > On Tue, Feb 4, 2020 at 11:20 PM Fangrui Song <[hidden email]> wrote:
> > >
> > > R_MIPS_PC32 exists as a GNU extension.
> > > R_MIPS_PC64 existed, but was removed by https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=4030e8f62467c29b782aa2480e1e452b8e458699
> > > (like all the old commits, the description just recorded what the commit *did*. There was no *why*.)
> >
> > But the why is recorded still in the mail archives:
> > https://sourceware.org/ml/binutils/2004-04/msg00657.html
>
> See the GCC side of the reason:
> https://gcc.gnu.org/ml/gcc-patches/2004-04/msg01093.html

Note the reason why R_MIPS_PC32 was added back is described here:
https://sourceware.org/ml/binutils/2004-06/msg00213.html

So it is a GNU extension as GCC accidentally emitted them so it needed
to be added back.


Thanks,
Andrew

>
>
> Thanks,
> Andrew Pinski
>
> >
> > Thanks,
> > Andrew Pinski
> >
> >
> > >
> > > This just makes certain things unnecessarily complex.
> > >
> > > * DW_EH_PE_pcrel|DW_EH_PE_sdata8 => ?
> > > * __patchable_function_entries has to have the SHF_WRITE flag on MIPS https://gcc.gnu.org/ml/gcc/2020-01/msg00106.html
> > >    .quad foo - . => Error: PC-relative reference to a different section
Reply | Threaded
Open this post in threaded view
|

Re: [MIPS] Can we have R_MIPS_PC64?

Andrew Pinski-3
On Wed, Feb 5, 2020 at 1:10 AM Andrew Pinski <[hidden email]> wrote:

>
> On Wed, Feb 5, 2020 at 1:04 AM Andrew Pinski <[hidden email]> wrote:
> >
> > On Wed, Feb 5, 2020 at 12:59 AM Andrew Pinski <[hidden email]> wrote:
> > >
> > > On Tue, Feb 4, 2020 at 11:20 PM Fangrui Song <[hidden email]> wrote:
> > > >
> > > > R_MIPS_PC32 exists as a GNU extension.
> > > > R_MIPS_PC64 existed, but was removed by https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=4030e8f62467c29b782aa2480e1e452b8e458699
> > > > (like all the old commits, the description just recorded what the commit *did*. There was no *why*.)
> > >
> > > But the why is recorded still in the mail archives:
> > > https://sourceware.org/ml/binutils/2004-04/msg00657.html
> >
> > See the GCC side of the reason:
> > https://gcc.gnu.org/ml/gcc-patches/2004-04/msg01093.html
>
> Note the reason why R_MIPS_PC32 was added back is described here:
> https://sourceware.org/ml/binutils/2004-06/msg00213.html
>
> So it is a GNU extension as GCC accidentally emitted them so it needed
> to be added back.


>  * DW_EH_PE_pcrel|DW_EH_PE_sdata8 => ?
Never used on MIPS, see
https://gcc.gnu.org/ml/gcc-patches/2004-06/msg00970.html
Plus:
https://www.sourceware.org/ml/binutils/2004-05/msg00227.html

>
>
> Thanks,
> Andrew
>
> >
> >
> > Thanks,
> > Andrew Pinski
> >
> > >
> > > Thanks,
> > > Andrew Pinski
> > >
> > >
> > > >
> > > > This just makes certain things unnecessarily complex.
> > > >
> > > > * DW_EH_PE_pcrel|DW_EH_PE_sdata8 => ?
> > > > * __patchable_function_entries has to have the SHF_WRITE flag on MIPS https://gcc.gnu.org/ml/gcc/2020-01/msg00106.html
> > > >    .quad foo - . => Error: PC-relative reference to a different section
Reply | Threaded
Open this post in threaded view
|

Re: [MIPS] Can we have R_MIPS_PC64?

Fangrui Song-2
On 2020-02-05, Andrew Pinski wrote:

>On Wed, Feb 5, 2020@1:10 AM Andrew Pinski <[hidden email]> wrote:
>>
>> On Wed, Feb 5, 2020@1:04 AM Andrew Pinski <[hidden email]> wrote:
>> >
>> > On Wed, Feb 5, 2020@12:59 AM Andrew Pinski <[hidden email]> wrote:
>> > >
>> > > On Tue, Feb 4, 2020@11:20 PM Fangrui Song <[hidden email]> wrote:
>> > > >
>> > > > R_MIPS_PC32 exists as a GNU extension.
>> > > > R_MIPS_PC64 existed, but was removed by https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=4030e8f62467c29b782aa2480e1e452b8e458699
>> > > > (like all the old commits, the description just recorded what the commit *did*. There was no *why*.)
>> > >
>> > > But the why is recorded still in the mail archives:
>> > > https://sourceware.org/ml/binutils/2004-04/msg00657.html
>> >
>> > See the GCC side of the reason:
>> > https://gcc.gnu.org/ml/gcc-patches/2004-04/msg01093.html
>>
>> Note the reason why R_MIPS_PC32 was added back is described here:
>> https://sourceware.org/ml/binutils/2004-06/msg00213.html
>>
>> So it is a GNU extension as GCC accidentally emitted them so it needed
>> to be added back.
>
>
>>  * DW_EH_PE_pcrel|DW_EH_PE_sdata8 => ?
>Never used on MIPS, see
>https://gcc.gnu.org/ml/gcc-patches/2004-06/msg00970.html
>Plus:
>https://www.sourceware.org/ml/binutils/2004-05/msg00227.html
>
>>
>>
>> Thanks,
>> Andrew
>>
>> >
>> >
>> > Thanks,
>> > Andrew Pinski
>> >
>> > >
>> > > Thanks,
>> > > Andrew Pinski
>> > >
>> > >
>> > > >
>> > > > This just makes certain things unnecessarily complex.
>> > > >
>> > > > * DW_EH_PE_pcrel|DW_EH_PE_sdata8 => ?
>> > > > * __patchable_function_entries has to have the SHF_WRITE flag on MIPS https://gcc.gnu.org/ml/gcc/2020-01/msg00106.html
>> > > >    .quad foo - . => Error: PC-relative reference to a different section

I hope someone can add back R_MIPS_PC64.

I don't have any take on MIPS. I just feel that MIPS64 makes other
64-bit architectures inconvenient due to its own deficiency.
Reply | Threaded
Open this post in threaded view
|

Re: [MIPS] Can we have R_MIPS_PC64?

Maciej W. Rozycki
On Sat, 8 Feb 2020, Fangrui Song wrote:

> I hope someone can add back R_MIPS_PC64.

 You don't need R_MIPS_PC64.  You can yield the same effect the usual
MIPS64 way, that is by composing R_MIPS_PC32 with R_MIPS_64 (similarly to
e.g. how R_MIPS_REL32 composes with R_MIPS_64).

 Of course the toolchain may not as it stands support this composition.  
Feel free to post patches to take care of your use case.

 HTH,

  Maciej
Reply | Threaded
Open this post in threaded view
|

Re: [MIPS] Can we have R_MIPS_PC64?

Fangrui Song-2
On 2020-02-17, Maciej W. Rozycki wrote:

>On Sat, 8 Feb 2020, Fangrui Song wrote:
>
>> I hope someone can add back R_MIPS_PC64.
>
> You don't need R_MIPS_PC64.  You can yield the same effect the usual
>MIPS64 way, that is by composing R_MIPS_PC32 with R_MIPS_64 (similarly to
>e.g. how R_MIPS_REL32 composes with R_MIPS_64).
>
> Of course the toolchain may not as it stands support this composition.
>Feel free to post patches to take care of your use case.
>
> HTH,
>
>  Maciej

Thank you for your comments. Sorry that I cannot create a patch, as I know very little about MIPS.

I raised these MIPS issues (including the recent DT_MIPS_XHASH
https://sourceware.org/ml/binutils/2020-01/msg00451.html) not because I
have anything to do with MIPS. I started the threads from the viewpoint
of a toolchain maintainer.

I noticed MIPS introduced complexity in a number of areas,
where other architectures can share a simple common implementation.
(It is weird that .quad foo - . is not representable on MIPS64.)

For my own selfish purposes, I will be sad if someone wants to add some
peculiar MIPS features (e.g. DT_MIPS_XHASH) to LLVM binary utilities or
lld. I hope we can get rid of things like
https://reviews.llvm.org/D72228 at some point.

I hope someone can implement PC64, or something similar for MIPS.