unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#12316: Simplify redefinition of 'abort'.
@ 2012-08-31  3:14 Paul Eggert
  2012-08-31 11:39 ` Eli Zaretskii
  2012-08-31 14:41 ` Eli Zaretskii
  0 siblings, 2 replies; 7+ messages in thread
From: Paul Eggert @ 2012-08-31  3:14 UTC (permalink / raw)
  To: 12316; +Cc: Juanma Barranquero

Tags: patch

Here's a patch I'd like to install after a bit more testing.
It simplifies how 'abort' is configured, on POSIX hosts.
This affects the Windows port but I haven't tested that part.
I'm CC'ing this to Eli and Juanma to give them a heads-up.

=== modified file 'ChangeLog'
--- ChangeLog	2012-08-28 16:01:59 +0000
+++ ChangeLog	2012-08-31 03:06:13 +0000
@@ -1,3 +1,8 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort'.
+	* configure.ac (NO_ABRT): Remove.
+
 2012-08-26  Paul Eggert  <eggert@cs.ucla.edu>
 
 	* configure.ac (CFLAGS): Prefer -g3 to -g if -g3 works

=== modified file 'admin/CPP-DEFINES'
--- admin/CPP-DEFINES	2012-08-18 21:36:13 +0000
+++ admin/CPP-DEFINES	2012-08-31 03:06:13 +0000
@@ -428,7 +428,6 @@
 MAIL_USE_SYSTEM_LOCK
 MAXPATHLEN
 NLIST_STRUCT
-NO_ABORT
 NO_EDITRES
 NO_MATHERR
 NO_TERMIO

=== modified file 'admin/ChangeLog'
--- admin/ChangeLog	2012-08-28 19:26:41 +0000
+++ admin/ChangeLog	2012-08-31 03:06:13 +0000
@@ -1,3 +1,8 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort'.
+	* CPP-DEFINES (NO_ABORT): Remove.
+
 2012-08-28  Glenn Morris  <rgm@gnu.org>
 
 	* bzrmerge.el (bzrmerge-merges): Allow unversioned files in the tree.

=== modified file 'configure.ac'
--- configure.ac	2012-08-28 16:01:59 +0000
+++ configure.ac	2012-08-31 03:06:13 +0000
@@ -3321,12 +3321,6 @@
     AC_DEFINE(BROKEN_PTY_READ_AFTER_EAGAIN, 1, [Define on FreeBSD to
       work around an issue when reading from a PTY.])
     ;;
-
-  dnl Define the following so emacs symbols will not conflict with those
-  dnl in the System framework.  Otherwise -prebind will not work.
-  darwin)
-    AC_DEFINE(NO_ABORT, 1, [Do not define abort in emacs.c.])
-    ;;
 esac
 
 case $opsys in

=== modified file 'nt/ChangeLog'
--- nt/ChangeLog	2012-08-28 16:01:59 +0000
+++ nt/ChangeLog	2012-08-31 03:06:13 +0000
@@ -1,3 +1,9 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort'.
+	* inc/ms-w32.h (w32_abort): Remove.
+	* inc/unistd.h: Include <stdlib.h>, for 'environ'.
+
 2012-08-22  Juanma Barranquero  <lekktu@gmail.com>
 
 	* config.nt: Sync with autogen/config.in.

=== modified file 'nt/inc/ms-w32.h'
--- nt/inc/ms-w32.h	2012-08-07 11:03:48 +0000
+++ nt/inc/ms-w32.h	2012-08-31 03:06:13 +0000
@@ -334,16 +334,7 @@
 #include <malloc.h>
 #endif
 
-/* stdlib.h must be included after redefining malloc & friends, but
-   before redefining abort.  Isn't library redefinition funny?  */
 #include <stdlib.h>
-
-/* Redefine abort.  */
-#ifdef HAVE_NTGUI
-#define abort	w32_abort
-extern _Noreturn void w32_abort (void);
-#endif
-
 #include <sys/stat.h>
 
 /* Define for those source files that do not include enough NT system files.  */

=== modified file 'nt/inc/unistd.h'
--- nt/inc/unistd.h	2011-02-27 19:48:31 +0000
+++ nt/inc/unistd.h	2012-08-31 03:06:13 +0000
@@ -3,8 +3,9 @@
 #ifndef _UNISTD_H
 #define _UNISTD_H
 
+#include <stdlib.h> /* for 'environ' */
+
 extern ssize_t readlink (const char *, char *, size_t);
 extern int symlink (char const *, char const *);
 
 #endif	/* _UNISTD_H */
-

=== modified file 'src/.gdbinit'
--- src/.gdbinit	2012-08-20 17:32:31 +0000
+++ src/.gdbinit	2012-08-31 03:06:13 +0000
@@ -1222,14 +1222,9 @@
   set $tem = (struct Lisp_String *) $ptr
   set $tem = (char *) $tem->data
 
-  # Don't let abort actually run, as it will make stdio stop working and
-  # therefore the `pr' command above as well.
-  if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
-    # The windows-nt build replaces abort with its own function.
-    break w32_abort
-  else
-    break abort
-  end
+  # Don't let emacs_abort actually run, as it will make stdio stop
+  # working and therefore the 'pr' command above as well.
+  break emacs_abort
 end
 
 # x_error_quitter is defined only on X.  But window-system is set up

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2012-08-30 16:07:44 +0000
+++ src/ChangeLog	2012-08-31 03:06:13 +0000
@@ -1,3 +1,23 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort'.
+	Do not try to redefine the 'abort' function.  Instead, redo
+	'emacs' so that it calls 'emacs_abort' rather than 'abort'.
+	This removes the need for the NO_ABORT configure-time macro
+	and makes it easier to change the abort code to do a backtrace.
+	* .gdbinit: Just stop at emacs_abort, not at w32_abort or abort.
+	* conf_post.h: Include <string.h> and <stdlib.h> toward the end,
+	so that we can use NO_INLINE here and can define 'abort' cleanly.
+	(emacs_abort) [emacs]: New decl.
+	(abort) [emacs]: New macro.
+	* emacs.c (abort) [!DOS_NT && !NO_ABORT]:
+	Remove; sysdep.c's emacs_abort now takes its place.
+	* msdos.c (dos_abort) [defined abort]: Remove; not used.
+	(abort) [!defined abort]: Rename to ...
+	(emacs_abort) [HAVE_NTGUI]: ... new name.
+	* sysdep.c (emacs_abort) [!HAVE_NTGUI]: New function, taking
+	the place of the old 'abort' in emacs.c.
+
 2012-08-30  Jan Djärv  <jan.h.d@swipnet.se>
 
 	* gtkutil.c (x_wm_set_size_hint): Use 1 col for base_width so it

=== modified file 'src/conf_post.h'
--- src/conf_post.h	2012-08-20 16:48:10 +0000
+++ src/conf_post.h	2012-08-31 03:06:13 +0000
@@ -177,12 +177,6 @@
 #endif
 #endif
 
-#include <string.h>
-/* If you think about removing the line below, note that the
-   MS-Windows build relies on it for declaration of 'environ' needed
-   by a few source files.  */
-#include <stdlib.h>
-
 #if __GNUC__ >= 3  /* On GCC 3.0 we might get a warning.  */
 #define NO_INLINE __attribute__((noinline))
 #else
@@ -233,4 +227,14 @@
 # define lint_assume(cond) ((void) (0 && (cond)))
 #endif
 
+#include <string.h>
+#include <stdlib.h>
+/* Under Emacs, arrange for 'abort ()' to call a function that is
+   breakpointable via GDB.  */
+#ifdef emacs
+extern _Noreturn void emacs_abort (void) NO_INLINE;
+# undef abort
+# define abort() emacs_abort ()
+#endif
+
 /* conf_post.h ends here */

=== modified file 'src/emacs.c'
--- src/emacs.c	2012-08-25 06:38:43 +0000
+++ src/emacs.c	2012-08-31 03:10:04 +0000
@@ -344,22 +344,6 @@
   force_auto_save_soon ();
 }
 #endif
-
-/* We define abort, rather than using it from the library,
-   so that GDB can return from a breakpoint here.
-   MSDOS has its own definition in msdos.c.  */
-
-#if ! defined (DOS_NT) && ! defined (NO_ABORT)
-
-void
-abort (void)
-{
-  kill (getpid (), SIGABRT);
-  /* This shouldn't be executed, but it prevents a warning.  */
-  exit (1);
-}
-#endif
-
 \f
 /* Code for dealing with Lisp access to the Unix command line.  */
 

=== modified file 'src/msdos.c'
--- src/msdos.c	2012-08-21 10:21:04 +0000
+++ src/msdos.c	2012-08-31 03:06:13 +0000
@@ -4215,26 +4215,9 @@
 }
 #endif
 
-#ifdef abort
-#undef abort
-void
-dos_abort (char *file, int line)
-{
-  char buffer1[200], buffer2[400];
-  int i, j;
-
-  sprintf (buffer1, "<EMACS FATAL ERROR IN %s LINE %d>", file, line);
-  for (i = j = 0; buffer1[i]; i++) {
-    buffer2[j++] = buffer1[i];
-    buffer2[j++] = 0x70;
-  }
-  dosmemput (buffer2, j, (int)ScreenPrimary);
-  ScreenSetCursor (2, 0);
-  abort ();
-}
-#else
-void
-abort (void)
+#ifdef HAVE_NTGUI
+void
+emacs_abort (void)
 {
   dos_ttcooked ();
   ScreenSetCursor (10, 0);

=== modified file 'src/sysdep.c'
--- src/sysdep.c	2012-08-18 02:49:24 +0000
+++ src/sysdep.c	2012-08-31 03:06:13 +0000
@@ -1838,6 +1838,15 @@
 }
 #endif
 \f
+#ifndef HAVE_NTGUI
+/* Using emacs_abort lets GDB return from a breakpoint here.  */
+void
+emacs_abort (void)
+{
+  (abort) ();
+}
+#endif
+
 int
 emacs_open (const char *path, int oflag, int mode)
 {






^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#12316: Simplify redefinition of 'abort'.
  2012-08-31  3:14 bug#12316: Simplify redefinition of 'abort' Paul Eggert
@ 2012-08-31 11:39 ` Eli Zaretskii
  2012-08-31 12:53   ` Paul Eggert
  2012-08-31 14:41 ` Eli Zaretskii
  1 sibling, 1 reply; 7+ messages in thread
From: Eli Zaretskii @ 2012-08-31 11:39 UTC (permalink / raw)
  To: Paul Eggert; +Cc: lekktu, 12316

> Date: Thu, 30 Aug 2012 20:14:51 -0700
> From: Paul Eggert <eggert@cs.ucla.edu>
> CC: Eli Zaretskii <eliz@gnu.org>, Juanma Barranquero <lekktu@gmail.com>
> 
> Tags: patch
> 
> Here's a patch I'd like to install after a bit more testing.
> It simplifies how 'abort' is configured, on POSIX hosts.
> This affects the Windows port but I haven't tested that part.
> I'm CC'ing this to Eli and Juanma to give them a heads-up.

I don't understand what you want to happen after this change on
MS-Windows.  Please explain more.





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#12316: Simplify redefinition of 'abort'.
  2012-08-31 11:39 ` Eli Zaretskii
@ 2012-08-31 12:53   ` Paul Eggert
  2012-08-31 14:29     ` Eli Zaretskii
  0 siblings, 1 reply; 7+ messages in thread
From: Paul Eggert @ 2012-08-31 12:53 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: lekktu, 12316

On 08/31/2012 04:39 AM, Eli Zaretskii wrote:
> I don't understand what you want to happen after this change on
> MS-Windows.  Please explain more.

Currently, MS-Windows defines a function w32_abort that implements the
equivalent of 'abort' for MS-Windows.  So .gdbinit calls w32_abort on
MS-Windows, 'abort' on POSIX platforms, and nt/inc/ms-w32.h #defines
abort to w32_abort and declares w32_abort.

Due to the change, POSIX platforms define a function
emacs_abort rather than replacing the system 'abort'.
To keep in sync with that, the MS-Windows part of the patch
renames w32_abort to emacs_abort.  Hence .gdbinit
can now call emacs_abort on all platforms, without a special
case for MS-Windows, and nt/inc/ms-w32.h can remove its
special declarations of w32_abort and of 'abort'.

Also, this redefinition of 'abort' provides another
reason why conf_post.h must include <stdlib.h>, which makes
its comment about 'environ' confusing.  To help remove this
confusion I modified nt/inc/unistd.h to include <stdlib.h>;
this documents the fact that on POSIX platforms unistd.h
declares 'environ', moving that documentation to the
platform-specific area which is a better location for it.





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#12316: Simplify redefinition of 'abort'.
  2012-08-31 12:53   ` Paul Eggert
@ 2012-08-31 14:29     ` Eli Zaretskii
  2012-08-31 17:55       ` Paul Eggert
  0 siblings, 1 reply; 7+ messages in thread
From: Eli Zaretskii @ 2012-08-31 14:29 UTC (permalink / raw)
  To: Paul Eggert; +Cc: lekktu, 12316

> Date: Fri, 31 Aug 2012 05:53:14 -0700
> From: Paul Eggert <eggert@cs.ucla.edu>
> CC: 12316@debbugs.gnu.org, lekktu@gmail.com
> 
> Due to the change, POSIX platforms define a function
> emacs_abort rather than replacing the system 'abort'.

But this is not equivalent to the old code: with your changes, only
those calls to 'abort' that originate within Emacs sources will wind
up at 'emacs_abort'.  E.g., if a function from one of the libraries
linked into Emacs, like the image libraries, calls 'abort', that will
bypass our function.  Why is it a good idea to lose this
functionality?

And if we do want to lose this, why not simply replace all the calls
to 'abort' with calls to 'emacs_abort'?  Isn't that cleaner?

> To keep in sync with that, the MS-Windows part of the patch
> renames w32_abort to emacs_abort.

I don't see this part in your patches.  Where is it?  Without this, I
cannot see how this will possibly work.

> Also, this redefinition of 'abort' provides another
> reason why conf_post.h must include <stdlib.h>, which makes
> its comment about 'environ' confusing.  To help remove this
> confusion I modified nt/inc/unistd.h to include <stdlib.h>;

Please don't do that.  A standard header should not include another
standard header; I don't want our private emulations violate this
rule, to avoid conflicts.  Surely, there are better and more
straight-forward ways of dealing with outdated comments.





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#12316: Simplify redefinition of 'abort'.
  2012-08-31  3:14 bug#12316: Simplify redefinition of 'abort' Paul Eggert
  2012-08-31 11:39 ` Eli Zaretskii
@ 2012-08-31 14:41 ` Eli Zaretskii
  1 sibling, 0 replies; 7+ messages in thread
From: Eli Zaretskii @ 2012-08-31 14:41 UTC (permalink / raw)
  To: Paul Eggert; +Cc: lekktu, 12316

> Date: Thu, 30 Aug 2012 20:14:51 -0700
> From: Paul Eggert <eggert@cs.ucla.edu>
> CC: Eli Zaretskii <eliz@gnu.org>, Juanma Barranquero <lekktu@gmail.com>
> 
> === modified file 'src/msdos.c'
> --- src/msdos.c	2012-08-21 10:21:04 +0000
> +++ src/msdos.c	2012-08-31 03:06:13 +0000
> @@ -4215,26 +4215,9 @@
>  }
>  #endif
>  
> -#ifdef abort
> -#undef abort
> -void
> -dos_abort (char *file, int line)
> -{
> -  char buffer1[200], buffer2[400];
> -  int i, j;
> -
> -  sprintf (buffer1, "<EMACS FATAL ERROR IN %s LINE %d>", file, line);
> -  for (i = j = 0; buffer1[i]; i++) {
> -    buffer2[j++] = buffer1[i];
> -    buffer2[j++] = 0x70;
> -  }
> -  dosmemput (buffer2, j, (int)ScreenPrimary);
> -  ScreenSetCursor (2, 0);
> -  abort ();
> -}
> -#else
> -void
> -abort (void)
> +#ifdef HAVE_NTGUI       <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> +void
> +emacs_abort (void)
>  {
>    dos_ttcooked ();
>    ScreenSetCursor (10, 0);

The line marked above is wrong: code on msdos.c has no relation
whatsoever to the Windows build.





^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#12316: Simplify redefinition of 'abort'.
  2012-08-31 14:29     ` Eli Zaretskii
@ 2012-08-31 17:55       ` Paul Eggert
  2012-09-04 17:36         ` Paul Eggert
  0 siblings, 1 reply; 7+ messages in thread
From: Paul Eggert @ 2012-08-31 17:55 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: lekktu, 12316

[-- Attachment #1: Type: text/plain, Size: 8840 bytes --]

On 08/31/2012 07:29 AM, Eli Zaretskii wrote:

> why not simply replace all the calls
> to 'abort' with calls to 'emacs_abort'?  Isn't that cleaner?

Yes, I prefer that, too.  I avoided that only because
it bloated the patch.  But it's easy enough to add, and
the attached patch does that.

>> To keep in sync with that, the MS-Windows part of the patch
>> renames w32_abort to emacs_abort.
>
> I don't see this part in your patches.  Where is it?

Sorry, I missed one place.  Fixed in attached patch.
This also should fix the HAVE_NTGUI issue you reported in
a separate email.

> with your changes, only those calls to 'abort' that
> originate within Emacs sources will wind up at 'emacs_abort'.

Yes, that's part of the idea.  Intercepting other libraries'
call to 'abort' tends to break things.  We've caught some of
the breakages and have disabled them with NO_ABORT but it's
safer to avoid the problem in the first place.  Doing this
will also make it a bit easier for me to add a new feature,
namely backtraces on production aborts.

> A standard header should not include another
> standard header

That guideline is needed for glibc for conformance reasons,
and it used to be important long ago when multiple inclusion
of standard headers was a problem, but these days it's not
necessary and is even somewhat counterproductive in
portability emulations.  We violate that guideline all the
time in gnulib (and therefore in Emacs) and it's not a
problem.  However, if you prefer using the glibc style
for the Microsoft port that's easy to do I've revised
the patch to do that.

The attached patch is fairly long because of the abort ->
emacs_abort thing, so here's a precis that skips the boring
parts.

=== modified file 'ChangeLog'
--- ChangeLog	2012-08-28 16:01:59 +0000
+++ ChangeLog	2012-08-31 03:18:42 +0000
@@ -1,3 +1,8 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort' (Bug#12316).
+	* configure.ac (NO_ABRT): Remove.
+
 2012-08-26  Paul Eggert  <eggert@cs.ucla.edu>

 	* configure.ac (CFLAGS): Prefer -g3 to -g if -g3 works

=== modified file 'configure.ac'
--- configure.ac	2012-08-28 16:01:59 +0000
+++ configure.ac	2012-08-30 18:23:15 +0000
@@ -3321,12 +3321,6 @@
     AC_DEFINE(BROKEN_PTY_READ_AFTER_EAGAIN, 1, [Define on FreeBSD to
       work around an issue when reading from a PTY.])
     ;;
-
-  dnl Define the following so emacs symbols will not conflict with those
-  dnl in the System framework.  Otherwise -prebind will not work.
-  darwin)
-    AC_DEFINE(NO_ABORT, 1, [Do not define abort in emacs.c.])
-    ;;
 esac

 case $opsys in

=== modified file 'nt/ChangeLog'
--- nt/ChangeLog	2012-08-28 16:01:59 +0000
+++ nt/ChangeLog	2012-08-31 16:26:56 +0000
@@ -1,3 +1,8 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort' (Bug#12316).
+	* inc/ms-w32.h (w32_abort) [HAVE_NTGUI]: Remove.
+
 2012-08-22  Juanma Barranquero  <lekktu@gmail.com>

 	* config.nt: Sync with autogen/config.in.

=== modified file 'nt/inc/ms-w32.h'
--- nt/inc/ms-w32.h	2012-08-07 11:03:48 +0000
+++ nt/inc/ms-w32.h	2012-08-30 22:25:36 +0000
@@ -334,16 +334,7 @@
 #include <malloc.h>
 #endif

-/* stdlib.h must be included after redefining malloc & friends, but
-   before redefining abort.  Isn't library redefinition funny?  */
 #include <stdlib.h>
-
-/* Redefine abort.  */
-#ifdef HAVE_NTGUI
-#define abort	w32_abort
-extern _Noreturn void w32_abort (void);
-#endif
-
 #include <sys/stat.h>

 /* Define for those source files that do not include enough NT system files.  */

=== modified file 'nt/inc/unistd.h'
--- nt/inc/unistd.h	2011-02-27 19:48:31 +0000
+++ nt/inc/unistd.h	2012-08-31 16:31:23 +0000
@@ -3,8 +3,12 @@
 #ifndef _UNISTD_H
 #define _UNISTD_H

+/* On Microsoft platforms, <stdlib.h> declares 'environ'; on POSIX
+   platforms, <unistd.h> does.  Every file in Emacs that includes
+   <unistd.h> also includes <stdlib.h>, so there's no need to declare
+   'environ' here.  */
+
 extern ssize_t readlink (const char *, char *, size_t);
 extern int symlink (char const *, char const *);

 #endif	/* _UNISTD_H */
-

=== modified file 'src/.gdbinit'
--- src/.gdbinit	2012-08-20 17:32:31 +0000
+++ src/.gdbinit	2012-08-30 19:23:45 +0000
@@ -1222,14 +1222,9 @@
   set $tem = (struct Lisp_String *) $ptr
   set $tem = (char *) $tem->data

-  # Don't let abort actually run, as it will make stdio stop working and
-  # therefore the `pr' command above as well.
-  if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
-    # The windows-nt build replaces abort with its own function.
-    break w32_abort
-  else
-    break abort
-  end
+  # Don't let emacs_abort actually run, as it will make stdio stop
+  # working and therefore the 'pr' command above as well.
+  break emacs_abort
 end

 # x_error_quitter is defined only on X.  But window-system is set up

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2012-08-31 10:53:19 +0000
+++ src/ChangeLog	2012-08-31 16:34:18 +0000
@@ -1,3 +1,23 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort' (Bug#12316).
+	Do not try to redefine the 'abort' function.  Instead, redo
+	the code so that it calls 'emacs_abort' rather than 'abort'.
+	This removes the need for the NO_ABORT configure-time macro
+	and makes it easier to change the abort code to do a backtrace.
+	* .gdbinit: Just stop at emacs_abort, not at w32_abort or abort.
+	* emacs.c (abort) [!DOS_NT && !NO_ABORT]:
+	Remove; sysdep.c's emacs_abort now takes its place.
+	* lisp.h (emacs_abort): New decl.  All calls from Emacs code to
+	'abort' changed to use 'emacs_abort'.
+	* msdos.c (dos_abort) [defined abort]: Remove; not used.
+	(abort) [!defined abort]: Rename to ...
+	(emacs_abort): ... new name.
+	* sysdep.c (emacs_abort) [!HAVE_NTGUI]: New function, taking
+	the place of the old 'abort' in emacs.c.
+	* w32.c, w32fns.c (abort): Do not #undef.
+	* w32.c (emacs_abort): Rename from w32_abort.
+
 2012-08-31  Dmitry Antipov  <dmantipov@yandex.ru>

 	Remove mark_ttys function and fix tty_display_info initialization.

=== modified file 'src/conf_post.h'
--- src/conf_post.h	2012-08-20 16:48:10 +0000
+++ src/conf_post.h	2012-08-31 14:47:20 +0000
@@ -178,9 +178,6 @@
 #endif

 #include <string.h>
-/* If you think about removing the line below, note that the
-   MS-Windows build relies on it for declaration of 'environ' needed
-   by a few source files.  */
 #include <stdlib.h>

 #if __GNUC__ >= 3  /* On GCC 3.0 we might get a warning.  */

=== modified file 'src/emacs.c'
--- src/emacs.c	2012-08-25 06:38:43 +0000
+++ src/emacs.c	2012-08-31 14:58:40 +0000
@@ -345,22 +345,6 @@
 }
 #endif

