|
From: <sv...@va...> - 2006-01-18 04:17:24
|
Author: sewardj
Date: 2006-01-18 04:17:18 +0000 (Wed, 18 Jan 2006)
New Revision: 5546
Log:
Make these behave correctly on ppc64 ELF.
Modified:
trunk/memcheck/tests/badjump.c
trunk/memcheck/tests/badjump2.c
Modified: trunk/memcheck/tests/badjump.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/badjump.c 2006-01-18 04:16:27 UTC (rev 5545)
+++ trunk/memcheck/tests/badjump.c 2006-01-18 04:17:18 UTC (rev 5546)
@@ -1,6 +1,18 @@
=20
int main ( void )
{
+#if defined(__powerpc64__)
+ /* on ppc64-linux, a function pointer points to a function
+ descriptor, not to the function's entry point. Hence to get
+ uniform behaviour on all supported targets - a jump to 0xE000000
+ - the following is needed. */
+ unsigned long long int fake_fndescr[3];
+ fake_fndescr[0] =3D 0xE000000;
+ fake_fndescr[1] =3D 0;
+ fake_fndescr[2] =3D 0;
+ return ((int(*)(void)) fake_fndescr) ();
+#else
char* p =3D (char*)0xE000000;
return ((int(*)(void)) p) ();
+#endif
}
Modified: trunk/memcheck/tests/badjump2.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/badjump2.c 2006-01-18 04:16:27 UTC (rev 5545)
+++ trunk/memcheck/tests/badjump2.c 2006-01-18 04:17:18 UTC (rev 5546)
@@ -33,8 +33,16 @@
=20
if (__builtin_setjmp(myjmpbuf) =3D=3D 0) {
// Jump to zero; will cause seg fault
+#if defined(__powerpc64__)
+ unsigned long long int fake_fndescr[3];
+ fake_fndescr[0] =3D 0;
+ fake_fndescr[1] =3D 0;
+ fake_fndescr[2] =3D 0;
+ ((void(*)(void)) fake_fndescr) ();
+#else
void (*fn)(void) =3D 0;
fn();
+#endif
fprintf(stderr, "Got here??\n");
} else {
fprintf(stderr, "Signal caught, as expected\n");
|