about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-02-20 18:07:03 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-02-20 18:07:03 +0000
commite4a399dc3dbb3228eb39af230ad11bc42a018c93 (patch)
tree773015e530c6fb529eb5bf7b7287d133bccf23cf
parent7133957fe856f42c356c6e46c52d2ea8063ae067 (diff)
downloadglibc-e4a399dc3dbb3228eb39af230ad11bc42a018c93.tar.gz
glibc-e4a399dc3dbb3228eb39af230ad11bc42a018c93.tar.xz
glibc-e4a399dc3dbb3228eb39af230ad11bc42a018c93.zip
soft-fp: Adjust call to abort for kernel use.
soft-fp calls abort in various cases that the code doesn't handle, all
cases that should never actually occur for any supported choice of
types.

Calling an abort function is not appropriate for kernel use, so the
Linux kernel redefines abort as a macro in various ways in the ports
using this code, typically to "return 0" or similar.

One use of abort in soft-fp is inside a comma expression and doesn't
work with such a macro.  This patch changes it to use a statement
expression.

Tested for powerpc-nofpu that installed shared libraries are unchanged
by this patch.

(There are two classes of aborts: those to make control flow visible
to the compiler, in default cases of switches over _FP_CLS_COMBINE,
which could reasonably change to __builtin_unreachable for glibc but
would still need to handle pre-4.5 compilers for kernel use, and those
intended to detect any use of soft-fp for combinations of types the
code doesn't know how to handle, which could reasonably become link
failures if the calls should always be optimized away.  But those are
separate possible future enhancements.)

	* soft-fp/op-common.h (_FP_FROM_INT): Wrap call to abort in
	expression inside statement expression.
-rw-r--r--ChangeLog5
-rw-r--r--soft-fp/op-common.h2
2 files changed, 6 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 60d99fe3a4..2b518f2970 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-02-20  Joseph Myers  <joseph@codesourcery.com>
+
+	* soft-fp/op-common.h (_FP_FROM_INT): Wrap call to abort in
+	expression inside statement expression.
+
 2015-02-20  Stefan Liebler  <stli@linux.vnet.ibm.com>
 
 	* sysdeps/unix/sysv/linux/s390/lowlevellock.h: Include
diff --git a/soft-fp/op-common.h b/soft-fp/op-common.h
index 342532a4cc..14fd6cdc96 100644
--- a/soft-fp/op-common.h
+++ b/soft-fp/op-common.h
@@ -1815,7 +1815,7 @@
 			 X##_e = (_FP_EXPBIAS_##fs + 2 * _FP_W_TYPE_SIZE - 1 \
 				  - _FP_FROM_INT_lz);			\
 		       })						\
-		     : (abort (), 0)));					\
+		     : ({ abort (); 0; })));				\
 									\
 	  if ((rsize) - 1 + _FP_EXPBIAS_##fs >= _FP_EXPMAX_##fs		\
 	      && X##_e >= _FP_EXPMAX_##fs)				\