bug-libsigsegv
[Top][All Lists]
Advanced

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

[bug-libsigsegv] Re: sigsegv on s390 only giving start address of page i


From: Christoph Egger
Subject: [bug-libsigsegv] Re: sigsegv on s390 only giving start address of page in segv handler
Date: Fri, 11 Mar 2011 17:46:21 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

Bruno Haible <address@hidden> writes:
> When you wrote to <address@hidden> you didn't remove
> the "antispam" words from the address.

Jep normally I copy&paste from the website and don't loko at the result
but expect it to just work

>> Now I'm wondering of software depending on libsigsegv won't work on s390
>> or maybe the correct page is still enough information for dependencies
>> like clisp to work -- in that case a "fix" would be rather easy.
>
> clisp (and probably other software too) will compile and work also when
> the installed <sigsegv.h> file does not define HAVE_SIGSEGV_RECOVERY or
> HAVE_STACK_OVERFLOW_RECOVERY. But the functionality will be a bit degraded.
> For clisp, it means that generational GC will not be compiled into clisp
> if HAVE_SIGSEGV_RECOVERY is not defined, and endless recursions may cause
> a crash if HAVE_STACK_OVERFLOW_RECOVERY is not defined.

OK that'll "work" untill we (maybe) get a better kernel. I guess it's
preferred to just accepting a inexact address? Considering how to best
build a fixed package. The 2 patches I'd consider attached. I'd prefer
the first one at the moment.

Regards

    Christoph

--- libsigsegv-2.9.orig/configure.ac
+++ libsigsegv-2.9/configure.ac
@@ -869,6 +872,9 @@ AC_CACHE_CHECK([if the system supports catching stack 
overflow],
         ;;
     esac
   fi
+  case "$host_cpu" in
+    *s390*) sv_cv_have_stack_overflow_recovery=no ;;
+  esac
   if test $sv_cv_have_stack_overflow_recovery = maybe; then
     if test -n "$CFG_FAULT"; then
       AC_EGREP_CPP([xyzzy], [
--- a/m4/fault.m4
+++ b/m4/fault.m4
@@ -51,7 +51,7 @@ void sigsegv_handler ($5)
   handler_called++;
   if (handler_called == 10)
     exit (4);
-  if (fault_address != (void*)(page + 0x678))
+  if (fault_address != (void*)(page + 0x678) && fault_address != (void*)(page))
     exit (3);
   if (mprotect ((void *) page, 0x10000, PROT_READ | PROT_WRITE) < 0)
     exit (2);
diff --git a/tests/sigsegv1.c b/tests/sigsegv1.c
index ce00642..4bbe4da 100644
--- a/tests/sigsegv1.c
+++ b/tests/sigsegv1.c
@@ -37,7 +37,7 @@ handler (void *fault_address, int serious)
   handler_called++;
   if (handler_called > 10)
     abort ();
-  if (fault_address != (void *)(page + 0x678))
+  if (fault_address != (void *)(page + 0x678) && fault_address != page)
     abort ();
   if (mprotect ((void *) page, 0x4000, PROT_READ_WRITE) == 0)
     return 1;
diff --git a/tests/sigsegv3.c b/tests/sigsegv3.c
index 1ea0ec4..da03f64 100644
--- a/tests/sigsegv3.c
+++ b/tests/sigsegv3.c
@@ -56,7 +56,7 @@ handler (void *fault_address, int serious)
   handler_called++;
   if (handler_called > 10)
     abort ();
-  if (fault_address != (void *)(page + 0x678 + 8 * pass))
+  if (fault_address != (void *)(page + 0x678 + 8 * pass) && fault_address != 
page)
     abort ();
   pass++;
   printf ("Stack overflow %d caught.\n", pass);
-- 
9FED 5C6C E206 B70A 5857  70CA 9655 22B9 D49A E731
Debian Developer | Lisp Hacker | CaCert Assurer

A. Because it breaks the logical sequence of discussion
Q. Why is top posting bad?

reply via email to

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