When compiled for arm with -mfpu=neon, the .init_array section declaredhere becomes 64-bit aligned. Since the dynamic linker expects an array of32-bit function pointers with no gaps, this causes an immediate SIGSEGVfor any application linked with libdl.I suspect the default array alignment becomes 64 bits because the neonhas 64-bit registers, but I'm not sure. The explicit aligned attributedoes not help because it can only increase the alignment.Fortunately, the whole declaration can be replaced with a constructorattribute on the init function, which also adds it to the init_arraytable and does the right thing with alignment.(Why wasn't it this way already? I don't know, but maybe the constructorattribute wasn't available yet when this code was written.)Richard Braakmanrichard.braakman@jollamobile.com--- eglibc-2.15/dlfcn/dlfcn.c 2006-08-17 04:18:26.000000000 +0300+++ glibc-fixed/dlfcn/dlfcn.c 2013-06-10 13:20:34.846885906 +0300@@ -24,16 +24,9 @@ char **__dlfcn_argv attribute_hidden;-static void+static void __attribute ((constructor)) init (int argc, char *argv[]) { __dlfcn_argc = argc; __dlfcn_argv = argv; }--static void (*const init_array []) (int argc, char *argv[])- __attribute__ ((section (".init_array"), aligned (sizeof (void *))))- __attribute_used__ =-{- init-};