Would you please have a look at it, and let me know if you spot something absolutely basic and idiotic? (sorry, and a n00b to llvm / clang world !)
I can't see anything wrong with it.
What I suggest is to start investigating the IR files for clues (especially the target triple and the aapcs_vfp function attributes), the assembly files (for build attributes and function prologue) and the objects (for correctly linked libraries).
If you use -v on all command lines (clang, gcc, g++, ld) you might spot what assumptions are being taken and what to do instead.