[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