-/* We define abort, rather than using it from the library,
-   so that GDB can return from a breakpoint here.
-   MSDOS has its own definition in msdos.c.  */
-
-#if ! defined (DOS_NT) && ! defined (NO_ABORT)
-
-void
-abort (void)
-{
-  kill (getpid (), SIGABRT);
-  /* This shouldn't be executed, but it prevents a warning.  */
-  exit (1);
-}
-#endif
-
-\f
 /* Code for dealing with Lisp access to the Unix command line.  */

 static void

=== modified file 'src/msdos.c'
--- src/msdos.c	2012-08-21 10:21:04 +0000
+++ src/msdos.c	2012-08-31 14:56:42 +0000
@@ -4215,26 +4215,8 @@
 }
 #endif

-#ifdef abort
-#undef abort
 void
-dos_abort (char *file, int line)
-{
-  char buffer1[200], buffer2[400];
-  int i, j;
-
-  sprintf (buffer1, "<EMACS FATAL ERROR IN %s LINE %d>", file, line);
-  for (i = j = 0; buffer1[i]; i++) {
-    buffer2[j++] = buffer1[i];
-    buffer2[j++] = 0x70;
-  }
-  dosmemput (buffer2, j, (int)ScreenPrimary);
-  ScreenSetCursor (2, 0);
-  abort ();
-}
-#else
-void
-abort (void)
+emacs_abort (void)
 {
   dos_ttcooked ();
   ScreenSetCursor (10, 0);
@@ -4250,7 +4232,6 @@
 #endif /* __DJGPP_MINOR__ >= 2 */
   exit (2);
 }
-#endif

 void
 syms_of_msdos (void)

=== modified file 'src/sysdep.c'
--- src/sysdep.c	2012-08-18 02:49:24 +0000
+++ src/sysdep.c	2012-08-30 22:25:36 +0000
@@ -1838,6 +1838,15 @@
 }
 #endif
 \f
+#ifndef HAVE_NTGUI
+/* Using emacs_abort lets GDB return from a breakpoint here.  */
+void
+emacs_abort (void)
+{
+  (abort) ();
+}
+#endif
+
 int
 emacs_open (const char *path, int oflag, int mode)
 {

=== modified file 'src/w32.c'
--- src/w32.c	2012-08-26 10:29:37 +0000
+++ src/w32.c	2012-08-31 15:03:25 +0000
@@ -6640,8 +6640,7 @@
 		      buffer,
 		      "Emacs Abort Dialog",
 		      MB_OK | MB_ICONEXCLAMATION | MB_TASKMODAL);
-      /* Use the low-level Emacs abort. */
-#undef abort
+	  /* Use the low-level system abort. */
 	  abort ();
 	}
       else

=== modified file 'src/w32fns.c'
--- src/w32fns.c	2012-08-18 06:06:39 +0000
+++ src/w32fns.c	2012-08-31 15:04:03 +0000
@@ -7194,10 +7194,8 @@
   syms_of_w32uniscribe ();
 }

-#undef abort
-
 void
-w32_abort (void)
+emacs_abort (void)
 {
   int button;
   button = MessageBox (NULL,


[-- Attachment #2: no-abort.txt --]
[-- Type: text/plain, Size: 126291 bytes --]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: eggert@cs.ucla.edu-20120831163445-0nus2s76w55giwe1
# target_branch: bzr+ssh://eggert@bzr.savannah.gnu.org/emacs/trunk
# testament_sha1: 2c08c0d006b63f07426753422e28c9d8edce55f9
# timestamp: 2012-08-31 09:34:53 -0700
# base_revision_id: michael.albinus@gmx.de-20120831111106-\
#   kk0g7mg53f6m2af4
# 
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog	2012-08-28 16:01:59 +0000
+++ ChangeLog	2012-08-31 03:20:23 +0000
@@ -1,3 +1,8 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort' (Bug#12316).
+	* configure.ac (NO_ABRT): Remove.
+
 2012-08-26  Paul Eggert  <eggert@cs.ucla.edu>
 
 	* configure.ac (CFLAGS): Prefer -g3 to -g if -g3 works

=== modified file 'admin/CPP-DEFINES'
--- admin/CPP-DEFINES	2012-08-18 21:36:13 +0000
+++ admin/CPP-DEFINES	2012-08-31 03:06:13 +0000
@@ -428,7 +428,6 @@
 MAIL_USE_SYSTEM_LOCK
 MAXPATHLEN
 NLIST_STRUCT
-NO_ABORT
 NO_EDITRES
 NO_MATHERR
 NO_TERMIO

=== modified file 'admin/ChangeLog'
--- admin/ChangeLog	2012-08-28 19:26:41 +0000
+++ admin/ChangeLog	2012-08-31 03:20:23 +0000
@@ -1,3 +1,8 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort' (Bug#12316).
+	* CPP-DEFINES (NO_ABORT): Remove.
+
 2012-08-28  Glenn Morris  <rgm@gnu.org>
 
 	* bzrmerge.el (bzrmerge-merges): Allow unversioned files in the tree.

=== modified file 'configure.ac'
--- configure.ac	2012-08-28 16:01:59 +0000
+++ configure.ac	2012-08-31 03:06:13 +0000
@@ -3321,12 +3321,6 @@
     AC_DEFINE(BROKEN_PTY_READ_AFTER_EAGAIN, 1, [Define on FreeBSD to
       work around an issue when reading from a PTY.])
     ;;
-
-  dnl Define the following so emacs symbols will not conflict with those
-  dnl in the System framework.  Otherwise -prebind will not work.
-  darwin)
-    AC_DEFINE(NO_ABORT, 1, [Do not define abort in emacs.c.])
-    ;;
 esac
 
 case $opsys in

=== modified file 'nt/ChangeLog'
--- nt/ChangeLog	2012-08-28 16:01:59 +0000
+++ nt/ChangeLog	2012-08-31 16:34:45 +0000
@@ -1,3 +1,8 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort' (Bug#12316).
+	* inc/ms-w32.h (w32_abort) [HAVE_NTGUI]: Remove.
+
 2012-08-22  Juanma Barranquero  <lekktu@gmail.com>
 
 	* config.nt: Sync with autogen/config.in.

=== modified file 'nt/inc/ms-w32.h'
--- nt/inc/ms-w32.h	2012-08-07 11:03:48 +0000
+++ nt/inc/ms-w32.h	2012-08-31 03:06:13 +0000
@@ -334,16 +334,7 @@
 #include <malloc.h>
 #endif
 
-/* stdlib.h must be included after redefining malloc & friends, but
-   before redefining abort.  Isn't library redefinition funny?  */
 #include <stdlib.h>
-
-/* Redefine abort.  */
-#ifdef HAVE_NTGUI
-#define abort	w32_abort
-extern _Noreturn void w32_abort (void);
-#endif
-
 #include <sys/stat.h>
 
 /* Define for those source files that do not include enough NT system files.  */

=== modified file 'nt/inc/unistd.h'
--- nt/inc/unistd.h	2011-02-27 19:48:31 +0000
+++ nt/inc/unistd.h	2012-08-31 16:34:45 +0000
@@ -3,8 +3,12 @@
 #ifndef _UNISTD_H
 #define _UNISTD_H
 
+/* On Microsoft platforms, <stdlib.h> declares 'environ'; on POSIX
+   platforms, <unistd.h> does.  Every file in Emacs that includes
+   <unistd.h> also includes <stdlib.h>, so there's no need to declare
+   'environ' here.  */
+
 extern ssize_t readlink (const char *, char *, size_t);
 extern int symlink (char const *, char const *);
 
 #endif	/* _UNISTD_H */
-

=== modified file 'src/.gdbinit'
--- src/.gdbinit	2012-08-20 17:32:31 +0000
+++ src/.gdbinit	2012-08-31 03:06:13 +0000
@@ -1222,14 +1222,9 @@
   set $tem = (struct Lisp_String *) $ptr
   set $tem = (char *) $tem->data
 
-  # Don't let abort actually run, as it will make stdio stop working and
-  # therefore the `pr' command above as well.
-  if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
-    # The windows-nt build replaces abort with its own function.
-    break w32_abort
-  else
-    break abort
-  end
+  # Don't let emacs_abort actually run, as it will make stdio stop
+  # working and therefore the 'pr' command above as well.
+  break emacs_abort
 end
 
 # x_error_quitter is defined only on X.  But window-system is set up

=== modified file 'src/ChangeLog'
--- src/ChangeLog	2012-08-31 10:53:19 +0000
+++ src/ChangeLog	2012-08-31 16:34:45 +0000
@@ -1,3 +1,23 @@
+2012-08-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Simplify redefinition of 'abort' (Bug#12316).
+	Do not try to redefine the 'abort' function.  Instead, redo
+	the code so that it calls 'emacs_abort' rather than 'abort'.
+	This removes the need for the NO_ABORT configure-time macro
+	and makes it easier to change the abort code to do a backtrace.
+	* .gdbinit: Just stop at emacs_abort, not at w32_abort or abort.
+	* emacs.c (abort) [!DOS_NT && !NO_ABORT]:
+	Remove; sysdep.c's emacs_abort now takes its place.
+	* lisp.h (emacs_abort): New decl.  All calls from Emacs code to
+	'abort' changed to use 'emacs_abort'.
+	* msdos.c (dos_abort) [defined abort]: Remove; not used.
+	(abort) [!defined abort]: Rename to ...
+	(emacs_abort): ... new name.
+	* sysdep.c (emacs_abort) [!HAVE_NTGUI]: New function, taking
+	the place of the old 'abort' in emacs.c.
+	* w32.c, w32fns.c (abort): Do not #undef.
+	* w32.c (emacs_abort): Rename from w32_abort.
+
 2012-08-31  Dmitry Antipov  <dmantipov@yandex.ru>
 
 	Remove mark_ttys function and fix tty_display_info initialization.

=== modified file 'src/alloc.c'
--- src/alloc.c	2012-08-31 10:53:19 +0000
+++ src/alloc.c	2012-08-31 16:21:56 +0000
@@ -610,7 +610,7 @@
   register unsigned char *val;
   int overhead = ++check_depth == 1 ? XMALLOC_OVERRUN_CHECK_OVERHEAD : 0;
   if (SIZE_MAX - overhead < size)
-    abort ();
+    emacs_abort ();
 
   val = malloc (size + overhead);
   if (val && check_depth == 1)
@@ -635,7 +635,7 @@
   register unsigned char *val = (unsigned char *) block;
   int overhead = ++check_depth == 1 ? XMALLOC_OVERRUN_CHECK_OVERHEAD : 0;
   if (SIZE_MAX - overhead < size)
-    abort ();
+    emacs_abort ();
 
   if (val
       && check_depth == 1
@@ -646,7 +646,7 @@
       size_t osize = xmalloc_get_size (val);
       if (memcmp (xmalloc_overrun_check_trailer, val + osize,
 		  XMALLOC_OVERRUN_CHECK_SIZE))
-	abort ();
+	emacs_abort ();
       memset (val + osize, 0, XMALLOC_OVERRUN_CHECK_SIZE);
       val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
       memset (val, 0, XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE);
@@ -683,7 +683,7 @@
       size_t osize = xmalloc_get_size (val);
       if (memcmp (xmalloc_overrun_check_trailer, val + osize,
 		  XMALLOC_OVERRUN_CHECK_SIZE))
-	abort ();
+	emacs_abort ();
 #ifdef XMALLOC_CLEAR_FREE_MEMORY
       val -= XMALLOC_OVERRUN_CHECK_SIZE + XMALLOC_OVERRUN_SIZE_SIZE;
       memset (val, 0xff, osize + XMALLOC_OVERRUN_CHECK_OVERHEAD);
@@ -1269,7 +1269,7 @@
 	{
 	  fprintf (stderr,
 		   "Freeing `%p' which wasn't allocated with malloc\n", ptr);
-	  abort ();
+	  emacs_abort ();
 	}
       else
 	{
@@ -1328,7 +1328,7 @@
 	fprintf (stderr, "Region in use is %p...%p, %td bytes, type %d\n",
 		 m->start, m->end, (char *) m->end - (char *) m->start,
 		 m->type);
-	abort ();
+	emacs_abort ();
       }
 
     if (!dont_register_blocks)
@@ -1366,7 +1366,7 @@
 	  fprintf (stderr,
 		   "Realloc of %p which wasn't allocated with malloc\n",
 		   ptr);
-	  abort ();
+	  emacs_abort ();
 	}
 
       mem_delete (m);
@@ -1388,7 +1388,7 @@
     if (m != MEM_NIL)
       {
 	fprintf (stderr, "Realloc returns memory that is already in use\n");
-	abort ();
+	emacs_abort ();
       }
 
     /* Can't handle zero size regions in the red-black tree.  */
@@ -1801,7 +1801,7 @@
   if (!PURE_POINTER_P (s)
       && s->data
       && nbytes != SDATA_NBYTES (SDATA_OF_STRING (s)))
-    abort ();
+    emacs_abort ();
   return nbytes;
 }
 
@@ -1875,7 +1875,7 @@
   while (s != NULL)
     {
       if ((uintptr_t) s < 1024)
-	abort ();
+	emacs_abort ();
       s = NEXT_FREE_LISP_STRING (s);
     }
 }
@@ -2104,7 +2104,7 @@
 		     back-pointer so that we know it's free.  */
 #ifdef GC_CHECK_STRING_BYTES
 		  if (string_bytes (s) != SDATA_NBYTES (data))
-		    abort ();
+		    emacs_abort ();
 #else
 		  data->u.nbytes = STRING_BYTES (s);
 #endif
@@ -2215,7 +2215,7 @@
 	  /* Check that the string size recorded in the string is the
 	     same as the one recorded in the sdata structure. */
 	  if (s && string_bytes (s) != SDATA_NBYTES (from))
-	    abort ();
+	    emacs_abort ();
 #endif /* GC_CHECK_STRING_BYTES */
 
 	  nbytes = s ? STRING_BYTES (s) : SDATA_NBYTES (from);
@@ -2228,7 +2228,7 @@
 	  if (memcmp (string_overrun_cookie,
 		      (char *) from_end - GC_STRING_OVERRUN_COOKIE_SIZE,
 		      GC_STRING_OVERRUN_COOKIE_SIZE))
-	    abort ();
+	    emacs_abort ();
 #endif
 
 	  /* Non-NULL S means it's alive.  Copy its data.  */
@@ -2485,7 +2485,7 @@
   struct Lisp_String *s;
 
   if (nchars < 0)
-    abort ();
+    emacs_abort ();
   if (!nbytes)
     return empty_multibyte_string;
 
@@ -2806,7 +2806,7 @@
       else if (type == CONSTYPE_HEAP)
 	val = Fcons (objp[i], val);
       else
-	abort ();
+	emacs_abort ();
     }
   return val;
 }
@@ -3916,7 +3916,7 @@
   while (c != MEM_NIL)
     {
       if (start >= c->start && start < c->end)
-	abort ();
+	emacs_abort ();
       parent = c;
       c = start < c->start ? c->left : c->right;
     }
@@ -3935,7 +3935,7 @@
 #ifdef GC_MALLOC_CHECK
   x = _malloc_internal (sizeof *x);
   if (x == NULL)
-    abort ();
+    emacs_abort ();
 #else
   x = xmalloc (sizeof *x);
 #endif
@@ -4610,7 +4610,7 @@
 	  break;
 
 	default:
-	  abort ();
+	  emacs_abort ();
 	}
 
       if (!NILP (obj))
@@ -4807,7 +4807,7 @@
       if (!survives_gc_p (p->var[i]))
 	/* FIXME: It's not necessarily a bug.  It might just be that the
 	   GCPRO is unnecessary or should release the object sooner.  */
-	abort ();
+	emacs_abort ();
 }
 
 #elif GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
@@ -5348,7 +5348,7 @@
 {
   staticvec[staticidx++] = varaddress;
   if (staticidx >= NSTATICS)
-    abort ();
+    emacs_abort ();
 }
 
 \f
@@ -5403,7 +5403,7 @@
   Lisp_Object retval = Qnil;
 
   if (abort_on_gc)
-    abort ();
+    emacs_abort ();
 
   /* Can't GC if pure storage overflowed because we can't determine
      if something is a pure object or not.  */
@@ -5887,7 +5887,7 @@
   do {						\
     m = mem_find (po);				\
     if (m == MEM_NIL)				\
-      abort ();					\
+      emacs_abort ();				\
   } while (0)
 
   /* Check that the object pointed to by PO is live, using predicate
@@ -5895,7 +5895,7 @@
 #define CHECK_LIVE(LIVEP)			\
   do {						\
     if (!LIVEP (m, po))				\
-      abort ();					\
+      emacs_abort ();				\
   } while (0)
 
   /* Check both of the above conditions.  */
@@ -5943,7 +5943,7 @@
 	if (m == MEM_NIL && !SUBRP (obj)
 	    && po != &buffer_defaults
 	    && po != &buffer_local_symbols)
-	  abort ();
+	  emacs_abort ();
 #endif /* GC_CHECK_MARKED_OBJECTS */
 
 	if (ptr->header.size & PSEUDOVECTOR_FLAG)
@@ -5966,7 +5966,7 @@
 		  if (b == po)
 		    break;
 		if (b == NULL)
-		  abort ();
+		  emacs_abort ();
 	      }
 #endif /* GC_CHECK_MARKED_OBJECTS */
 	    mark_buffer ((struct buffer *) ptr);
@@ -6042,7 +6042,7 @@
 	    break;
 
 	  case PVEC_FREE:
