diff options
Diffstat (limited to 'openmp/runtime/src/z_Linux_util.c')
-rw-r--r-- | openmp/runtime/src/z_Linux_util.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/openmp/runtime/src/z_Linux_util.c b/openmp/runtime/src/z_Linux_util.c index b3eaf2c59a5..9f34d3460ea 100644 --- a/openmp/runtime/src/z_Linux_util.c +++ b/openmp/runtime/src/z_Linux_util.c @@ -2619,7 +2619,11 @@ __kmp_get_load_balance( int max ) #if KMP_COMPILER_GCC && !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_PPC64 || KMP_ARCH_AARCH64) int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int tid, int argc, - void *p_argv[] ) + void *p_argv[] +#if OMPT_SUPPORT + , void **exit_frame_ptr +#endif +) { int argc_full = argc + 2; int i; @@ -2628,6 +2632,9 @@ int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int tid, int argc, void *args[argc_full]; void *idp[2]; +#if OMPT_SUPPORT + *exit_frame_ptr = __builtin_frame_address(0); +#endif /* We're only passing pointers to the target. */ for (i = 0; i < argc_full; i++) types[i] = &ffi_type_pointer; @@ -2647,6 +2654,10 @@ int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int tid, int argc, ffi_call(&cif, (void (*)(void))pkfn, NULL, args); +#if OMPT_SUPPORT + *exit_frame_ptr = 0; +#endif + return 1; } @@ -2659,7 +2670,16 @@ int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int tid, int argc, int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int tid, - int argc, void *p_argv[] ) { + int argc, void *p_argv[] +#if OMPT_SUPPORT + , void **exit_frame_ptr +#endif +) +{ +#if OMPT_SUPPORT + *exit_frame_ptr = __builtin_frame_address(0); +#endif + switch (argc) { default: fprintf(stderr, "Too many args to microtask: %d!\n", argc); @@ -2729,6 +2749,10 @@ __kmp_invoke_microtask( microtask_t pkfn, break; } +#if OMPT_SUPPORT + *exit_frame_ptr = 0; +#endif + return 1; } |