Explorar el Código

fix eglibc qemu-sparc builds, -Os does not work for this

Waldemar Brodkorb hace 10 años
padre
commit
c975ab62fb
Se han modificado 2 ficheros con 93 adiciones y 3 borrados
  1. 9 3
      toolchain/eglibc/Makefile
  2. 84 0
      toolchain/eglibc/patches/sparc-libm.patch

+ 9 - 3
toolchain/eglibc/Makefile

@@ -3,12 +3,18 @@
 
 include $(TOPDIR)/rules.mk
 include ../rules.mk
-include Makefile.inc
-include ${TOPDIR}/mk/buildhlp.mk
 
-# ssp partially supported
+# eglibc does not compile with Os on sparc
+ifeq ($(ADK_LINUX_SPARC),y)
+TARGET_CFLAGS_LIBC:=	$(subst Os,O2,$(TARGET_CFLAGS))
+endif
+
+# ssp not supported
 TARGET_CFLAGS_LIBC:= 	$(filter-out -fstack-protector,$(TARGET_CFLAGS_LIBC))
 
+include Makefile.inc
+include ${TOPDIR}/mk/buildhlp.mk
+
 ifeq ($(ADK_TARGET_NO_FPU),y)
 EGLIBC_CONFOPTS+=       --without-fp
 endif

+ 84 - 0
toolchain/eglibc/patches/sparc-libm.patch

@@ -0,0 +1,84 @@
+diff -Nur eglibc-2.18.orig/libc/sysdeps/sparc/sparc32/fpu/s_fdimf.S eglibc-2.18/libc/sysdeps/sparc/sparc32/fpu/s_fdimf.S
+--- eglibc-2.18.orig/libc/sysdeps/sparc/sparc32/fpu/s_fdimf.S	2013-09-13 10:20:20.000000000 +0200
++++ eglibc-2.18/libc/sysdeps/sparc/sparc32/fpu/s_fdimf.S	1970-01-01 01:00:00.000000000 +0100
+@@ -1,35 +0,0 @@
+-/* Compute positive difference, sparc 32-bit.
+-   Copyright (C) 2013 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by David S. Miller <davem@davemloft.net>.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sysdep.h>
+-
+-ENTRY(__fdimf)
+-	st	%o0, [%sp + 72]
+-	st	%o1, [%sp + 76]
+-	ld	[%sp + 72], %f0
+-	ld	[%sp + 76], %f1
+-	fcmps	%f0, %f1
+-	fbug	1f
+-	 st	%g0, [%sp + 72]
+-	ld	[%sp + 72], %f0
+-	fnegs	%f0, %f1
+-1:	retl
+-	 fsubs	%f0, %f1, %f0
+-END(__fdimf)
+-weak_alias (__fdimf, fdimf)
+diff -Nur eglibc-2.18.orig/libc/sysdeps/sparc/sparc32/fpu/s_fdim.S eglibc-2.18/libc/sysdeps/sparc/sparc32/fpu/s_fdim.S
+--- eglibc-2.18.orig/libc/sysdeps/sparc/sparc32/fpu/s_fdim.S	2013-09-13 10:20:20.000000000 +0200
++++ eglibc-2.18/libc/sysdeps/sparc/sparc32/fpu/s_fdim.S	1970-01-01 01:00:00.000000000 +0100
+@@ -1,41 +0,0 @@
+-/* Compute positive difference, sparc 32-bit.
+-   Copyright (C) 2013 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by David S. Miller <davem@davemloft.net>.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library; if not, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sysdep.h>
+-#include <math_ldbl_opt.h>
+-
+-ENTRY(__fdim)
+-	std	%o0, [%sp + 72]
+-	std	%o2, [%sp + 80]
+-	ldd	[%sp + 72], %f0
+-	ldd	[%sp + 80], %f2
+-	fcmpd	%f0, %f2
+-	st	%g0, [%sp + 72]
+-	fbug	1f
+-	 st	%g0, [%sp + 76]
+-	ldd	[%sp + 72], %f0
+-	fnegd	%f0, %f2
+-1:	retl
+-	 fsubd	%f0, %f2, %f0
+-END(__fdim)
+-weak_alias (__fdim, fdim)
+-
+-#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+-compat_symbol (libm, __fdim, fdiml, GLIBC_2_1);
+-#endif