-	    abort ();
+	    emacs_abort ();
 
 	  default:
 	    mark_vectorlike (ptr);
@@ -6089,7 +6089,7 @@
 	       And if it's forwarded to a C variable, either it's not
 	       a Lisp_Object var, or it's staticpro'd already.  */
 	    break;
-	  default: abort ();
+	  default: emacs_abort ();
 	  }
 	if (!PURE_POINTER_P (XSTRING (ptr->name)))
 	  MARK_STRING (XSTRING (ptr->name));
@@ -6143,7 +6143,7 @@
 	  break;
 
 	default:
-	  abort ();
+	  emacs_abort ();
 	}
       break;
 
@@ -6165,7 +6165,7 @@
 	obj = ptr->u.cdr;
 	cdr_count++;
 	if (cdr_count == mark_object_loop_halt)
-	  abort ();
+	  emacs_abort ();
 	goto loop;
       }
 
@@ -6178,7 +6178,7 @@
       break;
 
     default:
-      abort ();
+      emacs_abort ();
     }
 
 #undef CHECK_LIVE
@@ -6247,7 +6247,7 @@
       break;
 
     default:
-      abort ();
+      emacs_abort ();
     }
 
   return survives_p || PURE_POINTER_P ((void *) XPNTR (obj));
@@ -6699,7 +6699,7 @@
 	   file, line, msg);
   npointers = backtrace (buffer, NPOINTERS_MAX);
   backtrace_symbols_fd (buffer, npointers, STDERR_FILENO);
-  abort ();
+  emacs_abort ();
 }
 #endif
 \f

=== modified file 'src/bidi.c'
--- src/bidi.c	2012-08-23 20:31:52 +0000
+++ src/bidi.c	2012-08-31 16:20:30 +0000
@@ -105,7 +105,7 @@
   if (ch == BIDI_EOB)
     return NEUTRAL_B;
   if (ch < 0 || ch > MAX_CHAR)
-    abort ();
+    emacs_abort ();
 
   default_type = (bidi_type_t) XINT (CHAR_TABLE_REF (bidi_type_table, ch));
   /* Every valid character code, even those that are unassigned by the
@@ -113,7 +113,7 @@
      DerivedBidiClass.txt file.  Therefore, if we ever get UNKNOWN_BT
      (= zero) code from CHAR_TABLE_REF, that's a bug.  */
   if (default_type == UNKNOWN_BT)
-    abort ();
+    emacs_abort ();
 
   if (override == NEUTRAL_DIR)
     return default_type;
@@ -141,7 +141,7 @@
 	      else if (override == R2L)
 		return STRONG_R;
 	      else
-		abort ();	/* can't happen: handled above */
+		emacs_abort ();	/* can't happen: handled above */
 	  }
     }
 }
@@ -183,7 +183,7 @@
       case NEUTRAL_ON:
 	return NEUTRAL;
       default:
-	abort ();
+	emacs_abort ();
     }
 }
 
@@ -199,7 +199,7 @@
   if (c == BIDI_EOB)
     return c;
   if (c < 0 || c > MAX_CHAR)
-    abort ();
+    emacs_abort ();
 
   val = CHAR_TABLE_REF (bidi_mirror_table, c);
   if (INTEGERP (val))
@@ -215,7 +215,7 @@
       /* Minimal test we must do in optimized builds, to prevent weird
 	 crashes further down the road.  */
       if (v < 0 || v > MAX_CHAR)
-	abort ();
+	emacs_abort ();
 
       return v;
     }
@@ -373,7 +373,7 @@
   int current_scan_dir = bidi_it->scan_dir;
 
   if (idx < bidi_cache_start || idx >= bidi_cache_idx)
-    abort ();
+    emacs_abort ();
 
   bidi_copy_it (bidi_it, &bidi_cache[idx]);
   bidi_it->scan_dir = current_scan_dir;
@@ -518,7 +518,7 @@
 
   /* We should never cache on backward scans.  */
   if (bidi_it->scan_dir == -1)
-    abort ();
+    emacs_abort ();
   idx = bidi_cache_search (bidi_it->charpos, -1, 1);
 
   if (idx < 0)
@@ -537,7 +537,7 @@
 	  idx = bidi_cache_start;
 	}
       if (bidi_it->nchars <= 0)
-	abort ();
+	emacs_abort ();
       bidi_copy_it (&bidi_cache[idx], bidi_it);
       if (!resolved)
 	bidi_cache[idx].resolved_level = -1;
@@ -592,7 +592,7 @@
 bidi_peek_at_next_level (struct bidi_it *bidi_it)
 {
   if (bidi_cache_idx == bidi_cache_start || bidi_cache_last_idx == -1)
-    abort ();
+    emacs_abort ();
   return bidi_cache[bidi_cache_last_idx + bidi_it->scan_dir].resolved_level;
 }
 
@@ -629,7 +629,7 @@
 bidi_pop_it (struct bidi_it *bidi_it)
 {
   if (bidi_cache_start <= 0)
-    abort ();
+    emacs_abort ();
 
   /* Reset the next free cache slot index to what it was before the
      call to bidi_push_it.  */
@@ -640,7 +640,7 @@
 
   /* Pop the previous cache start from the stack.  */
   if (bidi_cache_sp <= 0)
-    abort ();
+    emacs_abort ();
   bidi_cache_start = bidi_cache_start_stack[--bidi_cache_sp];
 
   /* Invalidate the last-used cache slot data.  */
@@ -762,12 +762,12 @@
 {
   bidi_type_table = uniprop_table (intern ("bidi-class"));
   if (NILP (bidi_type_table))
-    abort ();
+    emacs_abort ();
   staticpro (&bidi_type_table);
 
   bidi_mirror_table = uniprop_table (intern ("mirroring"));
   if (NILP (bidi_mirror_table))
-    abort ();
+    emacs_abort ();
   staticpro (&bidi_mirror_table);
 
   Qparagraph_start = intern ("paragraph-start");
@@ -885,7 +885,7 @@
   else
     {
       if (!CHAR_HEAD_P (*p))
-	abort ();
+	emacs_abort ();
 
       while (pos < end)
 	{
@@ -965,7 +965,7 @@
       /* We don't expect to find ourselves in the middle of a display
 	 property.  Hopefully, it will never be needed.  */
       if (charpos > *disp_pos)
-	abort ();
+	emacs_abort ();
       /* Text covered by `display' properties and overlays with
 	 display properties or display strings is handled as a single
 	 character that represents the entire run of characters
@@ -995,7 +995,7 @@
 	}
       *nchars = disp_end_pos - *disp_pos;
       if (*nchars <= 0)
-	abort ();
+	emacs_abort ();
       if (string->s)
 	*ch_len = bidi_count_bytes (string->s, *disp_pos, bytepos,
 				    disp_end_pos, string->unibyte);
@@ -1160,7 +1160,7 @@
     dir = L2R;
   /* We should never be called at EOB or before BEGV.  */
   else if (bidi_it->charpos >= end || bytepos < begbyte)
-    abort ();
+    emacs_abort ();
 
   if (dir == L2R)
     {
@@ -1298,7 +1298,7 @@
 	       && no_default_p && bidi_it->paragraph_dir == NEUTRAL_DIR);
     }
   else
-    abort ();
+    emacs_abort ();
 
   /* Contrary to UAX#9 clause P3, we only default the paragraph
      direction to L2R if we have no previous usable paragraph
@@ -1325,7 +1325,7 @@
   bidi_type_t ch_type;
 
   if (!bidi_initialized)
-    abort ();
+    emacs_abort ();
   ch_type = (bidi_type_t) XINT (CHAR_TABLE_REF (bidi_type_table, ch));
   return (ch_type == LRE || ch_type == LRO
 	  || ch_type == RLE || ch_type == RLO
@@ -1378,10 +1378,10 @@
       /* Advance to the next character, skipping characters covered by
 	 display strings (nchars > 1).  */
       if (bidi_it->nchars <= 0)
-	abort ();
+	emacs_abort ();
       bidi_it->charpos += bidi_it->nchars;
       if (bidi_it->ch_len == 0)
-	abort ();
+	emacs_abort ();
       bidi_it->bytepos += bidi_it->ch_len;
     }
 
@@ -1581,7 +1581,7 @@
 	}
 
       if (bidi_it->nchars <= 0)
-	abort ();
+	emacs_abort ();
       if (level == prev_level)	/* empty embedding */
 	saved_it.ignore_bn_limit = bidi_it->charpos + bidi_it->nchars;
       else			/* this embedding is non-empty */
@@ -1644,7 +1644,7 @@
       || type == RLE
       || type == RLO
       || type == PDF)
-    abort ();
+    emacs_abort ();
 
   if (new_level != prev_level
       || bidi_it->type == NEUTRAL_B)
@@ -1685,7 +1685,7 @@
 	  else if (bidi_it->sor == L2R)
 	    type = STRONG_L;
 	  else /* shouldn't happen! */
-	    abort ();
+	    emacs_abort ();
 	}
       if (type == WEAK_EN	/* W2 */
 	  && bidi_it->last_strong.type_after_w1 == STRONG_AL)
@@ -1767,7 +1767,7 @@
 					: bidi_it->string.s);
 
 	      if (bidi_it->nchars <= 0)
-		abort ();
+		emacs_abort ();
 	      next_char
 		= (bidi_it->charpos + bidi_it->nchars >= eob
 		   ? BIDI_EOB
@@ -1875,7 +1875,7 @@
 	|| type == NEUTRAL_S
 	|| type == NEUTRAL_WS
 	|| type == NEUTRAL_ON))
-    abort ();
+    emacs_abort ();
 
   if ((type != NEUTRAL_B /* Don't risk entering the long loop below if
 			    we are already at paragraph end.  */
@@ -1930,7 +1930,7 @@
 	  bidi_type_t next_type;
 
 	  if (bidi_it->scan_dir == -1)
-	    abort ();
+	    emacs_abort ();
 
 	  bidi_copy_it (&saved_it, bidi_it);
 	  /* Scan the text forward until we find the first non-neutral
@@ -1979,7 +1979,7 @@
 		break;
 	      case WEAK_BN:
 		if (!bidi_explicit_dir_char (bidi_it->ch))
-		  abort ();		/* can't happen: BNs are skipped */
+		  emacs_abort (); /* can't happen: BNs are skipped */
 		/* FALLTHROUGH */
 	      case NEUTRAL_B:
 		/* Marched all the way to the end of this level run.
@@ -1998,7 +1998,7 @@
 		  }
 		break;
 	      default:
-		abort ();
+		emacs_abort ();
 	    }
 	  type = bidi_resolve_neutral_1 (saved_it.prev_for_neutral.type,
 					 next_type, current_level);
@@ -2023,7 +2023,7 @@
 
   /* This should always be called during a forward scan.  */
   if (bidi_it->scan_dir != 1)
-    abort ();
+    emacs_abort ();
 
   /* Reset the limit until which to ignore BNs if we step out of the
      area where we found only empty levels.  */
@@ -2107,7 +2107,7 @@
       if (bidi_it->scan_dir > 0)
 	{
 	  if (bidi_it->nchars <= 0)
-	    abort ();
+	    emacs_abort ();
 	  next_char_pos = bidi_it->charpos + bidi_it->nchars;
 	}
       else if (bidi_it->charpos >= bob)
@@ -2143,7 +2143,7 @@
   if (bidi_it->scan_dir == -1)
     /* If we are going backwards, the iterator state is already cached
        from previous scans, and should be fully resolved.  */
-    abort ();
+    emacs_abort ();
 
   if (type == UNKNOWN_BT)
     type = bidi_type_of_next_char (bidi_it);
@@ -2156,7 +2156,7 @@
       || (type == WEAK_BN && prev_level == level))
     {
       if (bidi_it->next_for_neutral.type == UNKNOWN_BT)
-	abort ();
+	emacs_abort ();
 
       /* If the cached state shows a neutral character, it was not
 	 resolved by bidi_resolve_neutral, so do it now.  */
@@ -2170,7 +2170,7 @@
 	|| type == WEAK_BN
 	|| type == WEAK_EN
 	|| type == WEAK_AN))
-    abort ();
+    emacs_abort ();
   bidi_it->type = type;
   bidi_check_type (bidi_it->type);
 
@@ -2192,7 +2192,7 @@
       int dpp = bidi_it->disp_prop;
 
       if (bidi_it->nchars <= 0)
-	abort ();
+	emacs_abort ();
       do {
 	ch = bidi_fetch_char (bpos += clen, cpos += nc, &disp_pos, &dpp, &bs,
 			      fwp, &clen, &nc);
@@ -2301,8 +2301,9 @@
     {
       int new_level;
 
+      /* If we are at end of level, its edges must be cached.  */
       if (end_flag)
-	abort (); /* if we are at end of level, its edges must be cached */
+	emacs_abort ();
 
       bidi_cache_iterator_state (bidi_it, 1);
       do {
@@ -2320,7 +2321,7 @@
   struct gcpro gcpro1;
 
   if (bidi_it->charpos < 0 || bidi_it->bytepos < 0)
-    abort ();
+    emacs_abort ();
 
   if (bidi_it->scan_dir == 0)
     {
@@ -2431,7 +2432,7 @@
 	    = bidi_at_paragraph_end (bidi_it->charpos + bidi_it->nchars,
 				     bidi_it->bytepos + bidi_it->ch_len);
 	  if (bidi_it->nchars <= 0)
-	    abort ();
+	    emacs_abort ();
 	  if (sep_len >= 0)
 	    {
 	      bidi_it->new_paragraph = 1;

=== modified file 'src/blockinput.h'
--- src/blockinput.h	2012-01-19 07:21:25 +0000
+++ src/blockinput.h	2012-08-31 16:20:30 +0000
@@ -89,7 +89,7 @@
 	    do_pending_atimers ();		\
 	}					\
       else if (interrupt_input_blocked < 0)	\
-	abort ();				\
+	emacs_abort ();				\
     }						\
   while (0)
 
@@ -124,4 +124,3 @@
 extern void reinvoke_input_signal (void);
 
 #endif /* EMACS_BLOCKINPUT_H */
-

=== modified file 'src/buffer.c'
--- src/buffer.c	2012-08-28 10:59:17 +0000
+++ src/buffer.c	2012-08-31 16:20:30 +0000
@@ -1242,7 +1242,7 @@
 	  result = Fdefault_value (variable);
 	break;
       }
-    default: abort ();
+    default: emacs_abort ();
     }
 
   return result;
@@ -2671,7 +2671,7 @@
       /* Make sure no markers were put on the chain
 	 while the chain value was incorrect.  */
       if (BUF_MARKERS (current_buffer))
-	abort ();
+	emacs_abort ();
 
       BUF_MARKERS (current_buffer) = markers;
 
@@ -3413,7 +3413,7 @@
 	    }
 	}
       if (p != overlay_str_buf + total)
-	abort ();
+	emacs_abort ();
       if (pstr)
 	*pstr = overlay_str_buf;
       return total;
@@ -4576,7 +4576,7 @@
     case_Lisp_Int:    predicate = Qintegerp; break;
     case Lisp_String: predicate = Qstringp;  break;
     case Lisp_Symbol: predicate = Qsymbolp;  break;
-    default: abort ();
+    default: emacs_abort ();
     }
 
   wrong_type_argument (predicate, newval);
@@ -5257,7 +5257,7 @@
 
   /* Need more room? */
   if (idx >= MAX_PER_BUFFER_VARS)
-    abort ();
+    emacs_abort ();
   last_per_buffer_idx = idx;
 
   Vbuffer_alist = Qnil;
@@ -5398,7 +5398,7 @@
   if (PER_BUFFER_IDX (offset) == 0)
     /* Did a DEFVAR_PER_BUFFER without initializing the corresponding
        slot of buffer_local_flags */
-    abort ();
+    emacs_abort ();
 }
 
 

=== modified file 'src/buffer.h'
--- src/buffer.h	2012-08-28 06:20:08 +0000
+++ src/buffer.h	2012-08-31 16:20:30 +0000
@@ -1149,7 +1149,7 @@
    We assume you know which buffer it's pointing into.  */
 
 #define OVERLAY_POSITION(P) \
- (MARKERP (P) ? marker_position (P) : (abort (), 0))
+ (MARKERP (P) ? marker_position (P) : (emacs_abort (), 0))
 
 \f
 /***********************************************************************
@@ -1189,7 +1189,7 @@
 
 #define PER_BUFFER_VALUE_P(B, IDX)		\
     (((IDX) < 0 || IDX >= last_per_buffer_idx)	\
-     ? (abort (), 0)				\
+     ? (emacs_abort (), 0)			\
      : ((B)->local_flags[IDX] != 0))
 
 /* Set whether per-buffer variable with index IDX has a buffer-local
@@ -1198,7 +1198,7 @@
 #define SET_PER_BUFFER_VALUE_P(B, IDX, VAL)	\
      do {						\
        if ((IDX) < 0 || (IDX) >= last_per_buffer_idx)	\
-	 abort ();					\
+	 emacs_abort ();				\
        (B)->local_flags[IDX] = (VAL);			\
      } while (0)
 

=== modified file 'src/bytecode.c'
--- src/bytecode.c	2012-08-28 06:20:08 +0000
+++ src/bytecode.c	2012-08-31 16:20:30 +0000
@@ -435,7 +435,7 @@
 #ifdef BYTE_CODE_SAFE
 
 #define CHECK_RANGE(ARG) \
-  if (ARG >= bytestr_length) abort ()
+  if (ARG >= bytestr_length) emacs_abort ()
 
 #else /* not BYTE_CODE_SAFE */
 
@@ -508,7 +508,7 @@
    if (FRAME_X_P (f)
        && FRAME_FONT (f)->direction != 0
        && FRAME_FONT (f)->direction != 1)
-     abort ();
+     emacs_abort ();
  }
 #endif
 
@@ -600,9 +600,9 @@
     {
 #ifdef BYTE_CODE_SAFE
       if (top > stacke)
-	abort ();
+	emacs_abort ();
       else if (top < stack.bottom - 1)
-	abort ();
+	emacs_abort ();
 #endif
 
 #ifdef BYTE_CODE_METER
@@ -1875,7 +1875,7 @@
 	  /* Actually this is Bstack_ref with offset 0, but we use Bdup
 	     for that instead.  */
 	  /* CASE (Bstack_ref): */
-	  abort ();
+	  emacs_abort ();
 
 	  /* Handy byte-codes for lexical binding.  */
 	CASE (Bstack_ref1):
@@ -1928,11 +1928,11 @@
 #ifdef BYTE_CODE_SAFE
 	  if (op < Bconstant)
 	    {
-	      abort ();
+	      emacs_abort ();
 	    }
 	  if ((op -= Bconstant) >= const_length)
 	    {
-	      abort ();
+	      emacs_abort ();
 	    }
 	  PUSH (vectorp[op]);
 #else
@@ -1951,7 +1951,7 @@
 #ifdef BYTE_CODE_SAFE
     error ("binding stack not balanced (serious byte compiler bug)");
 #else
-    abort ();
+    emacs_abort ();
 #endif
 
   return result;

=== modified file 'src/character.c'
--- src/character.c	2012-08-26 08:41:36 +0000
+++ src/character.c	2012-08-31 16:20:30 +0000
@@ -541,7 +541,7 @@
       int len = MULTIBYTE_LENGTH (ptr, endp);
 
       if (len == 0)
-	abort ();
+	emacs_abort ();
       ptr += len;
       chars++;
     }

=== modified file 'src/charset.c'
--- src/charset.c	2012-08-26 08:41:36 +0000
+++ src/charset.c	2012-08-31 16:20:30 +0000
@@ -636,7 +636,7 @@
   else
     {
       if (! CHARSET_UNIFIED_P (charset))
-	abort ();
+	emacs_abort ();
       map = CHARSET_UNIFY_MAP (charset);
     }
   if (STRINGP (map))
@@ -2025,10 +2025,10 @@
   c = XFASTINT (ch);
   charset = CHAR_CHARSET (c);
   if (! charset)
-    abort ();
+    emacs_abort ();
   code = ENCODE_CHAR (charset, c);
   if (code == CHARSET_INVALID_CODE (charset))
