emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 29095d0b1cc: Try harder to generate tombstones upon emacs_abort


From: Po Lu
Subject: master 29095d0b1cc: Try harder to generate tombstones upon emacs_abort
Date: Thu, 12 Oct 2023 23:58:20 -0400 (EDT)

branch: master
commit 29095d0b1cc5e5b0e4ee089deb59f44f950872ff
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Try harder to generate tombstones upon emacs_abort
    
    * src/android.c (HAS_BUILTIN_TRAP): New macro definition.
    (emacs_abort) [HAS_BUILTIN_TRAP]: Call __builtin_trap to abort,
    in place of dereferencing NULL.
    
    * src/androidterm.c (android_draw_fringe_bitmap): Correct
    comment transplanted from X code.
---
 src/android.c     | 22 ++++++++++++++++++++--
 src/androidterm.c |  3 ++-
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/src/android.c b/src/android.c
index 98ace1156d7..fa7bfe6c0f0 100644
--- a/src/android.c
+++ b/src/android.c
@@ -5542,22 +5542,40 @@ android_toggle_on_screen_keyboard (android_window 
window, bool show)
 
 
 
+#if defined __clang_major__ && __clang_major__ < 5
+# define HAS_BUILTIN_TRAP 0
+#elif 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__))
+# define HAS_BUILTIN_TRAP 1
+#elif defined __has_builtin
+# define HAS_BUILTIN_TRAP __has_builtin (__builtin_trap)
+#else /* !__has_builtin */
+# define HAS_BUILTIN_TRAP 0
+#endif /* defined __clang_major__ && __clang_major__ < 5 */
+
 /* emacs_abort implementation for Android.  This logs a stack
    trace.  */
 
 void
 emacs_abort (void)
 {
+#ifndef HAS_BUILTIN_TRAP
   volatile char *foo;
+#endif /* !HAS_BUILTIN_TRAP */
 
   __android_log_print (ANDROID_LOG_FATAL, __func__,
-                      "emacs_abort called, please review the ensuing"
+                      "emacs_abort called, please review the following"
                       " stack trace");
 
-  /* Cause a NULL pointer dereference to make debuggerd generate a
+#ifndef HAS_BUILTIN_TRAP
+  /* Induce a NULL pointer dereference to make debuggerd generate a
      tombstone.  */
   foo = NULL;
   *foo = '\0';
+#else /* HAS_BUILTIN_TRAP */
+  /* Crash through __builtin_trap instead.  This appears to more
+     uniformly elicit crash reports from debuggerd.  */
+  __builtin_trap ();
+#endif /* !HAS_BUILTIN_TRAP */
 
   abort ();
 }
diff --git a/src/androidterm.c b/src/androidterm.c
index 9b00ad85642..ef3c20f4e0f 100644
--- a/src/androidterm.c
+++ b/src/androidterm.c
@@ -2529,7 +2529,8 @@ android_draw_fringe_bitmap (struct window *w, struct 
glyph_row *row,
 
       /* Intersect the destination rectangle with that of the row.
         Setting a clip mask overrides the clip rectangles provided by
-        x_clip_to_row, so clipping must be performed by hand.  */
+        android_clip_to_row, so clipping must be performed by
+        hand.  */
 
       image_rect.x = p->x;
       image_rect.y = p->y;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]