On Mon, Jan 30, 2012 at 6:56 AM, Jon Masters <jonat...@jonmasters.org> wrote: > The __sync_synchronize "legacy" sync function is intended to be used to > perform an expensive data memory barrier operation. It is defined within > libgcc in such a way that I *believe* means that, on most architectures, > it is replaced with an inline assembly code emitted that performs a sync > operation. On ARM, and some other architectures with mixed ISAs wherein > there may not be a sync function nor one way to do this, this function > (__sync_synchronize) can be a real function call. In that case, it might > cause inline assembly generation, or e.g. call a kernel VDSO helper.
On ARM we don't have a kernel VDSO , sync_synchronize for older versions of the architecture ( anything prior to armv6k) should result in a call to sync_synchronize in libgcc.a which should take care of calling the kernel helper function. Therefore I'm assuming this is a breakage you face when building for armv5te > > The icu package contains a direct call to __sync_sychronize, especially > in the iotest test cases. I believe that this compiles fine on x86 > because there is no function call. However, on ARM, the code fails to > link because the __sync_synchronize function is HIDDEN and not exported > (or so goes my understanding - is that correct?). No, the HIDDEN shouldn't cause a link failure in this case - you should be able to pull this in when you link against the static libgcc where this should be defined. I don't know what your linker command line is so maybe that's a place to start investigating from. cheers Ramana