The ARM assembly files -- from probe_gas_arm and probe_NEON to all of the assembly kernels -- fail to link properly on many newer Linux distributions, including Ubuntu 11.10 and 12.04. This is due to an error in assembly code headers that I introduced to the ATLAS code base, and which seems to have been replicated by everyone else. (if you want credit for reinventing this error independently, please chime in.)
Almost all ARM Linux distributions compile into Thumb (.code 16) mode as default; the ARM mode (.code 32) assembly files work correctly because of the interworking capability built into the ABI. Reliable interworking requires that the label marking the function entry point be identified with a .type directive, like this
.type my_function_name, %function
However, some configurations of gcc and ld are able to guess the function entry point without the .type directive, and that is why the current code works on many Angstrom-based ARM distributions and Ubuntu 11.04 and earlier. This is also why the -marm switch, which forces the entire compilation to be in ARM mode (so there's no interworking), fixed this issue on Ubuntu 11.10.
The attached patch adds the proper .type directive to all assembly files, and also adds an .align directive to ensure the entry point is 32-bit aligned, and a .fpu directive to specify the fpu used by FP code (these are added in order to avoid similar link-related issues in the future).
With this patch applied 3.9.74 builds correctly with no special arguments (e.g. ../configure; make), passes make check, and passes Antoine's tester, when compiled on Ubuntu 11.10 using its standard gcc 4.6.1.
(Ubuntu 12.04 introduced a change to the hard floating point ABI, which conflicts with the explicit specification of -mfloat-abi=softfp in atlcomp.txt. I'm still checking to see whether removing the softfp spec will allow a clean build on 12.04 as well.)