From: Julian Seward Date: Sat, 18 May 2002 11:55:05 +0000 (+0000) Subject: The ELF table created by old kernels (2.4.3 ish) is different from X-Git-Tag: svn/VALGRIND_1_0_3~176 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=beefe2fffda03e6c9536940e6f49845224f970aa;p=thirdparty%2Fvalgrind.git 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 --- diff --git a/coregrind/vg_main.c b/coregrind/vg_main.c index 94e175c70c..90477316ab 100644 --- a/coregrind/vg_main.c +++ b/coregrind/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 " diff --git a/vg_main.c b/vg_main.c index 94e175c70c..90477316ab 100644 --- 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 "