-    abort ();
+    emacs_abort ();
   dimension = CHARSET_DIMENSION (charset);
   for (val = Qnil; dimension > 0; dimension--)
     {

=== modified file 'src/cm.c'
--- src/cm.c	2012-01-19 07:21:25 +0000
+++ src/cm.c	2012-08-31 16:20:30 +0000
@@ -119,7 +119,7 @@
   if (curX (tty) == FrameCols (tty))
     {
       if (!MagicWrap (tty) || curY (tty) >= FrameRows (tty) - 1)
-	abort ();
+	emacs_abort ();
       if (tty->termscript)
 	putc ('\r', tty->termscript);
       putc ('\r', tty->output);

=== modified file 'src/coding.c'
--- src/coding.c	2012-08-28 05:49:02 +0000
+++ src/coding.c	2012-08-31 16:20:30 +0000
@@ -2051,7 +2051,7 @@
 	  break;
 
 	default:
-	  abort ();
+	  emacs_abort ();
 	}
       CODING_DECODE_CHAR (coding, src, src_base, src_end,
 			  CHARSET_FROM_ID (charset_ID), code, c);
@@ -2345,7 +2345,7 @@
       int i;
 
       if (charbuf_end - charbuf < cmp_status->length)
-	abort ();
+	emacs_abort ();
       for (i = 0; i < cmp_status->length; i++)
 	*charbuf++ = cmp_status->carryover[i];
       coding->annotated = 1;
@@ -2619,7 +2619,7 @@
 		preferred_charset_id = -1;
 	      break;
 	    default:
-	      abort ();
+	      emacs_abort ();
 	    }
 	  charbuf += -c - 1;
 	  continue;
@@ -3482,7 +3482,7 @@
   if (cmp_status->state != COMPOSING_NO)
     {
       if (charbuf_end - charbuf < cmp_status->length)
-	abort ();
+	emacs_abort ();
       for (i = 0; i < cmp_status->length; i++)
 	*charbuf++ = cmp_status->carryover[i];
       coding->annotated = 1;
@@ -3864,7 +3864,7 @@
 	  break;
 
 	default:
-	  abort ();
+	  emacs_abort ();
 	}
 
       if (cmp_status->state == COMPOSING_NO
@@ -4419,7 +4419,7 @@
 		preferred_charset_id = -1;
 	      break;
 	    default:
-	      abort ();
+	      emacs_abort ();
 	    }
 	  charbuf += -c - 1;
 	  continue;
@@ -4933,7 +4933,7 @@
 		}
 	    }
 	  if (code == CHARSET_INVALID_CODE (charset))
-	    abort ();
+	    emacs_abort ();
 	  if (charset == charset_kanji)
 	    {
 	      int c1, c2;
@@ -5023,7 +5023,7 @@
 		}
 	    }
 	  if (code == CHARSET_INVALID_CODE (charset))
-	    abort ();
+	    emacs_abort ();
 	  if (charset == charset_big5)
 	    {
 	      int c1, c2;
@@ -7190,7 +7190,7 @@
 		    *buf++ = XINT (XCAR (components));
 		}
 	      else
-		abort ();
+		emacs_abort ();
 	      *head -= len;
 	    }
 	}
@@ -9428,7 +9428,7 @@
 	     && changed[coding_priorities[j]])
 	j++;
       if (j == coding_category_max)
-	abort ();
+	emacs_abort ();
       priorities[i] = coding_priorities[j];
     }
 

=== modified file 'src/conf_post.h'
--- src/conf_post.h	2012-08-20 16:48:10 +0000
+++ src/conf_post.h	2012-08-31 16:20:30 +0000
@@ -178,9 +178,6 @@
 #endif
 
 #include <string.h>
-/* If you think about removing the line below, note that the
-   MS-Windows build relies on it for declaration of 'environ' needed
-   by a few source files.  */
 #include <stdlib.h>
 
 #if __GNUC__ >= 3  /* On GCC 3.0 we might get a warning.  */

=== modified file 'src/data.c'
--- src/data.c	2012-08-27 17:23:48 +0000
+++ src/data.c	2012-08-31 16:20:30 +0000
@@ -108,7 +108,7 @@
      to try and do that by checking the tagbits, but nowadays all
      tagbits are potentially valid.  */
   /* if ((unsigned int) XTYPE (value) >= Lisp_Type_Limit)
-   *   abort (); */
+   *   emacs_abort (); */
 
   xsignal2 (Qwrong_type_argument, predicate, value);
 }
@@ -182,7 +182,7 @@
 	case Lisp_Misc_Float:
 	  return Qfloat;
 	}
-      abort ();
+      emacs_abort ();
 
     case Lisp_Vectorlike:
       if (WINDOW_CONFIGURATIONP (object))
@@ -217,7 +217,7 @@
       return Qfloat;
 
     default:
-      abort ();
+      emacs_abort ();
     }
 }
 
@@ -551,7 +551,7 @@
       /* In set_internal, we un-forward vars when their value is
 	 set to Qunbound. */
       return Qt;
-    default: abort ();
+    default: emacs_abort ();
     }
 
   return (EQ (valcontents, Qunbound) ? Qnil : Qt);
@@ -864,7 +864,7 @@
 	 don't think anything will break.  --lorentey  */
       return *(Lisp_Object *)(XKBOARD_OBJFWD (valcontents)->offset
 			      + (char *)FRAME_KBOARD (SELECTED_FRAME ()));
-    default: abort ();
+    default: emacs_abort ();
     }
 }
 
@@ -950,7 +950,7 @@
       break;
 
     default:
-      abort (); /* goto def; */
+      emacs_abort (); /* goto def; */
     }
 }
 
@@ -1055,7 +1055,7 @@
       /* FALLTHROUGH */
     case SYMBOL_FORWARDED:
       return do_symval_forwarding (SYMBOL_FWD (sym));
-    default: abort ();
+    default: emacs_abort ();
     }
 }
 
@@ -1265,7 +1265,7 @@
 	  store_symval_forwarding (/* sym, */ innercontents, newval, buf);
 	break;
       }
-    default: abort ();
+    default: emacs_abort ();
     }
   return;
 }
@@ -1316,7 +1316,7 @@
 	/* For other variables, get the current value.  */
 	return do_symval_forwarding (valcontents);
       }
-    default: abort ();
+    default: emacs_abort ();
     }
 }
 
@@ -1414,7 +1414,7 @@
 	else
 	  return Fset (symbol, value);
       }
-    default: abort ();
+    default: emacs_abort ();
     }
 }
 
@@ -1538,7 +1538,7 @@
       else if (BUFFER_OBJFWDP (valcontents.fwd))
 	return variable;
       break;
-    default: abort ();
+    default: emacs_abort ();
     }
 
   if (sym->constant)
@@ -1611,7 +1611,7 @@
 	error ("Symbol %s may not be buffer-local",
 	       SDATA (SYMBOL_NAME (variable)));
       break;
-    default: abort ();
+    default: emacs_abort ();
     }
 
   if (sym->constant)
@@ -1718,7 +1718,7 @@
       if (blv->frame_local)
 	return variable;
       break;
-    default: abort ();
+    default: emacs_abort ();
     }
 
   /* Get rid of this buffer's alist element, if any.  */
@@ -1800,7 +1800,7 @@
 	error ("Symbol %s may not be frame-local",
 	       SDATA (SYMBOL_NAME (variable)));
       break;
-    default: abort ();
+    default: emacs_abort ();
     }
 
   if (sym->constant)
@@ -1877,7 +1877,7 @@
 	  }
 	return Qnil;
       }
-    default: abort ();
+    default: emacs_abort ();
     }
 }
 
@@ -1912,7 +1912,7 @@
     case SYMBOL_FORWARDED:
       /* All BUFFER_OBJFWD slots become local if they are set.  */
       return (BUFFER_OBJFWDP (SYMBOL_FWD (sym)) ? Qt : Qnil);
-    default: abort ();
+    default: emacs_abort ();
     }
 }
 
@@ -1956,7 +1956,7 @@
 	return SYMBOL_BLV (sym)->where;
       else
 	return Qnil;
-    default: abort ();
+    default: emacs_abort ();
     }
 }
 
@@ -2272,7 +2272,7 @@
       return Qnil;
 
     default:
-      abort ();
+      emacs_abort ();
     }
 }
 

=== modified file 'src/dired.c'
--- src/dired.c	2012-08-28 00:33:56 +0000
+++ src/dired.c	2012-08-31 16:20:30 +0000
@@ -275,7 +275,7 @@
 
 		  /* Some bug somewhere.  */
 		  if (nchars > nbytes)
-		    abort ();
+		    emacs_abort ();
 
 		  STRING_SET_CHARS (fullname, nchars);
 		  if (nchars == nbytes)

=== modified file 'src/dispnew.c'
--- src/dispnew.c	2012-08-30 15:07:00 +0000
+++ src/dispnew.c	2012-08-31 16:20:30 +0000
@@ -305,7 +305,7 @@
 void
 __executable_start (void)
 {
-  abort ();
+  emacs_abort ();
 }
 #endif
 \f
@@ -355,7 +355,7 @@
       /* Detect the case that more matrices are freed than were
 	 allocated.  */
       if (--glyph_matrix_count < 0)
-	abort ();
+	emacs_abort ();
 
       /* Free glyph memory if MATRIX owns it.  */
       if (matrix->pool == NULL)
@@ -2347,9 +2347,9 @@
 
   /* Check that nothing is left allocated.  */
   if (glyph_matrix_count)
-    abort ();
+    emacs_abort ();
   if (glyph_pool_count)
-    abort ();
+    emacs_abort ();
 }
 
 
@@ -3032,7 +3032,7 @@
     {
       if (!glyph_row_slice_p (window_matrix->rows + i,
 			      frame_matrix->rows + j))
-        abort ();
+        emacs_abort ();
       ++i, ++j;
     }
 }
@@ -3461,7 +3461,7 @@
       if (!last_seen_p && MATRIX_ROW_BOTTOM_Y (row) >= yb)
 	last_seen_p = 1;
       else if (last_seen_p && row->enabled_p)
-	abort ();
+	emacs_abort ();
     }
 }
 
@@ -4817,7 +4817,7 @@
   struct glyph_matrix *desired_matrix = frame->desired_matrix;
 
   if (!current_matrix)
-    abort ();
+    emacs_abort ();
 
   /* Compute hash codes of all the lines.  Also calculate number of
      changed lines, number of unchanged lines at the beginning, and
@@ -5485,7 +5485,7 @@
   else if (part == ON_RIGHT_MARGIN)
     area = RIGHT_MARGIN_AREA;
   else
-    abort ();
+    emacs_abort ();
 
   for (i = 0; row->enabled_p && i < w->current_matrix->nrows; ++i, ++row)
     if (wy >= row->y && wy < MATRIX_ROW_BOTTOM_Y (row))
@@ -6285,7 +6285,7 @@
 
     /* Convert the initial frame to use the new display. */
     if (f->output_method != output_initial)
-      abort ();
+      emacs_abort ();
     f->output_method = t->type;
     f->terminal = t;
 

=== modified file 'src/editfns.c'
--- src/editfns.c	2012-08-28 06:20:08 +0000
+++ src/editfns.c	2012-08-31 16:20:30 +0000
@@ -4262,7 +4262,7 @@
     }
 
   if (bufsize < p - buf)
-    abort ();
+    emacs_abort ();
 
   if (maybe_combine_byte)
     nchars = multibyte_chars_in_text ((unsigned char *) buf, p - buf);
@@ -4602,7 +4602,7 @@
 				     len1_byte, end2, start2_byte + len2_byte)
 	  || count_combining_after (BYTE_POS_ADDR (start1_byte),
 				    len1_byte, end2, start2_byte + len2_byte))
-	abort ();
+	emacs_abort ();
     }
   else
     {
@@ -4614,7 +4614,7 @@
 				    len2_byte, end1, start1_byte + len1_byte)
 	  || count_combining_after (BYTE_POS_ADDR (start1_byte),
 				    len1_byte, end2, start2_byte + len2_byte))
-	abort ();
+	emacs_abort ();
     }
 #endif
 

=== modified file 'src/emacs.c'
--- src/emacs.c	2012-08-25 06:38:43 +0000
+++ src/emacs.c	2012-08-31 16:20:30 +0000
@@ -344,22 +344,6 @@
   force_auto_save_soon ();
 }
 #endif
-
-/* We define abort, rather than using it from the library,
-   so that GDB can return from a breakpoint here.
-   MSDOS has its own definition in msdos.c.  */
-
-#if ! defined (DOS_NT) && ! defined (NO_ABORT)
-
-void
-abort (void)
-{
-  kill (getpid (), SIGABRT);
-  /* This shouldn't be executed, but it prevents a warning.  */
-  exit (1);
-}
-#endif
-
 \f
 /* Code for dealing with Lisp access to the Unix command line.  */
 
@@ -1895,7 +1879,7 @@
 	}
 
       if (best < 0)
-	abort ();
+	emacs_abort ();
 
       /* Copy the highest priority remaining option, with its args, to NEW.
          Unless it is a duplicate of the previous one.  */

=== modified file 'src/eval.c'
--- src/eval.c	2012-08-28 16:01:59 +0000
+++ src/eval.c	2012-08-31 16:20:30 +0000
@@ -1495,7 +1495,7 @@
   immediate_quit = handling_signal = 0;
   abort_on_gc = 0;
   if (gc_in_progress || waiting_for_input)
-    abort ();
+    emacs_abort ();
 
 #if 0 /* rms: I don't know why this was here,
 	 but it is surely wrong for an error that is handled.  */
@@ -1592,7 +1592,7 @@
 xsignal (Lisp_Object error_symbol, Lisp_Object data)
 {
   Fsignal (error_symbol, data);
-  abort ();
+  emacs_abort ();
 }
 
 /* Like xsignal, but takes 0, 1, 2, or 3 args instead of a list.  */
@@ -2045,7 +2045,7 @@
   struct gcpro gcpro1, gcpro2, gcpro3;
 
   if (handling_signal)
-    abort ();
+    emacs_abort ();
 
   if (SYMBOLP (form))
     {
@@ -2209,7 +2209,7 @@
 		 is supported by this code.  We need to either rewrite the
 		 subr to use a different argument protocol, or add more
 		 cases to this switch.  */
-	      abort ();
+	      emacs_abort ();
 	    }
 	}
     }
@@ -2853,7 +2853,7 @@
 	      /* If a subr takes more than 8 arguments without using MANY
 		 or UNEVALLED, we need to extend this function to support it.
 		 Until this is done, there is no way to call the function.  */
-	      abort ();
+	      emacs_abort ();
 	    }
 	}
     }
@@ -2984,7 +2984,7 @@
       lexenv = Qnil;
     }
   else
-    abort ();
+    emacs_abort ();
 
   i = optional = rest = 0;
   for (; CONSP (syms_left); syms_left = XCDR (syms_left))
@@ -3198,7 +3198,7 @@
 	set_internal (symbol, value, Qnil, 1);
 	break;
       }
-    default: abort ();
+    default: emacs_abort ();
     }
 }
 

=== modified file 'src/fileio.c'
--- src/fileio.c	2012-08-28 06:20:08 +0000
+++ src/fileio.c	2012-08-31 16:20:30 +0000
@@ -1294,7 +1294,7 @@
     if (!(IS_DIRECTORY_SEP (target[0]) && IS_DIRECTORY_SEP (target[1])))
 #endif /* WINDOWSNT */
       {
-	if (!drive) abort ();
+	if (!drive) emacs_abort ();
 	target -= 2;
 	target[0] = DRIVE_LETTER (drive);
 	target[1] = ':';

=== modified file 'src/fns.c'
--- src/fns.c	2012-08-28 06:20:08 +0000
+++ src/fns.c	2012-08-31 16:20:30 +0000
@@ -2973,7 +2973,7 @@
 				    encoded, length, NILP (no_line_break),
 				    !NILP (BVAR (current_buffer, enable_multibyte_characters)));
   if (encoded_length > allength)
-    abort ();
+    emacs_abort ();
 
   if (encoded_length < 0)
     {
@@ -3029,7 +3029,7 @@
 				    encoded, length, NILP (no_line_break),
 				    STRING_MULTIBYTE (string));
   if (encoded_length > allength)
-    abort ();
+    emacs_abort ();
 
   if (encoded_length < 0)
     {
@@ -3174,7 +3174,7 @@
 				    decoded, length,
 				    multibyte, &inserted_chars);
   if (decoded_length > allength)
-    abort ();
+    emacs_abort ();
 
   if (decoded_length < 0)
     {
@@ -3224,7 +3224,7 @@
   decoded_length = base64_decode_1 (SSDATA (string), decoded, length,
 				    0, NULL);
   if (decoded_length > length)
-    abort ();
+    emacs_abort ();
   else if (decoded_length >= 0)
     decoded_string = make_unibyte_string (decoded, decoded_length);
   else
@@ -3980,7 +3980,7 @@
 	  else if (EQ (h->weak, Qkey_and_value))
 	    remove_p = !(key_known_to_survive_p && value_known_to_survive_p);
 	  else
-	    abort ();
+	    emacs_abort ();
 
 	  next = HASH_NEXT (h, i);
 
@@ -4276,7 +4276,7 @@
       break;
 
     default:
-      abort ();
+      emacs_abort ();
     }
 
   return hash;

=== modified file 'src/frame.c'
--- src/frame.c	2012-08-22 16:05:04 +0000
+++ src/frame.c	2012-08-31 16:20:30 +0000
@@ -223,7 +223,7 @@
     case output_ns:
       return Qns;
     default:
-      abort ();
+      emacs_abort ();
     }
 }
 
@@ -629,7 +629,7 @@
 #ifdef MSDOS
   if (sf->output_method != output_msdos_raw
       && sf->output_method != output_termcap)
-    abort ();
+    emacs_abort ();
 #else /* not MSDOS */
 
 #ifdef WINDOWSNT                           /* This should work now! */
@@ -776,7 +776,7 @@
 	  Lisp_Object focus;
 
 	  if (!FRAMEP (XCAR (tail)))
-	    abort ();
+	    emacs_abort ();
 
 	  focus = FRAME_FOCUS_FRAME (XFRAME (XCAR (tail)));
 
@@ -906,7 +906,7 @@
 
   /* There must always be at least one frame in Vframe_list.  */
   if (! CONSP (Vframe_list))
-    abort ();
+    emacs_abort ();
 
   /* If this frame is dead, it won't be in Vframe_list, and we'll loop
      forever.  Forestall that.  */
@@ -984,7 +984,7 @@
 
   /* There must always be at least one frame in Vframe_list.  */
   if (! CONSP (Vframe_list))
-    abort ();
+    emacs_abort ();
 
   prev = Qnil;
   for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
@@ -993,7 +993,7 @@
 
       f = XCAR (tail);
       if (!FRAMEP (f))
-	abort ();
+	emacs_abort ();
 
       if (EQ (frame, f) && !NILP (prev))
 	return prev;
@@ -1394,7 +1394,7 @@
 
 	  this = XCAR (frames);
 	  if (!FRAMEP (this))
-	    abort ();
+	    emacs_abort ();
 	  f1 = XFRAME (this);
 
 	  if (kb == FRAME_KBOARD (f1))
@@ -1430,7 +1430,7 @@
 
 	  this = XCAR (frames);
 	  if (!FRAMEP (this))
-	    abort ();
+	    emacs_abort ();
 	  f1 = XFRAME (this);
 
 	  /* Consider only frames on the same kboard
@@ -1456,7 +1456,7 @@
 	     that is prohibited at the top; you can't delete surrogate
 	     minibuffer frames.  */
 	  if (NILP (frame_with_minibuf))
-	    abort ();
+	    emacs_abort ();
 
 	  kset_default_minibuffer_frame (kb, frame_with_minibuf);
 	}
@@ -2117,7 +2117,7 @@
 	      swap_in_global_binding (sym);
 	    break;
 	  }
-	default: abort ();
+	default: emacs_abort ();
 	}
     }
 
@@ -3844,7 +3844,7 @@
 	      }
 
 	    default:
-	      abort ();
+	      emacs_abort ();
 	    }
 	}
       else

=== modified file 'src/frame.h'
--- src/frame.h	2012-08-31 04:40:52 +0000
+++ src/frame.h	2012-08-31 16:21:56 +0000
@@ -981,7 +981,7 @@
      ((FRAMEP (selected_frame)				\
        && FRAME_LIVE_P (XFRAME (selected_frame)))	\
       ? XFRAME (selected_frame)				\
-      : (abort (), (struct frame *) 0))
+      : (emacs_abort (), (struct frame *) 0))
 
 \f
 /***********************************************************************

=== modified file 'src/ftfont.c'
--- src/ftfont.c	2012-07-20 07:29:04 +0000
+++ src/ftfont.c	2012-08-31 16:20:30 +0000
@@ -1630,7 +1630,7 @@
 	    FT_Glyph_Metrics *m;
 
 	    if (FT_Load_Glyph (ft_face, g->code, FT_LOAD_DEFAULT) != 0)
-	      abort ();
+	      emacs_abort ();
 	    m = &ft_face->glyph->metrics;
 	    if (flt_font_ft->matrix)
 	      {

=== modified file 'src/gtkutil.c'
--- src/gtkutil.c	2012-08-30 16:07:44 +0000
+++ src/gtkutil.c	2012-08-31 16:20:30 +0000
@@ -254,7 +254,7 @@
 free_widget_value (widget_value *wv)
 {
   if (wv->free_list)
-    abort ();
+    emacs_abort ();
 
   if (malloc_cpt > 25)
     {
@@ -3523,7 +3523,7 @@
     }
 
   /* Should never end up here  */
