[PATCH] Allow memset local PLT reference for RISC-V.
Florian Weimer
fweimer@redhat.com
Mon Jun 29 16:53:24 GMT 2020
* Alistair Francis:
> 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>
Okay, then the memcpy symbol hack does not work on RISC-V, and it's
worth fixing that.
It would be interesting to build iconv/gconv_open.c with --save-temps
and see what exactly ends up in the assembler file (and also what the
preprocessed sources look like).
Thanks,
Florian
More information about the Libc-alpha
mailing list