mips: Fix soft-float handling.

Add -msoft-float alongside clang arguments to specify ABI.
Specify ABI in asm files explicitly.
This trigers asm warning due to gcc failing to propagate -msoft-float
but it's tolerable.
This commit is contained in:
Vladimir Serbinenko 2015-02-23 22:33:28 +01:00
parent 7ea452a142
commit 6a4ecd276e
6 changed files with 16 additions and 3 deletions

View file

@ -695,7 +695,8 @@ if test x"$platform" != xemu ; then
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_soft_float="-mno-inline-float-divide -mno-inline-sqrt"], []) [grub_cv_target_cc_soft_float="-mno-inline-float-divide -mno-inline-sqrt"], [])
fi fi
for cand in "-Xclang -msoft-float -Xclang -no-implicit-float" \ for cand in "-msoft-float -Xclang -msoft-float -Xclang -no-implicit-float" \
"-Xclang -msoft-float -Xclang -no-implicit-float" \
"-Xclang -msoft-float" "-msoft-float"; do "-Xclang -msoft-float" "-msoft-float"; do
if test x"$grub_cv_target_cc_soft_float" != xno ; then if test x"$grub_cv_target_cc_soft_float" != xno ; then
break break
@ -711,7 +712,7 @@ if test x"$platform" != xemu ; then
fi fi
case x"$grub_cv_target_cc_soft_float" in case x"$grub_cv_target_cc_soft_float" in
x"-Xclang"*) x*"-Xclang"*)
# A trick so that clang doesn't see it on link stаge # A trick so that clang doesn't see it on link stаge
TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float" TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float"
;; ;;

View file

@ -21,6 +21,7 @@
#include <grub/offsets.h> #include <grub/offsets.h>
#include <grub/machine/memory.h> #include <grub/machine/memory.h>
#include <grub/machine/kernel.h> #include <grub/machine/kernel.h>
#include <grub/cpu/kernel.h>
#include <grub/offsets.h> #include <grub/offsets.h>
#define BASE_ADDR 8 #define BASE_ADDR 8
@ -32,6 +33,7 @@
.globl __start, _start, start .globl __start, _start, start
.set noreorder .set noreorder
.set nomacro .set nomacro
mips_attributes
__start: __start:
_start: _start:
start: start:

View file

@ -1,8 +1,10 @@
#include <grub/symbol.h> #include <grub/symbol.h>
#include <grub/cpu/kernel.h>
.set noreorder .set noreorder
.set nomacro .set nomacro
mips_attributes
FUNCTION (grub_arch_sync_caches) FUNCTION (grub_arch_sync_caches)
#include "cache_flush.S" #include "cache_flush.S"

View file

@ -21,6 +21,7 @@
#include <grub/offsets.h> #include <grub/offsets.h>
#include <grub/machine/memory.h> #include <grub/machine/memory.h>
#include <grub/machine/kernel.h> #include <grub/machine/kernel.h>
#include <grub/cpu/kernel.h>
#include <grub/offsets.h> #include <grub/offsets.h>
#define BASE_ADDR 8 #define BASE_ADDR 8
@ -28,6 +29,7 @@
.globl __start, _start, start .globl __start, _start, start
.set noreorder .set noreorder
.set nomacro .set nomacro
mips_attributes
__start: __start:
_start: _start:
start: start:

View file

@ -17,11 +17,13 @@
*/ */
#include <grub/symbol.h> #include <grub/symbol.h>
#include <grub/cpu/kernel.h>
.p2align 4 /* force 16-byte alignment */ .p2align 4 /* force 16-byte alignment */
.set noreorder .set noreorder
.set nomacro .set nomacro
mips_attributes
VARIABLE (grub_relocator_forward_start) VARIABLE (grub_relocator_forward_start)
move $a0, $9 move $a0, $9

View file

@ -21,4 +21,8 @@
#include <grub/symbol.h> #include <grub/symbol.h>
#ifdef ASM_FILE
#define mips_attributes .gnu_attribute 4, 3
#endif
#endif /* ! GRUB_KERNEL_MACHINE_HEADER */ #endif /* ! GRUB_KERNEL_MACHINE_HEADER */