This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: soft-fp: Adjust call to abort for kernel use [committed]
- From: Rich Felker <dalias at libc dot org>
- To: Joseph Myers <joseph at codesourcery dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Fri, 20 Feb 2015 13:46:14 -0500
- Subject: Re: soft-fp: Adjust call to abort for kernel use [committed]
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot DEB dot 2 dot 10 dot 1502201807380 dot 30214 at digraph dot polyomino dot org dot uk>
On Fri, Feb 20, 2015 at 06:07:53PM +0000, Joseph Myers wrote:
> 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. Committed.
>
> (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.)
>
> 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.
>
> diff --git a/soft-fp/op-common.h b/soft-fp/op-common.h
> index 342532a..14fd6cd 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) \
Could these be replaced by __builtin_trap() or similar? I'm not clear
on whether this code is purely glibc+kernel or also used by gcc, but
if it's used by gcc too it would be very much preferable not to have
libgcc pulling in a reference to abort (this affects -ffreestanding,
etc.).
Rich