Index: contrib/llvm/tools/clang/lib/Driver/Tools.cpp =================================================================== --- contrib/llvm/tools/clang/lib/Driver/Tools.cpp +++ contrib/llvm/tools/clang/lib/Driver/Tools.cpp @@ -709,18 +709,6 @@ ABI = FloatABI::Hard; break; - case llvm::Triple::FreeBSD: - switch (Triple.getEnvironment()) { - case llvm::Triple::GNUEABIHF: - ABI = FloatABI::Hard; - break; - default: - // FreeBSD defaults to soft float - ABI = FloatABI::Soft; - break; - } - break; - default: switch (Triple.getEnvironment()) { case llvm::Triple::GNUEABIHF: @@ -729,6 +717,11 @@ break; case llvm::Triple::GNUEABI: case llvm::Triple::EABI: + // FreeBSD defaults to "soft" for pre-ARMv6. + if (Triple.getOS() == llvm::Triple::FreeBSD && SubArch < 6) { + ABI = FloatABI::Soft; + break; + } // EABI is always AAPCS, and if it was not marked 'hard', it's softfp ABI = FloatABI::SoftFP; break;