From 0789d0e5a1531c152be0f7a15f0195ba11a17583 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Wed, 18 Jan 2006 04:17:18 +0000 Subject: [PATCH] Make these behave correctly on ppc64 ELF. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5546 --- memcheck/tests/badjump.c | 12 ++++++++++++ memcheck/tests/badjump2.c | 8 ++++++++ 2 files changed, 20 insertions(+) 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"); -- 2.47.2