[PATCH 1/2] riscv: Use elf_machine_rela_relative to handle R_RISCV_RELATIVE

Palmer Dabbelt palmer@dabbelt.com
Fri Jun 24 04:11:08 GMT 2022


On Thu, 23 Jun 2022 19:41:42 PDT (-0700), kito.cheng@sifive.com wrote:
> Hi Palmer:
>
> I didn't have commit access for glibc, so plz commit that once v2 is
> everything OK, or you commit this first is also works for me :)

I just committed the 1/2.  Thanks!

>
> Thanks!
>
> On Fri, Jun 24, 2022 at 5:50 AM Palmer Dabbelt <palmer@dabbelt.com> wrote:
>>
>> On Thu, 23 Jun 2022 09:39:57 PDT (-0700), adhemerval.zanella@linaro.org wrote:
>> >
>> >
>> >> On 23 Jun 2022, at 12:47, Kito Cheng <kito.cheng@sifive.com> wrote:
>> >>
>> >> Minor clean-up, we need to change this part in following patch, clean this up
>> >> to prevent we duplicated the change twice.
>> >
>> > LGTM, thanks.
>> >
>> > Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
>>
>> Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
>> Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
>>
>> I forget if Kito has commit access.  I'd usually just commit it, but
>> there's some comments on the second one.  They look independent to me,
>> but I'll hold off just to be sure.
>>
>> Thanks!
>>
>> >> ---
>> >> sysdeps/riscv/dl-machine.h | 18 +++++++++---------
>> >> 1 file changed, 9 insertions(+), 9 deletions(-)
>> >>
>> >> diff --git a/sysdeps/riscv/dl-machine.h b/sysdeps/riscv/dl-machine.h
>> >> index a60a452952..4bb858adaa 100644
>> >> --- a/sysdeps/riscv/dl-machine.h
>> >> +++ b/sysdeps/riscv/dl-machine.h
>> >> @@ -152,6 +152,14 @@ elf_machine_fixup_plt (struct link_map *map, lookup_t t,
>> >>
>> >> #ifdef RESOLVE_MAP
>> >>
>> >> +static inline void
>> >> +__attribute__ ((always_inline))
>> >> +elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc,
>> >> +                      void *const reloc_addr)
>> >> +{
>> >> +  *(ElfW(Addr) *) reloc_addr = l_addr + reloc->r_addend;
>> >> +}
>> >> +
>> >> /* Perform a relocation described by R_INFO at the location pointed to
>> >>    by RELOC_ADDR.  SYM is the relocation symbol specified by R_INFO and
>> >>    MAP is the object containing the reloc.  */
>> >> @@ -182,7 +190,7 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[],
>> >>   switch (r_type)
>> >>     {
>> >>     case R_RISCV_RELATIVE:
>> >> -      *addr_field = map->l_addr + reloc->r_addend;
>> >> +      elf_machine_rela_relative (map->l_addr, reloc, addr_field);
>> >>       break;
>> >>     case R_RISCV_JUMP_SLOT:
>> >>     case __WORDSIZE == 64 ? R_RISCV_64 : R_RISCV_32:
>> >> @@ -258,14 +266,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[],
>> >>     }
>> >> }
>> >>
>> >> -static inline void
>> >> -__attribute__ ((always_inline))
>> >> -elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc,
>> >> -                      void *const reloc_addr)
>> >> -{
>> >> -  *(ElfW(Addr) *) reloc_addr = l_addr + reloc->r_addend;
>> >> -}
>> >> -
>> >> static inline void
>> >> __attribute__ ((always_inline))
>> >> elf_machine_lazy_rel (struct link_map *map, struct r_scope_elem *scope[],
>> >> --
>> >> 2.34.0
>> >>


More information about the Libc-alpha mailing list