From bce44aece915698a224a8aefa66784b27455675b Mon Sep 17 00:00:00 2001
From: James Cowgill <james410@cowgill.org.uk>
Date: Mon, 5 Jan 2015 15:17:02 +0000
Subject: [PATCH] Add mips n64 relocation format hack

MIPSEL N64 ELF files use a slightly different format for storing relocation
entries which is incompatible with the normal R_SYM / R_INFO macros.
To workaround this, we rearrange the bytes in the relocation's r_info field
when reading and writing the relocations.

This patch also ensures that strip.c sets the correct value of e_machine
before manipulating relocations so that these changes take effect.

Signed-off-by: James Cowgill <james410@cowgill.org.uk>
Upstream-Status: Pending [from debian]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>

---
 libelf/gelf_getrel.c      | 25 +++++++++++++++++++++++--
 libelf/gelf_getrela.c     | 25 +++++++++++++++++++++++--
 libelf/gelf_update_rel.c  | 20 +++++++++++++++++++-
 libelf/gelf_update_rela.c | 20 +++++++++++++++++++-
 src/strip.c               | 17 +++++++++++++++++
 5 files changed, 101 insertions(+), 6 deletions(-)

diff --git a/libelf/gelf_getrel.c b/libelf/gelf_getrel.c
index 309e3d3..2a81a97 100644
--- a/libelf/gelf_getrel.c
+++ b/libelf/gelf_getrel.c
@@ -36,6 +36,7 @@
 
 #include "libelfP.h"
 
+#define EF_MIPS_ABI	0x0000F000
 
 GElf_Rel *
 gelf_getrel (Elf_Data *data, int ndx, GElf_Rel *dst)
@@ -89,8 +90,28 @@ gelf_getrel (Elf_Data *data, int ndx, GElf_Rel *dst)
 	  result = NULL;
 	}
       else
-	result = memcpy (dst, &((Elf64_Rel *) data_scn->d.d_buf)[ndx],
-			 sizeof (Elf64_Rel));
+        {
+          GElf_Ehdr hdr;
+          result = memcpy (dst, &((Elf64_Rel *) data_scn->d.d_buf)[ndx],
+                           sizeof (Elf64_Rel));
+
+          if (gelf_getehdr(scn->elf, &hdr) != NULL &&
+              hdr.e_ident[EI_DATA] == ELFDATA2LSB &&
+              hdr.e_machine == EM_MIPS &&
+              (hdr.e_flags & EF_MIPS_ABI) == 0)
+            {
+              /*
+               * The relocation format is mangled on MIPSEL N64
+               *  We'll adjust it so at least R_SYM will work on it
+               */
+              GElf_Xword r_info = dst->r_info;
+              dst->r_info = (r_info << 32) |
+                            ((r_info >> 8) & 0xFF000000) |
+                            ((r_info >> 24) & 0x00FF0000) |
+                            ((r_info >> 40) & 0x0000FF00) |
+                            ((r_info >> 56) & 0x000000FF);
+            }
+        }
     }
 
   rwlock_unlock (scn->elf->lock);
diff --git a/libelf/gelf_getrela.c b/libelf/gelf_getrela.c
index d695f65..1f42a80 100644
--- a/libelf/gelf_getrela.c
+++ b/libelf/gelf_getrela.c
@@ -36,6 +36,7 @@
 
 #include "libelfP.h"
 
+#define EF_MIPS_ABI	0x0000F000
 
 GElf_Rela *
 gelf_getrela (Elf_Data *data, int ndx, GElf_Rela *dst)
@@ -90,8 +91,28 @@ 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));
+        {
+          GElf_Ehdr hdr;
+          result = memcpy (dst, &((Elf64_Rela *) data_scn->d.d_buf)[ndx],
+                           sizeof (Elf64_Rela));
+
+          if (gelf_getehdr(scn->elf, &hdr) != NULL &&
+              hdr.e_ident[EI_DATA] == ELFDATA2LSB &&
+              hdr.e_machine == EM_MIPS &&
+              (hdr.e_flags & EF_MIPS_ABI) == 0)
+            {
+              /*
+               * The relocation format is mangled on MIPSEL N64
+               *  We'll adjust it so at least R_SYM will work on it
+               */
+              GElf_Xword r_info = dst->r_info;
+              dst->r_info = (r_info << 32) |
+                            ((r_info >> 8) & 0xFF000000) |
+                            ((r_info >> 24) & 0x00FF0000) |
+                            ((r_info >> 40) & 0x0000FF00) |
+                            ((r_info >> 56) & 0x000000FF);
+            }
+        }
     }
 
   rwlock_unlock (scn->elf->lock);
