From: Julian Seward Date: Wed, 18 Jan 2006 04:17:18 +0000 (+0000) Subject: Make these behave correctly on ppc64 ELF. X-Git-Tag: svn/VALGRIND_3_2_0~365 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0789d0e5a1531c152be0f7a15f0195ba11a17583;p=thirdparty%2Fvalgrind.git Make these behave correctly on ppc64 ELF. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5546 --- diff --git a/memcheck/tests/badjump.c b/memcheck/tests/badjump.c index 053663be48..fecb762405 100644 --- a/memcheck/tests/badjump.c +++ b/memcheck/tests/badjump.c @@ -1,6 +1,18 @@ 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] = 0xE000000; + fake_fndescr[1] = 0; + fake_fndescr[2] = 0; + return ((int(*)(void)) fake_fndescr) (); +#else char* p = (char*)0xE000000; return ((int(*)(void)) p) (); +#endif } diff --git a/memcheck/tests/badjump2.c b/memcheck/tests/badjump2.c index 361966b6c1..a93c37c82e 100644 --- a/memcheck/tests/badjump2.c +++ b/memcheck/tests/badjump2.c @@ -33,8 +33,16 @@ int main(void) if (__builtin_setjmp(myjmpbuf) == 0) { // Jump to zero; will cause seg fault +#if defined(__powerpc64__) + unsigned long long int fake_fndescr[3]; + fake_fndescr[0] = 0; + fake_fndescr[1] = 0; + fake_fndescr[2] = 0; + ((void(*)(void)) fake_fndescr) (); +#else void (*fn)(void) = 0; fn(); +#endif fprintf(stderr, "Got here??\n"); } else { fprintf(stderr, "Signal caught, as expected\n");