tech-toolchain archive

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

[PATCH alt] Install gcc's unwind.h instead of libexecinfo's



The prototypes in libexecinfo's unwind.h do not match those commonly
used (e.g. by gcc, clang, GNU libunwind, LLVM libunwind...), causing
C++ programs to fail to build on type mismatches (e.g. compiler-rt,
libc++abi).  Rather than providing our own header, reuse the one
included in gcc.
---
 distrib/sets/lists/comp/mi                    |  2 +
 external/gpl3/gcc.old/lib/libgcc/Makefile.inc |  4 +
 .../gpl3/gcc.old/usr.bin/include/Makefile     |  6 ++
 external/gpl3/gcc/lib/libgcc/Makefile.inc     |  4 +
 external/gpl3/gcc/usr.bin/include/Makefile    |  6 ++
 lib/libexecinfo/Makefile                      |  4 -
 lib/libexecinfo/unwind.h                      | 96 -------------------
 7 files changed, 22 insertions(+), 100 deletions(-)
 delete mode 100644 lib/libexecinfo/unwind.h

diff --git a/distrib/sets/lists/comp/mi b/distrib/sets/lists/comp/mi
index d6b74861b2e1..59373a786ec9 100644
--- a/distrib/sets/lists/comp/mi
+++ b/distrib/sets/lists/comp/mi
@@ -2116,6 +2116,7 @@
 ./usr/include/gcc-7/sanitizer/lsan_interface.h		comp-gcc-include	gcc=7
 ./usr/include/gcc-7/sanitizer/tsan_interface_atomic.h	comp-gcc-include	gcc=7
 ./usr/include/gcc-7/stdatomic.h				comp-gcc-include	gcc=7
+./usr/include/gcc-7/unwind.h				comp-gcc-include	gcc=7
 ./usr/include/gcc-8/omp.h				comp-gcc-include	gcc=8
 ./usr/include/gcc-8/openacc.h				comp-gcc-include	gcc=8
 ./usr/include/gcc-8/sanitizer/allocator_interface.h	comp-gcc-include	gcc=8
@@ -2124,6 +2125,7 @@
 ./usr/include/gcc-8/sanitizer/lsan_interface.h		comp-gcc-include	gcc=8
 ./usr/include/gcc-8/sanitizer/tsan_interface_atomic.h	comp-gcc-include	gcc=8
 ./usr/include/gcc-8/stdatomic.h				comp-gcc-include	gcc=8
+./usr/include/gcc-8/unwind.h				comp-gcc-include	gcc=8
 ./usr/include/gelf.h				comp-c-include
 ./usr/include/getopt.h				comp-c-include
 ./usr/include/glob.h				comp-c-include
diff --git a/external/gpl3/gcc.old/lib/libgcc/Makefile.inc b/external/gpl3/gcc.old/lib/libgcc/Makefile.inc
index 6e2d3d184e55..95d3005fb4c8 100644
--- a/external/gpl3/gcc.old/lib/libgcc/Makefile.inc
+++ b/external/gpl3/gcc.old/lib/libgcc/Makefile.inc
@@ -111,6 +111,10 @@ LIB2_EHASM=	${G_LIB2ADDEH:M*.S:T:Nlibunwind.S}
 .else
 LIB2_EH=	${G_LIB2ADDEH:M*.c:T}
 LIB2_EHASM=	${G_LIB2ADDEH:M*.S:T}
+
+INCSDIR=	/usr/include
+# the file is originally copied from unwind-*.h
+INCS+=		unwind.h
 .endif
 
 # We have to weed out any existing func.S file that may exist
diff --git a/external/gpl3/gcc.old/usr.bin/include/Makefile b/external/gpl3/gcc.old/usr.bin/include/Makefile
index 4691ce9b444b..a853d8a6fbe1 100644
--- a/external/gpl3/gcc.old/usr.bin/include/Makefile
+++ b/external/gpl3/gcc.old/usr.bin/include/Makefile
@@ -13,6 +13,12 @@ INCS= ${G_EXTRA_HEADERS:T}
 # Part of the standard headers, the rest of which we replace.
 INCS+=	stdatomic.h
 
+.if ${HAVE_LIBGCC_EH} == "yes"
+LIBGCCOBJDIR!=  cd ${.CURDIR}/../../lib/libgcc/libgcc && ${PRINTOBJDIR}
+.PATH: ${LIBGCCOBJDIR}
+INCS+=	unwind.h
+.endif
+
 # XXX missed some how
 .if ${GCC_MACHINE_ARCH} == "i386" || ${GCC_MACHINE_ARCH} == "x86_64"
 INCS+=	mm_malloc.h
diff --git a/external/gpl3/gcc/lib/libgcc/Makefile.inc b/external/gpl3/gcc/lib/libgcc/Makefile.inc
index c0dc840c6f8d..7832be412a82 100644
--- a/external/gpl3/gcc/lib/libgcc/Makefile.inc
+++ b/external/gpl3/gcc/lib/libgcc/Makefile.inc
@@ -111,6 +111,10 @@ LIB2_EHASM=	${G_LIB2ADDEH:M*.S:T:Nlibunwind.S}
 .else
 LIB2_EH=	${G_LIB2ADDEH:M*.c:T}
 LIB2_EHASM=	${G_LIB2ADDEH:M*.S:T}
+
+INCSDIR=	/usr/include
+# the file is originally copied from unwind-*.h
+INCS+=		unwind.h
 .endif
 
 # We have to weed out any existing func.S file that may exist
