Ping
Thanks, Ying 在 2024/10/12 17:40, Ying Huang 写道: > Ping > > > Thanks, > > Ying > > > 在 2024/9/27 17:52, Ying Huang 写道: >> Ping >> >> >> Thanks, >> >> Ying >> >> >> 在 2024/9/14 17:45, Ying Huang 写道: >>> Ping >>> >>> >>> Thanks, >>> >>> Ying >>> >>> >>> 在 2024/8/30 17:04, Ying Huang 写道: >>>> Hi Mark, >>>> >>>> What can I do to process these patches? >>>> >>>> If you did not accept changes in current patch, how about the following >>>> changes method? >>>> >>>> diff --git a/libelf/gelf_getrela.c b/libelf/gelf_getrela.c >>>> index d695f659..fd974bdf 100644 >>>> --- a/libelf/gelf_getrela.c >>>> +++ b/libelf/gelf_getrela.c >>>> @@ -90,8 +90,21 @@ gelf_getrela (Elf_Data *data, int ndx, GElf_Rela *dst) >>>> result = NULL; >>>> } >>>> else >>>> - result = memcpy (dst, &((Elf64_Rela *) data_scn->d.d_buf)[ndx], >>>> - sizeof (Elf64_Rela)); >>>> + { >>>> + result = memcpy (dst, &((Elf64_Rela *) data_scn->d.d_buf)[ndx], >>>> + sizeof (Elf64_Rela)); >>>> + GElf_Ehdr ehdr_mem; >>>> + GElf_Ehdr *ehdr = __gelf_getehdr_rdlock (scn->elf, &ehdr_mem); >>>> + if(ehdr != NULL && ehdr->e_machine == EM_MIPS && >>>> ehdr->e_ident[EI_DATA] == ELFDATA2LSB) >>>> + { >>>> + Elf64_Xword info = dst->r_info; >>>> + dst->r_info = (((info & 0xffffffff) << 32) >>>> + | ((info >> 56) & 0xff) >>>> + | ((info >> 40) & 0xff00) >>>> + | ((info >> 24) & 0xff0000) >>>> + | ((info >> 8) & 0xff000000)); >>>> + } >>>> + } >>>> } >>>> >>>> rwlock_unlock (scn->elf->lock); >>>> >>>> diff --git a/libelf/gelf_update_rela.c b/libelf/gelf_update_rela.c >>>> index 88252703..592d74b9 100644 >>>> --- a/libelf/gelf_update_rela.c >>>> +++ b/libelf/gelf_update_rela.c >>>> @@ -96,7 +96,20 @@ gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela >>>> *src) >>>> goto out; >>>> } >>>> >>>> - ((Elf64_Rela *) data_scn->d.d_buf)[ndx] = *src; >>>> + GElf_Ehdr ehdr_mem; >>>> + GElf_Ehdr *ehdr = __gelf_getehdr_rdlock (scn->elf, &ehdr_mem); >>>> + GElf_Rela rela = *src; >>>> + if(ehdr != NULL && ehdr->e_machine == EM_MIPS && >>>> ehdr->e_ident[EI_DATA] == ELFDATA2LSB) >>>> + { >>>> + Elf64_Xword info = rela.r_info; >>>> + rela.r_info = (info >> 32 >>>> + | ((info << 56) & 0xff00000000000000) >>>> + | ((info << 40) & 0xff000000000000) >>>> + | ((info << 24) & 0xff0000000000) >>>> + | ((info << 8) & 0xff00000000)); >>>> + } >>>> + >>>> + ((Elf64_Rela *) data_scn->d.d_buf)[ndx] = rela; >>>> } >>>> >>>> result = 1; >>>> >>>> >>>> If you have any other questions, please let me know. >>>> >>>> >>>> Thanks, >>>> >>>> Ying >>>>