This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.19-845-gf61a113


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  f61a113fe0f703c19af20f54d65acfbb203b726a (commit)
      from  9fe7e787adc4f41201c441014fbad318eaae6f80 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=f61a113fe0f703c19af20f54d65acfbb203b726a

commit f61a113fe0f703c19af20f54d65acfbb203b726a
Author: Roland McGrath <roland@hack.frob.com>
Date:   Thu Jul 31 14:00:33 2014 -0700

    Add __safe_fatal and use it in __pthread_unwind forwarder fallback.

diff --git a/ChangeLog b/ChangeLog
index e359c13..d1f3986 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2014-07-31  Roland McGrath  <roland@hack.frob.com>
 
+	* sysdeps/generic/safe-fatal.h: New file.
+	* sysdeps/unix/sysv/linux/safe-fatal.h: New file.
+	* nptl/forward.c: Include it.
+	(__pthread_unwind): Use __safe_fatal as default action, rather
+	than a bogus use of INTERNAL_SYSCALL that could never work.
+
 	* config.h.in (HAVE_BUILTIN_TRAP): New #define to 0.
 	* configure.ac (libc_cv_builtin_trap): New test.
 	* configure: Regenerated.
diff --git a/nptl/forward.c b/nptl/forward.c
index 6355c23..eb3c41f 100644
--- a/nptl/forward.c
+++ b/nptl/forward.c
@@ -23,7 +23,7 @@
 
 #include <shlib-compat.h>
 #include <atomic.h>
-#include <sysdep.h>
+#include <safe-fatal.h>
 
 
 /* Pointers to the libc functions.  */
@@ -202,11 +202,8 @@ FORWARD (pthread_setcancelstate, (int state, int *oldstate), (state, oldstate),
 
 FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
 
-FORWARD_NORETURN(__pthread_unwind,
-	 void attribute_hidden __attribute ((noreturn)) __cleanup_fct_attribute
-	 attribute_compat_text_section,
-	 (__pthread_unwind_buf_t *buf), (buf), {
-		       /* We cannot call abort() here.  */
-		       INTERNAL_SYSCALL_DECL (err);
-		       INTERNAL_SYSCALL (kill, err, 1, SIGKILL);
-		     })
+FORWARD_NORETURN (__pthread_unwind,
+                  void attribute_hidden __attribute ((noreturn))
+                  __cleanup_fct_attribute attribute_compat_text_section,
+                  (__pthread_unwind_buf_t *buf), (buf),
+                  __safe_fatal ())
diff --git a/sysdeps/generic/safe-fatal.h b/sysdeps/generic/safe-fatal.h
new file mode 100644
index 0000000..6efced3
--- /dev/null
+++ b/sysdeps/generic/safe-fatal.h
@@ -0,0 +1,37 @@
+/* Crash the process immediately, without possibility of deadlock.  Generic.
+   Copyright (C) 2014 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SAFE_FATAL_H
+#define _SAFE_FATAL_H   1
+
+#include <abort-instr.h>
+
+static inline void
+__safe_fatal (void)
+{
+#ifdef ABORT_INSTRUCTION
+  /* This is not guaranteed to be free from the possibility of deadlock,
+     since it might generate a signal that can be caught.  But it's better
+     than nothing.  */
+  ABORT_INSTRUCTION;
+#else
+# error Need an OS-specific or machine-specific safe-fatal.h
+#endif
+}
+
+#endif  /* safe-fatal.h */
diff --git a/sysdeps/unix/sysv/linux/safe-fatal.h b/sysdeps/unix/sysv/linux/safe-fatal.h
new file mode 100644
index 0000000..4de4c04
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/safe-fatal.h
@@ -0,0 +1,33 @@
+/* Crash the process immediately, without possibility of deadlock.  Linux.
+   Copyright (C) 2014 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SAFE_FATAL_H
+#define _SAFE_FATAL_H   1
+
+#include <sysdep.h>
+#include <unistd.h>
+
+static inline void
+__safe_fatal (void)
+{
+  INTERNAL_SYSCALL_DECL (err);
+  pid_t self = INTERNAL_SYSCALL (getpid, err, 0);
+  INTERNAL_SYSCALL (kill, err, 2, self, SIGKILL);
+}
+
+#endif  /* safe-fatal.h */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |    6 ++++
 nptl/forward.c                                     |   15 ++++-------
 .../futimesat.c => generic/safe-fatal.h}           |   25 ++++++++++++-------
 .../sysv/linux/{i386/getgid.c => safe-fatal.h}     |   20 ++++++++--------
 4 files changed, 38 insertions(+), 28 deletions(-)
 copy sysdeps/{unix/sysv/linux/microblaze/futimesat.c => generic/safe-fatal.h} (61%)
 copy sysdeps/unix/sysv/linux/{i386/getgid.c => safe-fatal.h} (70%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]