Patchwork Add SH4 ELF magic into qemu-binfmt-conf.sh.

login
register
mail settings
Submitter David Kozub
Date Dec. 17, 2009, 1:11 p.m.
Message ID <alpine.LRH.2.00.0912171409570.9059@linux.fjfi.cvut.cz>
Download mbox | patch
Permalink /patch/41317/
State New
Headers show

Comments

David Kozub - Dec. 17, 2009, 1:11 p.m.
Signed-off-by: David Kozub <zub@linux.fjfi.cvut.cz>
---
  qemu-binfmt-conf.sh |    9 ++++++++-
  1 files changed, 8 insertions(+), 1 deletions(-)
Richard Henderson - Dec. 17, 2009, 7:45 p.m.
On 12/17/2009 05:11 AM, David Kozub wrote:
> ;;
> + sh4)
> + cpu="sh4"
> + ;;

You don't need this entry.  That table is supposed to be for changing 
the name.  You'd use it if uname returned sh4eb though...


r~
David Kozub - Dec. 17, 2009, 9:15 p.m.
On Thu, 17 Dec 2009, Richard Henderson wrote:

>> ;;
>> + sh4)
>> + cpu="sh4"
>> + ;;
>
> You don't need this entry.  That table is supposed to be for changing the 
> name.  You'd use it if uname returned sh4eb though...

Indeed, I got swayed. Then also "m68k" and "i386" are superfluous there.

As for sh4eb, AFAIK "uname -m" still returns "sh4" only. This leaves us in 
a situation similar to mips and arm - we could still want to have qemu for 
the other endianness.

On a side note, why is the mask for e_type 0xfffe, allowing both ET_EXEC 
and ET_DYN? I.e. when would we need it for shared libraries?

Being new here - what should I do about the patch? Send again, with fixes?

Best regards,

David
Richard Henderson - Dec. 17, 2009, 10:47 p.m.
On 12/17/2009 01:15 PM, David Kozub wrote:
> On a side note, why is the mask for e_type 0xfffe, allowing both ET_EXEC
> and ET_DYN? I.e. when would we need it for shared libraries?

-fpie generates an ET_DYN "executable".


r~

Patch

diff --git a/qemu-binfmt-conf.sh b/qemu-binfmt-conf.sh
index ba916ac..9c65c9a 100644
--- a/qemu-binfmt-conf.sh
+++ b/qemu-binfmt-conf.sh
@@ -1,5 +1,5 @@ 
  #!/bin/sh
-# enable automatic i386/ARM/M68K/MIPS/SPARC/PPC program execution by the kernel
+# enable automatic i386/ARM/M68K/MIPS/SPARC/PPC/SH4 program execution by the kernel

  # load the binfmt_misc module
  if [ ! -d /proc/sys/fs/binfmt_misc ]; then
@@ -27,6 +27,9 @@  case "$cpu" in
    armv4l)
      cpu="arm"
    ;;
+  sh4)
+    cpu="sh4"
+  ;;
  esac

  # register the interpreter for each cpu except for the native one
@@ -60,3 +63,7 @@  if [ $cpu != "mips" ] ; then
      echo   ':mips64:M::\x7fELF\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/local/bin/qemu-mips64:' > /proc/sys/fs/binfmt_misc/register
      echo   ':mips64el:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-mips64el:' > /proc/sys/fs/binfmt_misc/register
  fi
+if [ $cpu != "sh4" ] ; then
+    echo ':sh4:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a\x00:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-sh4:' > /proc/sys/fs/binfmt_misc/register
+    echo ':sh4eb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/local/bin/qemu-sh4eb:' > /proc/sys/fs/binfmt_misc/register
+fi