]> Savannah Git Hosting - gnulib.git/commitdiff
sigsegv: Fix compilation error on Android 4.3.
authorBruno Haible <bruno@clisp.org>
Mon, 2 Jan 2023 15:57:31 +0000 (16:57 +0100)
committerBruno Haible <bruno@clisp.org>
Sat, 14 Jan 2023 20:04:19 +0000 (21:04 +0100)
* lib/sigsegv.in.h: For Android, don't include <ucontext.h> and don't
reference ucontext_t.
* lib/sigsegv.c (SIGSEGV_FAULT_): For Android, use a plain POSIX fault
handler (cf. libsigsegv/src/fault-posix.h).

ChangeLog
lib/sigsegv.c
lib/sigsegv.in.h

index 9932cc72a6b0774578379578c7adfb6de2615d86..015c1d1bb4c6e1a6c7ebf31b6fa90716bb2f6f34 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2023-01-02  Bruno Haible  <bruno@clisp.org>
+
+       sigsegv: Fix compilation error on Android 4.3.
+       * lib/sigsegv.in.h: For Android, don't include <ucontext.h> and don't
+       reference ucontext_t.
+       * lib/sigsegv.c (SIGSEGV_FAULT_): For Android, use a plain POSIX fault
+       handler (cf. libsigsegv/src/fault-posix.h).
+
 2023-01-01  Paul Eggert  <eggert@cs.ucla.edu>
 
        dfa: work around Clang 15 bug
index da64d7d0b617833fa902aa6c14519f2455cf6836..29c452dbe0c0d044b43648076011a3ca0b282546 100644 (file)
@@ -1,5 +1,5 @@
 /* Page fault handling library.
-   Copyright (C) 1993-2022 Free Software Foundation, Inc.
+   Copyright (C) 1993-2023 Free Software Foundation, Inc.
    Copyright (C) 2018  Nylon Chen <nylon7@andestech.com>
 
    This program is free software: you can redistribute it and/or modify
@@ -61,7 +61,7 @@ int libsigsegv_version = LIBSIGSEGV_VERSION;
           occurred.
  */
 
-#if defined __linux__ || defined __ANDROID__ /* Linux */
+#if defined __linux__ && !defined __ANDROID__ /* Linux */
 
 # define SIGSEGV_FAULT_HANDLER_ARGLIST  int sig, siginfo_t *sip, void *ucp
 # define SIGSEGV_FAULT_ADDRESS  sip->si_addr
@@ -348,6 +348,17 @@ int libsigsegv_version = LIBSIGSEGV_VERSION;
 
 #endif
 
+#if defined __ANDROID__ /* Android */
+/* A platform that supports the POSIX:2008 (XPG 7) way, without
+   'struct sigcontext' nor 'ucontext_t'.  */
+
+# define SIGSEGV_FAULT_HANDLER_ARGLIST  int sig, siginfo_t *sip, void *context
+# define SIGSEGV_FAULT_ADDRESS  sip->si_addr
+# define SIGSEGV_FAULT_CONTEXT  context
+# define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO
+
+#endif
+
 #if defined __GNU__ /* Hurd */
 
 # define SIGSEGV_FAULT_HANDLER_ARGLIST  int sig, int code, struct sigcontext *scp
index ba30c34a31a613fe651138f3eb0b1f5d72dec9e7..40b453e67b67bbbfbba9f753cd8a2acf7d653a01 100644 (file)
@@ -1,5 +1,5 @@
 /* Page fault handling library.
-   Copyright (C) 1998-2022 Free Software Foundation, Inc.
+   Copyright (C) 1998-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -23,7 +23,7 @@
 #include <stddef.h>
 
 /* Define the fault context structure.  */
-#if defined __linux__ || defined __ANDROID__ \
+#if (defined __linux__ && !defined __ANDROID__) \
     || (defined __FreeBSD__ && (defined __arm__ || defined __armhf__ || defined __arm64__)) \
     || defined __NetBSD__ \
     || defined _AIX || defined __sun \
@@ -180,7 +180,7 @@ extern int sigsegv_leave_handler (void (*continuation) (void*, void*, void*), vo
  * on some platforms it is a 'struct sigcontext *', on others merely an
  * opaque 'void *'.
  */
-# if defined __linux__ || defined __ANDROID__ \
+# if (defined __linux__ && !defined __ANDROID__) \
      || (defined __FreeBSD__ && (defined __arm__ || defined __armhf__ || defined __arm64__)) \
      || defined __NetBSD__ \
      || (defined __APPLE__ && defined __MACH__) \