From: Stan Shebs Date: Mon, 25 Mar 2019 21:03:24 +0000 (-0700) Subject: Also work around clang bctrl issue in get_clockfreq.c X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=895947a3cadfcffe12f108738f42855aff7a32b8;p=thirdparty%2Fglibc.git Also work around clang bctrl issue in get_clockfreq.c --- diff --git a/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c b/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c index 3a2216021bf..8821218ece9 100644 --- a/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c +++ b/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c @@ -25,11 +25,29 @@ #include #include +#if defined __clang__ && defined __powerpc64__ +/* On ppc, __get_clockfreq's body eventually expands into asm code + that does a bctrl, but clang does not recognize the need to save + the link register, so calls loop infinitely instead of returning. + As workaround, make a dummy function call that forces a link + register save. */ +volatile int get_clockfreq_dummy_glob; + +void __attribute__((noinline)) get_clockfreq_dummy () +{ + get_clockfreq_dummy_glob = 45; +} +#endif + hp_timing_t __get_clockfreq (void) { hp_timing_t result = 0L; +#if defined __clang__ && defined __powerpc64__ + get_clockfreq_dummy (); +#endif + #ifdef SHARED /* The vDSO does not return an error (it clear cr0.so on returning). */ INTERNAL_SYSCALL_DECL (err);