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

Reply via email to