[PATCH] Allow memset local PLT reference for RISC-V.

Alistair Francis alistair23@gmail.com
Mon Jun 29 16:39:46 GMT 2020


On Mon, Jun 29, 2020 at 9:39 AM Florian Weimer <fweimer@redhat.com> wrote:
>
> * Alistair Francis:
>
> > On Mon, Jun 29, 2020 at 9:30 AM Florian Weimer <fweimer@redhat.com> wrote:
> >>
> >> * Alistair Francis:
> >>
> >> > There is also a PLT memset in libc_pic.a
> >> >
> >> >  1bc:   009aa023                sw      s1,0(s5)
> >> >           memset (result->__data, '\0',
> >> >  1c0:   865e                    mv      a2,s7
> >> >  1c2:   4581                    li      a1,0
> >> >  1c4:   008a8513                addi    a0,s5,8
> >> >  1c8:   00000097                auipc   ra,0x0
> >> >                         1c8: R_RISCV_CALL_PLT   __GI_memset
> >> >                         1c8: R_RISCV_RELAX      *ABS*
> >> >  1cc:   000080e7                jalr    ra # 1c8 <.LVL39+0x14>
> >>
> >> That's weird.  What does a direct call (to a hidden symbol) look like,
> >> relocation-wise.
> >
> > I'm not sure. How can I figure out?
>
> Look at different internal calls, e.g. __twalk_r and __libc_updwtmp (for
> two variants, one with a hidden prototype and one without).

Here is what I see from the libc_pic.a lib.

__twalk_r

00000000         *UND*  00000000 __GI___twalk_r
...
  __twalk_r (loaded, do_release_shlib, handle);
 1b2:   4088                    lw      a0,0(s1)
 1b4:   8622                    mv      a2,s0
 1b6:   00000597                auipc   a1,0x0
                        1b6: R_RISCV_PCREL_HI20 do_release_shlib
                        1b6: R_RISCV_RELAX      *ABS*
 1ba:   00058593                mv      a1,a1
                        1ba: R_RISCV_PCREL_LO12_I       .L0
                        1ba: R_RISCV_RELAX      *ABS*
 1be:   00000097                auipc   ra,0x0
                        1be: R_RISCV_CALL       __GI___twalk_r
                        1be: R_RISCV_RELAX      *ABS*
 1c2:   000080e7                jalr    ra # 1be <.L52+0xc>

__libc_updwtmp

000009c0 g     F .text  00000124 .hidden __libc_updwtmp
...
00000064 <.LVL8>:
  64:   0141                    addi    sp,sp,16
  __libc_updwtmp (file_name, utmp);
  66:   00000317                auipc   t1,0x0
                        66: R_RISCV_CALL        __libc_updwtmp
                        66: R_RISCV_RELAX       *ABS*
  6a:   00030067                jr      t1 # 66 <.LVL8+0x2>

Alistair

>
> Thanks,
> Florian
>


More information about the Libc-alpha mailing list