Upgrade to gcc-4.9.2
[akaros.git] / tools / compilers / gcc-glibc / glibc-2.14.1-ros / sysdeps / akaros / abort.c
1 /* Copyright (C) 1991,93,1995-1998,2001,02,2009 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
18
19 #include <bits/libc-lock.h>
20 #include <signal.h>
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include <unistd.h>
25
26 /* AKAROS: grossly limited version of abort, so we at least get a non-zero exit
27  * code.  Previously, the program seemed to exit properly (unlike on Linux). */
28
29 /* Try to get a machine dependent instruction which will make the
30    program crash.  This is used in case everything else fails.  */
31 #include <abort-instr.h>
32 #ifndef ABORT_INSTRUCTION
33 /* No such instruction is available.  */
34 # define ABORT_INSTRUCTION
35 #endif
36
37 #ifdef USE_IN_LIBIO
38 # include <libio/libioP.h>
39 # define fflush(s) _IO_flush_all_lockp (0)
40 #endif
41
42 /* Exported variable to locate abort message in core files etc.  */
43 struct abort_msg_s *__abort_msg __attribute__ ((nocommon));
44 libc_hidden_def (__abort_msg)
45
46
47 void
48 abort (void)
49 {
50       _exit (127);
51
52   /* If even this fails try to use the provided instruction to crash
53      or otherwise make sure we never return.  */
54   while (1)
55     /* Try for ever and ever.  */
56     ABORT_INSTRUCTION;
57 }
58 libc_hidden_def (abort)