-  abort ();
+  emacs_abort ();
 }
 
 /* Remove pointer at IDX from id_to_widget.
@@ -4091,7 +4091,7 @@
           else
             {
               fprintf (stderr, "internal error: GTK_IMAGE_PIXBUF failed\n");
-              abort ();
+              emacs_abort ();
             }
         }
       else if (store_type == GTK_IMAGE_ICON_NAME)
@@ -4106,7 +4106,7 @@
       else
         {
           fprintf (stderr, "internal error: store_type is %d\n", store_type);
-          abort ();
+          emacs_abort ();
         }
     }
   if (wmenuimage)

=== modified file 'src/image.c'
--- src/image.c	2012-08-16 21:58:44 +0000
+++ src/image.c	2012-08-31 16:20:30 +0000
@@ -848,7 +848,7 @@
 	  break;
 
 	default:
-	  abort ();
+	  emacs_abort ();
 	  break;
 	}
 

=== modified file 'src/indent.c'
--- src/indent.c	2012-08-18 06:06:39 +0000
+++ src/indent.c	2012-08-31 16:20:30 +0000
@@ -122,7 +122,7 @@
   int i;
 
   if (widthtab->header.size != 256)
-    abort ();
+    emacs_abort ();
 
   for (i = 0; i < 256; i++)
     if (character_width (i, disptab)
@@ -144,7 +144,7 @@
     bset_width_table (buf, Fmake_vector (make_number (256), make_number (0)));
   widthtab = XVECTOR (BVAR (buf, width_table));
   if (widthtab->header.size != 256)
-    abort ();
+    emacs_abort ();
 
   for (i = 0; i < 256; i++)
     XSETFASTINT (widthtab->contents[i], character_width (i, disptab));

=== modified file 'src/insdel.c'
--- src/insdel.c	2012-08-28 06:20:08 +0000
+++ src/insdel.c	2012-08-31 16:20:30 +0000
@@ -73,13 +73,13 @@
   for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
     {
       if (tail->buffer->text != current_buffer->text)
-	abort ();
+	emacs_abort ();
       if (tail->charpos > Z)
-	abort ();
+	emacs_abort ();
       if (tail->bytepos > Z_BYTE)
-	abort ();
+	emacs_abort ();
       if (multibyte && ! CHAR_HEAD_P (FETCH_BYTE (tail->bytepos)))
-	abort ();
+	emacs_abort ();
     }
 }
 
@@ -812,7 +812,7 @@
 #ifdef BYTE_COMBINING_DEBUG
   if (count_combining_before (string, nbytes, PT, PT_BYTE)
       || count_combining_after (string, nbytes, PT, PT_BYTE))
-    abort ();
+    emacs_abort ();
 #endif
 
   /* Record deletion of the surrounding text that combines with
@@ -947,7 +947,7 @@
      the text that has been stored by copy_text.  */
   if (count_combining_before (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE)
       || count_combining_after (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE))
-    abort ();
+    emacs_abort ();
 #endif
 
   record_insert (PT, nchars);
@@ -1130,7 +1130,7 @@
      the text that has been stored by copy_text.  */
   if (count_combining_before (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE)
       || count_combining_after (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE))
-    abort ();
+    emacs_abort ();
 #endif
 
   record_insert (PT, nchars);
@@ -1191,7 +1191,7 @@
 #ifdef BYTE_COMBINING_DEBUG
   if (count_combining_before (GPT_ADDR, len_byte, from, from_byte)
       || count_combining_after (GPT_ADDR, len_byte, from, from_byte))
-    abort ();
+    emacs_abort ();
 #endif
 
   if (STRINGP (prev_text))
@@ -1374,7 +1374,7 @@
      the text that has been stored by copy_text.  */
   if (count_combining_before (GPT_ADDR, outgoing_insbytes, from, from_byte)
       || count_combining_after (GPT_ADDR, outgoing_insbytes, from, from_byte))
-    abort ();
+    emacs_abort ();
 #endif
 
   if (! EQ (BVAR (current_buffer, undo_list), Qt))
@@ -1500,7 +1500,7 @@
      the text that has been stored by copy_text.  */
   if (count_combining_before (GPT_ADDR, insbytes, from, from_byte)
       || count_combining_after (GPT_ADDR, insbytes, from, from_byte))
-    abort ();
+    emacs_abort ();
 #endif
 
   GAP_SIZE -= insbytes;
@@ -1708,7 +1708,7 @@
 #ifdef BYTE_COMBINING_DEBUG
   if (count_combining_before (BUF_BYTE_ADDRESS (current_buffer, to_byte),
 			      Z_BYTE - to_byte, from, from_byte))
-    abort ();
+    emacs_abort ();
 #endif
 
   if (ret_string || ! EQ (BVAR (current_buffer, undo_list), Qt))

=== modified file 'src/intervals.c'
--- src/intervals.c	2012-08-18 06:06:39 +0000
+++ src/intervals.c	2012-08-31 16:20:30 +0000
@@ -200,13 +200,13 @@
       i0_sym = XCAR (i0_cdr);
       i0_cdr = XCDR (i0_cdr);
       if (!CONSP (i0_cdr))
-	return 0;		/* abort (); */
+	return 0;
       i1_val = i1->plist;
       while (CONSP (i1_val) && !EQ (XCAR (i1_val), i0_sym))
 	{
 	  i1_val = XCDR (i1_val);
 	  if (!CONSP (i1_val))
-	    return 0;		/* abort (); */
+	    return 0;
 	  i1_val = XCDR (i1_val);
 	}
 
@@ -224,7 +224,7 @@
 
       i1_cdr = XCDR (i1_cdr);
       if (!CONSP (i1_cdr))
-	return 0;		/* abort (); */
+	return 0;
       i1_cdr = XCDR (i1_cdr);
     }
 
@@ -1255,7 +1255,7 @@
       else if (STRINGP (owner))
 	set_string_intervals (owner, parent);
       else
-	abort ();
+	emacs_abort ();
 
       return;
     }
@@ -1410,7 +1410,7 @@
 				    start, length);
   else
     {
-      IF_LINT (if (length < - TYPE_MAXIMUM (ptrdiff_t)) abort ();)
+      lint_assume (- TYPE_MAXIMUM (ptrdiff_t) <= length);
       adjust_intervals_for_deletion (buffer, start, -length);
     }
 }
@@ -1470,7 +1470,7 @@
 
   /* This must be the rightmost or last interval and cannot
      be merged right.  The caller should have known.  */
-  abort ();
+  emacs_abort ();
 }
 \f
 /* Merge interval I with its lexicographic predecessor. The resulting
@@ -1526,7 +1526,7 @@
 
   /* This must be the leftmost or first interval and cannot
      be merged left.  The caller should have known.  */
-  abort ();
+  emacs_abort ();
 }
 \f
 /* Create a copy of SOURCE but with the default value of UP.  */
@@ -2172,7 +2172,7 @@
   else if (STRINGP (object))
     i = find_interval (string_intervals (object), pos);
   else
-    abort ();
+    emacs_abort ();
 
   if (!i || (i->position + LENGTH (i) <= pos))
     return 0;
@@ -2211,7 +2211,7 @@
 
   /* Perhaps we should just change `position' to the limit.  */
   if (position > BUF_ZV (buffer) || position < BUF_BEGV (buffer))
-    abort ();
+    emacs_abort ();
 
   /* Ignore narrowing, so that a local map continues to be valid even if
      the visible region contains no characters and hence no properties.  */

=== modified file 'src/keyboard.c'
--- src/keyboard.c	2012-08-28 06:20:08 +0000
+++ src/keyboard.c	2012-08-31 16:20:30 +0000
@@ -1032,7 +1032,7 @@
       pop_kboard ();
       /* The pop should not change the kboard.  */
       if (single_kboard && current_kboard != prev)
-        abort ();
+        emacs_abort ();
     }
   return Qnil;
 }
@@ -2614,13 +2614,13 @@
 	    Lisp_Object last = KVAR (kb, kbd_queue);
 	    /* We shouldn't get here if we were in single-kboard mode!  */
 	    if (single_kboard)
-	      abort ();
+	      emacs_abort ();
 	    if (CONSP (last))
 	      {
 		while (CONSP (XCDR (last)))
 		  last = XCDR (last);
 		if (!NILP (XCDR (last)))
-		  abort ();
+		  emacs_abort ();
 	      }
 	    if (!CONSP (last))
 	      kset_kbd_queue (kb, Fcons (c, Qnil));
@@ -2793,7 +2793,7 @@
       if (current_kboard->kbd_queue_has_data)
 	{
 	  if (!CONSP (KVAR (current_kboard, kbd_queue)))
-	    abort ();
+	    emacs_abort ();
 	  c = XCAR (KVAR (current_kboard, kbd_queue));
 	  kset_kbd_queue (current_kboard,
 			  XCDR (KVAR (current_kboard, kbd_queue)));
@@ -2860,7 +2860,7 @@
 	      while (CONSP (XCDR (last)))
 		last = XCDR (last);
 	      if (!NILP (XCDR (last)))
-		abort ();
+		emacs_abort ();
 	    }
 	  if (!CONSP (last))
 	    kset_kbd_queue (kb, Fcons (c, Qnil));
@@ -3569,7 +3569,7 @@
 			     struct input_event *hold_quit)
 {
   if (event->kind == NO_EVENT)
-    abort ();
+    emacs_abort ();
 
   if (hold_quit && hold_quit->kind != NO_EVENT)
     return;
@@ -3964,7 +3964,7 @@
 #else
 	  /* We're getting selection request events, but we don't have
              a window system.  */
-	  abort ();
+	  emacs_abort ();
 #endif
 	}
 
@@ -4201,7 +4201,7 @@
   else
     /* We were promised by the above while loop that there was
        something for us to read!  */
-    abort ();
+    emacs_abort ();
 
   input_pending = readable_events (0);
 
@@ -4270,7 +4270,7 @@
 #else
 	  /* We're getting selection request events, but we don't have
              a window system.  */
-	  abort ();
+	  emacs_abort ();
 #endif
 	}
     }
@@ -5624,7 +5624,7 @@
 	  else if (FRAMEP (event->frame_or_window))
 	    f = XFRAME (event->frame_or_window);
 	  else
-	    abort ();
+	    emacs_abort ();
 
 	  if (FRAME_WINDOW_P (f))
 	    fuzz = double_click_fuzz;
@@ -5731,7 +5731,7 @@
 	else
 	  /* Every mouse event should either have the down_modifier or
              the up_modifier set.  */
-	  abort ();
+	  emacs_abort ();
 
 	{
 	  /* Get the symbol we should use for the mouse click.  */
@@ -5792,7 +5792,7 @@
 	  else if (FRAMEP (event->frame_or_window))
 	    fr = XFRAME (event->frame_or_window);
 	  else
-	    abort ();
+	    emacs_abort ();
 
 	  fuzz = FRAME_WINDOW_P (fr)
 	    ? double_click_fuzz : double_click_fuzz / 8;
@@ -5812,7 +5812,7 @@
 	  else
 	    /* Every wheel event should either have the down_modifier or
 	       the up_modifier set.  */
-	    abort ();
+	    emacs_abort ();
 
           if (event->kind == HORIZ_WHEEL_EVENT)
             symbol_num += 2;
@@ -5981,7 +5981,7 @@
       {
 	char *name = find_user_signal_name (event->code);
 	if (!name)
-	  abort ();
+	  emacs_abort ();
 	return intern (name);
       }
 
@@ -6062,7 +6062,7 @@
 
       /* The 'kind' field of the event is something we don't recognize.  */
     default:
-      abort ();
+      emacs_abort ();
     }
 }
 
@@ -6239,7 +6239,7 @@
     /* Only the event queue may use the `up' modifier; it should always
        be turned into a click or drag event before presented to lisp code.  */
     if (modifiers & up_modifier)
-      abort ();
+      emacs_abort ();
 
     if (modifiers & alt_modifier)   { *p++ = 'A'; *p++ = '-'; }
     if (modifiers & ctrl_modifier)  { *p++ = 'C'; *p++ = '-'; }
@@ -6334,7 +6334,7 @@
 			    Qnil);
 
       if (modifiers & ~INTMASK)
-	abort ();
+	emacs_abort ();
       XSETFASTINT (mask, modifiers);
       elements = Fcons (unmodified, Fcons (mask, Qnil));
 
@@ -7011,7 +7011,7 @@
 
   if (terminal->type != output_termcap
       && terminal->type != output_msdos_raw)
-    abort ();
+    emacs_abort ();
 
   /* XXX I think the following code should be moved to separate hook
      functions in system-dependent files.  */
@@ -8454,7 +8454,7 @@
 
   /* Append entries from tool_bar_item_properties to the end of
      tool_bar_items_vector.  */
-  vcopy (tool_bar_items_vector, ntool_bar_items, 
+  vcopy (tool_bar_items_vector, ntool_bar_items,
 	 XVECTOR (tool_bar_item_properties)->contents, TOOL_BAR_ITEM_NSLOTS);
   ntool_bar_items += TOOL_BAR_ITEM_NSLOTS;
 }
@@ -10912,7 +10912,7 @@
 #endif /* not MSDOS */
       fflush (stdout);
       if (((c = getchar ()) & ~040) == 'Y')
-	abort ();
+	emacs_abort ();
       while (c != '\n') c = getchar ();
 #ifdef MSDOS
       printf ("\r\nContinuing...\r\n");
@@ -10993,7 +10993,7 @@
 #ifdef POLL_FOR_INPUT
   /* May be > 1 if in recursive minibuffer.  */
   if (poll_suppress_count == 0)
-    abort ();
+    emacs_abort ();
 #endif
 #endif
   if (FRAMEP (internal_last_event_frame)
@@ -11351,7 +11351,7 @@
 
   for (kbp = &all_kboards; *kbp != kb; kbp = &(*kbp)->next_kboard)
     if (*kbp == NULL)
-      abort ();
+      emacs_abort ();
   *kbp = kb->next_kboard;
 
   /* Prevent a dangling reference to KB.  */
@@ -11362,7 +11362,7 @@
       current_kboard = FRAME_KBOARD (XFRAME (selected_frame));
       single_kboard = 0;
       if (current_kboard == kb)
-	abort ();
+	emacs_abort ();
     }
 
   wipe_kboard (kb);

=== modified file 'src/keymap.c'
--- src/keymap.c	2012-08-28 06:20:08 +0000
+++ src/keymap.c	2012-08-31 16:20:30 +0000
@@ -2916,7 +2916,7 @@
 	  char *title, *p;
 
 	  if (!SYMBOLP (modes[i]))
-	    abort ();
+	    emacs_abort ();
 
 	  p = title = alloca (42 + SCHARS (SYMBOL_NAME (modes[i])));
 	  *p++ = '\f';

=== modified file 'src/lisp.h'
--- src/lisp.h	2012-08-31 10:53:19 +0000
+++ src/lisp.h	2012-08-31 16:21:56 +0000
@@ -2288,7 +2288,7 @@
 
 #define UNGCPRO					\
  ((--gcpro_level != gcpro1.level)		\
-  ? (abort (), 0)				\
+  ? (emacs_abort (), 0)				\
   : ((gcprolist = gcpro1.next), 0))
 
 #endif /* DEBUG_GCPRO */
@@ -3406,6 +3406,7 @@
 extern int set_window_size (int, int, int);
 extern EMACS_INT get_random (void);
 extern void seed_random (long);
+extern _Noreturn void emacs_abort (void) NO_INLINE;
 extern int emacs_open (const char *, int, int);
 extern int emacs_close (int);
 extern ptrdiff_t emacs_read (int, char *, ptrdiff_t);

=== modified file 'src/lread.c'
--- src/lread.c	2012-08-30 00:47:33 +0000
+++ src/lread.c	2012-08-31 16:20:30 +0000
@@ -1696,7 +1696,7 @@
 
   /* We assume START is nil when input is not from a buffer.  */
   if (! NILP (start) && !b)
-    abort ();
+    emacs_abort ();
 
   specbind (Qstandard_input, readcharfun); /* GCPROs readcharfun.  */
   specbind (Qcurrent_load_list, Qnil);
@@ -3673,7 +3673,7 @@
     /* Creating a non-pure string from a string literal not
        implemented yet.  We could just use make_string here and live
        with the extra copy.  */
-    abort ();
+    emacs_abort ();
 
   return Fintern (make_pure_c_string (str, len), obarray);
 }

=== modified file 'src/marker.c'
--- src/marker.c	2012-07-29 11:20:43 +0000
+++ src/marker.c	2012-08-31 16:20:30 +0000
@@ -59,7 +59,7 @@
 				      bytepos - BUF_BEG_BYTE (b));
 
   if (charpos - 1 != nchars)
-    abort ();
+    emacs_abort ();
 }
 
 #else /* not MARKER_DEBUG */
@@ -67,7 +67,7 @@
 #define byte_char_debug_check(b, charpos, bytepos) do { } while (0)
 
 #endif /* MARKER_DEBUG */
- 
+
 void
 clear_charpos_cache (struct buffer *b)
 {
@@ -142,7 +142,7 @@
   ptrdiff_t best_below, best_below_byte;
 
   if (charpos < BUF_BEG (b) || charpos > BUF_Z (b))
-    abort ();
+    emacs_abort ();
 
   best_above = BUF_Z (b);
   best_above_byte = BUF_Z_BYTE (b);
@@ -296,7 +296,7 @@
   ptrdiff_t best_below, best_below_byte;
 
   if (bytepos < BUF_BEG_BYTE (b) || bytepos > BUF_Z_BYTE (b))
-    abort ();
+    emacs_abort ();
 
   best_above = BUF_Z (b);
   best_above_byte = BUF_Z_BYTE (b);
@@ -506,7 +506,7 @@
   else
     {
       register ptrdiff_t charpos, bytepos;
-    
+
       CHECK_NUMBER_COERCE_MARKER (position);
       charpos = clip_to_bounds (restricted ? BUF_BEGV (b) : BUF_BEG (b),
                                XINT (position),
@@ -570,8 +570,8 @@
 
   if (b)
     {
-      attach_marker 
-	(m, b, 
+      attach_marker
+	(m, b,
 	 clip_to_bounds (BUF_BEGV (b), charpos, BUF_ZV (b)),
 	 clip_to_bounds (BUF_BEGV_BYTE (b), bytepos, BUF_ZV_BYTE (b)));
     }
@@ -605,12 +605,12 @@
 	  {
 	    if (*prev == BUF_MARKERS (b))
 	      {
-		/* Deleting first marker from the buffer's chain.  Crash 
+		/* Deleting first marker from the buffer's chain.  Crash
 		   if new first marker in chain does not say it belongs
 		   to the same buffer, or at least that they have the same
 		   base buffer.  */
 		if (tail->next && b->text != tail->next->buffer->text)
-		  abort ();
+		  emacs_abort ();
 	      }
 	    *prev = tail->next;
 	    /* We have removed the marker from the chain;

=== modified file 'src/menu.c'
--- src/menu.c	2012-08-05 15:47:28 +0000
+++ src/menu.c	2012-08-31 16:20:30 +0000
@@ -744,7 +744,7 @@
 
 	  /* All items should be contained in panes.  */
 	  if (panes_seen == 0)
-	    abort ();
+	    emacs_abort ();
 
 	  item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME);
 	  enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE);
@@ -818,7 +818,7 @@
 	  else if (EQ (type, QCtoggle))
 	    wv->button_type = BUTTON_TYPE_TOGGLE;
 	  else
-	    abort ();
+	    emacs_abort ();
 
 	  wv->selected = !NILP (selected);
 	  if (! STRINGP (help))

=== modified file 'src/minibuf.c'
--- src/minibuf.c	2012-08-28 06:20:08 +0000
+++ src/minibuf.c	2012-08-31 16:20:30 +0000
@@ -110,7 +110,7 @@
       /* I don't think that any frames may validly have a null minibuffer
 	 window anymore.  */
       if (NILP (sf->minibuffer_window))
-	abort ();
+	emacs_abort ();
 
       /* Under X, we come here with minibuf_window being the
 	 minibuffer window of the unused termcap window created in

=== modified file 'src/msdos.c'
--- src/msdos.c	2012-08-21 10:21:04 +0000
+++ src/msdos.c	2012-08-31 16:20:30 +0000
@@ -796,7 +796,7 @@
       /* The default face for the frame should always be realized and
 	 cached.  */
       if (!fp)
-	abort ();
+	emacs_abort ();
     }
   screen_face = face;
   fg = fp->foreground;
@@ -1394,7 +1394,7 @@
 static void
 IT_delete_glyphs (struct frame *f, int n)
 {
-  abort ();
+  emacs_abort ();
 }
 
 /* set-window-configuration on window.c needs this.  */
@@ -3014,7 +3014,7 @@
   const char *p;
 
   if (!enable)
-    abort ();
+    emacs_abort ();
 
   IT_menu_make_room (menu);
   menu->submenu[menu->count] = IT_menu_create ();
@@ -4120,7 +4120,7 @@
     FD_ZERO (efds);
 
   if (nfds != 1)
-    abort ();
+    emacs_abort ();
 
   /* If we are looking only for the terminal, with no timeout,
      just read it and wait -- that's more efficient.  */
@@ -4215,26 +4215,8 @@
 }
 #endif
 
-#ifdef abort
-#undef abort
-void
-dos_abort (char *file, int line)
-{
-  char buffer1[200], buffer2[400];
-  int i, j;
-
-  sprintf (buffer1, "<EMACS FATAL ERROR IN %s LINE %d>", file, line);
-  for (i = j = 0; buffer1[i]; i++) {
-    buffer2[j++] = buffer1[i];
-    buffer2[j++] = 0x70;
-  }
-  dosmemput (buffer2, j, (int)ScreenPrimary);
-  ScreenSetCursor (2, 0);
-  abort ();
-}
-#else
-void
-abort (void)
+void
+emacs_abort (void)
 {
   dos_ttcooked ();
   ScreenSetCursor (10, 0);
@@ -4250,7 +4232,6 @@
 #endif /* __DJGPP_MINOR__ >= 2 */
   exit (2);
 }
-#endif
 
 void
 syms_of_msdos (void)

=== modified file 'src/nsfont.m'
--- src/nsfont.m	2012-08-19 00:53:29 +0000
+++ src/nsfont.m	2012-08-31 16:20:30 +0000
@@ -1330,7 +1330,7 @@
 
   font_info->glyphs[block] = xmalloc (0x100 * sizeof (unsigned short));
   if (!unichars || !(font_info->glyphs[block]))
-    abort ();
+    emacs_abort ();
 
   /* create a string containing all Unicode characters in this block */
   for (idx = block<<8, i = 0; i < 0x100; idx++, i++)
@@ -1405,7 +1405,7 @@
 
   font_info->metrics[block] = xzalloc (0x100 * sizeof (struct font_metrics));
   if (!(font_info->metrics[block]))
-    abort ();
+    emacs_abort ();
 
   metrics = font_info->metrics[block];
   for (g = block<<8, i =0; i<0x100 && g < numGlyphs; g++, i++, metrics++)

=== modified file 'src/nsmenu.m'
--- src/nsmenu.m	2012-08-28 16:05:17 +0000
+++ src/nsmenu.m	2012-08-31 16:20:30 +0000
@@ -948,7 +948,7 @@
 	  else if (EQ (type, QCradio))
 	    wv->button_type = BUTTON_TYPE_RADIO;
 	  else
-	    abort ();
+	    emacs_abort ();
 
 	  wv->selected = !NILP (selected);
 

=== modified file 'src/nsterm.m'
--- src/nsterm.m	2012-08-28 16:01:59 +0000
+++ src/nsterm.m	2012-08-31 16:20:30 +0000
@@ -3340,7 +3340,7 @@
       break;
 
     default:
-      abort ();
+      emacs_abort ();
     }
 
   /* Draw box if not done already. */
