diff options
Diffstat (limited to 'debian/patches/backtrace.patch')
-rw-r--r-- | debian/patches/backtrace.patch | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/debian/patches/backtrace.patch b/debian/patches/backtrace.patch new file mode 100644 index 00000000..0c0e99d5 --- /dev/null +++ b/debian/patches/backtrace.patch @@ -0,0 +1,102 @@ +diff --git a/include/refcount.h b/include/refcount.h +index ebde42d..5bb9660 100644 +--- a/include/refcount.h ++++ b/include/refcount.h +@@ -22,7 +22,7 @@ + #ifndef _HURD_REFCOUNT_H_ + #define _HURD_REFCOUNT_H_ + +-#include <assert.h> ++#include <assert-backtrace.h> + #include <limits.h> + #include <stdint.h> + +diff --git a/libshouldbeinlibc/Makefile b/libshouldbeinlibc/Makefile +index 14a7939..b32e1bd 100644 +--- a/libshouldbeinlibc/Makefile ++++ b/libshouldbeinlibc/Makefile +@@ -29,7 +29,9 @@ SRCS = termsize.c timefmt.c exec-reauth.c maptime-funcs.c \ + ugids-auth.c ugids-xinl.c ugids-merge.c ugids-imply.c ugids-posix.c \ + ugids-verify-auth.c nullauth.c + installhdrs = idvec.h timefmt.h maptime.h \ +- wire.h portinfo.h portxlate.h cacheq.h ugids.h nullauth.h ++ wire.h portinfo.h portxlate.h cacheq.h ugids.h nullauth.h \ ++ assert-backtrace.h \ ++ + installhdrsubdir = . + + OBJS = $(SRCS:.c=.o) +diff --git a/libshouldbeinlibc/assert-backtrace.h b/libshouldbeinlibc/assert-backtrace.h +new file mode 100644 +index 0000000..7baf4b3 +--- /dev/null ++++ b/libshouldbeinlibc/assert-backtrace.h +@@ -0,0 +1,68 @@ ++/* Augment failing assertions with backtraces. ++ ++ Copyright (C) 2014 Free Software Foundation, Inc. ++ ++ This file is part of the GNU Hurd. ++ ++ The GNU Hurd is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2, or (at ++ your option) any later version. ++ ++ The GNU Hurd 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 ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with the GNU Hurd. If not, see <http://www.gnu.org/licenses/>. */ ++ ++#ifndef __ASSERT_BACKTRACE__ ++#define __ASSERT_BACKTRACE__ ++ ++#ifndef NDEBUG ++ ++#include <assert.h> ++#include <errno.h> ++#include <execinfo.h> ++#include <stdio.h> ++#include <unistd.h> ++ ++/* This prints an "Assertion failed" message and aborts. */ ++static void __assert_fail_backtrace (const char *__assertion, ++ const char *__file, ++ unsigned int __line, ++ const char *__function) ++ __attribute__ ((noreturn, unused)); ++ ++#undef assert ++#define assert(expr) \ ++ ((expr) \ ++ ? __ASSERT_VOID_CAST (0) \ ++ : __assert_fail_backtrace (__STRING(expr), __FILE__, __LINE__, __ASSERT_FUNCTION)) ++ ++static inline void ++__assert_fail_backtrace (const char *__assertion, const char *__file, ++ unsigned int __line, const char *__function) ++{ ++#define SIZE 128 ++#define SKIP 1 ++ int nptrs; ++ void *buffer[SIZE]; ++ ++ error (0, 0, "%s:%d: %s: Assertion `%s' failed.", ++ __file, __line, __function, __assertion); ++ ++ nptrs = backtrace(buffer, SIZE); ++ if (nptrs == 0) ++ error (1, errno, "backtrace"); ++ ++ backtrace_symbols_fd (&buffer[SKIP], nptrs - SKIP, STDERR_FILENO); ++ fflush (stderr); ++ exit (EXIT_FAILURE); ++#undef SKIP ++#undef SIZE ++} ++ ++#endif /* NDEBUG */ ++#endif /* __ASSERT_BACKTRACE__ */ |