The ELF table created by old kernels (2.4.3 ish) is different from
that created by newer 2.4 kernels.  Try and handle that.  (Untested).


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@290 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/vg_main.c b/vg_main.c
index 94e175c..9047731 100644
--- a/vg_main.c
+++ b/vg_main.c
@@ -561,18 +561,28 @@
            && sp[0] == VKI_AT_PAGESZ
            && sp[-2] == VKI_AT_PHNUM
            && sp[-4] == VKI_AT_PHENT
-           && sp[-6] == VKI_AT_PHDR) {
+           && sp[-6] == VKI_AT_PHDR
+           && sp[-6-1] == 0) {
           if (0)
              VG_(printf)("Looks like you've got a 2.2.X kernel here.\n");
           sp -= 6;
        } else
        if (sp[2] == VKI_AT_CLKTCK
            && sp[0] == VKI_AT_PAGESZ
-           && sp[-2] == VKI_AT_HWCAP) {
+           && sp[-2] == VKI_AT_HWCAP
+           && sp[-2-1] == 0) {
           if (0)
              VG_(printf)("Looks like you've got a 2.4.X kernel here.\n");
           sp -= 2;
        } else
+       if (sp[2] == VKI_AT_CLKTCK
+           && sp[0] == VKI_AT_PAGESZ
+           && sp[-2] == VKI_AT_HWCAP
+           && sp[-2-20-1] == 0) {
+          if (0)
+             VG_(printf)("Looks like you've got a early 2.4.X kernel here.\n");
+          sp -= 22;
+       } else
          args_grok_error(
             "ELF frame does not look like 2.2.X or 2.4.X.\n   "
             "See kernel sources linux/fs/binfmt_elf.c to make sense of this."