@@ -3475,7 +3475,7 @@
 
       if (++apploopnr != 1)
         {
-          abort ();
+          emacs_abort ();
         }
       [NSApp run];
       --apploopnr;
@@ -3515,7 +3515,7 @@
   [outerpool release];
   outerpool = [[NSAutoreleasePool alloc] init];
 
-  
+
   send_appdefined = YES;
   if (nr > 0)
     {
@@ -3568,7 +3568,7 @@
   emacs_event = &event;
   if (++apploopnr != 1)
     {
-      abort();
+      emacs_abort ();
     }
   [NSApp run];
   --apploopnr;
@@ -3586,7 +3586,7 @@
     {
       int t;
       if ([ev type] != NSApplicationDefined)
-        abort ();
+        emacs_abort ();
 
       t = [ev data1];
       last_appdefined_event = 0;
@@ -4053,7 +4053,7 @@
             {
               fprintf (stderr, "Failed to create pipe: %s\n",
                        emacs_strerror (errno));
-              abort ();
+              emacs_abort ();
             }
 
           fcntl (selfds[0], F_SETFL, O_NONBLOCK|fcntl (selfds[0], F_GETFL));
@@ -4273,7 +4273,7 @@
     }
   else // force a stack trace to happen
     {
-      abort();
+      emacs_abort ();
     }
 }
 
@@ -4534,10 +4534,10 @@
   /* Don't open files from the command line unconditionally,
      Cocoa parses the command line wrong, --option value tries to open value
      if --option is the last option.  */
-  while ((file = [files nextObject]) != nil) 
+  while ((file = [files nextObject]) != nil)
     if (ns_do_open_file || not_in_argv (file))
       [ns_pending_files addObject: file];
-  
+
   [self replyToOpenOrPrint: NSApplicationDelegateReplySuccess];
 
 }
@@ -4604,7 +4604,7 @@
 
   /* NSTRACE (fd_handler); */
 
-  for (;;) 
+  for (;;)
     {
       [pool release];
       pool = [[NSAutoreleasePool alloc] init];
@@ -4889,7 +4889,7 @@
       is_right_key = (flags & NSRightCommandKeyMask) == NSRightCommandKeyMask;
       is_left_key = (flags & NSLeftCommandKeyMask) == NSLeftCommandKeyMask
         || (! is_right_key && (flags & NSCommandKeyMask) == NSCommandKeyMask);
-      
+
       if (is_right_key)
         emacs_event->modifiers |= parse_solitary_modifier
           (EQ (ns_right_command_modifier, Qleft)
@@ -5853,7 +5853,7 @@
   NSTRACE (menuDown);
   if (context_menu_value == -1)
     context_menu_value = [sender tag];
-  else 
+  else
     {
       NSInteger tag = [sender tag];
       find_and_call_menu_selection (emacsframe, emacsframe->menu_bar_items_used,
@@ -6180,7 +6180,7 @@
   Lisp_Object str = Qnil;
   struct frame *f = SELECTED_FRAME ();
   struct buffer *curbuf = XBUFFER (XWINDOW (f->selected_window)->buffer);
- 
+
   if ([attribute isEqualToString:NSAccessibilityRoleAttribute])
     return NSAccessibilityTextFieldRole;
 
@@ -6193,13 +6193,13 @@
     {
       if (! NILP (BVAR (curbuf, mark_active)))
           str = ns_get_local_selection (QPRIMARY, QUTF8_STRING);
-      
+
       if (NILP (str))
         {
           ptrdiff_t start_byte = BUF_BEGV_BYTE (curbuf);
           ptrdiff_t byte_range = BUF_ZV_BYTE (curbuf) - start_byte;
           ptrdiff_t range = BUF_ZV (curbuf) - BUF_BEGV (curbuf);
-          
+
           if (! NILP (BVAR (curbuf, enable_multibyte_characters)))
             str = make_uninit_multibyte_string (range, byte_range);
           else
@@ -6209,9 +6209,9 @@
           memcpy (SDATA (str), BYTE_POS_ADDR (start_byte), byte_range);
         }
     }
-  
-  
-  if (! NILP (str)) 
+
+
+  if (! NILP (str))
     {
       if (CONSP (str) && SYMBOLP (XCAR (str)))
         {
@@ -6226,7 +6226,7 @@
           return nsStr;
         }
     }
-  
+
   return [super accessibilityAttributeValue:attribute];
 }
 #endif /* NS_IMPL_COCOA */

=== modified file 'src/print.c'
--- src/print.c	2012-08-28 06:20:08 +0000
+++ src/print.c	2012-08-31 16:20:30 +0000
@@ -2060,7 +2060,7 @@
       {
 	int len;
 	/* We're in trouble if this happens!
-	   Probably should just abort () */
+	   Probably should just emacs_abort ().  */
 	strout ("#<EMACS BUG: INVALID DATATYPE ", -1, -1, printcharfun);
 	if (MISCP (obj))
 	  len = sprintf (buf, "(MISC 0x%04x)", (int) XMISCTYPE (obj));

=== modified file 'src/process.c'
--- src/process.c	2012-08-28 06:20:08 +0000
+++ src/process.c	2012-08-31 16:20:30 +0000
@@ -1586,7 +1586,7 @@
 start_process_unwind (Lisp_Object proc)
 {
   if (!PROCESSP (proc))
-    abort ();
+    emacs_abort ();
 
   /* Was PROC started successfully?
      -2 is used for a pty with no process, eg for gdb.  */
@@ -2559,7 +2559,7 @@
 make_serial_process_unwind (Lisp_Object proc)
 {
   if (!PROCESSP (proc))
-    abort ();
+    emacs_abort ();
   remove_process (proc);
   return Qnil;
 }
@@ -3396,7 +3396,7 @@
       if (socktype == SOCK_DGRAM)
 	{
 	  if (datagram_address[s].sa)
-	    abort ();
+	    emacs_abort ();
 	  datagram_address[s].sa = xmalloc (lres->ai_addrlen);
 	  datagram_address[s].len = lres->ai_addrlen;
 	  if (is_server)
@@ -3982,7 +3982,7 @@
 	  FD_CLR (inchannel, &connect_wait_mask);
 	  FD_CLR (inchannel, &write_mask);
 	  if (--num_pending_connects < 0)
-	    abort ();
+	    emacs_abort ();
 	}
 #endif
       if (inchannel == max_process_desc)
@@ -4761,7 +4761,7 @@
 		 Cleanup occurs c/o status_notify after SIGCLD. */
 	      no_avail = 1; /* Cannot depend on values returned */
 #else
-	      abort ();
+	      emacs_abort ();
 #endif
 	    }
 	  else
@@ -5002,7 +5002,7 @@
 	      FD_CLR (channel, &connect_wait_mask);
               FD_CLR (channel, &write_mask);
 	      if (--num_pending_connects < 0)
-		abort ();
+		emacs_abort ();
 
 	      proc = chan_process[channel];
 	      if (NILP (proc))
@@ -6363,7 +6363,7 @@
 #endif /* not HAVE_SHUTDOWN */
       new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0);
       if (new_outfd < 0)
-	abort ();
+	emacs_abort ();
       old_outfd = XPROCESS (proc)->outfd;
 
       if (!proc_encode_coding_system[new_outfd])

=== modified file 'src/ralloc.c'
--- src/ralloc.c	2012-08-28 16:01:59 +0000
+++ src/ralloc.c	2012-08-31 16:20:30 +0000
@@ -237,7 +237,7 @@
     }
 
   if (! heap)
-    abort ();
+    emacs_abort ();
 
   /* If we can't fit SIZE bytes in that heap,
      try successive later heaps.  */
@@ -330,7 +330,7 @@
 	  /* This heap should have no blocs in it.  */
 	  if (last_heap->first_bloc != NIL_BLOC
 	      || last_heap->last_bloc != NIL_BLOC)
-	    abort ();
+	    emacs_abort ();
 
 	  /* Return the last heap, with its header, to the system.  */
 	  excess = (char *)last_heap->end - (char *)last_heap->start;
@@ -355,7 +355,7 @@
              which returns the entire last heap to the system, seems
              unlikely to trigger this mode of failure.  */
 	  if (last_heap->end != (*real_morecore) (0))
-	    abort ();
+	    emacs_abort ();
 	}
     }
 }
@@ -452,7 +452,7 @@
 
   /* No need to ever call this if arena is frozen, bug somewhere!  */
   if (r_alloc_freeze_level)
-    abort ();
+    emacs_abort ();
 
   while (b)
     {
@@ -576,7 +576,7 @@
 
   /* No need to ever call this if arena is frozen, bug somewhere!  */
   if (r_alloc_freeze_level)
-    abort ();
+    emacs_abort ();
 
   if (bloc == NIL_BLOC || size == bloc->size)
     return 1;
@@ -588,7 +588,7 @@
     }
 
   if (heap == NIL_HEAP)
-    abort ();
+    emacs_abort ();
 
   old_size = bloc->size;
   bloc->size = size;
@@ -937,7 +937,7 @@
 
   dead_bloc = find_bloc (ptr);
   if (dead_bloc == NIL_BLOC)
-    abort (); /* Double free? PTR not originally used to allocate?  */
+    emacs_abort (); /* Double free? PTR not originally used to allocate?  */
 
   free_bloc (dead_bloc);
   *ptr = 0;
@@ -979,7 +979,7 @@
 
   bloc = find_bloc (ptr);
   if (bloc == NIL_BLOC)
-    abort (); /* Already freed? PTR not originally used to allocate?  */
+    emacs_abort (); /* Already freed? PTR not originally used to allocate?  */
 
   if (size < bloc->size)
     {
@@ -1152,7 +1152,7 @@
     }
 
   if (bloc == NIL_BLOC || bloc->variable != old)
-    abort (); /* Already freed? OLD not originally used to allocate?  */
+    emacs_abort (); /* Already freed? OLD not originally used to allocate?  */
 
   /* Update variable to point to the new location.  */
   bloc->variable = new;
@@ -1193,7 +1193,7 @@
   first_heap->start = first_heap->bloc_start
     = virtual_break_value = break_value = (*real_morecore) (0);
   if (break_value == NIL)
-    abort ();
+    emacs_abort ();
 
   extra_bytes = ROUNDUP (50000);
 #endif

=== modified file 'src/region-cache.c'
--- src/region-cache.c	2012-08-15 16:21:41 +0000
+++ src/region-cache.c	2012-08-31 16:20:30 +0000
@@ -194,7 +194,7 @@
   if (BOUNDARY_POS (c, low) > pos
       || (low + 1 < c->cache_len
           && BOUNDARY_POS (c, low + 1) <= pos))
-      abort ();
+      emacs_abort ();
 
   return low;
 }
@@ -217,12 +217,12 @@
 
   if (pos < 0
       || pos > c->cache_len)
-    abort ();
+    emacs_abort ();
 
   /* We mustn't ever try to put the gap before the dummy start
      boundary.  That must always be start-relative.  */
   if (pos == 0)
-    abort ();
+    emacs_abort ();
 
   /* Need we move the gap right?  */
   while (gap_start < pos)
@@ -291,24 +291,24 @@
 {
   /* i must be a valid cache index.  */
   if (i < 0 || i > c->cache_len)
-    abort ();
+    emacs_abort ();
 
   /* We must never want to insert something before the dummy first
      boundary.  */
   if (i == 0)
-    abort ();
+    emacs_abort ();
 
   /* We must only be inserting things in order.  */
   if (! (BOUNDARY_POS (c, i - 1) < pos
          && (i == c->cache_len
              || pos < BOUNDARY_POS (c, i))))
-    abort ();
+    emacs_abort ();
 
   /* The value must be different from the ones around it.  However, we
      temporarily create boundaries that establish the same value as
      the subsequent boundary, so we're not going to flag that case.  */
   if (BOUNDARY_VALUE (c, i - 1) == value)
-    abort ();
+    emacs_abort ();
 
   move_cache_gap (c, i, 1);
 
@@ -331,16 +331,16 @@
   /* Gotta be in range.  */
   if (start < 0
       || end > c->cache_len)
-    abort ();
+    emacs_abort ();
 
   /* Gotta be in order.  */
   if (start > end)
-    abort ();
+    emacs_abort ();
 
   /* Can't delete the dummy entry.  */
   if (start == 0
       && end >= 1)
-    abort ();
+    emacs_abort ();
 
   /* Minimize gap motion.  If we're deleting nothing, do nothing.  */
   if (len == 0)
@@ -380,10 +380,10 @@
 		  ptrdiff_t start, ptrdiff_t end, int value)
 {
   if (start > end)
-    abort ();
+    emacs_abort ();
   if (start < c->buffer_beg
       || end   > c->buffer_end)
-    abort ();
+    emacs_abort ();
 
   /* Eliminate this case; then we can assume that start and end-1 are
      both the locations of real characters in the buffer.  */

=== modified file 'src/scroll.c'
--- src/scroll.c	2012-07-05 18:35:48 +0000
+++ src/scroll.c	2012-08-31 16:20:30 +0000
@@ -195,13 +195,13 @@
 	  {
 	    cost = p1->writecost + first_insert_cost[i];
 	    if ((int) p1->insertcount > i)
-	      abort ();
+	      emacs_abort ();
 	    cost1 = p1->insertcost + next_insert_cost[i - p1->insertcount];
 	  }
 	p->insertcost = min (cost, cost1) + draw_cost[i] + extra_cost;
 	p->insertcount = (cost < cost1) ? 1 : p1->insertcount + 1;
 	if ((int) p->insertcount > i)
-	  abort ();
+	  emacs_abort ();
 
 	/* Calculate the cost if we do a delete line after
 	   outputting this line.

=== modified file 'src/search.c'
--- src/search.c	2012-08-17 17:08:30 +0000
+++ src/search.c	2012-08-31 16:20:30 +0000
@@ -1009,7 +1009,7 @@
       if (!EQ (noerror, Qt))
 	{
 	  if (lim < BEGV || lim > ZV)
-	    abort ();
+	    emacs_abort ();
 	  SET_PT_BOTH (lim, lim_byte);
 	  return Qnil;
 #if 0 /* This would be clean, but maybe programs depend on
@@ -1022,7 +1022,7 @@
     }
 
   if (np < BEGV || np > ZV)
-    abort ();
+    emacs_abort ();
 
   SET_PT (np);
 
@@ -2770,7 +2770,7 @@
 	    }
 	  else
 	    /* last_thing_searched must always be Qt, a buffer, or Qnil.  */
-	    abort ();
+	    emacs_abort ();
 
 	  len = 2 * i + 2;
 	}

=== modified file 'src/sound.c'
--- src/sound.c	2012-07-29 08:18:29 +0000
+++ src/sound.c	2012-08-31 16:20:30 +0000
@@ -843,7 +843,7 @@
 	}
     }
   else
-    abort ();
+    emacs_abort ();
 }
 
 
@@ -1138,7 +1138,7 @@
 	}
     }
   else
-    abort ();
+    emacs_abort ();
 }
 
 

=== modified file 'src/sysdep.c'
--- src/sysdep.c	2012-08-18 02:49:24 +0000
+++ src/sysdep.c	2012-08-31 03:06:13 +0000
@@ -1838,6 +1838,15 @@
 }
 #endif
 \f
