[Glibc-bsd-commits] r2025 - in trunk/glibc-ports: kfreebsd/i386 kfreebsd/x86_64 patches

ps-guest at alioth.debian.org ps-guest at alioth.debian.org
Thu Nov 15 14:12:09 UTC 2007


Author: ps-guest
Date: 2007-11-15 14:12:09 +0000 (Thu, 15 Nov 2007)
New Revision: 2025

Added:
   trunk/glibc-ports/patches/linuxthreads-signals.diff
Modified:
   trunk/glibc-ports/kfreebsd/i386/sigcontextinfo.h
   trunk/glibc-ports/kfreebsd/x86_64/sigcontextinfo.h
Log:
* FreeBSD kernel passes also 4th argument to signals handlers,
  used at least by libsigsegv



Modified: trunk/glibc-ports/kfreebsd/i386/sigcontextinfo.h
===================================================================
--- trunk/glibc-ports/kfreebsd/i386/sigcontextinfo.h	2007-11-15 14:10:13 UTC (rev 2024)
+++ trunk/glibc-ports/kfreebsd/i386/sigcontextinfo.h	2007-11-15 14:12:09 UTC (rev 2025)
@@ -16,10 +16,20 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#define SIGCONTEXT int _code, struct sigcontext *
-#define SIGCONTEXT_EXTRA_ARGS _code,
-#define GET_PC(ctx)	((void *) (ctx)->sc_eip)
-#define GET_FRAME(ctx)	((void *) (ctx)->sc_ebp)
-#define GET_STACK(ctx)	((void *) (ctx)->sc_esp)
+/*
+native FreeBSD: 
+        sighandler(int signum, int code,       struct sigcontext * sg, void * fault_ip)
+posix like: 
+        sighandler(int signum, siginfo_t * si, struct sigcontext * sg, void * fault_ip)
+*/
+
+#define SIGCONTEXT long _code, struct sigcontext * _sg, void *
+#define SIGCONTEXT_EXTRA_ARGS _code, _sg, 
+
+/* really, really, rest of glibc expects that struct sigcontext is the last argument */
+#define GET_PC(ctx)	((void *) (_sg)->sc_eip)
+#define GET_FRAME(ctx)	((void *) (_sg)->sc_ebp)
+#define GET_STACK(ctx)	((void *) (_sg)->sc_esp)
+
 #define CALL_SIGHANDLER(handler, signo, ctx) \
   (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))

Modified: trunk/glibc-ports/kfreebsd/x86_64/sigcontextinfo.h
===================================================================
--- trunk/glibc-ports/kfreebsd/x86_64/sigcontextinfo.h	2007-11-15 14:10:13 UTC (rev 2024)
+++ trunk/glibc-ports/kfreebsd/x86_64/sigcontextinfo.h	2007-11-15 14:12:09 UTC (rev 2025)
@@ -16,10 +16,20 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#define SIGCONTEXT int _code, struct sigcontext *
-#define SIGCONTEXT_EXTRA_ARGS _code,
-#define GET_PC(ctx)	((void *) (ctx)->sc_rip)
-#define GET_FRAME(ctx)	((void *) (ctx)->sc_rbp)
-#define GET_STACK(ctx)	((void *) (ctx)->sc_rsp)
+/*
+native FreeBSD: 
+        sighandler(int signum, int code,       struct sigcontext * sg, void * fault_ip)
+posix like: 
+        sighandler(int signum, siginfo_t * si, struct sigcontext * sg, void * fault_ip)
+*/
+
+#define SIGCONTEXT long _code, struct sigcontext * _sg, void *
+#define SIGCONTEXT_EXTRA_ARGS _code, _sg, 
+
+/* really, really, rest of glibc expects that struct sigcontext is the last argument */
+#define GET_PC(ctx)	((void *) (_sg)->sc_rip)
+#define GET_FRAME(ctx)	((void *) (_sg)->sc_rbp)
+#define GET_STACK(ctx)	((void *) (_sg)->sc_rsp)
+
 #define CALL_SIGHANDLER(handler, signo, ctx) \
   (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))

Added: trunk/glibc-ports/patches/linuxthreads-signals.diff
===================================================================
--- trunk/glibc-ports/patches/linuxthreads-signals.diff	                        (rev 0)
+++ trunk/glibc-ports/patches/linuxthreads-signals.diff	2007-11-15 14:12:09 UTC (rev 2025)
@@ -0,0 +1,14 @@
+--- linuxthreads/signals.c~	2007-11-15 12:46:17.000000000 +0100
++++ linuxthreads/signals.c	2007-11-15 12:46:17.000000000 +0100
+@@ -99,9 +99,11 @@
+       if (act->sa_handler != SIG_IGN && act->sa_handler != SIG_DFL
+ 	  && sig > 0 && sig < NSIG)
+ 	{
++#if !defined(__FreeBSD_kernel__)
+ 	  if (act->sa_flags & SA_SIGINFO)
+ 	    newact.sa_handler = (__sighandler_t) __pthread_sighandler_rt;
+ 	  else
++#endif	  
+ 	    newact.sa_handler = (__sighandler_t) __pthread_sighandler;
+ 	  if (old == SIG_IGN || old == SIG_DFL || old == SIG_ERR)
+ 	    __sighandler[sig].old = (arch_sighandler_t) act->sa_handler;




More information about the Glibc-bsd-commits mailing list