diff --git a/libelf/gelf_update_rel.c b/libelf/gelf_update_rel.c
index 14f62e9..9095556 100644
--- a/libelf/gelf_update_rel.c
+++ b/libelf/gelf_update_rel.c
@@ -36,6 +36,7 @@
 
 #include "libelfP.h"
 
+#define EF_MIPS_ABI	0x0000F000
 
 int
 gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src)
@@ -86,6 +87,9 @@ gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src)
     }
   else
     {
+      GElf_Ehdr hdr;
+      GElf_Rel value = *src;
+
       /* Check whether we have to resize the data buffer.  */
       if (INVALID_NDX (ndx, Elf64_Rel, &data_scn->d))
 	{
@@ -93,7 +97,21 @@ gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src)
 	  goto out;
 	}
 
-      ((Elf64_Rel *) data_scn->d.d_buf)[ndx] = *src;
+      if (gelf_getehdr(scn->elf, &hdr) != NULL &&
+          hdr.e_ident[EI_DATA] == ELFDATA2LSB &&
+          hdr.e_machine == EM_MIPS &&
+          (hdr.e_flags & EF_MIPS_ABI) == 0)
+        {
+          /* Undo the MIPSEL N64 hack from gelf_getrel */
+          GElf_Xword r_info = value.r_info;
+          value.r_info = (r_info >> 32) |
+                         ((r_info << 8) &  0x000000FF00000000) |
+                         ((r_info << 24) & 0x0000FF0000000000) |
+                         ((r_info << 40) & 0x00FF000000000000) |
+                         ((r_info << 56) & 0xFF00000000000000);
+        }
+
+      ((Elf64_Rel *) data_scn->d.d_buf)[ndx] = value;
     }
 
   result = 1;
diff --git a/libelf/gelf_update_rela.c b/libelf/gelf_update_rela.c
index 8825270..4caa85f 100644
--- a/libelf/gelf_update_rela.c
+++ b/libelf/gelf_update_rela.c
@@ -36,6 +36,7 @@
 
 #include "libelfP.h"
 
+#define EF_MIPS_ABI	0x0000F000
 
 int
 gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src)
@@ -89,6 +90,9 @@ gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src)
     }
   else
     {
+      GElf_Ehdr hdr;
+      GElf_Rela value = *src;
+
       /* Check whether we have to resize the data buffer.  */
       if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d))
 	{
@@ -96,7 +100,21 @@ gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src)
 	  goto out;
 	}
 
-      ((Elf64_Rela *) data_scn->d.d_buf)[ndx] = *src;
+      if (gelf_getehdr(scn->elf, &hdr) != NULL &&
+          hdr.e_ident[EI_DATA] == ELFDATA2LSB &&
+          hdr.e_machine == EM_MIPS &&
+          (hdr.e_flags & EF_MIPS_ABI) == 0)
+        {
+          /* Undo the MIPSEL N64 hack from gelf_getrel */
+          GElf_Xword r_info = value.r_info;
+          value.r_info = (r_info >> 32) |
+                         ((r_info << 8) &  0x000000FF00000000) |
+                         ((r_info << 24) & 0x0000FF0000000000) |
+                         ((r_info << 40) & 0x00FF000000000000) |
+                         ((r_info << 56) & 0xFF00000000000000);
+        }
+
+      ((Elf64_Rela *) data_scn->d.d_buf)[ndx] = value;
     }
 
   result = 1;
diff --git a/src/strip.c b/src/strip.c
index a73009d..75bd7ba 100644
--- a/src/strip.c
+++ b/src/strip.c
@@ -1062,6 +1062,23 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
       goto fail;
     }
 
+  /* Copy identity part of the ELF header now */
+  newehdr = gelf_getehdr (newelf, &newehdr_mem);
+  if (newehdr == NULL)
+    INTERNAL_ERROR (fname);
+
+  memcpy (newehdr->e_ident, ehdr->e_ident, EI_NIDENT);
+  newehdr->e_type = ehdr->e_type;
+  newehdr->e_machine = ehdr->e_machine;
+  newehdr->e_version = ehdr->e_version;
+
+  if (gelf_update_ehdr (newelf, newehdr) == 0)
+    {
+      error (0, 0, gettext ("%s: error while creating ELF header: %s"),
+	     fname, elf_errmsg (-1));
+      return 1;
+    }
+
   /* Copy over the old program header if needed.  */
   if (phnum > 0)
     {