+#ifndef HAVE_NTGUI
+/* Using emacs_abort lets GDB return from a breakpoint here.  */
+void
+emacs_abort (void)
+{
+  (abort) ();
+}
+#endif
+
 int
 emacs_open (const char *path, int oflag, int mode)
 {

=== modified file 'src/term.c'
--- src/term.c	2012-08-31 10:53:19 +0000
+++ src/term.c	2012-08-31 16:21:56 +0000
@@ -1498,7 +1498,7 @@
 	{
 	  glyph->resolved_level = it->bidi_it.resolved_level;
 	  if ((it->bidi_it.type & 7) != it->bidi_it.type)
-	    abort ();
+	    emacs_abort ();
 	  glyph->bidi_type = it->bidi_it.type;
 	}
       else
@@ -1695,7 +1695,7 @@
 	{
 	  glyph->resolved_level = it->bidi_it.resolved_level;
 	  if ((it->bidi_it.type & 7) != it->bidi_it.type)
-	    abort ();
+	    emacs_abort ();
 	  glyph->bidi_type = it->bidi_it.type;
 	}
       else
@@ -1780,7 +1780,7 @@
     {
       glyph->resolved_level = it->bidi_it.resolved_level;
       if ((it->bidi_it.type & 7) != it->bidi_it.type)
-	abort ();
+	emacs_abort ();
       glyph->bidi_type = it->bidi_it.type;
     }
   else
@@ -2250,7 +2250,7 @@
   struct terminal *t;
 
   if (!name)
-    abort ();
+    emacs_abort ();
 
   for (t = terminal_list; t; t = t->next_terminal)
     {
@@ -2798,7 +2798,7 @@
   struct tty_output *t = xzalloc (sizeof *t);
 
   if (! FRAME_TERMCAP_P (f))
-    abort ();
+    emacs_abort ();
 
   t->display_info = FRAME_TERMINAL (f)->display_info.tty;
 
@@ -2811,7 +2811,7 @@
 tty_free_frame_resources (struct frame *f)
 {
   if (! FRAME_TERMCAP_P (f))
-    abort ();
+    emacs_abort ();
 
   if (FRAME_FACE_CACHE (f))
     free_frame_faces (f);
@@ -2827,7 +2827,7 @@
 tty_free_frame_resources (struct frame *f)
 {
   if (! FRAME_TERMCAP_P (f) && ! FRAME_MSDOS_P (f))
-    abort ();
+    emacs_abort ();
 
   if (FRAME_FACE_CACHE (f))
     free_frame_faces (f);
@@ -3108,7 +3108,7 @@
 
 #ifndef TERMINFO
   if (strlen (tty->termcap_term_buffer) >= buffer_size)
-    abort ();
+    emacs_abort ();
   buffer_size = strlen (tty->termcap_term_buffer);
 #endif
   tty->termcap_strings_buffer = area = xmalloc (buffer_size);
@@ -3467,7 +3467,7 @@
     verror (str1, ap);
 
   va_end (ap);
-  abort ();
+  emacs_abort ();
 }
 
 void
@@ -3494,7 +3494,7 @@
     return;
 
   if (terminal->type != output_termcap)
-    abort ();
+    emacs_abort ();
 
   tty = terminal->display_info.tty;
 
@@ -3508,7 +3508,7 @@
 
       if (! p)
         /* This should not happen. */
-        abort ();
+        emacs_abort ();
 
       p->next = tty->next;
       tty->next = 0;

=== modified file 'src/termchar.h'
--- src/termchar.h	2012-06-09 16:44:44 +0000
+++ src/termchar.h	2012-08-31 16:20:30 +0000
@@ -207,6 +207,6 @@
   (((f)->output_method == output_termcap	\
     || (f)->output_method == output_msdos_raw)	\
    ? (f)->terminal->display_info.tty            \
-   : (abort (), (struct tty_display_info *) 0))
+   : (emacs_abort (), (struct tty_display_info *) 0))
 
 #define CURTTY() FRAME_TTY (SELECTED_FRAME())

=== modified file 'src/terminal.c'
--- src/terminal.c	2012-08-18 00:07:52 +0000
+++ src/terminal.c	2012-08-31 16:20:30 +0000
@@ -294,7 +294,7 @@
 
   for (tp = &terminal_list; *tp != terminal; tp = &(*tp)->next_terminal)
     if (! *tp)
-      abort ();
+      emacs_abort ();
   *tp = terminal->next_terminal;
 
   xfree (terminal->keyboard_coding);
@@ -411,7 +411,7 @@
     case output_ns:
       return Qns;
     default:
-      abort ();
+      emacs_abort ();
     }
 }
 
@@ -519,7 +519,7 @@
 init_initial_terminal (void)
 {
   if (initialized || terminal_list || tty_list)
-    abort ();
+    emacs_abort ();
 
   initial_terminal = create_terminal ();
   initial_terminal->type = output_initial;
@@ -538,7 +538,7 @@
 delete_initial_terminal (struct terminal *terminal)
 {
   if (terminal != initial_terminal)
-    abort ();
+    emacs_abort ();
 
   delete_terminal (terminal);
   initial_terminal = NULL;

=== modified file 'src/terminfo.c'
--- src/terminfo.c	2012-01-19 07:21:25 +0000
+++ src/terminfo.c	2012-08-31 16:20:30 +0000
@@ -46,7 +46,7 @@
 
   /* Emacs always should pass a null OUTSTRING and zero LEN.  */
   if (outstring || len)
-    abort ();
+    emacs_abort ();
 
   temp = tparm (string, arg1, arg2, arg3, arg4);
   return xstrdup (temp);

=== modified file 'src/tparam.c'
--- src/tparam.c	2012-07-05 06:32:41 +0000
+++ src/tparam.c	2012-08-31 16:20:30 +0000
@@ -247,7 +247,7 @@
 	      break;
 
 	    default:
-	      abort ();
+	      emacs_abort ();
 	    }
 	}
       else

=== modified file 'src/w32.c'
--- src/w32.c	2012-08-26 10:29:37 +0000
+++ src/w32.c	2012-08-31 16:20:30 +0000
@@ -1273,9 +1273,9 @@
 
   /* Ensure HOME and SHELL are defined. */
   if (getenv ("HOME") == NULL)
-    abort ();
+    emacs_abort ();
   if (getenv ("SHELL") == NULL)
-    abort ();
+    emacs_abort ();
 
   /* Set dir and shell from environment variables. */
   strcpy (dflt_passwd.pw_dir, getenv ("HOME"));
@@ -1788,9 +1788,9 @@
       char modname[MAX_PATH];
 
       if (!GetModuleFileName (NULL, modname, MAX_PATH))
-	abort ();
+	emacs_abort ();
       if ((p = strrchr (modname, '\\')) == NULL)
-	abort ();
+	emacs_abort ();
       *p = 0;
 
       if ((p = strrchr (modname, '\\')) && xstrcasecmp (p, "\\bin") == 0)
@@ -1902,13 +1902,13 @@
   /* FIXME: Do we need to resolve possible symlinks in startup_dir?
      Does it matter anywhere in Emacs?  */
   if (!GetCurrentDirectory (MAXPATHLEN, startup_dir))
-    abort ();
+    emacs_abort ();
 
   {
     static char modname[MAX_PATH];
 
     if (!GetModuleFileName (NULL, modname, MAX_PATH))
-      abort ();
+      emacs_abort ();
     argv[0] = modname;
   }
 
@@ -1930,7 +1930,7 @@
 
   p = getenv ("emacs_dir");
   if (p == NULL)
-    abort ();
+    emacs_abort ();
   strcpy (root_dir, p);
   root_dir[parse_root (root_dir, NULL)] = '\0';
   dostounix_filename (root_dir);
@@ -3287,7 +3287,7 @@
      doesn't resolve aliasing due to subst commands, or recognize hard
      links.  */
   if (!w32_get_long_filename ((char *)name, fullname, MAX_PATH))
-    abort ();
+    emacs_abort ();
 
   parse_root (fullname, &p);
   /* Normal W32 filesystems are still case insensitive. */
@@ -5587,7 +5587,7 @@
 	  if (fd_info[ fd ].cp != NULL)
 	    {
 	      DebPrint (("sys_socket: fd_info[%d] apparently in use!\n", fd));
-	      abort ();
+	      emacs_abort ();
 	    }
 
 	  fd_info[ fd ].cp = cp;
@@ -5966,7 +5966,7 @@
 	    {
 	      if (fd_info[fd].flags & FILE_SOCKET)
 		{
-		  if (winsock_lib == NULL) abort ();
+		  if (winsock_lib == NULL) emacs_abort ();
 
 		  pfn_shutdown (SOCK_HANDLE (fd), 2);
 		  rc = pfn_closesocket (SOCK_HANDLE (fd));
@@ -6084,7 +6084,7 @@
       || (fd_info[fd].flags & FILE_READ) == 0)
     {
       DebPrint (("_sys_read_ahead: internal error: fd %d is not a pipe, serial port, or socket!\n", fd));
-      abort ();
+      emacs_abort ();
     }
 
   cp->status = STATUS_READ_IN_PROGRESS;
@@ -6220,7 +6220,7 @@
       /* re-read CR carried over from last read */
       if (fd_info[fd].flags & FILE_LAST_CR)
 	{
-	  if (fd_info[fd].flags & FILE_BINARY) abort ();
+	  if (fd_info[fd].flags & FILE_BINARY) emacs_abort ();
 	  *buffer++ = 0x0d;
 	  count--;
 	  nchars++;
@@ -6323,7 +6323,7 @@
 	    }
 	  else /* FILE_SOCKET */
 	    {
-	      if (winsock_lib == NULL) abort ();
+	      if (winsock_lib == NULL) emacs_abort ();
 
 	      /* do the equivalent of a non-blocking read */
 	      pfn_ioctlsocket (SOCK_HANDLE (fd), FIONREAD, &waiting);
@@ -6474,7 +6474,7 @@
   else if (fd < MAXDESC && fd_info[fd].flags & FILE_SOCKET)
     {
       unsigned long nblock = 0;
-      if (winsock_lib == NULL) abort ();
+      if (winsock_lib == NULL) emacs_abort ();
 
       /* TODO: implement select() properly so non-blocking I/O works. */
       /* For now, make sure the write blocks.  */
@@ -6640,8 +6640,7 @@
 		      buffer,
 		      "Emacs Abort Dialog",
 		      MB_OK | MB_ICONEXCLAMATION | MB_TASKMODAL);
-      /* Use the low-level Emacs abort. */
-#undef abort
+	  /* Use the low-level system abort. */
 	  abort ();
 	}
       else

=== modified file 'src/w32fns.c'
--- src/w32fns.c	2012-08-18 06:06:39 +0000
+++ src/w32fns.c	2012-08-31 16:20:30 +0000
@@ -2280,7 +2280,7 @@
               CoInitialize (NULL);
 	      w32_createwindow ((struct frame *) msg.wParam);
 	      if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0))
-		abort ();
+		emacs_abort ();
 	      break;
 	    case WM_EMACS_SETLOCALE:
 	      SetThreadLocale (msg.wParam);
@@ -2290,7 +2290,7 @@
 	      result = (int) ActivateKeyboardLayout ((HKL) msg.wParam, 0);
 	      if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE,
 				      result, 0))
-		abort ();
+		emacs_abort ();
 	      break;
 	    case WM_EMACS_REGISTER_HOT_KEY:
 	      focus_window = GetFocus ();
@@ -2311,7 +2311,7 @@
                  GC.  */
 	      XSETCAR ((Lisp_Object) ((EMACS_INT) msg.lParam), Qnil);
 	      if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0))
-		abort ();
+		emacs_abort ();
 	      break;
 	    case WM_EMACS_TOGGLE_LOCK_KEY:
 	      {
@@ -2343,7 +2343,7 @@
 		  }
 		if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE,
 					cur_state, 0))
-		  abort ();
+		  emacs_abort ();
 	      }
 	      break;
 #ifdef MSG_DEBUG
@@ -2398,11 +2398,11 @@
 {
   /* Only input thread can send deferred messages.  */
   if (GetCurrentThreadId () != dwWindowsThreadId)
-    abort ();
+    emacs_abort ();
 
   /* It is an error to send a message that is already deferred.  */
   if (find_deferred_msg (hwnd, msg) != NULL)
-    abort ();
+    emacs_abort ();
 
   /* Enforced synchronization is not needed because this is the only
      function that alters deferred_msg_head, and the following critical
@@ -2475,7 +2475,7 @@
   PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE);
 
   if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0))
-    abort ();
+    emacs_abort ();
 
   memset (&dummy_buf, 0, sizeof (dummy_buf));
   dummy_buf.w32msg.msg.hwnd = NULL;
@@ -3136,7 +3136,7 @@
 		msg = WM_MBUTTONUP;
 		button_state &= ~MMOUSE;
 
-		if (button_state) abort ();
+		if (button_state) emacs_abort ();
 	      }
 	    else
 	      return 0;
@@ -3367,7 +3367,7 @@
 	/* Detect if message has already been deferred; in this case
 	   we cannot return any sensible value to ignore this.  */
 	if (find_deferred_msg (hwnd, msg) != NULL)
-	  abort ();
+	  emacs_abort ();
 
         menubar_in_use = 1;
 
@@ -3842,7 +3842,7 @@
   MSG msg;
 
   if (!PostThreadMessage (dwWindowsThreadId, WM_EMACS_CREATEWINDOW, (WPARAM)f, 0))
-    abort ();
+    emacs_abort ();
   GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE);
 }
 
@@ -6287,7 +6287,7 @@
       lisp_modifiers = XINT (Fcar (Fcdr (c)));
       c = Fcar (c);
       if (!SYMBOLP (c))
-	abort ();
+	emacs_abort ();
       vk_code = lookup_vk_code (SDATA (SYMBOL_NAME (c)));
     }
   else if (INTEGERP (c))
@@ -7194,10 +7194,8 @@
   syms_of_w32uniscribe ();
 }
 
-#undef abort
-
 void
-w32_abort (void)
+emacs_abort (void)
 {
   int button;
   button = MessageBox (NULL,

=== modified file 'src/w32menu.c'
--- src/w32menu.c	2012-08-28 16:01:59 +0000
+++ src/w32menu.c	2012-08-31 16:20:30 +0000
@@ -820,7 +820,7 @@
 	  else if (EQ (type, QCradio))
 	    wv->button_type = BUTTON_TYPE_RADIO;
 	  else
-	    abort ();
+	    emacs_abort ();
 
 	  wv->selected = !NILP (selected);
 

=== modified file 'src/w32proc.c'
--- src/w32proc.c	2012-08-02 04:14:48 +0000
+++ src/w32proc.c	2012-08-31 16:20:30 +0000
@@ -176,7 +176,7 @@
   /* Should not be deleting a child that is still needed. */
   for (i = 0; i < MAXDESC; i++)
     if (fd_info[i].cp == cp)
-      abort ();
+      emacs_abort ();
 
   if (!CHILD_ACTIVE (cp))
     return;
@@ -316,7 +316,7 @@
   DWORD flags;
   char dir[ MAXPATHLEN ];
 
-  if (cp == NULL) abort ();
+  if (cp == NULL) emacs_abort ();
 
   memset (&start, 0, sizeof (start));
   start.cb = sizeof (start);
@@ -405,7 +405,7 @@
   if (fd_info[fd].cp != NULL)
     {
       DebPrint (("register_child: fd_info[%d] apparently in use!\n", fd));
-      abort ();
+      emacs_abort ();
     }
 
   fd_info[fd].cp = cp;
@@ -459,7 +459,7 @@
       /* We want to wait for a specific child */
       wait_hnd[nh] = dead_child->procinfo.hProcess;
       cps[nh] = dead_child;
-      if (!wait_hnd[nh]) abort ();
+      if (!wait_hnd[nh]) emacs_abort ();
       nh++;
       active = 0;
       goto get_result;
@@ -507,7 +507,7 @@
       active -= WAIT_ABANDONED_0;
     }
   else
-    abort ();
+    emacs_abort ();
 
 get_result:
   if (!GetExitCodeProcess (wait_hnd[active], &retval))
@@ -1189,7 +1189,7 @@
 #endif
 		wait_hnd[nh] = cp->char_avail;
 		fdindex[nh] = i;
-		if (!wait_hnd[nh]) abort ();
+		if (!wait_hnd[nh]) emacs_abort ();
 		nh++;
 #ifdef FULL_DEBUG
 		DebPrint (("select waiting on child %d fd %d\n",
@@ -1276,7 +1276,7 @@
       active -= WAIT_ABANDONED_0;
     }
   else
-    abort ();
+    emacs_abort ();
 
   /* Loop over all handles after active (now officially documented as
      being the first signaled handle in the array).  We do this to

=== modified file 'src/w32select.c'
--- src/w32select.c	2012-07-29 08:18:29 +0000
+++ src/w32select.c	2012-08-31 16:20:30 +0000
@@ -394,7 +394,7 @@
 
   BLOCK_INPUT;
 
-  /* Fsignal calls abort() if it sees that waiting_for_input is
+  /* Fsignal calls emacs_abort () if it sees that waiting_for_input is
      set.  */
   owfi = waiting_for_input;
   waiting_for_input = 0;

=== modified file 'src/w32term.c'
--- src/w32term.c	2012-08-18 01:42:52 +0000
+++ src/w32term.c	2012-08-31 16:20:30 +0000
@@ -2426,7 +2426,7 @@
       break;
 
     default:
-      abort ();
+      emacs_abort ();
     }
 
   if (!s->for_overlaps)
@@ -2626,7 +2626,7 @@
   if (! FRAME_W32_P (f))
     return;
 
-  abort ();
+  emacs_abort ();
 }
 
 
@@ -2709,7 +2709,7 @@
   if (! FRAME_W32_P (f))
     return;
 
-  abort ();
+  emacs_abort ();
 }
 
 
@@ -3431,7 +3431,7 @@
       frame = XCAR (tail);
       /* All elements of Vframe_list should be frames.  */
       if (! FRAMEP (frame))
-	abort ();
+	emacs_abort ();
 
       /* Scan this frame's scroll bar list for a scroll bar with the
 	 right window ID.  */
@@ -3854,7 +3854,7 @@
 
   /* We can't redeem this window's scroll bar if it doesn't have one.  */
   if (NILP (window->vertical_scroll_bar))
-    abort ();
+    emacs_abort ();
 
   bar = XSCROLL_BAR (window->vertical_scroll_bar);
 
@@ -3873,7 +3873,7 @@
       else
         /* If its prev pointer is nil, it must be at the front of
            one or the other!  */
-        abort ();
+        emacs_abort ();
     }
   else
     XSCROLL_BAR (bar->prev)->next = bar->next;
@@ -3928,7 +3928,7 @@
 			     struct input_event *emacs_event)
 {
   if (! WINDOWP (bar->window))
-    abort ();
+    emacs_abort ();
 
   emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
   emacs_event->code = 0;
@@ -5233,7 +5233,7 @@
 	  break;
 
 	default:
-	  abort ();
+	  emacs_abort ();
 	}
     }
 }

=== modified file 'src/w32xfns.c'
--- src/w32xfns.c	2012-07-29 08:18:29 +0000
+++ src/w32xfns.c	2012-08-31 16:20:30 +0000
@@ -122,7 +122,7 @@
   HDC hdc;
 
   if (f->output_method != output_w32)
-    abort ();
+    emacs_abort ();
 
   enter_crit ();
 

=== modified file 'src/widget.c'
--- src/widget.c	2012-07-10 21:48:34 +0000
+++ src/widget.c	2012-08-31 16:20:30 +0000
@@ -226,7 +226,7 @@
 static void
 mark_shell_size_user_specified (Widget wmshell)
 {
-  if (! XtIsWMShell (wmshell)) abort ();
+  if (! XtIsWMShell (wmshell)) emacs_abort ();
   /* This is kind of sleazy, but I can't see how else to tell it to make it
      mark the WM_SIZE_HINTS size as user specified when appropriate. */
   ((WMShellWidget) wmshell)->wm.size_hints.flags |= USSize;
@@ -290,7 +290,7 @@
   Widget wmshell = get_wm_shell ((Widget) ew);
   /* Each Emacs shell is now independent and top-level.  */
 
-  if (! XtIsSubclass (wmshell, shellWidgetClass)) abort ();
+  if (! XtIsSubclass (wmshell, shellWidgetClass)) emacs_abort ();
 
   /* We don't need this for the moment. The geometry is computed in
      xfns.c.  */
@@ -679,8 +679,8 @@
   EmacsFrame ew = (EmacsFrame) widget;
   struct frame* s = ew->emacs_frame.frame;
 
-  if (! s) abort ();
-  if (! s->output_data.x) abort ();
+  if (! s) emacs_abort ();
+  if (! s->output_data.x) emacs_abort ();
 
   BLOCK_INPUT;
   x_free_gcs (s);

=== modified file 'src/window.c'
--- src/window.c	2012-08-28 16:01:59 +0000
+++ src/window.c	2012-08-31 16:20:30 +0000
@@ -386,7 +386,7 @@
       else if (! NILP (XWINDOW (window)->vchild))
 	window = XWINDOW (window)->vchild;
       else
-	abort ();
+	emacs_abort ();
     }
 
   return window;
@@ -1289,7 +1289,7 @@
       return Qnil;
 
     default:
-      abort ();
+      emacs_abort ();
     }
 }
 
@@ -1948,7 +1948,7 @@
   buf = w->buffer;
   b = XBUFFER (buf);
   if (b != XMARKER (w->pointm)->buffer)
-    abort ();
+    emacs_abort ();
 
 #if 0
   if (w == XWINDOW (selected_window)
@@ -2669,7 +2669,7 @@
 	  case CHECK_ALL_WINDOWS:
 	    if (! NILP (w->buffer)
 		&& NILP (BVAR (XBUFFER (w->buffer), name)))
-	      abort ();
+	      emacs_abort ();
 	    break;
 
 	  case WINDOW_LOOP_UNUSED:

=== modified file 'src/xdisp.c'
--- src/xdisp.c	2012-08-28 05:49:02 +0000
+++ src/xdisp.c	2012-08-31 16:20:30 +0000
@@ -7306,7 +7306,7 @@
 
     default:
       /* There are no other methods defined, so this should be a bug.  */
-      abort ();
+      emacs_abort ();
     }
 
   eassert (it->method != GET_FROM_STRING
@@ -7761,7 +7761,7 @@
       compute_stop_pos (it);
       /* We must advance forward, right?  */
       if (it->stop_charpos <= charpos)
-	abort ();
+	emacs_abort ();
     }
   while (charpos > BEGV && it->stop_charpos >= it->end_charpos);
 
@@ -7810,7 +7810,7 @@
       compute_stop_pos (it);
       /* We must advance forward, right?  */
       if (it->stop_charpos <= it->prev_stop)
