Re: clear_cache on Alpha architecture not implemented?
On 05/03/2012 10:51 AM, Camm Maguire wrote:
The goal was to exercise the very helpful gcc __builtin___clear_cache
support, and to avoid having to maintain our own assembler for all the
different cpus in this regard. Clearly, it is easy to revert this on a
per architecture basis if absolutely necessary. If gcc does or does not
plan on fixing this, please let me know so gcl can adjust as needed.
While we can probably fix this, you should know that __builtin_clear_cache
is highly tied to the implementation of trampolines for the target. Thus
there are at least 3 targets that do not handle this "properly":
For alpha, we emit imb directly during the trampoline_init target hook.
For powerpc32, the libgcc routine __clear_cache is unimplemented, but the
cache flushing for trampolines is inside the __trampoline_setup routine.
For powerpc64 and ia64, the ABI for function calls allows trampolines to
be implemented without emitting any insns, and thus the icache need not be
flushed at all. And thus we never bothered implementing __builtin_clear_cache.
So, the fact of the matter is that you can't reliably use this builtin for
arbitrary targets for any gcc version up to 4.7. Feel free to submit an
enhancement request via bugzilla so that we can remember to address this
for gcc 4.8.