]> git.eshelyaron.com Git - emacs.git/commitdiff
Try harder to generate tombstones upon emacs_abort
authorPo Lu <luangruo@yahoo.com>
Fri, 13 Oct 2023 03:57:46 +0000 (11:57 +0800)
committerPo Lu <luangruo@yahoo.com>
Fri, 13 Oct 2023 03:58:10 +0000 (11:58 +0800)
* 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
src/androidterm.c

index 98ace1156d7ad82f34a97faa60ce694ea1ef5ba3..fa7bfe6c0f0fb96511f6eb00982e5c460181c376 100644 (file)
@@ -5542,22 +5542,40 @@ android_toggle_on_screen_keyboard (android_window window, bool show)
 
 \f
 
+#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 ();
 }
index 9b00ad856424c1d60697fc41f77a9f4ae287c5cb..ef3c20f4e0f3fa19a58029cb0eedb5cb2a98a3c9 100644 (file)
@@ -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;