-	abort ();
+	emacs_abort ();
       charpos = it->stop_charpos;
     }
   while (charpos <= where_we_are);
@@ -8898,7 +8898,7 @@
 	  break;
 
 	default:
-	  abort ();
+	  emacs_abort ();
 	}
 
       /* Reset/increment for the next run.  */
@@ -10532,7 +10532,7 @@
 check_message_stack (void)
 {
   if (!NILP (Vmessage_stack))
-    abort ();
+    emacs_abort ();
 }
 
 
@@ -14422,7 +14422,7 @@
       for (g = row->glyphs[TEXT_AREA], x = row->x; g < glyph; g++)
 	{
 	  if (g >= row->glyphs[TEXT_AREA] + row->used[TEXT_AREA])
-	    abort ();
+	    emacs_abort ();
 	  x += g->pixel_width;
 	}
     }
@@ -14543,7 +14543,7 @@
   SET_MARKER_FROM_TEXT_POS (w->start, startp);
 
   if (current_buffer != XBUFFER (w->buffer))
-    abort ();
+    emacs_abort ();
 
   if (!NILP (Vwindow_scroll_functions))
     {
@@ -15512,9 +15512,9 @@
   /* Some sanity checks.  */
   CHECK_WINDOW_END (w);
   if (Z == Z_BYTE && CHARPOS (opoint) != BYTEPOS (opoint))
-    abort ();
+    emacs_abort ();
   if (BYTEPOS (opoint) < CHARPOS (opoint))
-    abort ();
+    emacs_abort ();
 
   /* If %c is in mode line, update it if needed.  */
   if (!NILP (w->column_number_displayed)
@@ -15726,7 +15726,7 @@
 	  goto try_to_scroll;
 
 	default:
-	  abort ();
+	  emacs_abort ();
 	}
     }
   /* If current starting point was originally the beginning of a line
@@ -15889,7 +15889,7 @@
 	  break;
 
 	default:
-	  abort ();
+	  emacs_abort ();
 	}
     }
 
@@ -17337,7 +17337,7 @@
 	  if (row)
 	    set_cursor_from_row (w, row, current_matrix, 0, 0, 0, 0);
 	  else
-	    abort ();
+	    emacs_abort ();
 	  return 1;
 	}
     }
@@ -17381,7 +17381,7 @@
 	  if (row)
 	    set_cursor_from_row (w, row, current_matrix, 0, 0, 0, 0);
 	  else
-	    abort ();
+	    emacs_abort ();
 	  return 2;
 	}
     }
@@ -17870,7 +17870,7 @@
       IF_DEBUG (debug_method_add (w, "C"));
     }
   else
-    abort ();
+    emacs_abort ();
 
   IF_DEBUG (debug_end_pos = XFASTINT (w->window_end_pos);
 	    debug_end_vpos = XFASTINT (w->window_end_vpos));
@@ -19247,7 +19247,7 @@
 	/* A line that is entirely from a string/image/stretch...  */
 	row->maxpos = row->minpos;
       else
-	abort ();
+	emacs_abort ();
     }
   else
     row->maxpos = it->current.pos;
@@ -20088,7 +20088,7 @@
 	  return Qright_to_left;
 	  break;
 	default:
-	  abort ();
+	  emacs_abort ();
 	}
     }
 }
@@ -22001,7 +22001,7 @@
 	    {
 	      /* Glyph is off the left margin of the display area.
 		 Should not happen.  */
-	      abort ();
+	      emacs_abort ();
 	    }
 
 	  row->ascent = max (row->ascent, it->max_ascent);
@@ -23366,7 +23366,7 @@
 	      break;							\
 									\
 	    default:							\
-	      abort ();							\
+	      emacs_abort ();							\
 	    }								\
 									\
 	  if (s)							\
@@ -23707,7 +23707,7 @@
 	{
 	  glyph->resolved_level = it->bidi_it.resolved_level;
 	  if ((it->bidi_it.type & 7) != it->bidi_it.type)
-	    abort ();
+	    emacs_abort ();
 	  glyph->bidi_type = it->bidi_it.type;
 	}
       else
@@ -23781,7 +23781,7 @@
 	{
 	  glyph->resolved_level = it->bidi_it.resolved_level;
 	  if ((it->bidi_it.type & 7) != it->bidi_it.type)
-	    abort ();
+	    emacs_abort ();
 	  glyph->bidi_type = it->bidi_it.type;
 	}
       ++it->glyph_row->used[area];
@@ -23960,7 +23960,7 @@
 	    {
 	      glyph->resolved_level = it->bidi_it.resolved_level;
 	      if ((it->bidi_it.type & 7) != it->bidi_it.type)
-		abort ();
+		emacs_abort ();
 	      glyph->bidi_type = it->bidi_it.type;
 	    }
 	  ++it->glyph_row->used[area];
@@ -24021,7 +24021,7 @@
 	{
 	  glyph->resolved_level = it->bidi_it.resolved_level;
 	  if ((it->bidi_it.type & 7) != it->bidi_it.type)
-	    abort ();
+	    emacs_abort ();
 	  glyph->bidi_type = it->bidi_it.type;
 	}
       else
@@ -24276,7 +24276,7 @@
 	}
     }
   else
-    abort ();
+    emacs_abort ();
 
 #ifdef HAVE_WINDOW_SYSTEM
   /* On a GUI frame, when the right fringe (left fringe for R2L rows)
@@ -24473,7 +24473,7 @@
 	{
 	  glyph->resolved_level = it->bidi_it.resolved_level;
 	  if ((it->bidi_it.type & 7) != it->bidi_it.type)
-	    abort ();
+	    emacs_abort ();
 	  glyph->bidi_type = it->bidi_it.type;
 	}
       ++it->glyph_row->used[area];

=== modified file 'src/xfaces.c'
--- src/xfaces.c	2012-08-21 10:21:04 +0000
+++ src/xfaces.c	2012-08-31 16:20:30 +0000
@@ -551,7 +551,7 @@
   if (color_count[pixel] > 0)
     --color_count[pixel];
   else
-    abort ();
+    emacs_abort ();
 }
 
 
@@ -768,7 +768,7 @@
   if (!FRAME_NS_P (f) || FRAME_NS_WINDOW (f))
 #endif
     if (!realize_basic_faces (f))
-	abort ();
+	emacs_abort ();
 }
 
 
@@ -812,7 +812,7 @@
     {
       clear_face_cache (0);
       if (!realize_basic_faces (f))
-	abort ();
+	emacs_abort ();
     }
 }
 
@@ -1149,7 +1149,7 @@
     return ns_defined_color (f, color_name, color_def, alloc, 1);
 #endif
   else
-    abort ();
+    emacs_abort ();
 }
 
 
@@ -1345,7 +1345,7 @@
 	  break;
 
 	default:
-	  abort ();
+	  emacs_abort ();
 	}
     }
 #ifdef GLYPH_DEBUG
@@ -4589,7 +4589,7 @@
 	return -1;
       default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID);
       if (default_face == NULL)
-	abort ();  /* realize_basic_faces must have set it up  */
+	emacs_abort (); /* realize_basic_faces must have set it up  */
     }
 
   if (! get_lface_attributes (f, symbol, symbol_attrs, signal_p, 0))
@@ -4632,7 +4632,7 @@
     case MENU_FACE_ID:			name = Qmenu;			break;
 
     default:
-      abort ();	    /* the caller is supposed to pass us a basic face id */
+      emacs_abort (); /* the caller is supposed to pass us a basic face id */
     }
 
   /* Do a quick scan through Vface_remapping_alist, and return immediately
@@ -4753,7 +4753,7 @@
   struct face *default_face = FACE_FROM_ID (f, face_id);
 
   if (!default_face)
-    abort ();
+    emacs_abort ();
 
   if (!get_lface_attributes (f, symbol, symbol_attrs, signal_p, 0))
     return -1;
@@ -5143,7 +5143,7 @@
 	error ("Cannot realize default face");
       def_face = FACE_FROM_ID (f, DEFAULT_FACE_ID);
       if (def_face == NULL)
-	abort ();  /* realize_basic_faces must have set it up  */
+	emacs_abort ();  /* realize_basic_faces must have set it up  */
     }
 
   /* Dispatch to the appropriate handler.  */
@@ -5428,7 +5428,7 @@
       else if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f))
 	ASET (lface, LFACE_FOREGROUND_INDEX, build_string (unspecified_fg));
       else
-	abort ();
+	emacs_abort ();
     }
 
   if (UNSPECIFIEDP (LFACE_BACKGROUND (lface)))
@@ -5443,7 +5443,7 @@
       else if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f))
 	ASET (lface, LFACE_BACKGROUND_INDEX, build_string (unspecified_bg));
       else
-	abort ();
+	emacs_abort ();
     }
 
   if (UNSPECIFIEDP (LFACE_STIPPLE (lface)))
@@ -5543,7 +5543,7 @@
       face = make_realized_face (attrs);
     }
   else
-    abort ();
+    emacs_abort ();
 
   /* Insert the new face.  */
   cache_face (cache, face, lface_hash (attrs));
@@ -5638,7 +5638,7 @@
 	  if (default_face)
 	    fontset = default_face->fontset;
 	  if (fontset == -1)
-	    abort ();
+	    emacs_abort ();
 	}
       if (! FONT_OBJECT_P (attrs[LFACE_FONT_INDEX]))
 	attrs[LFACE_FONT_INDEX]

=== modified file 'src/xmenu.c'
--- src/xmenu.c	2012-08-17 21:52:15 +0000
+++ src/xmenu.c	2012-08-31 16:20:30 +0000
@@ -169,7 +169,7 @@
   int dummy;
 
   if (! FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
   BLOCK_INPUT;
 
@@ -636,7 +636,7 @@
 x_activate_menubar (FRAME_PTR f)
 {
   if (! FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
   if (!f->output_data.x->saved_menu_event->type)
     return;
@@ -852,7 +852,7 @@
   int columns, rows;
 
   if (! FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
   x = f->output_data.x;
 
@@ -940,7 +940,7 @@
   int *submenu_top_level_items, *submenu_n_panes;
 
   if (! FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
   menubar_widget = f->output_data.x->menubar_widget;
 
@@ -1299,7 +1299,7 @@
   Widget menubar_widget;
 
   if (! FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
   menubar_widget = f->output_data.x->menubar_widget;
 
@@ -1450,7 +1450,7 @@
 #endif
 
   if (! FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
   xg_crazy_callback_abort = 1;
   menu = xg_create_widget ("popup", first_wv->name, f, first_wv,
@@ -1557,7 +1557,7 @@
   Widget menu;
 
   if (! FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
 #ifdef USE_LUCID
   apply_systemfont_to_menu (f, f->output_data.x->widget);
@@ -1646,7 +1646,7 @@
   ptrdiff_t specpdl_count = SPECPDL_INDEX ();
 
   if (! FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
   *error_name = NULL;
 
@@ -1792,7 +1792,7 @@
 	  else if (EQ (type, QCradio))
 	    wv->button_type = BUTTON_TYPE_RADIO;
 	  else
-	    abort ();
+	    emacs_abort ();
 
 	  wv->selected = !NILP (selected);
 
@@ -1930,7 +1930,7 @@
   GtkWidget *menu;
 
   if (! FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
   menu = xg_create_widget ("dialog", first_wv->name, f, first_wv,
                            G_CALLBACK (dialog_selection_callback),
@@ -1977,7 +1977,7 @@
   LWLIB_ID dialog_id;
 
   if (!FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
   dialog_id = widget_id_tick++;
 #ifdef USE_LUCID
@@ -2036,7 +2036,7 @@
   ptrdiff_t specpdl_count = SPECPDL_INDEX ();
 
   if (! FRAME_X_P (f))
-    abort ();
+    emacs_abort ();
 
   *error_name = NULL;
 
@@ -2301,7 +2301,7 @@
   ptrdiff_t specpdl_count = SPECPDL_INDEX ();
 
   if (! FRAME_X_P (f) && ! FRAME_MSDOS_P (f))
-    abort ();
+    emacs_abort ();
 
   *error_name = 0;
   if (menu_items_n_panes == 0)

=== modified file 'src/xselect.c'
--- src/xselect.c	2012-08-18 00:07:52 +0000
+++ src/xselect.c	2012-08-31 16:20:30 +0000
@@ -193,7 +193,7 @@
 x_start_queuing_selection_requests (void)
 {
   if (x_queue_selection_requests)
-    abort ();
+    emacs_abort ();
 
   x_queue_selection_requests++;
   TRACE1 ("x_start_queuing_selection_requests %d", x_queue_selection_requests);
@@ -245,7 +245,7 @@
   if (EQ (sym, QEMACS_TMP)) return dpyinfo->Xatom_EMACS_TMP;
   if (EQ (sym, QTARGETS))   return dpyinfo->Xatom_TARGETS;
   if (EQ (sym, QNULL))	    return dpyinfo->Xatom_NULL;
-  if (!SYMBOLP (sym)) abort ();
+  if (!SYMBOLP (sym)) emacs_abort ();
 
   TRACE1 (" XInternAtom %s", SSDATA (SYMBOL_NAME (sym)));
   BLOCK_INPUT;
@@ -1138,7 +1138,7 @@
   ptrdiff_t count = SPECPDL_INDEX ();
 
   if (property_change_reply_object)
-    abort ();
+    emacs_abort ();
 
   /* Make sure to do unexpect_property_change if we quit or err.  */
   record_unwind_protect (wait_for_property_change_unwind,

=== modified file 'src/xterm.c'
--- src/xterm.c	2012-08-25 20:31:04 +0000
+++ src/xterm.c	2012-08-31 16:20:30 +0000
@@ -1474,7 +1474,7 @@
 	&& f->output_data.x->widget == widget)
       return f;
 
-  abort ();
+  emacs_abort ();
 }
 
 /* Allocate a color which is lighter or darker than *PIXEL by FACTOR
@@ -2703,7 +2703,7 @@
     y2 += dy;
 
   if (INT_MAX - dx < xmax)
-    abort ();
+    emacs_abort ();
 
   while (x1 <= xmax)
     {
@@ -2812,7 +2812,7 @@
       break;
 
     default:
-      abort ();
+      emacs_abort ();
     }
 
   if (!s->for_overlaps)
@@ -3012,7 +3012,7 @@
 static void
 x_delete_glyphs (struct frame *f, register int n)
 {
-  abort ();
+  emacs_abort ();
 }
 
 
@@ -3285,7 +3285,7 @@
 static void
 x_ins_del_lines (struct frame *f, int vpos, int n)
 {
-  abort ();
+  emacs_abort ();
 }
 
 
@@ -4122,7 +4122,7 @@
       frame = XCAR (tail);
       /* All elements of Vframe_list should be frames.  */
       if (! FRAMEP (frame))
-	abort ();
+	emacs_abort ();
 
       if (! FRAME_X_P (XFRAME (frame)))
         continue;
@@ -5441,7 +5441,7 @@
 
   /* We can't redeem this window's scroll bar if it doesn't have one.  */
   if (NILP (window->vertical_scroll_bar))
-    abort ();
+    emacs_abort ();
 
   bar = XSCROLL_BAR (window->vertical_scroll_bar);
 
@@ -5460,7 +5460,7 @@
       else
 	/* If its prev pointer is nil, it must be at the front of
 	   one or the other!  */
-	abort ();
+	emacs_abort ();
     }
   else
     XSCROLL_BAR (bar->prev)->next = bar->next;
@@ -5558,7 +5558,7 @@
 x_scroll_bar_handle_click (struct scroll_bar *bar, XEvent *event, struct input_event *emacs_event)
 {
   if (! WINDOWP (bar->window))
-    abort ();
+    emacs_abort ();
 
   emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
   emacs_event->code = event->xbutton.button - Button1;
@@ -6464,7 +6464,7 @@
                 }
               else if (status_return != XLookupKeySym
                        && status_return != XLookupBoth)
-                abort ();
+                emacs_abort ();
             }
           else
             nbytes = XLookupString (&event.xkey, (char *) copy_bufptr,
@@ -7503,7 +7503,7 @@
 	      break;
 
 	    default:
-	      abort ();
+	      emacs_abort ();
 	    }
 	}
 
@@ -7856,7 +7856,7 @@
 This is a GTK bug: https://bugzilla.gnome.org/show_bug.cgi?id=85715\n\
 For details, see etc/PROBLEMS.\n",
 	       error_msg);
-      abort ();
+      emacs_abort ();
 #endif /* USE_GTK */
 
       /* Indicate that this display is dead.  */
@@ -7866,7 +7866,7 @@
       dpyinfo->terminal->reference_count--;
       if (dpyinfo->reference_count != 0)
         /* We have just closed all frames on this display. */
-        abort ();
+        emacs_abort ();
 
       {
 	Lisp_Object tmp;
@@ -10443,7 +10443,7 @@
     to.addr = (XPointer)&font;
     x_catch_errors (dpy);
     if (!XtCallConverter (dpy, XtCvtStringToFont, &d, 1, &fr, &to, NULL))
-      abort ();
+      emacs_abort ();
     if (x_had_errors_p (dpy) || !XQueryFont (dpy, font))
       XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15");
     x_uncatch_errors ();

# Begin bundle
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
yJbYX3hJ0TWEJA6EbNdh81Ls0Qc65gbbSmnhE9FpXUoo5is5UUfblViTK7RNqo7cb8sHXPTquIHf
RvGLmxpjsic+Ewex5HOz3NtuS3CrZhhl59JP4ts15juivWYdzieMISLS89URVHtENWrV6eQpX7qb
vGNrI8/CJbNk3SjJ2b0UeN97ebiR30oqRUCOg0V0eUTlJHR0dHyPkQbMEm8807pbk5iHcHjptIqE
6iyvaKpykDWc5FVd0JtFuETRRDWbPi7jR9K3zik48py3xcWedtFuPGqdWYiOXqvSspY9KKvw/DSz
hhw7e11WrVhhNwq77RlZNqg/hzzjRu5eNnx8ePjSy7lhvvu7Q6MrvT9Is9qsLobuHlpaqS6dLq9y
s2bsIe1GPtV/G6bp87bO1PzEgm7YfPnL00R9P0l8EejkkfZ2KBZ3AIAmZ79JSfa9iIz3Qg9nNBtb
n+4sD/a1qWVGIKCoQ1so8rqq+LJnvju8PMMcm0V75CqoGr3noLVuh27We3oPPiHR4rPTu0NvDd14
JrfC5tarWg0tcU2jsOSPMKZlJGhmbNr1Xo2r72PzIu7zdFv3SKqV4+mK4oMDBLJtmWJ+9M6ffIpf
CUpUpikp4HtV9mH4qTWojLNYijaU3SqstCyzKG1JqW5w66U3b3Z5UaxXXKb97L9GjdbTeKab61mx
aIhSRJvu0VUmhsou7azRQuh07XaNWZZnneNL7YUUriuJSQsqlKQhBJVMmm77VZtNpoyym/Jpd4sm
6q/L8u/bieEzzmd3TuzMzbu1PUcSa5BUsR7xkLwXvEw7VQCTgZdCZIzypKyI4zI3VJ1Dyt+rOcrH
wvGg99bNVI0lRTWuqE3ibhSEJuXxlo5vGnHETnTm/u+IpTqXMOXjv6MKunDzP17aMNn1Lnz01xuH
SiRyacTKu7QlE40kH2D9Cs3wM64SvwdU5nsVKMdQhVWb0hV9WtlOkWo4avs7s+ym5s3dGTJYZOzv
xtyR0sQzaMFnxoy1GdovtvEvFa143rZX43hObtl9mVj7T89OGJZQyzq3VT06j+qUqTlCQl0sy5Ya
tnjLhV5OiiyH4Wwp0zw9OFU23iy67dSUVfpTpd0w2d7OXKGjKjl6pCq7RC6kl3E3LLz+MP3+u4l+
770ddvDXZZ49vN6zaPaHtGGr06Vat2qUpAUFdVagu1cfQBMDtEE+v7OOIjx48X5cCuDZPxlH9e6l
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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* bug#12316: Simplify redefinition of 'abort'.
  2012-08-31 17:55       ` Paul Eggert
@ 2012-09-04 17:36         ` Paul Eggert
  0 siblings, 0 replies; 7+ messages in thread
From: Paul Eggert @ 2012-09-04 17:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: lekktu, 12316-done

I've installed that patch and am marking this bug as done.





^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-09-04 17:36 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-31  3:14 bug#12316: Simplify redefinition of 'abort' Paul Eggert
2012-08-31 11:39 ` Eli Zaretskii
2012-08-31 12:53   ` Paul Eggert
2012-08-31 14:29     ` Eli Zaretskii
2012-08-31 17:55       ` Paul Eggert
2012-09-04 17:36         ` Paul Eggert
2012-08-31 14:41 ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).