diff --git a/external/gpl3/gcc/usr.bin/include/Makefile b/external/gpl3/gcc/usr.bin/include/Makefile
index b39f327586dd..14d81ff9e78e 100644
--- a/external/gpl3/gcc/usr.bin/include/Makefile
+++ b/external/gpl3/gcc/usr.bin/include/Makefile
@@ -13,6 +13,12 @@ INCS= ${G_EXTRA_HEADERS:T}
 # Part of the standard headers, the rest of which we replace.
 INCS+=	stdatomic.h
 
+.if ${HAVE_LIBGCC_EH} == "yes"
+LIBGCCOBJDIR!=  cd ${.CURDIR}/../../lib/libgcc/libgcc && ${PRINTOBJDIR}
+.PATH: ${LIBGCCOBJDIR}
+INCS+=	unwind.h
+.endif
+
 # XXX missed some how
 .if ${GCC_MACHINE_ARCH} == "i386" || ${GCC_MACHINE_ARCH} == "x86_64"
 INCS+=	mm_malloc.h
diff --git a/lib/libexecinfo/Makefile b/lib/libexecinfo/Makefile
index 9458eea8822d..4e89163f7dbe 100644
--- a/lib/libexecinfo/Makefile
+++ b/lib/libexecinfo/Makefile
@@ -8,10 +8,6 @@ WARNS?=4
 INCSDIR=/usr/include
 INCS=execinfo.h
 
-.if ${HAVE_LIBGCC_EH} == "yes"
-INCS+=	unwind.h
-.endif
-
 #CPPFLAGS+='-D__RCSID(a)=' -D_GNU_SOURCE '-D__printflike(a,b)='
 #CPPFLAGS+=-I/usr/include/libelf
 #COPTS+=-std=gnu99
diff --git a/lib/libexecinfo/unwind.h b/lib/libexecinfo/unwind.h
deleted file mode 100644
index 044ecdff29b4..000000000000
--- a/lib/libexecinfo/unwind.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*	$NetBSD: unwind.h,v 1.5 2016/12/19 01:24:40 christos Exp $	*/
-
-/*-
- * Copyright (c) 2012 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _UNWIND_H_
-#define _UNWIND_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-__BEGIN_DECLS
-struct _Unwind_Context;
-struct _Unwind_Exception;
-typedef int _Unwind_Reason_Code;
-typedef int _Unwind_Action;
-typedef void *_Unwind_Ptr;
-typedef long _Unwind_Word;
-
-#define	_UA_SEARCH_PHASE	0x01
-#define	_UA_CLEANUP_PHASE	0x02
-#define	_UA_HANDLER_FRAME 	0x04
-#define	_UA_FORCE_UNWIND	0x08
-#define	_UA_END_OF_STACK 	0x10
-
-#define	_URC_NO_REASON			0
-#define	_URC_FOREIGN_EXCEPTION_CAUGHT	1
-#define	_URC_FATAL_PHASE2_ERROR		2
-#define	_URC_FATAL_PHASE1_ERROR		3
-#define	_URC_NORMAL_STOP		4
-#define	_URC_END_OF_STACK		5
-#define	_URC_HANDLER_FOUND		6
-#define	_URC_INSTALL_CONTEXT		7
-#define	_URC_CONTINUE_UNWIND		8
-
-struct _Unwind_Exception {
-	uint64_t exception_class;
-	void (*exception_cleanup)(_Unwind_Reason_Code,
-	    struct _Unwind_Exception *);
-	uintptr_t private_1;
-	uintptr_t private_2;
-} __attribute__((__aligned__));
-
-typedef _Unwind_Reason_Code
-    (*_Unwind_Trace_Fn)(struct _Unwind_Context *, void *);
-#ifdef notyet
-typedef _Unwind_Reason_Code
-    (*_Unwind_Stop_Fn)(struct _Unwind_Context *, void *);
-#endif
-
-_Unwind_Reason_Code	 _Unwind_Backtrace(_Unwind_Trace_Fn, void *);
-void 			 _Unwind_DeleteException(struct _Unwind_Exception *);
-void 	       		*_Unwind_FindEnclosingFunction(void *);
-#ifdef notyet
-_Unwind_Reason_Code 	 _Unwind_ForcedUnwind(struct _Unwind_Exception *,
-    _Unwind_Stop_fn, void *);
-#endif
-_Unwind_Word		 _Unwind_GetCFA(struct _Unwind_Context *);
-_Unwind_Ptr		 _Unwind_GetDataRelBase(struct _Unwind_Context *);
-_Unwind_Word 		 _Unwind_GetGR(struct _Unwind_Context *, int);
-_Unwind_Ptr		 _Unwind_GetIP(struct _Unwind_Context *);
-_Unwind_Ptr		 _Unwind_GetIPInfo(struct _Unwind_Context *, int *);
-_Unwind_Ptr		 _Unwind_GetLanguageSpecificData(
-    struct _Unwind_Context *);
-_Unwind_Ptr		 _Unwind_GetRegionStart(struct _Unwind_Context *);
-_Unwind_Ptr		 _Unwind_GetTextRelBase(struct _Unwind_Context *);
-_Unwind_Reason_Code	 _Unwind_RaiseException(struct _Unwind_Exception *);
-void			 _Unwind_Resume(struct _Unwind_Exception *);
-_Unwind_Reason_Code	 _Unwind_Resume_or_Rethrow(struct _Unwind_Exception *);
-void			 _Unwind_SetGR(struct _Unwind_Context *, int,
-    _Unwind_Ptr);
-void			 _Unwind_SetIP(struct _Unwind_Context *, _Unwind_Ptr);
-__END_DECLS
-#endif /* _UNWIND_H_ */
-- 
2.25.0



Home | Main Index | Thread Index | Old Index