]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
The ELF table created by old kernels (2.4.3 ish) is different from
authorJulian Seward <jseward@acm.org>
Sat, 18 May 2002 11:55:05 +0000 (11:55 +0000)
committerJulian Seward <jseward@acm.org>
Sat, 18 May 2002 11:55:05 +0000 (11:55 +0000)
that created by newer 2.4 kernels.  Try and handle that.  (Untested).

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@290

coregrind/vg_main.c
vg_main.c

index 94e175c70c77d2c243e2d4f3d2af85547d9e3e2f..90477316abd74e8ac871c83ad6c212327e1d0588 100644 (file)
@@ -561,17 +561,27 @@ static void process_cmd_line_options ( void )
            && 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   "
index 94e175c70c77d2c243e2d4f3d2af85547d9e3e2f..90477316abd74e8ac871c83ad6c212327e1d0588 100644 (file)
--- a/vg_main.c
+++ b/vg_main.c
@@ -561,17 +561,27 @@ static void process_cmd_line_options ( void )
            && 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   "