diff options
author | Daniel Moody <daniel.moody@mongodb.com> | 2021-01-14 02:56:33 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-02-04 09:28:00 +0000 |
commit | 6eea989f7996dea108f937990d62cd55d1f14c8c (patch) | |
tree | 6e07e355e56c3ec195a3660a2ac8d33363883a4c /src/third_party/unwind | |
parent | 5d577246f59efdc15b3556ec82639229f840ee63 (diff) | |
download | mongo-6eea989f7996dea108f937990d62cd55d1f14c8c.tar.gz |
SERVER-53769 Upgrade libunwind to 1.5
Diffstat (limited to 'src/third_party/unwind')
70 files changed, 1396 insertions, 433 deletions
diff --git a/src/third_party/unwind/SConscript b/src/third_party/unwind/SConscript index adbd0114832..3372cdafe9b 100644 --- a/src/third_party/unwind/SConscript +++ b/src/third_party/unwind/SConscript @@ -27,6 +27,7 @@ unwind_src_dir = env.Dir("dist/src") # corresponding .o from that $PREREQ library. # - Replace each .o with the source file (.c or .S) that generated it. # - Ensure the the ${CC} arguments are preserved by SCons. +# Note you can skip NDEBUG defines as those should be inherited. unwind_sources = [ 'dwarf/global.c', 'dwarf/Lexpr.c', @@ -90,11 +91,9 @@ if env['TARGET_ARCH'] == 'aarch64': env.Append( CCFLAGS=[ - '-fcommon', '-fexceptions', '-Wno-unused-result', - '-Wno-unused-value', - '-Wno-unused-variable', + '-Wno-pointer-sign' ]) if env.ToolchainIs('clang'): diff --git a/src/third_party/unwind/dist/Makefile.in b/src/third_party/unwind/dist/Makefile.in index dd746457242..e999c0cbd08 100644 --- a/src/third_party/unwind/dist/Makefile.in +++ b/src/third_party/unwind/dist/Makefile.in @@ -327,6 +327,7 @@ LIBLZMA = @LIBLZMA@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIBZ = @LIBZ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ diff --git a/src/third_party/unwind/dist/README b/src/third_party/unwind/dist/README index 2fc98d86e67..b6d93ae4a68 100644 --- a/src/third_party/unwind/dist/README +++ b/src/third_party/unwind/dist/README @@ -2,7 +2,7 @@ [![Build Status](https://travis-ci.org/libunwind/libunwind.svg?branch=master)](https://travis-ci.org/libunwind/libunwind) -This is version 1.4 of the unwind library. This library supports +This is version 1.5 of the unwind library. This library supports several architecture/operating-system combinations: | System | Architecture | Status | @@ -21,6 +21,33 @@ several architecture/operating-system combinations: | FreeBSD | x86-64 | ✓ | | FreeBSD | x86 | ✓ | | FreeBSD | AArch64 | ✓ | +| Solaris | x86-64 | ✓ | + +## Libc Requirements + +libunwind depends on getcontext(), setcontext() functions which are missing +from C libraries like musl-libc because they are considered to be "obsolescent" +API by POSIX document. The following table tries to track current status of +such dependencies + + - r, requires + - p, provides its own implementation + - empty, no requirement + +| Archtecture | getcontext | setcontext | +|--------------|------------|------------| +| aarch64 | p | | +| arm | p | | +| hppa | p | p | +| ia64 | p | r | +| mips | p | | +| ppc32 | r | | +| ppc64 | r | r | +| s390x | p | p | +| sh | r | | +| tilegx | r | r | +| x86 | p | r | +| x86_64 | p | p | ## General Build Instructions @@ -179,6 +206,17 @@ only test programs that are known to work at this time are: `make check` should run with no more than 10 out of 24 tests failed. +### Expected results on Solaris x86-64 + +`make check` is passing 27 out of 33 tests. The following six tests are consistently +failing: + +* `Gtest-concurrent` +* `Ltest-concurrent` +* `Ltest-init-local-signal` +* `Lrs-race` +* `test-setjmp` +* `x64-unwind-badjmp-signal-frame` ## Performance Testing diff --git a/src/third_party/unwind/dist/aclocal.m4 b/src/third_party/unwind/dist/aclocal.m4 index 588aa13aee1..0ecace89c65 100644 --- a/src/third_party/unwind/dist/aclocal.m4 +++ b/src/third_party/unwind/dist/aclocal.m4 @@ -9235,6 +9235,43 @@ AC_DEFUN([AM_AUX_DIR_EXPAND], am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) +# AM_COND_IF -*- Autoconf -*- + +# Copyright (C) 2008-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_COND_IF +# _AM_COND_ELSE +# _AM_COND_ENDIF +# -------------- +# These macros are only used for tracing. +m4_define([_AM_COND_IF]) +m4_define([_AM_COND_ELSE]) +m4_define([_AM_COND_ENDIF]) + +# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE]) +# --------------------------------------- +# If the shell condition COND is true, execute IF-TRUE, otherwise execute +# IF-FALSE. Allow automake to learn about conditional instantiating macros +# (the AC_CONFIG_FOOS). +AC_DEFUN([AM_COND_IF], +[m4_ifndef([_AM_COND_VALUE_$1], + [m4_fatal([$0: no such condition "$1"])])dnl +_AM_COND_IF([$1])dnl +if test -z "$$1_TRUE"; then : + m4_n([$2])[]dnl +m4_ifval([$3], +[_AM_COND_ELSE([$1])dnl +else + $3 +])dnl +_AM_COND_ENDIF([$1])dnl +fi[]dnl +]) + # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. diff --git a/src/third_party/unwind/dist/configure b/src/third_party/unwind/dist/configure index c6e8b27031b..4e61bf4beb8 100755 --- a/src/third_party/unwind/dist/configure +++ b/src/third_party/unwind/dist/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libunwind 1.4-rc1. +# Generated by GNU Autoconf 2.69 for libunwind 1.5.0. # # Report bugs to <libunwind-devel@nongnu.org>. # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libunwind' PACKAGE_TARNAME='libunwind' -PACKAGE_VERSION='1.4-rc1' -PACKAGE_STRING='libunwind 1.4-rc1' +PACKAGE_VERSION='1.5.0' +PACKAGE_STRING='libunwind 1.5.0' PACKAGE_BUGREPORT='libunwind-devel@nongnu.org' PACKAGE_URL='' @@ -636,6 +636,8 @@ ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS +CONFIG_WEAK_BACKTRACE_FALSE +CONFIG_WEAK_BACKTRACE_TRUE CONFIG_TESTS_FALSE CONFIG_TESTS_TRUE CONFIG_DOCS_FALSE @@ -655,6 +657,9 @@ LDFLAGS_STATIC_LIBCXA ARCH arch build_arch +HAVE_ZLIB_FALSE +HAVE_ZLIB_TRUE +LIBZ HAVE_LZMA_FALSE HAVE_LZMA_TRUE LIBLZMA @@ -668,6 +673,8 @@ USE_ELF64_FALSE USE_ELF64_TRUE USE_ELF32_FALSE USE_ELF32_TRUE +OS_SOLARIS_FALSE +OS_SOLARIS_TRUE OS_QNX_FALSE OS_QNX_TRUE OS_FREEBSD_FALSE @@ -864,6 +871,7 @@ enable_ptrace enable_setjmp enable_documentation enable_tests +enable_weak_backtrace enable_debug enable_cxx_exceptions enable_debug_frame @@ -871,6 +879,7 @@ enable_block_signals enable_conservative_checks enable_msabi_support enable_minidebuginfo +enable_zlibdebuginfo enable_per_thread_cache ' ac_precious_vars='build_alias @@ -1439,7 +1448,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libunwind 1.4-rc1 to adapt to many kinds of systems. +\`configure' configures libunwind 1.5.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1511,7 +1520,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libunwind 1.4-rc1:";; + short | recursive ) echo "Configuration of libunwind 1.5.0:";; esac cat <<\_ACEOF @@ -1538,6 +1547,8 @@ Optional Features: --enable-setjmp building libunwind-setjmp library --disable-documentation Disable generating the man pages --disable-tests Disable tests build + --disable-weak-backtrace + Do not provide the weak 'backtrace' symbol. --enable-debug turn on debug support (slows down execution) --enable-cxx-exceptions use libunwind to handle C++ exceptions --enable-debug-frame Load the ".debug_frame" section if available @@ -1546,6 +1557,7 @@ Optional Features: Validate all memory addresses before use --enable-msabi-support Enables support for Microsoft ABI extensions --enable-minidebuginfo Enables support for LZMA-compressed symbol tables + --enable-zlibdebuginfo Enables support for ZLIB-compressed symbol tables --enable-per-thread-cache build with support for UNW_CACHE_PER_THREAD (which imposes a hight TLS memory usage) (default: @@ -1646,7 +1658,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libunwind configure 1.4-rc1 +libunwind configure 1.5.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2476,7 +2488,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libunwind $as_me 1.4-rc1, which was +It was created by libunwind $as_me 1.5.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3450,7 +3462,7 @@ fi # Define the identity of the package. PACKAGE='libunwind' - VERSION='1.4-rc1' + VERSION='1.5.0' cat >>confdefs.h <<_ACEOF @@ -17366,7 +17378,7 @@ _ACEOF for ac_func in dl_iterate_phdr dl_phdr_removals_counter dlmodinfo getunwind \ - ttrace mincore + ttrace mincore pipe2 do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -17580,6 +17592,14 @@ else fi +# Check whether --enable-weak-backtrace was given. +if test "${enable_weak_backtrace+set}" = set; then : + enableval=$enable_weak_backtrace; +else + enable_weak_backtrace=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should build libunwind-setjmp" >&5 $as_echo_n "checking if we should build libunwind-setjmp... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_setjmp" >&5 @@ -17770,6 +17790,14 @@ else OS_QNX_FALSE= fi + if expr x$target_os : xsolaris >/dev/null; then + OS_SOLARIS_TRUE= + OS_SOLARIS_FALSE='#' +else + OS_SOLARIS_TRUE='#' + OS_SOLARIS_FALSE= +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF helper width" >&5 $as_echo_n "checking for ELF helper width... " >&6; } @@ -18035,6 +18063,81 @@ else fi +LIBZ= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support ZLIB-compressed symbol tables" >&5 +$as_echo_n "checking whether to support ZLIB-compressed symbol tables... " >&6; } +# Check whether --enable-zlibdebuginfo was given. +if test "${enable_zlibdebuginfo+set}" = set; then : + enableval=$enable_zlibdebuginfo; +else + enable_zlibdebuginfo=auto +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_zlibdebuginfo" >&5 +$as_echo "$enable_zlibdebuginfo" >&6; } +if test x$enable_zlibdebuginfo != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uncompress in -lz" >&5 +$as_echo_n "checking for uncompress in -lz... " >&6; } +if ${ac_cv_lib_z_uncompress+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uncompress (); +int +main () +{ +return uncompress (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_uncompress=yes +else + ac_cv_lib_z_uncompress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_uncompress" >&5 +$as_echo "$ac_cv_lib_z_uncompress" >&6; } +if test "x$ac_cv_lib_z_uncompress" = xyes; then : + LIBZ=-lz + +$as_echo "#define HAVE_ZLIB 1" >>confdefs.h + + enable_zlibdebuginfo=yes +else + if test x$enable_zlibdebuginfo = xyes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "libz not found +See \`config.log' for more details" "$LINENO" 5; } + fi +fi + +fi + + if test x$enable_zlibdebuginfo = xyes; then + HAVE_ZLIB_TRUE= + HAVE_ZLIB_FALSE='#' +else + HAVE_ZLIB_TRUE='#' + HAVE_ZLIB_FALSE= +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support UNW_CACHE_PER_THREAD" >&5 $as_echo_n "checking whether to support UNW_CACHE_PER_THREAD... " >&6; } # Check whether --enable-per-thread-cache was given. @@ -18116,6 +18219,17 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $intel_compiler" >&5 $as_echo "$intel_compiler" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if building on Solaris then define __EXTENSIONS__ macro" >&5 +$as_echo_n "checking if building on Solaris then define __EXTENSIONS__ macro... " >&6; } +if $OS_SOLARIS; then + CFLAGS="${CFLAGS} -D__EXTENSIONS__" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QCC compiler" >&5 $as_echo_n "checking for QCC compiler... " >&6; } case $CC in #( @@ -18261,8 +18375,8 @@ arch="$target_arch" ARCH=`echo $target_arch | tr a-z A-Z` PKG_MAJOR=1 -PKG_MINOR=4 -PKG_EXTRA=-rc1 +PKG_MINOR=5 +PKG_EXTRA=0 PKG_MAINTAINER=libunwind-devel@nongnu.org old_LIBS="$LIBS" @@ -18418,6 +18532,22 @@ if test "x$enable_tests" = "xyes"; then fi + if test "x$enable_weak_backtrace" = xyes; then + CONFIG_WEAK_BACKTRACE_TRUE= + CONFIG_WEAK_BACKTRACE_FALSE='#' +else + CONFIG_WEAK_BACKTRACE_TRUE='#' + CONFIG_WEAK_BACKTRACE_FALSE= +fi + +if test -z "$CONFIG_WEAK_BACKTRACE_TRUE"; then : + + +$as_echo "#define CONFIG_WEAK_BACKTRACE 1" >>confdefs.h + + +fi + ac_config_files="$ac_config_files Makefile src/Makefile include/libunwind-common.h include/libunwind.h include/tdep/libunwind_i.h" ac_config_files="$ac_config_files src/unwind/libunwind.pc src/coredump/libunwind-coredump.pc src/ptrace/libunwind-ptrace.pc src/setjmp/libunwind-setjmp.pc src/libunwind-generic.pc" @@ -18655,6 +18785,10 @@ if test -z "${OS_QNX_TRUE}" && test -z "${OS_QNX_FALSE}"; then as_fn_error $? "conditional \"OS_QNX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${OS_SOLARIS_TRUE}" && test -z "${OS_SOLARIS_FALSE}"; then + as_fn_error $? "conditional \"OS_SOLARIS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${USE_ELF32_TRUE}" && test -z "${USE_ELF32_FALSE}"; then as_fn_error $? "conditional \"USE_ELF32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -18679,6 +18813,10 @@ if test -z "${HAVE_LZMA_TRUE}" && test -z "${HAVE_LZMA_FALSE}"; then as_fn_error $? "conditional \"HAVE_LZMA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_ZLIB_TRUE}" && test -z "${HAVE_ZLIB_FALSE}"; then + as_fn_error $? "conditional \"HAVE_ZLIB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${CONFIG_DOCS_TRUE}" && test -z "${CONFIG_DOCS_FALSE}"; then as_fn_error $? "conditional \"CONFIG_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -18687,6 +18825,10 @@ if test -z "${CONFIG_TESTS_TRUE}" && test -z "${CONFIG_TESTS_FALSE}"; then as_fn_error $? "conditional \"CONFIG_TESTS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${CONFIG_WEAK_BACKTRACE_TRUE}" && test -z "${CONFIG_WEAK_BACKTRACE_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_WEAK_BACKTRACE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 @@ -19084,7 +19226,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libunwind $as_me 1.4-rc1, which was +This file was extended by libunwind $as_me 1.5.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19150,7 +19292,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libunwind config.status 1.4-rc1 +libunwind config.status 1.5.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/src/third_party/unwind/dist/configure.ac b/src/third_party/unwind/dist/configure.ac index dfe40146df1..c8d68f785c2 100644 --- a/src/third_party/unwind/dist/configure.ac +++ b/src/third_party/unwind/dist/configure.ac @@ -1,8 +1,8 @@ define(pkg_major, 1) -define(pkg_minor, 4) -define(pkg_extra, -rc1) +define(pkg_minor, 5) +define(pkg_extra, 0) define(pkg_maintainer, libunwind-devel@nongnu.org) -define(mkvers, $1.$2$3) +define(mkvers, $1.$2.$3) dnl Process this file with autoconf to produce a configure script. AC_INIT([libunwind],[mkvers(pkg_major, pkg_minor, pkg_extra)],[pkg_maintainer]) AC_CONFIG_SRCDIR(src/mi/backtrace.c) @@ -70,7 +70,7 @@ PT_STEP, PT_SYSCALL], [], [], dnl Checks for library functions. AC_CHECK_FUNCS(dl_iterate_phdr dl_phdr_removals_counter dlmodinfo getunwind \ - ttrace mincore) + ttrace mincore pipe2) AC_MSG_CHECKING([if building with AltiVec]) AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ @@ -147,6 +147,10 @@ AC_ARG_ENABLE(tests, AS_HELP_STRING([--disable-tests],[Disable tests build]),, [enable_tests=yes]) +AC_ARG_ENABLE(weak-backtrace, + AS_HELP_STRING([--disable-weak-backtrace],[Do not provide the weak 'backtrace' symbol.]),, + [enable_weak_backtrace=yes]) + AC_MSG_CHECKING([if we should build libunwind-setjmp]) AC_MSG_RESULT([$enable_setjmp]) @@ -180,6 +184,7 @@ AM_CONDITIONAL(OS_LINUX, expr x$target_os : xlinux >/dev/null) AM_CONDITIONAL(OS_HPUX, expr x$target_os : xhpux >/dev/null) AM_CONDITIONAL(OS_FREEBSD, expr x$target_os : xfreebsd >/dev/null) AM_CONDITIONAL(OS_QNX, expr x$target_os : xnto-qnx >/dev/null) +AM_CONDITIONAL(OS_SOLARIS, expr x$target_os : xsolaris >/dev/null) AC_MSG_CHECKING([for ELF helper width]) case "${target_arch}" in @@ -301,6 +306,23 @@ fi AC_SUBST([LIBLZMA]) AM_CONDITIONAL(HAVE_LZMA, test x$enable_minidebuginfo = xyes) +LIBZ= +AC_MSG_CHECKING([whether to support ZLIB-compressed symbol tables]) +AC_ARG_ENABLE(zlibdebuginfo, +AS_HELP_STRING([--enable-zlibdebuginfo], [Enables support for ZLIB-compressed symbol tables]),, [enable_zlibdebuginfo=auto]) +AC_MSG_RESULT([$enable_zlibdebuginfo]) +if test x$enable_zlibdebuginfo != xno; then + AC_CHECK_LIB([z], [uncompress], + [LIBZ=-lz + AC_DEFINE([HAVE_ZLIB], [1], [Define if you have libz]) + enable_zlibdebuginfo=yes], + [if test x$enable_zlibdebuginfo = xyes; then + AC_MSG_FAILURE([libz not found]) + fi]) +fi +AC_SUBST([LIBZ]) +AM_CONDITIONAL(HAVE_ZLIB, test x$enable_zlibdebuginfo = xyes) + AC_MSG_CHECKING([whether to support UNW_CACHE_PER_THREAD]) AC_ARG_ENABLE([per-thread-cache], AS_HELP_STRING([--enable-per-thread-cache], [build with support for UNW_CACHE_PER_THREAD (which imposes a hight TLS memory usage) (default: disabled)])) @@ -322,6 +344,14 @@ if test x$GCC = xyes -a x$intel_compiler != xyes; then fi AC_MSG_RESULT([$intel_compiler]) +AC_MSG_CHECKING([if building on Solaris then define __EXTENSIONS__ macro]) +if $OS_SOLARIS; then + CFLAGS="${CFLAGS} -D__EXTENSIONS__" + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi + AC_MSG_CHECKING([for QCC compiler]) AS_CASE([$CC], [qcc*|QCC*], [qcc_compiler=yes], [qcc_compiler=no]) AC_MSG_RESULT([$qcc_compiler]) @@ -437,6 +467,11 @@ if test "x$enable_tests" = "xyes"; then AC_CONFIG_FILES(tests/Makefile tests/check-namespace.sh) fi +AM_CONDITIONAL([CONFIG_WEAK_BACKTRACE], [test "x$enable_weak_backtrace" = xyes]) +AM_COND_IF([CONFIG_WEAK_BACKTRACE], [ + AC_DEFINE([CONFIG_WEAK_BACKTRACE], [1], [Define if the weak 'backtrace' symbol is provided.]) +]) + AC_CONFIG_FILES(Makefile src/Makefile include/libunwind-common.h include/libunwind.h include/tdep/libunwind_i.h) diff --git a/src/third_party/unwind/dist/doc/Makefile.in b/src/third_party/unwind/dist/doc/Makefile.in index 858f9bf5e3b..818a18eeb02 100644 --- a/src/third_party/unwind/dist/doc/Makefile.in +++ b/src/third_party/unwind/dist/doc/Makefile.in @@ -203,6 +203,7 @@ LIBLZMA = @LIBLZMA@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIBZ = @LIBZ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ diff --git a/src/third_party/unwind/dist/doc/libunwind.man b/src/third_party/unwind/dist/doc/libunwind.man index 87edee27df0..02ab6b89374 100644 --- a/src/third_party/unwind/dist/doc/libunwind.man +++ b/src/third_party/unwind/dist/doc/libunwind.man @@ -1,7 +1,5 @@ -.\" *********************************** start of \input{common.tex} -.\" *********************************** end of \input{common.tex} '\" t -.\" Manual page created with latex2man on Fri Jan 10 15:56:07 EST 2020 +.\" Manual page created with latex2man on Thu Jan 12 06:50:29 PST 2017 .\" NOTE: This file is generated, DO NOT EDIT. .de Vb .ft CW @@ -12,7 +10,7 @@ .fi .. -.TH "LIBUNWIND" "3" "10 January 2020" "Programming Library " "Programming Library " +.TH "LIBUNWIND" "3" "12 January 2017" "Programming Library " "Programming Library " .SH NAME libunwind \-\- a (mostly) platform\-independent unwind API diff --git a/src/third_party/unwind/dist/doc/unw_init_remote.man b/src/third_party/unwind/dist/doc/unw_init_remote.man index 0acdac9617b..27f39c49666 100644 --- a/src/third_party/unwind/dist/doc/unw_init_remote.man +++ b/src/third_party/unwind/dist/doc/unw_init_remote.man @@ -1,5 +1,7 @@ +.\" *********************************** start of \input{common.tex} +.\" *********************************** end of \input{common.tex} '\" t -.\" Manual page created with latex2man on Thu Aug 16 09:44:45 MDT 2007 +.\" Manual page created with latex2man on Wed Jan 13 17:21:43 UTC 2021 .\" NOTE: This file is generated, DO NOT EDIT. .de Vb .ft CW @@ -10,7 +12,7 @@ .fi .. -.TH "UNW\\_INIT\\_REMOTE" "3" "16 August 2007" "Programming Library " "Programming Library " +.TH "UNW\\_INIT\\_REMOTE" "3" "13 January 2021" "Programming Library " "Programming Library " .SH NAME unw_init_remote \-\- initialize cursor for remote unwinding diff --git a/src/third_party/unwind/dist/include/config.h.in b/src/third_party/unwind/dist/include/config.h.in index 98efb22ecf4..da06d6cf345 100644 --- a/src/third_party/unwind/dist/include/config.h.in +++ b/src/third_party/unwind/dist/include/config.h.in @@ -9,6 +9,9 @@ /* Support for Microsoft ABI extensions */ #undef CONFIG_MSABI_SUPPORT +/* Define if the weak 'backtrace' symbol is provided. */ +#undef CONFIG_WEAK_BACKTRACE + /* Define to 1 if you want every memory access validated */ #undef CONSERVATIVE_CHECKS @@ -122,6 +125,9 @@ /* Define to 1 if you have the `mincore' function. */ #undef HAVE_MINCORE +/* Define to 1 if you have the `pipe2' function. */ +#undef HAVE_PIPE2 + /* Define to 1 if you have the <signal.h> header file. */ #undef HAVE_SIGNAL_H @@ -179,6 +185,9 @@ /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H +/* Define if you have libz */ +#undef HAVE_ZLIB + /* Defined if __builtin_unreachable() is available */ #undef HAVE__BUILTIN_UNREACHABLE diff --git a/src/third_party/unwind/dist/include/dwarf-eh.h b/src/third_party/unwind/dist/include/dwarf-eh.h index e03750760c5..96002a1b9d2 100644 --- a/src/third_party/unwind/dist/include/dwarf-eh.h +++ b/src/third_party/unwind/dist/include/dwarf-eh.h @@ -27,6 +27,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define dwarf_eh_h #include "dwarf.h" +#include "libunwind_i.h" /* This header file defines the format of a DWARF exception-header section (.eh_frame_hdr, pointed to by program-header diff --git a/src/third_party/unwind/dist/include/libunwind-aarch64.h b/src/third_party/unwind/dist/include/libunwind-aarch64.h index 778b43626b9..aeaef630240 100644 --- a/src/third_party/unwind/dist/include/libunwind-aarch64.h +++ b/src/third_party/unwind/dist/include/libunwind-aarch64.h @@ -192,7 +192,7 @@ typedef struct unsigned long uc_flags; struct ucontext *uc_link; stack_t uc_stack; - __sigset_t uc_sigmask; + sigset_t uc_sigmask; struct unw_sigcontext uc_mcontext; } unw_tdep_context_t; diff --git a/src/third_party/unwind/dist/include/libunwind-common.h.in b/src/third_party/unwind/dist/include/libunwind-common.h.in index c82a8b90cae..9dbb415f504 100644 --- a/src/third_party/unwind/dist/include/libunwind-common.h.in +++ b/src/third_party/unwind/dist/include/libunwind-common.h.in @@ -30,6 +30,19 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define UNW_VERSION_CODE(maj,min) (((maj) << 16) | (min)) #define UNW_VERSION UNW_VERSION_CODE(UNW_VERSION_MAJOR, UNW_VERSION_MINOR) +#ifdef __sun +// On SmartOS, gcc fails with the following error: +// +// ../include/libunwind-common.h:43:41: error: expected identifier or '(' before numeric constant +// # define UNW_PREFIX UNW_PASTE(UNW_PASTE(_U,UNW_TARGET),_) +// ^ +// +// workaround is to undefine _U explicitly. +// see https://github.com/libunwind/libunwind/issues/118 for more details. +// +#undef _U +#endif + #define UNW_PASTE2(x,y) x##y #define UNW_PASTE(x,y) UNW_PASTE2(x,y) #define UNW_OBJ(fn) UNW_PASTE(UNW_PREFIX, fn) diff --git a/src/third_party/unwind/dist/include/tdep-mips/dwarf-config.h b/src/third_party/unwind/dist/include/tdep-mips/dwarf-config.h index 8006d0b8dd4..74b821f5c0d 100644 --- a/src/third_party/unwind/dist/include/tdep-mips/dwarf-config.h +++ b/src/third_party/unwind/dist/include/tdep-mips/dwarf-config.h @@ -35,9 +35,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ #define dwarf_is_big_endian(addr_space) ((addr_space)->big_endian) -/* Return the size of an address, for DWARF purposes. */ -#define dwarf_addr_size(addr_space) ((addr_space)->addr_size) - /* Convert a pointer to a dwarf_cursor structure to a pointer to unw_cursor_t. */ #define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) diff --git a/src/third_party/unwind/dist/include/tdep-x86_64/jmpbuf.h b/src/third_party/unwind/dist/include/tdep-x86_64/jmpbuf.h index d57196676db..b2e5332b059 100644 --- a/src/third_party/unwind/dist/include/tdep-x86_64/jmpbuf.h +++ b/src/third_party/unwind/dist/include/tdep-x86_64/jmpbuf.h @@ -23,9 +23,10 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#if defined __linux__ +#if defined __linux__ || defined __sun -/* Use glibc's jump-buffer indices; NPTL peeks at SP: */ +/* Use glibc's jump-buffer indices; NPTL peeks at SP: + https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=sysdeps/x86_64/jmpbuf-offsets.h;h=ea94a1f90554deecceaf995ca5ee485ae8bffab7;hb=HEAD */ #define JB_SP 6 #define JB_RP 7 diff --git a/src/third_party/unwind/dist/include/tdep-x86_64/libunwind_i.h b/src/third_party/unwind/dist/include/tdep-x86_64/libunwind_i.h index 93d925f2831..6b798c7115f 100644 --- a/src/third_party/unwind/dist/include/tdep-x86_64/libunwind_i.h +++ b/src/third_party/unwind/dist/include/tdep-x86_64/libunwind_i.h @@ -89,6 +89,7 @@ struct cursor X86_64_SCF_LINUX_RT_SIGFRAME, /* Linux ucontext_t */ X86_64_SCF_FREEBSD_SIGFRAME, /* FreeBSD signal frame */ X86_64_SCF_FREEBSD_SYSCALL, /* FreeBSD syscall */ + X86_64_SCF_SOLARIS_SIGFRAME, /* illumos/Solaris signal frame */ } sigcontext_format; unw_word_t sigcontext_addr; diff --git a/src/third_party/unwind/dist/src/Makefile.am b/src/third_party/unwind/dist/src/Makefile.am index 8d72ef0b5b6..ff977446a7c 100644 --- a/src/third_party/unwind/dist/src/Makefile.am +++ b/src/third_party/unwind/dist/src/Makefile.am @@ -68,7 +68,7 @@ libunwind_coredump_la_SOURCES = \ coredump/_UPT_resume.c libunwind_coredump_la_LDFLAGS = $(COMMON_SO_LDFLAGS) \ -version-info $(COREDUMP_SO_VERSION) -libunwind_coredump_la_LIBADD = $(LIBLZMA) +libunwind_coredump_la_LIBADD = $(LIBLZMA) $(LIBZ) noinst_HEADERS += coredump/_UCD_internal.h coredump/_UCD_lib.h ### libunwind-setjmp: @@ -154,6 +154,8 @@ libunwind_la_SOURCES_os_freebsd = os-freebsd.c libunwind_la_SOURCES_os_qnx = os-qnx.c +libunwind_la_SOURCES_os_solaris = os-solaris.c + libunwind_dwarf_common_la_SOURCES = dwarf/global.c libunwind_dwarf_local_la_SOURCES = \ @@ -181,9 +183,9 @@ noinst_HEADERS += elf32.h elf64.h elfxx.h libunwind_elf32_la_SOURCES = elf32.c libunwind_elf64_la_SOURCES = elf64.c libunwind_elfxx_la_SOURCES = elfxx.c -libunwind_elf32_la_LIBADD = $(LIBLZMA) -libunwind_elf64_la_LIBADD = $(LIBLZMA) -libunwind_elfxx_la_LIBADD = $(LIBLZMA) +libunwind_elf32_la_LIBADD = $(LIBLZMA) $(LIBZ) +libunwind_elf64_la_LIBADD = $(LIBLZMA) $(LIBZ) +libunwind_elfxx_la_LIBADD = $(LIBLZMA) $(LIBZ) noinst_LTLIBRARIES += $(LIBUNWIND_ELF) libunwind_la_LIBADD += $(LIBUNWIND_ELF) @@ -538,6 +540,12 @@ if OS_FREEBSD libunwind_coredump_la_SOURCES += coredump/_UCD_access_reg_freebsd.c endif +if OS_SOLARIS + libunwind_la_SOURCES_os = $(libunwind_la_SOURCES_os_solaris) + libunwind_la_SOURCES_x86_64_os = x86_64/Gos-solaris.c + libunwind_la_SOURCES_x86_64_os_local = x86_64/Los-solaris.c +endif + if OS_QNX libunwind_la_SOURCES_os = $(libunwind_la_SOURCES_os_qnx) libunwind_la_SOURCES_os_local = $(libunwind_la_SOURCES_os_qnx_local) @@ -724,7 +732,7 @@ endif libunwind_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -XCClinker -nostdlib \ $(LDFLAGS_STATIC_LIBCXA) -version-info $(SOVERSION) libunwind_la_LIBADD += -lc $(LIBCRTS) -libunwind_la_LIBADD += $(LIBLZMA) +libunwind_la_LIBADD += $(LIBLZMA) $(LIBZ) AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/tdep-$(arch) -I. AM_CCASFLAGS = $(AM_CPPFLAGS) @@ -741,6 +749,7 @@ EXTRA_DIST = $(libunwind_la_SOURCES_aarch64) \ $(libunwind_la_SOURCES_os_linux) \ $(libunwind_la_SOURCES_os_hpux) \ $(libunwind_la_SOURCES_os_qnx) \ + $(libunwind_la_SOURCES_os_solaris) \ $(libunwind_la_SOURCES_common) \ $(libunwind_la_SOURCES_local) \ $(libunwind_la_SOURCES_generic) \ diff --git a/src/third_party/unwind/dist/src/Makefile.in b/src/third_party/unwind/dist/src/Makefile.in index 2645d23f057..2a5725921cd 100644 --- a/src/third_party/unwind/dist/src/Makefile.in +++ b/src/third_party/unwind/dist/src/Makefile.in @@ -194,9 +194,9 @@ LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) @ARCH_AARCH64_TRUE@ libunwind-dwarf-generic.la \ @ARCH_AARCH64_TRUE@ libunwind-elf64.la $(am__DEPENDENCIES_1) am__libunwind_aarch64_la_SOURCES_DIST = os-freebsd.c os-hpux.c \ - os-linux.c os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c \ - mi/strerror.c aarch64/is_fpreg.c aarch64/regname.c \ - mi/Gdyn-extract.c mi/Gdyn-remote.c \ + os-linux.c os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c \ + mi/mempool.c mi/strerror.c aarch64/is_fpreg.c \ + aarch64/regname.c mi/Gdyn-extract.c mi/Gdyn-remote.c \ mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c \ @@ -212,23 +212,25 @@ am__objects_1 = os-freebsd.lo am__objects_2 = os-hpux.lo am__objects_3 = os-linux.lo am__objects_4 = os-qnx.lo -@OS_FREEBSD_FALSE@@OS_HPUX_FALSE@@OS_LINUX_FALSE@@OS_QNX_TRUE@am__objects_5 = $(am__objects_4) -@OS_FREEBSD_FALSE@@OS_HPUX_FALSE@@OS_LINUX_TRUE@am__objects_5 = $(am__objects_3) -@OS_FREEBSD_FALSE@@OS_HPUX_TRUE@am__objects_5 = $(am__objects_2) -@OS_FREEBSD_TRUE@am__objects_5 = $(am__objects_1) +am__objects_5 = os-solaris.lo +@OS_FREEBSD_FALSE@@OS_HPUX_FALSE@@OS_LINUX_FALSE@@OS_QNX_FALSE@@OS_SOLARIS_TRUE@am__objects_6 = $(am__objects_5) +@OS_FREEBSD_FALSE@@OS_HPUX_FALSE@@OS_LINUX_FALSE@@OS_QNX_TRUE@am__objects_6 = $(am__objects_4) +@OS_FREEBSD_FALSE@@OS_HPUX_FALSE@@OS_LINUX_TRUE@am__objects_6 = $(am__objects_3) +@OS_FREEBSD_FALSE@@OS_HPUX_TRUE@am__objects_6 = $(am__objects_2) +@OS_FREEBSD_TRUE@am__objects_6 = $(am__objects_1) am__dirstamp = $(am__leading_dot)dirstamp -am__objects_6 = $(am__objects_5) mi/init.lo mi/flush_cache.lo \ +am__objects_7 = $(am__objects_6) mi/init.lo mi/flush_cache.lo \ mi/mempool.lo mi/strerror.lo -am__objects_7 = $(am__objects_6) aarch64/is_fpreg.lo \ +am__objects_8 = $(am__objects_7) aarch64/is_fpreg.lo \ aarch64/regname.lo -am__objects_8 = mi/Gdyn-extract.lo mi/Gdyn-remote.lo \ +am__objects_9 = mi/Gdyn-extract.lo mi/Gdyn-remote.lo \ mi/Gfind_dynamic_proc_info.lo mi/Gget_accessors.lo \ mi/Gget_proc_info_by_ip.lo mi/Gget_proc_name.lo \ mi/Gput_dynamic_unwind_info.lo mi/Gdestroy_addr_space.lo \ mi/Gget_reg.lo mi/Gset_reg.lo mi/Gget_fpreg.lo \ mi/Gset_fpreg.lo mi/Gset_caching_policy.lo \ mi/Gset_cache_size.lo -am__objects_9 = $(am__objects_7) $(am__objects_8) \ +am__objects_10 = $(am__objects_8) $(am__objects_9) \ aarch64/Gapply_reg_state.lo aarch64/Greg_states_iterate.lo \ aarch64/Gcreate_addr_space.lo aarch64/Gget_proc_info.lo \ aarch64/Gget_save_loc.lo aarch64/Gglobal.lo aarch64/Ginit.lo \ @@ -236,7 +238,8 @@ am__objects_9 = $(am__objects_7) $(am__objects_8) \ aarch64/Gis_signal_frame.lo aarch64/Gregs.lo \ aarch64/Gresume.lo aarch64/Gstash_frame.lo aarch64/Gstep.lo \ aarch64/Gtrace.lo -@ARCH_AARCH64_TRUE@am_libunwind_aarch64_la_OBJECTS = $(am__objects_9) +@ARCH_AARCH64_TRUE@am_libunwind_aarch64_la_OBJECTS = \ +@ARCH_AARCH64_TRUE@ $(am__objects_10) libunwind_aarch64_la_OBJECTS = $(am_libunwind_aarch64_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -253,24 +256,25 @@ libunwind_aarch64_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@ libunwind-elf32.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@ $(am__DEPENDENCIES_2) am__libunwind_arm_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ - os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c mi/strerror.c \ - arm/is_fpreg.c arm/regname.c arm/Gos-freebsd.c arm/Gos-linux.c \ - arm/Gos-other.c mi/Gdyn-extract.c mi/Gdyn-remote.c \ - mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ - mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ - mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c \ - mi/Gget_reg.c mi/Gset_reg.c mi/Gget_fpreg.c mi/Gset_fpreg.c \ - mi/Gset_caching_policy.c mi/Gset_cache_size.c \ - arm/Gapply_reg_state.c arm/Greg_states_iterate.c \ - arm/Gcreate_addr_space.c arm/Gget_proc_info.c \ - arm/Gget_save_loc.c arm/Gglobal.c arm/Ginit.c \ - arm/Ginit_local.c arm/Ginit_remote.c arm/Gregs.c arm/Gresume.c \ - arm/Gstep.c arm/Gex_tables.c arm/Gstash_frame.c arm/Gtrace.c -am__objects_10 = $(am__objects_6) arm/is_fpreg.lo arm/regname.lo -@OS_FREEBSD_FALSE@@OS_LINUX_FALSE@@OS_QNX_TRUE@am__objects_11 = arm/Gos-other.lo -@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_11 = arm/Gos-linux.lo -@OS_FREEBSD_TRUE@am__objects_11 = arm/Gos-freebsd.lo -am__objects_12 = $(am__objects_10) $(am__objects_11) $(am__objects_8) \ + os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c mi/mempool.c \ + mi/strerror.c arm/is_fpreg.c arm/regname.c arm/Gos-freebsd.c \ + arm/Gos-linux.c arm/Gos-other.c mi/Gdyn-extract.c \ + mi/Gdyn-remote.c mi/Gfind_dynamic_proc_info.c \ + mi/Gget_accessors.c mi/Gget_proc_info_by_ip.c \ + mi/Gget_proc_name.c mi/Gput_dynamic_unwind_info.c \ + mi/Gdestroy_addr_space.c mi/Gget_reg.c mi/Gset_reg.c \ + mi/Gget_fpreg.c mi/Gset_fpreg.c mi/Gset_caching_policy.c \ + mi/Gset_cache_size.c arm/Gapply_reg_state.c \ + arm/Greg_states_iterate.c arm/Gcreate_addr_space.c \ + arm/Gget_proc_info.c arm/Gget_save_loc.c arm/Gglobal.c \ + arm/Ginit.c arm/Ginit_local.c arm/Ginit_remote.c arm/Gregs.c \ + arm/Gresume.c arm/Gstep.c arm/Gex_tables.c arm/Gstash_frame.c \ + arm/Gtrace.c +am__objects_11 = $(am__objects_7) arm/is_fpreg.lo arm/regname.lo +@OS_FREEBSD_FALSE@@OS_LINUX_FALSE@@OS_QNX_TRUE@am__objects_12 = arm/Gos-other.lo +@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_12 = arm/Gos-linux.lo +@OS_FREEBSD_TRUE@am__objects_12 = arm/Gos-freebsd.lo +am__objects_13 = $(am__objects_11) $(am__objects_12) $(am__objects_9) \ arm/Gapply_reg_state.lo arm/Greg_states_iterate.lo \ arm/Gcreate_addr_space.lo arm/Gget_proc_info.lo \ arm/Gget_save_loc.lo arm/Gglobal.lo arm/Ginit.lo \ @@ -278,7 +282,7 @@ am__objects_12 = $(am__objects_10) $(am__objects_11) $(am__objects_8) \ arm/Gresume.lo arm/Gstep.lo arm/Gex_tables.lo \ arm/Gstash_frame.lo arm/Gtrace.lo @ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@am_libunwind_arm_la_OBJECTS = \ -@ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@ $(am__objects_12) +@ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@ $(am__objects_13) libunwind_arm_la_OBJECTS = $(am_libunwind_arm_la_OBJECTS) libunwind_arm_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -287,7 +291,8 @@ libunwind_arm_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@am_libunwind_arm_la_rpath = -rpath \ @ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@ $(libdir) am__DEPENDENCIES_3 = -libunwind_coredump_la_DEPENDENCIES = $(am__DEPENDENCIES_3) +libunwind_coredump_la_DEPENDENCIES = $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_3) am__libunwind_coredump_la_SOURCES_DIST = coredump/_UCD_accessors.c \ coredump/_UCD_create.c coredump/_UCD_destroy.c \ coredump/_UCD_access_mem.c coredump/_UCD_elf_map_image.c \ @@ -297,8 +302,8 @@ am__libunwind_coredump_la_SOURCES_DIST = coredump/_UCD_accessors.c \ coredump/_UPT_put_unwind_info.c coredump/_UPT_resume.c \ coredump/_UCD_access_reg_linux.c \ coredump/_UCD_access_reg_freebsd.c -@OS_LINUX_TRUE@am__objects_13 = coredump/_UCD_access_reg_linux.lo -@OS_FREEBSD_TRUE@am__objects_14 = coredump/_UCD_access_reg_freebsd.lo +@OS_LINUX_TRUE@am__objects_14 = coredump/_UCD_access_reg_linux.lo +@OS_FREEBSD_TRUE@am__objects_15 = coredump/_UCD_access_reg_freebsd.lo am_libunwind_coredump_la_OBJECTS = coredump/_UCD_accessors.lo \ coredump/_UCD_create.lo coredump/_UCD_destroy.lo \ coredump/_UCD_access_mem.lo coredump/_UCD_elf_map_image.lo \ @@ -306,7 +311,7 @@ am_libunwind_coredump_la_OBJECTS = coredump/_UCD_accessors.lo \ coredump/_UPT_elf.lo coredump/_UPT_access_fpreg.lo \ coredump/_UPT_get_dyn_info_list_addr.lo \ coredump/_UPT_put_unwind_info.lo coredump/_UPT_resume.lo \ - $(am__objects_13) $(am__objects_14) + $(am__objects_14) $(am__objects_15) libunwind_coredump_la_OBJECTS = $(am_libunwind_coredump_la_OBJECTS) libunwind_coredump_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -333,15 +338,18 @@ am_libunwind_dwarf_local_la_OBJECTS = dwarf/Lexpr.lo dwarf/Lfde.lo \ libunwind_dwarf_local_la_OBJECTS = \ $(am_libunwind_dwarf_local_la_OBJECTS) @REMOTE_ONLY_FALSE@@USE_DWARF_TRUE@am_libunwind_dwarf_local_la_rpath = -libunwind_elf32_la_DEPENDENCIES = $(am__DEPENDENCIES_3) +libunwind_elf32_la_DEPENDENCIES = $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_3) am_libunwind_elf32_la_OBJECTS = elf32.lo libunwind_elf32_la_OBJECTS = $(am_libunwind_elf32_la_OBJECTS) @USE_ELF32_TRUE@am_libunwind_elf32_la_rpath = -libunwind_elf64_la_DEPENDENCIES = $(am__DEPENDENCIES_3) +libunwind_elf64_la_DEPENDENCIES = $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_3) am_libunwind_elf64_la_OBJECTS = elf64.lo libunwind_elf64_la_OBJECTS = $(am_libunwind_elf64_la_OBJECTS) @USE_ELF64_TRUE@am_libunwind_elf64_la_rpath = -libunwind_elfxx_la_DEPENDENCIES = $(am__DEPENDENCIES_3) +libunwind_elfxx_la_DEPENDENCIES = $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_3) am_libunwind_elfxx_la_OBJECTS = elfxx.lo libunwind_elfxx_la_OBJECTS = $(am_libunwind_elfxx_la_OBJECTS) @USE_ELFXX_TRUE@am_libunwind_elfxx_la_rpath = @@ -350,27 +358,27 @@ libunwind_elfxx_la_OBJECTS = $(am_libunwind_elfxx_la_OBJECTS) @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_TRUE@@ARCH_IA64_FALSE@ libunwind-elf32.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_TRUE@@ARCH_IA64_FALSE@ $(am__DEPENDENCIES_4) am__libunwind_hppa_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ - os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c mi/strerror.c \ - hppa/regname.c mi/Gdyn-extract.c mi/Gdyn-remote.c \ - mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ - mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ - mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c \ - mi/Gget_reg.c mi/Gset_reg.c mi/Gget_fpreg.c mi/Gset_fpreg.c \ - mi/Gset_caching_policy.c mi/Gset_cache_size.c \ - hppa/Gapply_reg_state.c hppa/Greg_states_iterate.c \ - hppa/Gcreate_addr_space.c hppa/Gget_save_loc.c hppa/Gglobal.c \ - hppa/Ginit.c hppa/Ginit_local.c hppa/Ginit_remote.c \ - hppa/Gis_signal_frame.c hppa/Gget_proc_info.c hppa/Gregs.c \ - hppa/Gresume.c hppa/Gstep.c -am__objects_15 = $(am__objects_6) hppa/regname.lo -am__objects_16 = $(am__objects_15) $(am__objects_8) \ + os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c mi/mempool.c \ + mi/strerror.c hppa/regname.c mi/Gdyn-extract.c \ + mi/Gdyn-remote.c mi/Gfind_dynamic_proc_info.c \ + mi/Gget_accessors.c mi/Gget_proc_info_by_ip.c \ + mi/Gget_proc_name.c mi/Gput_dynamic_unwind_info.c \ + mi/Gdestroy_addr_space.c mi/Gget_reg.c mi/Gset_reg.c \ + mi/Gget_fpreg.c mi/Gset_fpreg.c mi/Gset_caching_policy.c \ + mi/Gset_cache_size.c hppa/Gapply_reg_state.c \ + hppa/Greg_states_iterate.c hppa/Gcreate_addr_space.c \ + hppa/Gget_save_loc.c hppa/Gglobal.c hppa/Ginit.c \ + hppa/Ginit_local.c hppa/Ginit_remote.c hppa/Gis_signal_frame.c \ + hppa/Gget_proc_info.c hppa/Gregs.c hppa/Gresume.c hppa/Gstep.c +am__objects_16 = $(am__objects_7) hppa/regname.lo +am__objects_17 = $(am__objects_16) $(am__objects_9) \ hppa/Gapply_reg_state.lo hppa/Greg_states_iterate.lo \ hppa/Gcreate_addr_space.lo hppa/Gget_save_loc.lo \ hppa/Gglobal.lo hppa/Ginit.lo hppa/Ginit_local.lo \ hppa/Ginit_remote.lo hppa/Gis_signal_frame.lo \ hppa/Gget_proc_info.lo hppa/Gregs.lo hppa/Gresume.lo \ hppa/Gstep.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_TRUE@@ARCH_IA64_FALSE@am_libunwind_hppa_la_OBJECTS = $(am__objects_16) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_TRUE@@ARCH_IA64_FALSE@am_libunwind_hppa_la_OBJECTS = $(am__objects_17) libunwind_hppa_la_OBJECTS = $(am_libunwind_hppa_la_OBJECTS) libunwind_hppa_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -382,22 +390,22 @@ libunwind_hppa_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@libunwind_ia64_la_DEPENDENCIES = libunwind-elf64.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@ $(am__DEPENDENCIES_5) am__libunwind_ia64_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ - os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c mi/strerror.c \ - ia64/regname.c mi/Gdyn-extract.c mi/Gdyn-remote.c \ - mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ - mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ - mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c \ - mi/Gget_reg.c mi/Gset_reg.c mi/Gget_fpreg.c mi/Gset_fpreg.c \ - mi/Gset_caching_policy.c mi/Gset_cache_size.c \ - ia64/Gapply_reg_state.c ia64/Greg_states_iterate.c \ - ia64/Gcreate_addr_space.c ia64/Gget_proc_info.c \ - ia64/Gget_save_loc.c ia64/Gglobal.c ia64/Ginit.c \ - ia64/Ginit_local.c ia64/Ginit_remote.c ia64/Ginstall_cursor.S \ - ia64/Gis_signal_frame.c ia64/Gparser.c ia64/Grbs.c \ - ia64/Gregs.c ia64/Gresume.c ia64/Gscript.c ia64/Gstep.c \ - ia64/Gtables.c ia64/Gfind_unwind_table.c -am__objects_17 = $(am__objects_6) ia64/regname.lo -am__objects_18 = $(am__objects_17) $(am__objects_8) \ + os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c mi/mempool.c \ + mi/strerror.c ia64/regname.c mi/Gdyn-extract.c \ + mi/Gdyn-remote.c mi/Gfind_dynamic_proc_info.c \ + mi/Gget_accessors.c mi/Gget_proc_info_by_ip.c \ + mi/Gget_proc_name.c mi/Gput_dynamic_unwind_info.c \ + mi/Gdestroy_addr_space.c mi/Gget_reg.c mi/Gset_reg.c \ + mi/Gget_fpreg.c mi/Gset_fpreg.c mi/Gset_caching_policy.c \ + mi/Gset_cache_size.c ia64/Gapply_reg_state.c \ + ia64/Greg_states_iterate.c ia64/Gcreate_addr_space.c \ + ia64/Gget_proc_info.c ia64/Gget_save_loc.c ia64/Gglobal.c \ + ia64/Ginit.c ia64/Ginit_local.c ia64/Ginit_remote.c \ + ia64/Ginstall_cursor.S ia64/Gis_signal_frame.c ia64/Gparser.c \ + ia64/Grbs.c ia64/Gregs.c ia64/Gresume.c ia64/Gscript.c \ + ia64/Gstep.c ia64/Gtables.c ia64/Gfind_unwind_table.c +am__objects_18 = $(am__objects_7) ia64/regname.lo +am__objects_19 = $(am__objects_18) $(am__objects_9) \ ia64/Gapply_reg_state.lo ia64/Greg_states_iterate.lo \ ia64/Gcreate_addr_space.lo ia64/Gget_proc_info.lo \ ia64/Gget_save_loc.lo ia64/Gglobal.lo ia64/Ginit.lo \ @@ -406,7 +414,7 @@ am__objects_18 = $(am__objects_17) $(am__objects_8) \ ia64/Gparser.lo ia64/Grbs.lo ia64/Gregs.lo ia64/Gresume.lo \ ia64/Gscript.lo ia64/Gstep.lo ia64/Gtables.lo \ ia64/Gfind_unwind_table.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@am_libunwind_ia64_la_OBJECTS = $(am__objects_18) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@am_libunwind_ia64_la_OBJECTS = $(am__objects_19) libunwind_ia64_la_OBJECTS = $(am_libunwind_ia64_la_OBJECTS) libunwind_ia64_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -420,8 +428,8 @@ libunwind_ia64_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_TRUE@ libunwind-elfxx.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_TRUE@ $(am__DEPENDENCIES_6) am__libunwind_mips_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ - os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c mi/strerror.c \ - mips/is_fpreg.c mips/regname.c mi/Gdyn-extract.c \ + os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c mi/mempool.c \ + mi/strerror.c mips/is_fpreg.c mips/regname.c mi/Gdyn-extract.c \ mi/Gdyn-remote.c mi/Gfind_dynamic_proc_info.c \ mi/Gget_accessors.c mi/Gget_proc_info_by_ip.c \ mi/Gget_proc_name.c mi/Gput_dynamic_unwind_info.c \ @@ -433,15 +441,15 @@ am__libunwind_mips_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ mips/Ginit.c mips/Ginit_local.c mips/Ginit_remote.c \ mips/Gis_signal_frame.c mips/Gregs.c mips/Gresume.c \ mips/Gstep.c -am__objects_19 = $(am__objects_6) mips/is_fpreg.lo mips/regname.lo -am__objects_20 = $(am__objects_19) $(am__objects_8) \ +am__objects_20 = $(am__objects_7) mips/is_fpreg.lo mips/regname.lo +am__objects_21 = $(am__objects_20) $(am__objects_9) \ mips/Gapply_reg_state.lo mips/Greg_states_iterate.lo \ mips/Gcreate_addr_space.lo mips/Gget_proc_info.lo \ mips/Gget_save_loc.lo mips/Gglobal.lo mips/Ginit.lo \ mips/Ginit_local.lo mips/Ginit_remote.lo \ mips/Gis_signal_frame.lo mips/Gregs.lo mips/Gresume.lo \ mips/Gstep.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_TRUE@am_libunwind_mips_la_OBJECTS = $(am__objects_20) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_TRUE@am_libunwind_mips_la_OBJECTS = $(am__objects_21) libunwind_mips_la_OBJECTS = $(am_libunwind_mips_la_OBJECTS) libunwind_mips_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -454,8 +462,8 @@ libunwind_mips_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@ libunwind-elf32.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@ $(am__DEPENDENCIES_7) am__libunwind_ppc32_la_SOURCES_DIST = os-freebsd.c os-hpux.c \ - os-linux.c os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c \ - mi/strerror.c ppc32/is_fpreg.c ppc32/regname.c \ + os-linux.c os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c \ + mi/mempool.c mi/strerror.c ppc32/is_fpreg.c ppc32/regname.c \ ppc32/get_func_addr.c mi/Gdyn-extract.c mi/Gdyn-remote.c \ mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ @@ -467,15 +475,15 @@ am__libunwind_ppc32_la_SOURCES_DIST = os-freebsd.c os-hpux.c \ ppc32/Gapply_reg_state.c ppc32/Greg_states_iterate.c \ ppc32/Gcreate_addr_space.c ppc32/Gglobal.c ppc32/Ginit.c \ ppc32/Gregs.c ppc32/Gresume.c ppc32/Gstep.c -am__objects_21 = $(am__objects_6) ppc32/is_fpreg.lo ppc32/regname.lo \ +am__objects_22 = $(am__objects_7) ppc32/is_fpreg.lo ppc32/regname.lo \ ppc32/get_func_addr.lo -am__objects_22 = ppc/Gget_proc_info.lo ppc/Gget_save_loc.lo \ +am__objects_23 = ppc/Gget_proc_info.lo ppc/Gget_save_loc.lo \ ppc/Ginit_local.lo ppc/Ginit_remote.lo ppc/Gis_signal_frame.lo -am__objects_23 = $(am__objects_21) $(am__objects_8) $(am__objects_22) \ +am__objects_24 = $(am__objects_22) $(am__objects_9) $(am__objects_23) \ ppc32/Gapply_reg_state.lo ppc32/Greg_states_iterate.lo \ ppc32/Gcreate_addr_space.lo ppc32/Gglobal.lo ppc32/Ginit.lo \ ppc32/Gregs.lo ppc32/Gresume.lo ppc32/Gstep.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_ppc32_la_OBJECTS = $(am__objects_23) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_ppc32_la_OBJECTS = $(am__objects_24) libunwind_ppc32_la_OBJECTS = $(am_libunwind_ppc32_la_OBJECTS) libunwind_ppc32_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -488,8 +496,8 @@ libunwind_ppc32_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@ libunwind-elf64.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@ $(am__DEPENDENCIES_8) am__libunwind_ppc64_la_SOURCES_DIST = os-freebsd.c os-hpux.c \ - os-linux.c os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c \ - mi/strerror.c ppc64/is_fpreg.c ppc64/regname.c \ + os-linux.c os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c \ + mi/mempool.c mi/strerror.c ppc64/is_fpreg.c ppc64/regname.c \ ppc64/get_func_addr.c mi/Gdyn-extract.c mi/Gdyn-remote.c \ mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ @@ -501,13 +509,13 @@ am__libunwind_ppc64_la_SOURCES_DIST = os-freebsd.c os-hpux.c \ ppc64/Gapply_reg_state.c ppc64/Greg_states_iterate.c \ ppc64/Gcreate_addr_space.c ppc64/Gglobal.c ppc64/Ginit.c \ ppc64/Gregs.c ppc64/Gresume.c ppc64/Gstep.c -am__objects_24 = $(am__objects_6) ppc64/is_fpreg.lo ppc64/regname.lo \ +am__objects_25 = $(am__objects_7) ppc64/is_fpreg.lo ppc64/regname.lo \ ppc64/get_func_addr.lo -am__objects_25 = $(am__objects_24) $(am__objects_8) $(am__objects_22) \ +am__objects_26 = $(am__objects_25) $(am__objects_9) $(am__objects_23) \ ppc64/Gapply_reg_state.lo ppc64/Greg_states_iterate.lo \ ppc64/Gcreate_addr_space.lo ppc64/Gglobal.lo ppc64/Ginit.lo \ ppc64/Gregs.lo ppc64/Gresume.lo ppc64/Gstep.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_ppc64_la_OBJECTS = $(am__objects_25) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_ppc64_la_OBJECTS = $(am__objects_26) libunwind_ppc64_la_OBJECTS = $(am_libunwind_ppc64_la_OBJECTS) libunwind_ppc64_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -532,8 +540,8 @@ libunwind_ptrace_la_OBJECTS = $(am_libunwind_ptrace_la_OBJECTS) @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_S390X_TRUE@@ARCH_SH_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@ libunwind-elf64.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_S390X_TRUE@@ARCH_SH_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@ $(am__DEPENDENCIES_9) am__libunwind_s390x_la_SOURCES_DIST = os-freebsd.c os-hpux.c \ - os-linux.c os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c \ - mi/strerror.c s390x/is_fpreg.c s390x/regname.c \ + os-linux.c os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c \ + mi/mempool.c mi/strerror.c s390x/is_fpreg.c s390x/regname.c \ mi/Gdyn-extract.c mi/Gdyn-remote.c \ mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ @@ -545,14 +553,14 @@ am__libunwind_s390x_la_SOURCES_DIST = os-freebsd.c os-hpux.c \ s390x/Gglobal.c s390x/Ginit.c s390x/Ginit_local.c \ s390x/Ginit_remote.c s390x/Gget_proc_info.c s390x/Gregs.c \ s390x/Gresume.c s390x/Gis_signal_frame.c s390x/Gstep.c -am__objects_26 = $(am__objects_6) s390x/is_fpreg.lo s390x/regname.lo -am__objects_27 = $(am__objects_26) $(am__objects_8) \ +am__objects_27 = $(am__objects_7) s390x/is_fpreg.lo s390x/regname.lo +am__objects_28 = $(am__objects_27) $(am__objects_9) \ s390x/Gapply_reg_state.lo s390x/Greg_states_iterate.lo \ s390x/Gcreate_addr_space.lo s390x/Gget_save_loc.lo \ s390x/Gglobal.lo s390x/Ginit.lo s390x/Ginit_local.lo \ s390x/Ginit_remote.lo s390x/Gget_proc_info.lo s390x/Gregs.lo \ s390x/Gresume.lo s390x/Gis_signal_frame.lo s390x/Gstep.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_S390X_TRUE@@ARCH_SH_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_s390x_la_OBJECTS = $(am__objects_27) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_S390X_TRUE@@ARCH_SH_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_s390x_la_OBJECTS = $(am__objects_28) libunwind_s390x_la_OBJECTS = $(am_libunwind_s390x_la_OBJECTS) libunwind_s390x_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -569,29 +577,29 @@ am__libunwind_setjmp_la_SOURCES_DIST = setjmp/longjmp.c \ tilegx/siglongjmp.S x86/longjmp.S x86/siglongjmp.S \ x86_64/longjmp.S x86_64/siglongjmp.S ppc/longjmp.S \ ppc/siglongjmp.S sh/siglongjmp.S -@ARCH_AARCH64_TRUE@am__objects_28 = aarch64/siglongjmp.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@am__objects_29 = arm/siglongjmp.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@am__objects_30 = ia64/setjmp.lo \ +@ARCH_AARCH64_TRUE@am__objects_29 = aarch64/siglongjmp.lo +@ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@am__objects_30 = arm/siglongjmp.lo +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@am__objects_31 = ia64/setjmp.lo \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@ ia64/sigsetjmp.lo \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@ ia64/longjmp.lo \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@ ia64/siglongjmp.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_TRUE@@ARCH_IA64_FALSE@am__objects_31 = hppa/siglongjmp.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_TRUE@am__objects_32 = mips/siglongjmp.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_TRUE@am__objects_33 = tilegx/siglongjmp.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@am__objects_34 = x86/longjmp.lo \ +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_TRUE@@ARCH_IA64_FALSE@am__objects_32 = hppa/siglongjmp.lo +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_TRUE@am__objects_33 = mips/siglongjmp.lo +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_TRUE@am__objects_34 = tilegx/siglongjmp.lo +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@am__objects_35 = x86/longjmp.lo \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@ x86/siglongjmp.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@am__objects_35 = x86_64/longjmp.lo \ +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@am__objects_36 = x86_64/longjmp.lo \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@ x86_64/siglongjmp.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am__objects_36 = ppc/longjmp.lo \ +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am__objects_37 = ppc/longjmp.lo \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@ ppc/siglongjmp.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am__objects_37 = ppc/longjmp.lo \ +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am__objects_38 = ppc/longjmp.lo \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@ ppc/siglongjmp.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_SH_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am__objects_38 = sh/siglongjmp.lo +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_SH_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am__objects_39 = sh/siglongjmp.lo am_libunwind_setjmp_la_OBJECTS = setjmp/longjmp.lo \ - setjmp/siglongjmp.lo $(am__objects_28) $(am__objects_29) \ - $(am__objects_30) $(am__objects_31) $(am__objects_32) \ - $(am__objects_33) $(am__objects_34) $(am__objects_35) \ - $(am__objects_36) $(am__objects_37) $(am__objects_38) + setjmp/siglongjmp.lo $(am__objects_29) $(am__objects_30) \ + $(am__objects_31) $(am__objects_32) $(am__objects_33) \ + $(am__objects_34) $(am__objects_35) $(am__objects_36) \ + $(am__objects_37) $(am__objects_38) $(am__objects_39) libunwind_setjmp_la_OBJECTS = $(am_libunwind_setjmp_la_OBJECTS) libunwind_setjmp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -603,25 +611,26 @@ libunwind_setjmp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_SH_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@ libunwind-elf32.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_SH_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@ $(am__DEPENDENCIES_10) am__libunwind_sh_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ - os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c mi/strerror.c \ - sh/is_fpreg.c sh/regname.c mi/Gdyn-extract.c mi/Gdyn-remote.c \ - mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ - mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ - mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c \ - mi/Gget_reg.c mi/Gset_reg.c mi/Gget_fpreg.c mi/Gset_fpreg.c \ - mi/Gset_caching_policy.c mi/Gset_cache_size.c \ - sh/Gapply_reg_state.c sh/Greg_states_iterate.c \ - sh/Gcreate_addr_space.c sh/Gget_proc_info.c sh/Gget_save_loc.c \ - sh/Gglobal.c sh/Ginit.c sh/Ginit_local.c sh/Ginit_remote.c \ - sh/Gis_signal_frame.c sh/Gregs.c sh/Gresume.c sh/Gstep.c -am__objects_39 = $(am__objects_6) sh/is_fpreg.lo sh/regname.lo -am__objects_40 = $(am__objects_39) $(am__objects_8) \ + os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c mi/mempool.c \ + mi/strerror.c sh/is_fpreg.c sh/regname.c mi/Gdyn-extract.c \ + mi/Gdyn-remote.c mi/Gfind_dynamic_proc_info.c \ + mi/Gget_accessors.c mi/Gget_proc_info_by_ip.c \ + mi/Gget_proc_name.c mi/Gput_dynamic_unwind_info.c \ + mi/Gdestroy_addr_space.c mi/Gget_reg.c mi/Gset_reg.c \ + mi/Gget_fpreg.c mi/Gset_fpreg.c mi/Gset_caching_policy.c \ + mi/Gset_cache_size.c sh/Gapply_reg_state.c \ + sh/Greg_states_iterate.c sh/Gcreate_addr_space.c \ + sh/Gget_proc_info.c sh/Gget_save_loc.c sh/Gglobal.c sh/Ginit.c \ + sh/Ginit_local.c sh/Ginit_remote.c sh/Gis_signal_frame.c \ + sh/Gregs.c sh/Gresume.c sh/Gstep.c +am__objects_40 = $(am__objects_7) sh/is_fpreg.lo sh/regname.lo +am__objects_41 = $(am__objects_40) $(am__objects_9) \ sh/Gapply_reg_state.lo sh/Greg_states_iterate.lo \ sh/Gcreate_addr_space.lo sh/Gget_proc_info.lo \ sh/Gget_save_loc.lo sh/Gglobal.lo sh/Ginit.lo \ sh/Ginit_local.lo sh/Ginit_remote.lo sh/Gis_signal_frame.lo \ sh/Gregs.lo sh/Gresume.lo sh/Gstep.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_SH_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_sh_la_OBJECTS = $(am__objects_40) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_SH_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_sh_la_OBJECTS = $(am__objects_41) libunwind_sh_la_OBJECTS = $(am_libunwind_sh_la_OBJECTS) libunwind_sh_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -634,8 +643,8 @@ libunwind_sh_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_TRUE@ libunwind-elfxx.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_TRUE@ $(am__DEPENDENCIES_11) am__libunwind_tilegx_la_SOURCES_DIST = os-freebsd.c os-hpux.c \ - os-linux.c os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c \ - mi/strerror.c tilegx/is_fpreg.c tilegx/regname.c \ + os-linux.c os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c \ + mi/mempool.c mi/strerror.c tilegx/is_fpreg.c tilegx/regname.c \ mi/Gdyn-extract.c mi/Gdyn-remote.c \ mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ @@ -648,15 +657,15 @@ am__libunwind_tilegx_la_SOURCES_DIST = os-freebsd.c os-hpux.c \ tilegx/Ginit_local.c tilegx/Ginit_remote.c \ tilegx/Gis_signal_frame.c tilegx/Gregs.c tilegx/Gresume.c \ tilegx/Gstep.c -am__objects_41 = $(am__objects_6) tilegx/is_fpreg.lo tilegx/regname.lo -am__objects_42 = $(am__objects_41) $(am__objects_8) \ +am__objects_42 = $(am__objects_7) tilegx/is_fpreg.lo tilegx/regname.lo +am__objects_43 = $(am__objects_42) $(am__objects_9) \ tilegx/Gapply_reg_state.lo tilegx/Greg_states_iterate.lo \ tilegx/Gcreate_addr_space.lo tilegx/Gget_proc_info.lo \ tilegx/Gget_save_loc.lo tilegx/Gglobal.lo tilegx/Ginit.lo \ tilegx/Ginit_local.lo tilegx/Ginit_remote.lo \ tilegx/Gis_signal_frame.lo tilegx/Gregs.lo tilegx/Gresume.lo \ tilegx/Gstep.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_TRUE@am_libunwind_tilegx_la_OBJECTS = $(am__objects_42) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_TRUE@am_libunwind_tilegx_la_OBJECTS = $(am__objects_43) libunwind_tilegx_la_OBJECTS = $(am_libunwind_tilegx_la_OBJECTS) libunwind_tilegx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -669,9 +678,9 @@ libunwind_tilegx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@ libunwind-elf32.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@ $(am__DEPENDENCIES_12) am__libunwind_x86_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ - os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c mi/strerror.c \ - x86/is_fpreg.c x86/regname.c x86/Gos-freebsd.c x86/Gos-linux.c \ - mi/Gdyn-extract.c mi/Gdyn-remote.c \ + os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c mi/mempool.c \ + mi/strerror.c x86/is_fpreg.c x86/regname.c x86/Gos-freebsd.c \ + x86/Gos-linux.c mi/Gdyn-extract.c mi/Gdyn-remote.c \ mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c \ @@ -681,15 +690,15 @@ am__libunwind_x86_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ x86/Gcreate_addr_space.c x86/Gget_save_loc.c x86/Gglobal.c \ x86/Ginit.c x86/Ginit_local.c x86/Ginit_remote.c \ x86/Gget_proc_info.c x86/Gregs.c x86/Gresume.c x86/Gstep.c -am__objects_43 = $(am__objects_6) x86/is_fpreg.lo x86/regname.lo -@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_44 = x86/Gos-linux.lo -@OS_FREEBSD_TRUE@am__objects_44 = x86/Gos-freebsd.lo -am__objects_45 = $(am__objects_43) $(am__objects_44) $(am__objects_8) \ +am__objects_44 = $(am__objects_7) x86/is_fpreg.lo x86/regname.lo +@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_45 = x86/Gos-linux.lo +@OS_FREEBSD_TRUE@am__objects_45 = x86/Gos-freebsd.lo +am__objects_46 = $(am__objects_44) $(am__objects_45) $(am__objects_9) \ x86/Gapply_reg_state.lo x86/Greg_states_iterate.lo \ x86/Gcreate_addr_space.lo x86/Gget_save_loc.lo x86/Gglobal.lo \ x86/Ginit.lo x86/Ginit_local.lo x86/Ginit_remote.lo \ x86/Gget_proc_info.lo x86/Gregs.lo x86/Gresume.lo x86/Gstep.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@am_libunwind_x86_la_OBJECTS = $(am__objects_45) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@am_libunwind_x86_la_OBJECTS = $(am__objects_46) libunwind_x86_la_OBJECTS = $(am_libunwind_x86_la_OBJECTS) libunwind_x86_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -702,31 +711,33 @@ libunwind_x86_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@ libunwind-elf64.la \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@ $(am__DEPENDENCIES_13) am__libunwind_x86_64_la_SOURCES_DIST = os-freebsd.c os-hpux.c \ - os-linux.c os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c \ - mi/strerror.c x86_64/is_fpreg.c x86_64/regname.c \ - x86_64/Gos-freebsd.c x86_64/Gos-linux.c mi/Gdyn-extract.c \ - mi/Gdyn-remote.c mi/Gfind_dynamic_proc_info.c \ - mi/Gget_accessors.c mi/Gget_proc_info_by_ip.c \ - mi/Gget_proc_name.c mi/Gput_dynamic_unwind_info.c \ - mi/Gdestroy_addr_space.c mi/Gget_reg.c mi/Gset_reg.c \ - mi/Gget_fpreg.c mi/Gset_fpreg.c mi/Gset_caching_policy.c \ - mi/Gset_cache_size.c x86_64/Gapply_reg_state.c \ - x86_64/Greg_states_iterate.c x86_64/Gcreate_addr_space.c \ - x86_64/Gget_save_loc.c x86_64/Gglobal.c x86_64/Ginit.c \ - x86_64/Ginit_local.c x86_64/Ginit_remote.c \ - x86_64/Gget_proc_info.c x86_64/Gregs.c x86_64/Gresume.c \ - x86_64/Gstash_frame.c x86_64/Gstep.c x86_64/Gtrace.c -am__objects_46 = $(am__objects_6) x86_64/is_fpreg.lo x86_64/regname.lo -@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_47 = x86_64/Gos-linux.lo -@OS_FREEBSD_TRUE@am__objects_47 = x86_64/Gos-freebsd.lo -am__objects_48 = $(am__objects_46) $(am__objects_47) $(am__objects_8) \ + os-linux.c os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c \ + mi/mempool.c mi/strerror.c x86_64/is_fpreg.c x86_64/regname.c \ + x86_64/Gos-freebsd.c x86_64/Gos-linux.c x86_64/Gos-solaris.c \ + mi/Gdyn-extract.c mi/Gdyn-remote.c \ + mi/Gfind_dynamic_proc_info.c mi/Gget_accessors.c \ + mi/Gget_proc_info_by_ip.c mi/Gget_proc_name.c \ + mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c \ + mi/Gget_reg.c mi/Gset_reg.c mi/Gget_fpreg.c mi/Gset_fpreg.c \ + mi/Gset_caching_policy.c mi/Gset_cache_size.c \ + x86_64/Gapply_reg_state.c x86_64/Greg_states_iterate.c \ + x86_64/Gcreate_addr_space.c x86_64/Gget_save_loc.c \ + x86_64/Gglobal.c x86_64/Ginit.c x86_64/Ginit_local.c \ + x86_64/Ginit_remote.c x86_64/Gget_proc_info.c x86_64/Gregs.c \ + x86_64/Gresume.c x86_64/Gstash_frame.c x86_64/Gstep.c \ + x86_64/Gtrace.c +am__objects_47 = $(am__objects_7) x86_64/is_fpreg.lo x86_64/regname.lo +@OS_FREEBSD_FALSE@@OS_LINUX_FALSE@@OS_SOLARIS_TRUE@am__objects_48 = x86_64/Gos-solaris.lo +@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_48 = x86_64/Gos-linux.lo +@OS_FREEBSD_TRUE@am__objects_48 = x86_64/Gos-freebsd.lo +am__objects_49 = $(am__objects_47) $(am__objects_48) $(am__objects_9) \ x86_64/Gapply_reg_state.lo x86_64/Greg_states_iterate.lo \ x86_64/Gcreate_addr_space.lo x86_64/Gget_save_loc.lo \ x86_64/Gglobal.lo x86_64/Ginit.lo x86_64/Ginit_local.lo \ x86_64/Ginit_remote.lo x86_64/Gget_proc_info.lo \ x86_64/Gregs.lo x86_64/Gresume.lo x86_64/Gstash_frame.lo \ x86_64/Gstep.lo x86_64/Gtrace.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@am_libunwind_x86_64_la_OBJECTS = $(am__objects_48) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@am_libunwind_x86_64_la_OBJECTS = $(am__objects_49) libunwind_x86_64_la_OBJECTS = $(am_libunwind_x86_64_la_OBJECTS) libunwind_x86_64_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -735,12 +746,13 @@ libunwind_x86_64_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@am_libunwind_x86_64_la_rpath = -rpath \ @ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@ $(libdir) libunwind_la_DEPENDENCIES = $(am__append_10) $(LIBUNWIND_ELF) \ - $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_3) + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_3) am__libunwind_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ - os-qnx.c mi/init.c mi/flush_cache.c mi/mempool.c mi/strerror.c \ - s390x/is_fpreg.c s390x/regname.c mi/_ReadULEB.c mi/_ReadSLEB.c \ - mi/backtrace.c mi/dyn-cancel.c mi/dyn-info-list.c \ - mi/dyn-register.c mi/Ldyn-extract.c \ + os-qnx.c os-solaris.c mi/init.c mi/flush_cache.c mi/mempool.c \ + mi/strerror.c s390x/is_fpreg.c s390x/regname.c mi/_ReadULEB.c \ + mi/_ReadSLEB.c mi/backtrace.c mi/dyn-cancel.c \ + mi/dyn-info-list.c mi/dyn-register.c mi/Ldyn-extract.c \ mi/Lfind_dynamic_proc_info.c mi/Lget_accessors.c \ mi/Lget_proc_info_by_ip.c mi/Lget_proc_name.c \ mi/Lput_dynamic_unwind_info.c mi/Ldestroy_addr_space.c \ @@ -774,26 +786,26 @@ am__libunwind_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ ppc32/Lreg_states_iterate.c ppc32/Lcreate_addr_space.c \ ppc32/Lglobal.c ppc32/Linit.c ppc32/Lregs.c ppc32/Lresume.c \ ppc32/Lstep.c x86_64/is_fpreg.c x86_64/regname.c \ - x86_64/Los-freebsd.c x86_64/Los-linux.c x86_64/setcontext.S \ - x86_64/Lapply_reg_state.c x86_64/Lreg_states_iterate.c \ - x86_64/Lcreate_addr_space.c x86_64/Lget_save_loc.c \ - x86_64/Lglobal.c x86_64/Linit.c x86_64/Linit_local.c \ - x86_64/Linit_remote.c x86_64/Lget_proc_info.c x86_64/Lregs.c \ - x86_64/Lresume.c x86_64/Lstash_frame.c x86_64/Lstep.c \ - x86_64/Ltrace.c x86_64/getcontext.S x86/is_fpreg.c \ - x86/regname.c x86/Los-freebsd.c x86/Los-linux.c \ - x86/Lapply_reg_state.c x86/Lreg_states_iterate.c \ - x86/Lcreate_addr_space.c x86/Lget_save_loc.c x86/Lglobal.c \ - x86/Linit.c x86/Linit_local.c x86/Linit_remote.c \ - x86/Lget_proc_info.c x86/Lregs.c x86/Lresume.c x86/Lstep.c \ - x86/getcontext-freebsd.S x86/getcontext-linux.S \ - tilegx/is_fpreg.c tilegx/regname.c tilegx/getcontext.S \ - tilegx/Lapply_reg_state.c tilegx/Lreg_states_iterate.c \ - tilegx/Lcreate_addr_space.c tilegx/Lget_proc_info.c \ - tilegx/Lget_save_loc.c tilegx/Lglobal.c tilegx/Linit.c \ - tilegx/Linit_local.c tilegx/Linit_remote.c \ - tilegx/Lis_signal_frame.c tilegx/Lregs.c tilegx/Lresume.c \ - tilegx/Lstep.c mips/is_fpreg.c mips/regname.c \ + x86_64/Los-freebsd.c x86_64/Los-linux.c x86_64/Los-solaris.c \ + x86_64/setcontext.S x86_64/Lapply_reg_state.c \ + x86_64/Lreg_states_iterate.c x86_64/Lcreate_addr_space.c \ + x86_64/Lget_save_loc.c x86_64/Lglobal.c x86_64/Linit.c \ + x86_64/Linit_local.c x86_64/Linit_remote.c \ + x86_64/Lget_proc_info.c x86_64/Lregs.c x86_64/Lresume.c \ + x86_64/Lstash_frame.c x86_64/Lstep.c x86_64/Ltrace.c \ + x86_64/getcontext.S x86/is_fpreg.c x86/regname.c \ + x86/Los-freebsd.c x86/Los-linux.c x86/Lapply_reg_state.c \ + x86/Lreg_states_iterate.c x86/Lcreate_addr_space.c \ + x86/Lget_save_loc.c x86/Lglobal.c x86/Linit.c \ + x86/Linit_local.c x86/Linit_remote.c x86/Lget_proc_info.c \ + x86/Lregs.c x86/Lresume.c x86/Lstep.c x86/getcontext-freebsd.S \ + x86/getcontext-linux.S tilegx/is_fpreg.c tilegx/regname.c \ + tilegx/getcontext.S tilegx/Lapply_reg_state.c \ + tilegx/Lreg_states_iterate.c tilegx/Lcreate_addr_space.c \ + tilegx/Lget_proc_info.c tilegx/Lget_save_loc.c \ + tilegx/Lglobal.c tilegx/Linit.c tilegx/Linit_local.c \ + tilegx/Linit_remote.c tilegx/Lis_signal_frame.c tilegx/Lregs.c \ + tilegx/Lresume.c tilegx/Lstep.c mips/is_fpreg.c mips/regname.c \ mips/getcontext.S mips/Lapply_reg_state.c \ mips/Lreg_states_iterate.c mips/Lcreate_addr_space.c \ mips/Lget_proc_info.c mips/Lget_save_loc.c mips/Lglobal.c \ @@ -827,10 +839,10 @@ am__libunwind_la_SOURCES_DIST = os-freebsd.c os-hpux.c os-linux.c \ aarch64/Lis_signal_frame.c aarch64/Lregs.c aarch64/Lresume.c \ aarch64/Lstash_frame.c aarch64/Lstep.c aarch64/Ltrace.c \ aarch64/getcontext.S -@SUPPORT_CXX_EXCEPTIONS_TRUE@am__objects_49 = mi/_ReadULEB.lo \ +@SUPPORT_CXX_EXCEPTIONS_TRUE@am__objects_50 = mi/_ReadULEB.lo \ @SUPPORT_CXX_EXCEPTIONS_TRUE@ mi/_ReadSLEB.lo -@OS_LINUX_TRUE@am__objects_50 = $(am__objects_49) -am__objects_51 = $(am__objects_50) mi/backtrace.lo mi/dyn-cancel.lo \ +@OS_LINUX_TRUE@am__objects_51 = $(am__objects_50) +am__objects_52 = $(am__objects_51) mi/backtrace.lo mi/dyn-cancel.lo \ mi/dyn-info-list.lo mi/dyn-register.lo mi/Ldyn-extract.lo \ mi/Lfind_dynamic_proc_info.lo mi/Lget_accessors.lo \ mi/Lget_proc_info_by_ip.lo mi/Lget_proc_name.lo \ @@ -838,7 +850,7 @@ am__objects_51 = $(am__objects_50) mi/backtrace.lo mi/dyn-cancel.lo \ mi/Lget_reg.lo mi/Lset_reg.lo mi/Lget_fpreg.lo \ mi/Lset_fpreg.lo mi/Lset_caching_policy.lo \ mi/Lset_cache_size.lo -@SUPPORT_CXX_EXCEPTIONS_TRUE@am__objects_52 = unwind/Backtrace.lo \ +@SUPPORT_CXX_EXCEPTIONS_TRUE@am__objects_53 = unwind/Backtrace.lo \ @SUPPORT_CXX_EXCEPTIONS_TRUE@ unwind/DeleteException.lo \ @SUPPORT_CXX_EXCEPTIONS_TRUE@ unwind/FindEnclosingFunction.lo \ @SUPPORT_CXX_EXCEPTIONS_TRUE@ unwind/ForcedUnwind.lo \ @@ -853,33 +865,34 @@ am__objects_51 = $(am__objects_50) mi/backtrace.lo mi/dyn-cancel.lo \ @SUPPORT_CXX_EXCEPTIONS_TRUE@ unwind/Resume_or_Rethrow.lo \ @SUPPORT_CXX_EXCEPTIONS_TRUE@ unwind/SetGR.lo unwind/SetIP.lo \ @SUPPORT_CXX_EXCEPTIONS_TRUE@ unwind/GetIPInfo.lo -am__objects_53 = $(am__objects_51) $(am__objects_52) -am__objects_54 = $(am__objects_26) $(am__objects_53) \ +am__objects_54 = $(am__objects_52) $(am__objects_53) +am__objects_55 = $(am__objects_27) $(am__objects_54) \ s390x/Lapply_reg_state.lo s390x/Lreg_states_iterate.lo \ s390x/Lcreate_addr_space.lo s390x/Lget_save_loc.lo \ s390x/Lglobal.lo s390x/Linit.lo s390x/Linit_local.lo \ s390x/Linit_remote.lo s390x/Lget_proc_info.lo s390x/Lregs.lo \ s390x/Lresume.lo s390x/Lis_signal_frame.lo s390x/Lstep.lo \ s390x/getcontext.lo s390x/setcontext.lo -am__objects_55 = $(am__objects_39) $(am__objects_53) \ +am__objects_56 = $(am__objects_40) $(am__objects_54) \ sh/Lapply_reg_state.lo sh/Lreg_states_iterate.lo \ sh/Lcreate_addr_space.lo sh/Lget_proc_info.lo \ sh/Lget_save_loc.lo sh/Lglobal.lo sh/Linit.lo \ sh/Linit_local.lo sh/Linit_remote.lo sh/Lis_signal_frame.lo \ sh/Lregs.lo sh/Lresume.lo sh/Lstep.lo -am__objects_56 = ppc/Lget_proc_info.lo ppc/Lget_save_loc.lo \ +am__objects_57 = ppc/Lget_proc_info.lo ppc/Lget_save_loc.lo \ ppc/Linit_local.lo ppc/Linit_remote.lo ppc/Lis_signal_frame.lo -am__objects_57 = $(am__objects_24) $(am__objects_53) $(am__objects_56) \ +am__objects_58 = $(am__objects_25) $(am__objects_54) $(am__objects_57) \ ppc64/Lapply_reg_state.lo ppc64/Lreg_states_iterate.lo \ ppc64/Lcreate_addr_space.lo ppc64/Lglobal.lo ppc64/Linit.lo \ ppc64/Lregs.lo ppc64/Lresume.lo ppc64/Lstep.lo -am__objects_58 = $(am__objects_21) $(am__objects_53) $(am__objects_56) \ +am__objects_59 = $(am__objects_22) $(am__objects_54) $(am__objects_57) \ ppc32/Lapply_reg_state.lo ppc32/Lreg_states_iterate.lo \ ppc32/Lcreate_addr_space.lo ppc32/Lglobal.lo ppc32/Linit.lo \ ppc32/Lregs.lo ppc32/Lresume.lo ppc32/Lstep.lo -@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_59 = x86_64/Los-linux.lo -@OS_FREEBSD_TRUE@am__objects_59 = x86_64/Los-freebsd.lo -am__objects_60 = $(am__objects_46) $(am__objects_59) $(am__objects_53) \ +@OS_FREEBSD_FALSE@@OS_LINUX_FALSE@@OS_SOLARIS_TRUE@am__objects_60 = x86_64/Los-solaris.lo +@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_60 = x86_64/Los-linux.lo +@OS_FREEBSD_TRUE@am__objects_60 = x86_64/Los-freebsd.lo +am__objects_61 = $(am__objects_47) $(am__objects_60) $(am__objects_54) \ x86_64/setcontext.lo x86_64/Lapply_reg_state.lo \ x86_64/Lreg_states_iterate.lo x86_64/Lcreate_addr_space.lo \ x86_64/Lget_save_loc.lo x86_64/Lglobal.lo x86_64/Linit.lo \ @@ -887,38 +900,38 @@ am__objects_60 = $(am__objects_46) $(am__objects_59) $(am__objects_53) \ x86_64/Lget_proc_info.lo x86_64/Lregs.lo x86_64/Lresume.lo \ x86_64/Lstash_frame.lo x86_64/Lstep.lo x86_64/Ltrace.lo \ x86_64/getcontext.lo -@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_61 = x86/Los-linux.lo -@OS_FREEBSD_TRUE@am__objects_61 = x86/Los-freebsd.lo -am__objects_62 = $(am__objects_43) $(am__objects_61) $(am__objects_53) \ +@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_62 = x86/Los-linux.lo +@OS_FREEBSD_TRUE@am__objects_62 = x86/Los-freebsd.lo +am__objects_63 = $(am__objects_44) $(am__objects_62) $(am__objects_54) \ x86/Lapply_reg_state.lo x86/Lreg_states_iterate.lo \ x86/Lcreate_addr_space.lo x86/Lget_save_loc.lo x86/Lglobal.lo \ x86/Linit.lo x86/Linit_local.lo x86/Linit_remote.lo \ x86/Lget_proc_info.lo x86/Lregs.lo x86/Lresume.lo x86/Lstep.lo -@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_63 = \ +@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_64 = \ @OS_FREEBSD_FALSE@@OS_LINUX_TRUE@ x86/getcontext-linux.lo -@OS_FREEBSD_TRUE@am__objects_63 = x86/getcontext-freebsd.lo -am__objects_64 = $(am__objects_41) $(am__objects_53) \ +@OS_FREEBSD_TRUE@am__objects_64 = x86/getcontext-freebsd.lo +am__objects_65 = $(am__objects_42) $(am__objects_54) \ tilegx/getcontext.lo tilegx/Lapply_reg_state.lo \ tilegx/Lreg_states_iterate.lo tilegx/Lcreate_addr_space.lo \ tilegx/Lget_proc_info.lo tilegx/Lget_save_loc.lo \ tilegx/Lglobal.lo tilegx/Linit.lo tilegx/Linit_local.lo \ tilegx/Linit_remote.lo tilegx/Lis_signal_frame.lo \ tilegx/Lregs.lo tilegx/Lresume.lo tilegx/Lstep.lo -am__objects_65 = $(am__objects_19) $(am__objects_53) \ +am__objects_66 = $(am__objects_20) $(am__objects_54) \ mips/getcontext.lo mips/Lapply_reg_state.lo \ mips/Lreg_states_iterate.lo mips/Lcreate_addr_space.lo \ mips/Lget_proc_info.lo mips/Lget_save_loc.lo mips/Lglobal.lo \ mips/Linit.lo mips/Linit_local.lo mips/Linit_remote.lo \ mips/Lis_signal_frame.lo mips/Lregs.lo mips/Lresume.lo \ mips/Lstep.lo -am__objects_66 = $(am__objects_15) $(am__objects_53) \ +am__objects_67 = $(am__objects_16) $(am__objects_54) \ hppa/getcontext.lo hppa/setcontext.lo hppa/Lapply_reg_state.lo \ hppa/Lreg_states_iterate.lo hppa/Lcreate_addr_space.lo \ hppa/Lget_save_loc.lo hppa/Lglobal.lo hppa/Linit.lo \ hppa/Linit_local.lo hppa/Linit_remote.lo \ hppa/Lis_signal_frame.lo hppa/Lget_proc_info.lo hppa/Lregs.lo \ hppa/Lresume.lo hppa/Lstep.lo -am__objects_67 = $(am__objects_17) $(am__objects_53) \ +am__objects_68 = $(am__objects_18) $(am__objects_54) \ ia64/dyn_info_list.lo ia64/getcontext.lo \ ia64/Lapply_reg_state.lo ia64/Lreg_states_iterate.lo \ ia64/Lcreate_addr_space.lo ia64/Lget_proc_info.lo \ @@ -928,17 +941,17 @@ am__objects_67 = $(am__objects_17) $(am__objects_53) \ ia64/Lparser.lo ia64/Lrbs.lo ia64/Lregs.lo ia64/Lresume.lo \ ia64/Lscript.lo ia64/Lstep.lo ia64/Ltables.lo \ ia64/Lfind_unwind_table.lo -@OS_FREEBSD_FALSE@@OS_LINUX_FALSE@@OS_QNX_TRUE@am__objects_68 = arm/Los-other.lo -@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_68 = arm/Los-linux.lo -@OS_FREEBSD_TRUE@am__objects_68 = arm/Los-freebsd.lo -am__objects_69 = $(am__objects_10) $(am__objects_68) $(am__objects_53) \ +@OS_FREEBSD_FALSE@@OS_LINUX_FALSE@@OS_QNX_TRUE@am__objects_69 = arm/Los-other.lo +@OS_FREEBSD_FALSE@@OS_LINUX_TRUE@am__objects_69 = arm/Los-linux.lo +@OS_FREEBSD_TRUE@am__objects_69 = arm/Los-freebsd.lo +am__objects_70 = $(am__objects_11) $(am__objects_69) $(am__objects_54) \ arm/getcontext.lo arm/Lapply_reg_state.lo \ arm/Lreg_states_iterate.lo arm/Lcreate_addr_space.lo \ arm/Lget_proc_info.lo arm/Lget_save_loc.lo arm/Lglobal.lo \ arm/Linit.lo arm/Linit_local.lo arm/Linit_remote.lo \ arm/Lregs.lo arm/Lresume.lo arm/Lstep.lo arm/Lex_tables.lo \ arm/Lstash_frame.lo arm/Ltrace.lo -am__objects_70 = $(am__objects_7) $(am__objects_53) \ +am__objects_71 = $(am__objects_8) $(am__objects_54) \ aarch64/Lapply_reg_state.lo aarch64/Lreg_states_iterate.lo \ aarch64/Lcreate_addr_space.lo aarch64/Lget_proc_info.lo \ aarch64/Lget_save_loc.lo aarch64/Lglobal.lo aarch64/Linit.lo \ @@ -946,20 +959,20 @@ am__objects_70 = $(am__objects_7) $(am__objects_53) \ aarch64/Lis_signal_frame.lo aarch64/Lregs.lo \ aarch64/Lresume.lo aarch64/Lstash_frame.lo aarch64/Lstep.lo \ aarch64/Ltrace.lo aarch64/getcontext.lo -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_S390X_TRUE@@ARCH_SH_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_la_OBJECTS = $(am__objects_54) -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_SH_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_la_OBJECTS = $(am__objects_55) -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_la_OBJECTS = $(am__objects_57) -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_la_OBJECTS = $(am__objects_58) -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@am_libunwind_la_OBJECTS = $(am__objects_60) -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@am_libunwind_la_OBJECTS = $(am__objects_62) \ -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@ $(am__objects_63) -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_TRUE@am_libunwind_la_OBJECTS = $(am__objects_64) -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_TRUE@am_libunwind_la_OBJECTS = $(am__objects_65) -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_TRUE@@ARCH_IA64_FALSE@am_libunwind_la_OBJECTS = $(am__objects_66) -@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@am_libunwind_la_OBJECTS = $(am__objects_67) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_S390X_TRUE@@ARCH_SH_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_la_OBJECTS = $(am__objects_55) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_FALSE@@ARCH_SH_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_la_OBJECTS = $(am__objects_56) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_FALSE@@ARCH_PPC64_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_la_OBJECTS = $(am__objects_58) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_PPC32_TRUE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_FALSE@@ARCH_X86_FALSE@am_libunwind_la_OBJECTS = $(am__objects_59) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_64_TRUE@@ARCH_X86_FALSE@am_libunwind_la_OBJECTS = $(am__objects_61) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@am_libunwind_la_OBJECTS = $(am__objects_63) \ +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_FALSE@@ARCH_X86_TRUE@ $(am__objects_64) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_FALSE@@ARCH_TILEGX_TRUE@am_libunwind_la_OBJECTS = $(am__objects_65) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_FALSE@@ARCH_IA64_FALSE@@ARCH_MIPS_TRUE@am_libunwind_la_OBJECTS = $(am__objects_66) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_HPPA_TRUE@@ARCH_IA64_FALSE@am_libunwind_la_OBJECTS = $(am__objects_67) +@ARCH_AARCH64_FALSE@@ARCH_ARM_FALSE@@ARCH_IA64_TRUE@am_libunwind_la_OBJECTS = $(am__objects_68) @ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@am_libunwind_la_OBJECTS = \ -@ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@ $(am__objects_69) -@ARCH_AARCH64_TRUE@am_libunwind_la_OBJECTS = $(am__objects_70) +@ARCH_AARCH64_FALSE@@ARCH_ARM_TRUE@ $(am__objects_70) +@ARCH_AARCH64_TRUE@am_libunwind_la_OBJECTS = $(am__objects_71) libunwind_la_OBJECTS = $(am_libunwind_la_OBJECTS) libunwind_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ @@ -1123,6 +1136,7 @@ LIBLZMA = @LIBLZMA@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIBZ = @LIBZ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ @@ -1297,7 +1311,7 @@ libunwind_coredump_la_SOURCES = coredump/_UCD_accessors.c \ libunwind_coredump_la_LDFLAGS = $(COMMON_SO_LDFLAGS) \ -version-info $(COREDUMP_SO_VERSION) -libunwind_coredump_la_LIBADD = $(LIBLZMA) +libunwind_coredump_la_LIBADD = $(LIBLZMA) $(LIBZ) ### libunwind-setjmp: libunwind_setjmp_la_LDFLAGS = $(COMMON_SO_LDFLAGS) \ @@ -1318,7 +1332,7 @@ libunwind_setjmp_la_SOURCES = setjmp/longjmp.c setjmp/siglongjmp.c \ ### libunwind: libunwind_la_LIBADD = $(am__append_10) $(LIBUNWIND_ELF) -lc $(LIBCRTS) \ - $(LIBLZMA) + $(LIBLZMA) $(LIBZ) # List of arch-independent files needed by both local-only and generic # libraries: @@ -1374,6 +1388,7 @@ libunwind_la_SOURCES_os_linux = os-linux.c libunwind_la_SOURCES_os_hpux = os-hpux.c libunwind_la_SOURCES_os_freebsd = os-freebsd.c libunwind_la_SOURCES_os_qnx = os-qnx.c +libunwind_la_SOURCES_os_solaris = os-solaris.c libunwind_dwarf_common_la_SOURCES = dwarf/global.c libunwind_dwarf_local_la_SOURCES = \ dwarf/Lexpr.c dwarf/Lfde.c dwarf/Lparser.c dwarf/Lpe.c \ @@ -1390,9 +1405,9 @@ libunwind_dwarf_generic_la_LIBADD = libunwind-dwarf-common.la libunwind_elf32_la_SOURCES = elf32.c libunwind_elf64_la_SOURCES = elf64.c libunwind_elfxx_la_SOURCES = elfxx.c -libunwind_elf32_la_LIBADD = $(LIBLZMA) -libunwind_elf64_la_LIBADD = $(LIBLZMA) -libunwind_elfxx_la_LIBADD = $(LIBLZMA) +libunwind_elf32_la_LIBADD = $(LIBLZMA) $(LIBZ) +libunwind_elf64_la_LIBADD = $(LIBLZMA) $(LIBZ) +libunwind_elfxx_la_LIBADD = $(LIBLZMA) $(LIBZ) libunwind_la_SOURCES_aarch64_common = $(libunwind_la_SOURCES_common) \ aarch64/is_fpreg.c aarch64/regname.c @@ -1691,6 +1706,7 @@ libunwind_s390x_la_SOURCES_s390x = $(libunwind_la_SOURCES_s390x_common) \ @OS_HPUX_TRUE@libunwind_la_SOURCES_os = $(libunwind_la_SOURCES_os_hpux) @OS_LINUX_TRUE@libunwind_la_SOURCES_os = $(libunwind_la_SOURCES_os_linux) @OS_QNX_TRUE@libunwind_la_SOURCES_os = $(libunwind_la_SOURCES_os_qnx) +@OS_SOLARIS_TRUE@libunwind_la_SOURCES_os = $(libunwind_la_SOURCES_os_solaris) @OS_FREEBSD_TRUE@libunwind_la_SOURCES_os_local = $(libunwind_la_SOURCES_os_freebsd_local) @OS_HPUX_TRUE@libunwind_la_SOURCES_os_local = $(libunwind_la_SOURCES_os_hpux_local) @OS_LINUX_TRUE@libunwind_la_SOURCES_os_local = $(libunwind_la_SOURCES_os_linux_local) @@ -1703,8 +1719,10 @@ libunwind_s390x_la_SOURCES_s390x = $(libunwind_la_SOURCES_s390x_common) \ @OS_LINUX_TRUE@libunwind_la_SOURCES_x86_os_local = x86/Los-linux.c @OS_FREEBSD_TRUE@libunwind_la_SOURCES_x86_64_os = x86_64/Gos-freebsd.c @OS_LINUX_TRUE@libunwind_la_SOURCES_x86_64_os = x86_64/Gos-linux.c +@OS_SOLARIS_TRUE@libunwind_la_SOURCES_x86_64_os = x86_64/Gos-solaris.c @OS_FREEBSD_TRUE@libunwind_la_SOURCES_x86_64_os_local = x86_64/Los-freebsd.c @OS_LINUX_TRUE@libunwind_la_SOURCES_x86_64_os_local = x86_64/Los-linux.c +@OS_SOLARIS_TRUE@libunwind_la_SOURCES_x86_64_os_local = x86_64/Los-solaris.c @OS_FREEBSD_TRUE@libunwind_la_SOURCES_arm_os = arm/Gos-freebsd.c @OS_LINUX_TRUE@libunwind_la_SOURCES_arm_os = arm/Gos-linux.c @OS_QNX_TRUE@libunwind_la_SOURCES_arm_os = arm/Gos-other.c @@ -1805,6 +1823,7 @@ EXTRA_DIST = $(libunwind_la_SOURCES_aarch64) \ $(libunwind_la_SOURCES_os_linux) \ $(libunwind_la_SOURCES_os_hpux) \ $(libunwind_la_SOURCES_os_qnx) \ + $(libunwind_la_SOURCES_os_solaris) \ $(libunwind_la_SOURCES_common) \ $(libunwind_la_SOURCES_local) \ $(libunwind_la_SOURCES_generic) \ @@ -2507,6 +2526,8 @@ x86_64/Gos-freebsd.lo: x86_64/$(am__dirstamp) \ x86_64/$(DEPDIR)/$(am__dirstamp) x86_64/Gos-linux.lo: x86_64/$(am__dirstamp) \ x86_64/$(DEPDIR)/$(am__dirstamp) +x86_64/Gos-solaris.lo: x86_64/$(am__dirstamp) \ + x86_64/$(DEPDIR)/$(am__dirstamp) x86_64/Gapply_reg_state.lo: x86_64/$(am__dirstamp) \ x86_64/$(DEPDIR)/$(am__dirstamp) x86_64/Greg_states_iterate.lo: x86_64/$(am__dirstamp) \ @@ -2686,6 +2707,8 @@ x86_64/Los-freebsd.lo: x86_64/$(am__dirstamp) \ x86_64/$(DEPDIR)/$(am__dirstamp) x86_64/Los-linux.lo: x86_64/$(am__dirstamp) \ x86_64/$(DEPDIR)/$(am__dirstamp) +x86_64/Los-solaris.lo: x86_64/$(am__dirstamp) \ + x86_64/$(DEPDIR)/$(am__dirstamp) x86_64/setcontext.lo: x86_64/$(am__dirstamp) \ x86_64/$(DEPDIR)/$(am__dirstamp) x86_64/Lapply_reg_state.lo: x86_64/$(am__dirstamp) \ @@ -2961,6 +2984,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/os-hpux.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/os-linux.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/os-qnx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/os-solaris.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@aarch64/$(DEPDIR)/Gapply_reg_state.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@aarch64/$(DEPDIR)/Gcreate_addr_space.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@aarch64/$(DEPDIR)/Gget_proc_info.Plo@am__quote@ @@ -3420,6 +3444,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Ginit_remote.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Gos-freebsd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Gos-linux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Gos-solaris.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Greg_states_iterate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Gregs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Gresume.Plo@am__quote@ @@ -3436,6 +3461,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Linit_remote.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Los-freebsd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Los-linux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Los-solaris.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Lreg_states_iterate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Lregs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@x86_64/$(DEPDIR)/Lresume.Plo@am__quote@ diff --git a/src/third_party/unwind/dist/src/aarch64/Ginit.c b/src/third_party/unwind/dist/src/aarch64/Ginit.c index dec235c8290..35389762f27 100644 --- a/src/third_party/unwind/dist/src/aarch64/Ginit.c +++ b/src/third_party/unwind/dist/src/aarch64/Ginit.c @@ -61,13 +61,6 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg) # endif /* UNW_LOCAL_ONLY */ -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - -/* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with - DWARF2 unwind info. */ - static void put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) { @@ -78,7 +71,13 @@ static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/arm/Ginit.c b/src/third_party/unwind/dist/src/arm/Ginit.c index 2720d063a24..0bac0d72da6 100644 --- a/src/third_party/unwind/dist/src/arm/Ginit.c +++ b/src/third_party/unwind/dist/src/arm/Ginit.c @@ -57,18 +57,17 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg) # endif /* UNW_LOCAL_ONLY */ -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - -/* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with - DWARF2 unwind info. */ - static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/arm/Gstep.c b/src/third_party/unwind/dist/src/arm/Gstep.c index adec02e095c..895e8a892af 100644 --- a/src/third_party/unwind/dist/src/arm/Gstep.c +++ b/src/third_party/unwind/dist/src/arm/Gstep.c @@ -46,7 +46,8 @@ arm_exidx_step (struct cursor *c) c->dwarf.loc[UNW_ARM_R15] = DWARF_NULL_LOC; unw_word_t ip = c->dwarf.ip; if (c->dwarf.use_prev_instr) - --ip; + /* The least bit denotes thumb/arm mode, clear it. */ + ip = (ip & ~(unw_word_t)0x1) - 1; /* check dynamic info first --- it overrides everything else */ ret = unwi_find_dynamic_proc_info (c->dwarf.as, ip, &c->dwarf.pi, 1, diff --git a/src/third_party/unwind/dist/src/coredump/_UCD_create.c b/src/third_party/unwind/dist/src/coredump/_UCD_create.c index 62f6ee05c79..4c430efb27b 100644 --- a/src/third_party/unwind/dist/src/coredump/_UCD_create.c +++ b/src/third_party/unwind/dist/src/coredump/_UCD_create.c @@ -259,9 +259,13 @@ _UCD_create(const char *filename) cur->p_flags ); if (cur->p_filesz < cur->p_memsz) - Debug(2, " partial"); + { + Debug(2, " partial"); + } if (cur->p_flags & PF_X) - Debug(2, " executable"); + { + Debug(2, " executable"); + } } Debug(2, "\n"); i++; @@ -338,7 +342,10 @@ int _UCD_add_backing_file_at_segment(struct UCD_info *ui, int phdr_no, const cha phdr->backing_filesize = (uoff_t)statbuf.st_size; if (phdr->p_flags != (PF_X | PF_R)) - Debug(1, "Note: phdr[%u] is not r-x: flags are 0x%x\n", phdr_no, phdr->p_flags); + { + Debug(1, "Note: phdr[%u] is not r-x: flags are 0x%x\n", + phdr_no, phdr->p_flags); + } if (phdr->backing_filesize > phdr->p_memsz) { diff --git a/src/third_party/unwind/dist/src/coredump/_UCD_get_proc_name.c b/src/third_party/unwind/dist/src/coredump/_UCD_get_proc_name.c index 00096c48d07..3a4c9b8213c 100644 --- a/src/third_party/unwind/dist/src/coredump/_UCD_get_proc_name.c +++ b/src/third_party/unwind/dist/src/coredump/_UCD_get_proc_name.c @@ -36,6 +36,10 @@ elf_w (CD_get_proc_name) (struct UCD_info *ui, unw_addr_space_t as, unw_word_t i unsigned long segbase, mapoff; int ret; + /* We're about to map an elf image. If there is an elf image currently mapped, + then make sure to unmap it. */ + invalidate_edi(&ui->edi); + /* Used to be tdep_get_elf_image() in ptrace unwinding code */ coredump_phdr_t *cphdr = _UCD_get_elf_image(ui, ip); if (!cphdr) diff --git a/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c b/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c index 0d11905566c..739ed0569b9 100644 --- a/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c +++ b/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c @@ -74,6 +74,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, #else +/* XXX fix me: there is currently no way to locate the dyn-info list + by a remote unwinder. On ia64, this is done via a special + unwind-table entry. Perhaps something similar can be done with + DWARF2 unwind info. */ + static inline int get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, int *countp) diff --git a/src/third_party/unwind/dist/src/dwarf/Gfind_proc_info-lsb.c b/src/third_party/unwind/dist/src/dwarf/Gfind_proc_info-lsb.c index 275419d9c26..7ab60a3f911 100644 --- a/src/third_party/unwind/dist/src/dwarf/Gfind_proc_info-lsb.c +++ b/src/third_party/unwind/dist/src/dwarf/Gfind_proc_info-lsb.c @@ -34,6 +34,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "dwarf-eh.h" #include "libunwind_i.h" +#ifdef HAVE_ZLIB +#include <zlib.h> +#endif /* HAVE_ZLIB */ + struct table_entry { int32_t start_ip_offset; @@ -123,14 +127,52 @@ load_debug_frame (const char *file, char **buf, size_t *bufsize, int is_local) return 1; } - *bufsize = shdr->sh_size; - GET_MEMORY(*buf, *bufsize); - - memcpy(*buf, shdr->sh_offset + ei.image, *bufsize); +#if defined(SHF_COMPRESSED) + if (shdr->sh_flags & SHF_COMPRESSED) + { + unsigned long destSize; + Elf_W (Chdr) *chdr = (shdr->sh_offset + ei.image); +#ifdef HAVE_ZLIB + if (chdr->ch_type == ELFCOMPRESS_ZLIB) + { + *bufsize = destSize = chdr->ch_size; + GET_MEMORY(*buf, *bufsize); + ret = uncompress((unsigned char *)*buf, &destSize, + shdr->sh_offset + ei.image + sizeof(*chdr), + shdr->sh_size - sizeof(*chdr)); + if (ret != Z_OK) + { + Debug (2, "failed to decompress zlib .debug_frame, skipping\n"); + munmap(*buf, *bufsize); + munmap(ei.image, ei.size); + return 1; + } + + Debug (4, "read %zd->%zd bytes of .debug_frame from offset %zd\n", + shdr->sh_size, *bufsize, shdr->sh_offset); + } + else +#endif /* HAVE_ZLIB */ + { + Debug (2, "unknown compression type %d, skipping\n", + chdr->ch_type); + munmap(ei.image, ei.size); + return 1; + } + } + else + { +#endif + *bufsize = shdr->sh_size; + GET_MEMORY(*buf, *bufsize); - Debug (4, "read %zd bytes of .debug_frame from offset %zd\n", - *bufsize, shdr->sh_offset); + memcpy(*buf, shdr->sh_offset + ei.image, *bufsize); + Debug (4, "read %zd bytes of .debug_frame from offset %zd\n", + *bufsize, shdr->sh_offset); +#if defined(SHF_COMPRESSED) + } +#endif munmap(ei.image, ei.size); return 0; } @@ -534,6 +576,10 @@ dwarf_callback (struct dl_phdr_info *info, size_t size, void *ptr) } else if (phdr->p_type == PT_GNU_EH_FRAME) p_eh_hdr = phdr; +#if defined __sun + else if (phdr->p_type == PT_SUNW_UNWIND) + p_eh_hdr = phdr; +#endif else if (phdr->p_type == PT_DYNAMIC) p_dynamic = phdr; } @@ -615,11 +661,15 @@ dwarf_callback (struct dl_phdr_info *info, size_t size, void *ptr) /* If there is no search table or it has an unsupported encoding, fall back on linear search. */ if (hdr->table_enc == DW_EH_PE_omit) - Debug (4, "table `%s' lacks search table; doing linear search\n", - info->dlpi_name); + { + Debug (4, "table `%s' lacks search table; doing linear search\n", + info->dlpi_name); + } else - Debug (4, "table `%s' has encoding 0x%x; doing linear search\n", - info->dlpi_name, hdr->table_enc); + { + Debug (4, "table `%s' has encoding 0x%x; doing linear search\n", + info->dlpi_name, hdr->table_enc); + } eh_frame_end = max_load_addr; /* XXX can we do better? */ diff --git a/src/third_party/unwind/dist/src/dwarf/Gfind_unwind_table.c b/src/third_party/unwind/dist/src/dwarf/Gfind_unwind_table.c index 6a2ad504078..f5f7ad06c3b 100644 --- a/src/third_party/unwind/dist/src/dwarf/Gfind_unwind_table.c +++ b/src/third_party/unwind/dist/src/dwarf/Gfind_unwind_table.c @@ -80,6 +80,9 @@ dwarf_find_unwind_table (struct elf_dyn_info *edi, unw_addr_space_t as, break; case PT_GNU_EH_FRAME: +#if defined __sun + case PT_SUNW_UNWIND: +#endif peh_hdr = phdr + i; break; diff --git a/src/third_party/unwind/dist/src/dwarf/Gparser.c b/src/third_party/unwind/dist/src/dwarf/Gparser.c index fe7c5817c3d..28fd73c6b0f 100644 --- a/src/third_party/unwind/dist/src/dwarf/Gparser.c +++ b/src/third_party/unwind/dist/src/dwarf/Gparser.c @@ -440,8 +440,15 @@ fetch_proc_info (struct dwarf_cursor *c, unw_word_t ip) continue, and it's important we get this right, as 'ip' could be right at the function entry and hence FDE edge, or at instruction that manipulates CFA (push/pop). */ + if (c->use_prev_instr) - --ip; + { +#if defined(__arm__) + /* On arm, the least bit denotes thumb/arm mode, clear it. */ + ip &= ~(unw_word_t)0x1; +#endif + --ip; + } memset (&c->pi, 0, sizeof (c->pi)); diff --git a/src/third_party/unwind/dist/src/elfxx.c b/src/third_party/unwind/dist/src/elfxx.c index b03dfcb734c..2589a3d43b6 100644 --- a/src/third_party/unwind/dist/src/elfxx.c +++ b/src/third_party/unwind/dist/src/elfxx.c @@ -28,6 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include <stdio.h> #include <sys/param.h> +#include <limits.h> #ifdef HAVE_LZMA #include <lzma.h> diff --git a/src/third_party/unwind/dist/src/hppa/Ginit.c b/src/third_party/unwind/dist/src/hppa/Ginit.c index 461e4b93da6..265455a68c8 100644 --- a/src/third_party/unwind/dist/src/hppa/Ginit.c +++ b/src/third_party/unwind/dist/src/hppa/Ginit.c @@ -64,13 +64,6 @@ _Uhppa_uc_addr (ucontext_t *uc, int reg) # endif /* UNW_LOCAL_ONLY */ -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - -/* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with - DWARF2 unwind info. */ - static void put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) { @@ -81,7 +74,13 @@ static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/ia64/Ginit.c b/src/third_party/unwind/dist/src/ia64/Ginit.c index b09a2ad57c7..8601bb3ca88 100644 --- a/src/third_party/unwind/dist/src/ia64/Ginit.c +++ b/src/third_party/unwind/dist/src/ia64/Ginit.c @@ -68,6 +68,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, if (!_U_dyn_info_list_addr) return -UNW_ENOINFO; #endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c b/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c index 98d35012861..2e7c62e5e86 100644 --- a/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c +++ b/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c @@ -49,6 +49,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, return -UNW_ENOINFO; #endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. list = (unw_dyn_info_list_t *) (uintptr_t) _U_dyn_info_list_addr (); for (di = list->first; di; di = di->next) if (ip >= di->start_ip && ip < di->end_ip) diff --git a/src/third_party/unwind/dist/src/mi/Gget_proc_name.c b/src/third_party/unwind/dist/src/mi/Gget_proc_name.c index 840d9007f4c..0b77fa59523 100644 --- a/src/third_party/unwind/dist/src/mi/Gget_proc_name.c +++ b/src/third_party/unwind/dist/src/mi/Gget_proc_name.c @@ -106,7 +106,15 @@ unw_get_proc_name (unw_cursor_t *cursor, char *buf, size_t buf_len, ip = tdep_get_ip (c); #if !defined(__ia64__) if (c->dwarf.use_prev_instr) - --ip; + { +#if defined(__arm__) + /* On arm, the least bit denotes thumb/arm mode, clear it. */ + ip &= ~(unw_word_t)0x1; +#endif + --ip; + } + + #endif error = get_proc_name (tdep_get_as (c), ip, buf, buf_len, offp, tdep_get_as_arg (c)); diff --git a/src/third_party/unwind/dist/src/mi/backtrace.c b/src/third_party/unwind/dist/src/mi/backtrace.c index c7aa2bdcdcb..b28151370cd 100644 --- a/src/third_party/unwind/dist/src/mi/backtrace.c +++ b/src/third_party/unwind/dist/src/mi/backtrace.c @@ -23,9 +23,9 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef UNW_REMOTE_ONLY - +#if !defined(UNW_REMOTE_ONLY) && !defined(UNW_LOCAL_ONLY) #define UNW_LOCAL_ONLY + #include <libunwind.h> #include <libunwind_i.h> #include <string.h> @@ -75,7 +75,9 @@ unw_backtrace (void **buffer, int size) return n; } +#ifdef CONFIG_WEAK_BACKTRACE extern int backtrace (void **buffer, int size) WEAK ALIAS(unw_backtrace); +#endif #endif /* !UNW_REMOTE_ONLY */ diff --git a/src/third_party/unwind/dist/src/mips/Gcreate_addr_space.c b/src/third_party/unwind/dist/src/mips/Gcreate_addr_space.c index c2408b95edc..24e0d3b1536 100644 --- a/src/third_party/unwind/dist/src/mips/Gcreate_addr_space.c +++ b/src/third_party/unwind/dist/src/mips/Gcreate_addr_space.c @@ -67,7 +67,6 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) #else # error Unsupported ABI #endif - as->addr_size = 4; return as; #endif diff --git a/src/third_party/unwind/dist/src/mips/Ginit.c b/src/third_party/unwind/dist/src/mips/Ginit.c index 3df170c7549..bf7a8f5a8f4 100644 --- a/src/third_party/unwind/dist/src/mips/Ginit.c +++ b/src/third_party/unwind/dist/src/mips/Ginit.c @@ -69,13 +69,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) # endif /* UNW_LOCAL_ONLY */ -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - -/* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with - DWARF2 unwind info. */ - static void put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) { @@ -86,7 +79,13 @@ static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/os-solaris.c b/src/third_party/unwind/dist/src/os-solaris.c new file mode 100644 index 00000000000..3c140ef29c9 --- /dev/null +++ b/src/third_party/unwind/dist/src/os-solaris.c @@ -0,0 +1,73 @@ +/* libunwind - a platform-independent unwind library + Copyright (C) 2003-2005 Hewlett-Packard Co + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + +This file is part of libunwind. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#include <limits.h> +#include <stdio.h> + +#include "libunwind_i.h" +#include "os-linux.h" // using linux header for map_iterator implementation + +int +tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, + unsigned long *segbase, unsigned long *mapoff, + char *path, size_t pathlen) +{ + struct map_iterator mi; + int found = 0, rc; + unsigned long hi; + + if (maps_init (&mi, pid) < 0) + return -1; + + while (maps_next (&mi, segbase, &hi, mapoff)) + if (ip >= *segbase && ip < hi) + { + found = 1; + break; + } + + if (!found) + { + maps_close (&mi); + return -1; + } + if (path) + { + strncpy(path, mi.path, pathlen); + } + rc = elf_map_image (ei, mi.path); + maps_close (&mi); + return rc; +} + +#ifndef UNW_REMOTE_ONLY + +void +tdep_get_exe_image_path (char *path) +{ + strcpy(path, getexecname()); +} + +#endif /* !UNW_REMOTE_ONLY */ diff --git a/src/third_party/unwind/dist/src/ppc32/Ginit.c b/src/third_party/unwind/dist/src/ppc32/Ginit.c index ba302448a31..7b45455807c 100644 --- a/src/third_party/unwind/dist/src/ppc32/Ginit.c +++ b/src/third_party/unwind/dist/src/ppc32/Ginit.c @@ -91,9 +91,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) # endif /* UNW_LOCAL_ONLY */ -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - - static void put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) { @@ -104,7 +101,13 @@ static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/ppc64/Ginit.c b/src/third_party/unwind/dist/src/ppc64/Ginit.c index 4c88cd6e77f..7bfb395a792 100644 --- a/src/third_party/unwind/dist/src/ppc64/Ginit.c +++ b/src/third_party/unwind/dist/src/ppc64/Ginit.c @@ -95,9 +95,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) # endif /* UNW_LOCAL_ONLY */ -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - - static void put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) { @@ -108,7 +105,13 @@ static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c b/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c index cc5ed044186..16671d453e1 100644 --- a/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c +++ b/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c @@ -71,6 +71,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, #else +/* XXX fix me: there is currently no way to locate the dyn-info list + by a remote unwinder. On ia64, this is done via a special + unwind-table entry. Perhaps something similar can be done with + DWARF2 unwind info. */ + static inline int get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, int *countp) diff --git a/src/third_party/unwind/dist/src/s390x/Ginit.c b/src/third_party/unwind/dist/src/s390x/Ginit.c index f0886ac9337..db01743c062 100644 --- a/src/third_party/unwind/dist/src/s390x/Ginit.c +++ b/src/third_party/unwind/dist/src/s390x/Ginit.c @@ -50,8 +50,6 @@ static struct unw_addr_space local_addr_space; unw_addr_space_t unw_local_addr_space = &local_addr_space; -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - static inline void * uc_addr (ucontext_t *uc, int reg) { @@ -75,11 +73,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) # endif /* UNW_LOCAL_ONLY */ -/* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with - DWARF2 unwind info. */ - static void put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) { @@ -90,7 +83,13 @@ static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/setjmp/siglongjmp.c b/src/third_party/unwind/dist/src/setjmp/siglongjmp.c index 0e286f6f085..dd330ce9e19 100644 --- a/src/third_party/unwind/dist/src/setjmp/siglongjmp.c +++ b/src/third_party/unwind/dist/src/setjmp/siglongjmp.c @@ -31,8 +31,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "jmpbuf.h" #include "setjmp_i.h" -#if !defined(_NSIG) && defined(_SIG_MAXSIG) -# define _NSIG (_SIG_MAXSIG - 1) +#if !defined(_NSIG) +# if defined(_SIG_MAXSIG) +# define _NSIG (_SIG_MAXSIG - 1) +# elif defined(NSIG) +# define _NSIG NSIG +# endif #endif #if defined(__GLIBC__) @@ -92,7 +96,7 @@ siglongjmp (sigjmp_buf env, int val) if (!resume_restores_sigmask (&c, wp) && wp[JB_MASK_SAVED]) { /* sigmask was saved */ -#if defined(__linux__) +#if defined(__linux__) || defined(__sun) if (UNW_NUM_EH_REGS < 4 || _NSIG > 16 * sizeof (unw_word_t)) /* signal mask doesn't fit into EH arguments and we can't put it on the stack without overwriting something diff --git a/src/third_party/unwind/dist/src/sh/Ginit.c b/src/third_party/unwind/dist/src/sh/Ginit.c index 52988a721e9..9fe96d2bd4d 100644 --- a/src/third_party/unwind/dist/src/sh/Ginit.c +++ b/src/third_party/unwind/dist/src/sh/Ginit.c @@ -58,13 +58,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) # endif /* UNW_LOCAL_ONLY */ -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - -/* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with - DWARF2 unwind info. */ - static void put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) { @@ -75,7 +68,13 @@ static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/sh/Ginit_local.c b/src/third_party/unwind/dist/src/sh/Ginit_local.c index 99ddb36fb3e..45631306bcd 100644 --- a/src/third_party/unwind/dist/src/sh/Ginit_local.c +++ b/src/third_party/unwind/dist/src/sh/Ginit_local.c @@ -37,7 +37,7 @@ unw_init_local (unw_cursor_t *cursor, unw_context_t *uc) #else /* !UNW_REMOTE_ONLY */ static int -unw_init_local (unw_cursor_t *cursor, unw_context_t *uc, unsigned use_prev_instr) +unw_init_local_common (unw_cursor_t *cursor, unw_context_t *uc, unsigned use_prev_instr) { struct cursor *c = (struct cursor *) cursor; diff --git a/src/third_party/unwind/dist/src/tilegx/Ginit.c b/src/third_party/unwind/dist/src/tilegx/Ginit.c index 7564a558be4..925e6413246 100644 --- a/src/third_party/unwind/dist/src/tilegx/Ginit.c +++ b/src/third_party/unwind/dist/src/tilegx/Ginit.c @@ -64,13 +64,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) # endif /* UNW_LOCAL_ONLY */ -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - -/* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with - DWARF2 unwind info. */ - static void put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) { @@ -81,7 +74,13 @@ static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/unwind/libunwind.pc.in b/src/third_party/unwind/dist/src/unwind/libunwind.pc.in index 1505c5d6f67..9a65faf39e1 100644 --- a/src/third_party/unwind/dist/src/unwind/libunwind.pc.in +++ b/src/third_party/unwind/dist/src/unwind/libunwind.pc.in @@ -7,5 +7,5 @@ Name: libunwind Description: libunwind base library Version: @VERSION@ Libs: -L${libdir} -lunwind -Libs.private: @LIBLZMA@ +Libs.private: @LIBLZMA@ @LIBZ@ Cflags: -I${includedir} diff --git a/src/third_party/unwind/dist/src/x86/Ginit.c b/src/third_party/unwind/dist/src/x86/Ginit.c index f6b8dc27d49..3cec74a216b 100644 --- a/src/third_party/unwind/dist/src/x86/Ginit.c +++ b/src/third_party/unwind/dist/src/x86/Ginit.c @@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) # endif /* UNW_LOCAL_ONLY */ -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - -/* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with - DWARF2 unwind info. */ - static void put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) { @@ -71,7 +64,13 @@ static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } diff --git a/src/third_party/unwind/dist/src/x86_64/Ginit.c b/src/third_party/unwind/dist/src/x86_64/Ginit.c index 6161da6401b..fd8d418b1a5 100644 --- a/src/third_party/unwind/dist/src/x86_64/Ginit.c +++ b/src/third_party/unwind/dist/src/x86_64/Ginit.c @@ -49,13 +49,6 @@ static struct unw_addr_space local_addr_space; unw_addr_space_t unw_local_addr_space = &local_addr_space; -HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - -/* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with - DWARF2 unwind info. */ - static void put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) { @@ -66,7 +59,13 @@ static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, void *arg) { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; +#ifndef UNW_LOCAL_ONLY +# pragma weak _U_dyn_info_list_addr + if (!_U_dyn_info_list_addr) + return -UNW_ENOINFO; +#endif + // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so. + *dyn_info_list_addr = _U_dyn_info_list_addr (); return 0; } @@ -75,6 +74,35 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, static int mem_validate_pipe[2] = {-1, -1}; +#ifdef HAVE_PIPE2 +static inline void +do_pipe2 (int pipefd[2]) +{ + pipe2 (pipefd, O_CLOEXEC | O_NONBLOCK); +} +#else +static inline void +set_pipe_flags (int fd) +{ + int fd_flags = fcntl (fd, F_GETFD, 0); + int status_flags = fcntl (fd, F_GETFL, 0); + + fd_flags |= FD_CLOEXEC; + fcntl (fd, F_SETFD, fd_flags); + + status_flags |= O_NONBLOCK; + fcntl (fd, F_SETFL, status_flags); +} + +static inline void +do_pipe2 (int pipefd[2]) +{ + pipe (pipefd); + set_pipe_flags(pipefd[0]); + set_pipe_flags(pipefd[1]); +} +#endif + static inline void open_pipe (void) { @@ -83,7 +111,7 @@ open_pipe (void) if (mem_validate_pipe[1] != -1) close (mem_validate_pipe[1]); - pipe2 (mem_validate_pipe, O_CLOEXEC | O_NONBLOCK); + do_pipe2 (mem_validate_pipe); } ALWAYS_INLINE @@ -135,7 +163,7 @@ static int mincore_validate (void *addr, size_t len) /* mincore could fail with EAGAIN but we conservatively return -1 instead of looping. */ - if (mincore (addr, len, mvec) != 0) + if (mincore (addr, len, (char *)mvec) != 0) { return -1; } @@ -158,7 +186,7 @@ tdep_init_mem_validate (void) unw_word_t addr = PAGE_START((unw_word_t)&present); unsigned char mvec[1]; int ret; - while ((ret = mincore ((void*)addr, PAGE_SIZE, mvec)) == -1 && + while ((ret = mincore ((void*)addr, PAGE_SIZE, (char *)mvec)) == -1 && errno == EAGAIN) {} if (ret == 0) { @@ -186,7 +214,7 @@ is_cached_valid_mem(unw_word_t addr) int i; for (i = 0; i < NLGA; i++) { - if (addr == &last_good_addr[i]) + if (addr == last_good_addr[i]) return 1; } return 0; diff --git a/src/third_party/unwind/dist/src/x86_64/Gos-solaris.c b/src/third_party/unwind/dist/src/x86_64/Gos-solaris.c new file mode 100644 index 00000000000..75258d61d87 --- /dev/null +++ b/src/third_party/unwind/dist/src/x86_64/Gos-solaris.c @@ -0,0 +1,133 @@ +/* libunwind - a platform-independent unwind library + Copyright (C) 2002-2003 Hewlett-Packard Co + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + + Modified for x86_64 by Max Asbock <masbock@us.ibm.com> + +This file is part of libunwind. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#include "unwind_i.h" +#include "ucontext_i.h" + +#include <sys/syscall.h> + +struct sigframe { + uint64_t signo; + uint64_t sip; +}; + +int +unw_is_signal_frame (unw_cursor_t *cursor) +{ + struct cursor *c = (struct cursor *) cursor; + + c->sigcontext_format = (c->dwarf.ip == (unw_word_t)-1) ? + X86_64_SCF_SOLARIS_SIGFRAME : X86_64_SCF_NONE; + + return (c->sigcontext_format); +} + +HIDDEN int +x86_64_handle_signal_frame (unw_cursor_t *cursor) +{ + struct cursor *c = (struct cursor *) cursor; + unw_word_t ucontext = c->dwarf.cfa + sizeof (struct sigframe); + + if (c->sigcontext_format != X86_64_SCF_SOLARIS_SIGFRAME) + return -UNW_EBADFRAME; + + c->sigcontext_addr = c->dwarf.cfa; + + Debug(1, "signal frame cfa = %lx ucontext = %lx\n", + (uint64_t)c->dwarf.cfa, (uint64_t)ucontext); + + struct dwarf_loc rsp_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RSP, 0); + int ret = dwarf_get (&c->dwarf, rsp_loc, &c->dwarf.cfa); + + if (ret < 0) + { + Debug (2, "return %d\n", ret); + return ret; + } + + c->dwarf.loc[RAX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RAX, 0); + c->dwarf.loc[RDX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RDX, 0); + c->dwarf.loc[RCX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RCX, 0); + c->dwarf.loc[RBX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RBX, 0); + c->dwarf.loc[RSI] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RSI, 0); + c->dwarf.loc[RDI] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RDI, 0); + c->dwarf.loc[RBP] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RBP, 0); + c->dwarf.loc[RSP] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RSP, 0); + c->dwarf.loc[ R8] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R8, 0); + c->dwarf.loc[ R9] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R9, 0); + c->dwarf.loc[R10] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R10, 0); + c->dwarf.loc[R11] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R11, 0); + c->dwarf.loc[R12] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R12, 0); + c->dwarf.loc[R13] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R13, 0); + c->dwarf.loc[R14] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R14, 0); + c->dwarf.loc[R15] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R15, 0); + c->dwarf.loc[RIP] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RIP, 0); + + c->dwarf.use_prev_instr = 1; + return 0; +} + +#ifndef UNW_REMOTE_ONLY +HIDDEN void * +x86_64_r_uc_addr (ucontext_t *uc, int reg) +{ + /* NOTE: common_init() in init.h inlines these for fast path access. */ + void *addr; + + switch (reg) + { + case UNW_X86_64_R8: addr = &uc->uc_mcontext.gregs[REG_R8]; break; + case UNW_X86_64_R9: addr = &uc->uc_mcontext.gregs[REG_R9]; break; + case UNW_X86_64_R10: addr = &uc->uc_mcontext.gregs[REG_R10]; break; + case UNW_X86_64_R11: addr = &uc->uc_mcontext.gregs[REG_R11]; break; + case UNW_X86_64_R12: addr = &uc->uc_mcontext.gregs[REG_R12]; break; + case UNW_X86_64_R13: addr = &uc->uc_mcontext.gregs[REG_R13]; break; + case UNW_X86_64_R14: addr = &uc->uc_mcontext.gregs[REG_R14]; break; + case UNW_X86_64_R15: addr = &uc->uc_mcontext.gregs[REG_R15]; break; + case UNW_X86_64_RDI: addr = &uc->uc_mcontext.gregs[REG_RDI]; break; + case UNW_X86_64_RSI: addr = &uc->uc_mcontext.gregs[REG_RSI]; break; + case UNW_X86_64_RBP: addr = &uc->uc_mcontext.gregs[REG_RBP]; break; + case UNW_X86_64_RBX: addr = &uc->uc_mcontext.gregs[REG_RBX]; break; + case UNW_X86_64_RDX: addr = &uc->uc_mcontext.gregs[REG_RDX]; break; + case UNW_X86_64_RAX: addr = &uc->uc_mcontext.gregs[REG_RAX]; break; + case UNW_X86_64_RCX: addr = &uc->uc_mcontext.gregs[REG_RCX]; break; + case UNW_X86_64_RSP: addr = &uc->uc_mcontext.gregs[REG_RSP]; break; + case UNW_X86_64_RIP: addr = &uc->uc_mcontext.gregs[REG_RIP]; break; + + default: + addr = NULL; + } + return addr; +} + +HIDDEN NORETURN void +x86_64_sigreturn (unw_cursor_t *cursor) +{ + abort(); +} + +#endif diff --git a/src/third_party/unwind/dist/src/x86_64/Gstash_frame.c b/src/third_party/unwind/dist/src/x86_64/Gstash_frame.c index 2c7bc312e28..2a44f873e9e 100644 --- a/src/third_party/unwind/dist/src/x86_64/Gstash_frame.c +++ b/src/third_party/unwind/dist/src/x86_64/Gstash_frame.c @@ -110,10 +110,10 @@ tdep_stash_frame (struct dwarf_cursor *d, struct dwarf_reg_state *rs) } else if (f->frame_type == UNW_X86_64_FRAME_ALIGNED) { - Debug (4, " aligned frame, offset %li\n", f->cfa_reg_offset); + Debug (4, " aligned frame, offset %i\n", f->cfa_reg_offset); } - /* PLT and guessed RBP-walked frames are handled in unw_step(). */ - else + else { Debug (4, " unusual frame\n"); + } } diff --git a/src/third_party/unwind/dist/src/x86_64/Gstep.c b/src/third_party/unwind/dist/src/x86_64/Gstep.c index 10498170ac7..d4831197cb3 100644 --- a/src/third_party/unwind/dist/src/x86_64/Gstep.c +++ b/src/third_party/unwind/dist/src/x86_64/Gstep.c @@ -104,6 +104,7 @@ unw_step (unw_cursor_t *cursor) via CALLQ. Try this for all non-signal trampoline code. */ + unw_word_t invalid_prev_rip = 0; unw_word_t prev_ip = c->dwarf.ip, prev_cfa = c->dwarf.cfa; struct dwarf_loc rbp_loc, rsp_loc, rip_loc; @@ -149,7 +150,10 @@ unw_step (unw_cursor_t *cursor) return ret; } - if (!rbp) + unw_word_t not_used; + invalid_prev_rip = dwarf_get(&c->dwarf, DWARF_MEM_LOC(c->dwarf, prev_ip), ¬_used); + + if (!rbp && invalid_prev_rip == 0) { /* Looks like we may have reached the end of the call-chain. */ rbp_loc = DWARF_NULL_LOC; @@ -158,38 +162,90 @@ unw_step (unw_cursor_t *cursor) } else { - unw_word_t rbp1 = 0; - rbp_loc = DWARF_LOC(rbp, 0); - rsp_loc = DWARF_NULL_LOC; - rip_loc = DWARF_LOC (rbp + 8, 0); - ret = dwarf_get (&c->dwarf, rbp_loc, &rbp1); - Debug (1, "[RBP=0x%lx] = 0x%lx (cfa = 0x%lx) -> 0x%lx\n", - (unsigned long) DWARF_GET_LOC (c->dwarf.loc[RBP]), - rbp, c->dwarf.cfa, rbp1); - - /* Heuristic to determine incorrect guess. For RBP to be a - valid frame it needs to be above current CFA, but don't - let it go more than a little. Note that we can't deduce - anything about new RBP (rbp1) since it may not be a frame - pointer in the frame above. Just check we get the value. */ - if (ret < 0 - || rbp < c->dwarf.cfa - || (rbp - c->dwarf.cfa) > 0x4000) + /* + * Check if previous RIP was invalid + * This could happen if a bad function pointer was + * followed and so the stack wasn't updated by the + * preamble + */ + int rip_fixup_success = 0; + if (invalid_prev_rip != 0) { - rip_loc = DWARF_NULL_LOC; - rbp_loc = DWARF_NULL_LOC; - } + Debug (2, "Previous RIP 0x%lx was invalid, attempting fixup\n", prev_ip); + unw_word_t rsp; + ret = dwarf_get (&c->dwarf, c->dwarf.loc[RSP], &rsp); - c->frame_info.frame_type = UNW_X86_64_FRAME_GUESSED; - c->frame_info.cfa_reg_rsp = 0; - c->frame_info.cfa_reg_offset = 16; - c->frame_info.rbp_cfa_offset = -16; - c->dwarf.cfa += 16; - } + /*Test to see if what we think is the previous RIP is valid*/ + unw_word_t new_ip = 0; + if (dwarf_get(&c->dwarf, DWARF_MEM_LOC(c->dwarf, rsp), &new_ip) == 0) + { + Debug (2, "RSP 0x%lx looks valid\n", rsp); + if ((ret = dwarf_get(&c->dwarf, DWARF_MEM_LOC(c->dwarf, new_ip), ¬_used)) == 0) + { + Debug (2, "new_ip 0x%lx looks valid\n", new_ip); + rip_fixup_success = 1; + c->frame_info.cfa_reg_offset = 8; + c->frame_info.cfa_reg_rsp = 1; + c->frame_info.rbp_cfa_offset = -1; + c->frame_info.rsp_cfa_offset = -1; + c->frame_info.frame_type = UNW_X86_64_FRAME_OTHER; + /* + * The call should have pushed RIP to the stack + * and since there was no preamble RSP hasn't been + * touched so RIP should be at RSP. + */ + c->dwarf.cfa += 8; + /* Optimised x64 binaries don't use RBP it seems? */ + rbp_loc = DWARF_LOC (rbp, 0); + rsp_loc = DWARF_LOC (rsp, 0); + rip_loc = DWARF_LOC (rsp, 0); + } + else + Debug (2, "new_ip 0x%lx dwarf_get(&c->dwarf, DWARF_MEM_LOC(c->dwarf, new_ip), ¬_used) != 0\n", new_ip); + } + else + Debug (2, "rsp 0x%lx dwarf_get(&c->dwarf, DWARF_MEM_LOC(c->dwarf, rsp), &new_ip) != 0\n", rsp); + } + /* + * If the previous rip we found on the stack didn't look valid fall back + * to the previous method for finding a valid stack frame + */ + if (!rip_fixup_success) + { + Debug (2, "RIP fixup didn't work, falling back\n"); + unw_word_t rbp1 = 0; + rbp_loc = DWARF_LOC(rbp, 0); + rsp_loc = DWARF_NULL_LOC; + rip_loc = DWARF_LOC (rbp + 8, 0); + ret = dwarf_get (&c->dwarf, rbp_loc, &rbp1); + Debug (1, "[RBP=0x%lx] = 0x%lx (cfa = 0x%lx) -> 0x%lx\n", + (unsigned long) DWARF_GET_LOC (c->dwarf.loc[RBP]), + rbp, c->dwarf.cfa, rbp1); + + /* Heuristic to determine incorrect guess. For RBP to be a + valid frame it needs to be above current CFA, but don't + let it go more than a little. Note that we can't deduce + anything about new RBP (rbp1) since it may not be a frame + pointer in the frame above. Just check we get the value. */ + if (ret < 0 + || rbp < c->dwarf.cfa + || (rbp - c->dwarf.cfa) > 0x4000) + { + rip_loc = DWARF_NULL_LOC; + rbp_loc = DWARF_NULL_LOC; + } + c->frame_info.frame_type = UNW_X86_64_FRAME_GUESSED; + c->frame_info.cfa_reg_rsp = 0; + c->frame_info.cfa_reg_offset = 16; + c->frame_info.rbp_cfa_offset = -16; + c->dwarf.cfa += 16; + + } + } /* Mark all registers unsaved */ for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) - c->dwarf.loc[i] = DWARF_NULL_LOC; + c->dwarf.loc[i] = DWARF_NULL_LOC; c->dwarf.loc[RBP] = rbp_loc; c->dwarf.loc[RSP] = rsp_loc; @@ -197,7 +253,7 @@ unw_step (unw_cursor_t *cursor) c->dwarf.use_prev_instr = 1; } - if (DWARF_IS_NULL_LOC (c->dwarf.loc[RBP])) + if (DWARF_IS_NULL_LOC (c->dwarf.loc[RBP]) && invalid_prev_rip == 0) { ret = 0; Debug (2, "NULL %%rbp loc, returning %d\n", ret); @@ -214,6 +270,13 @@ unw_step (unw_cursor_t *cursor) Debug (2, "returning %d\n", ret); return ret; } +#if __sun + if (c->dwarf.ip == 0) + { + Debug (2, "returning 0\n"); + return ret; + } +#endif ret = 1; } else diff --git a/src/third_party/unwind/dist/src/x86_64/Gtrace.c b/src/third_party/unwind/dist/src/x86_64/Gtrace.c index 741227105e1..824527f9bea 100644 --- a/src/third_party/unwind/dist/src/x86_64/Gtrace.c +++ b/src/third_party/unwind/dist/src/x86_64/Gtrace.c @@ -540,7 +540,7 @@ tdep_trace (unw_cursor_t *cursor, void **buffer, int *size) break; /* Record this address in stack trace. We skipped the first address. */ - buffer[depth++] = (void *) (rip - d->use_prev_instr); + buffer[depth++] = (void *) rip; } #if UNW_DEBUG diff --git a/src/third_party/unwind/dist/src/x86_64/Los-solaris.c b/src/third_party/unwind/dist/src/x86_64/Los-solaris.c new file mode 100644 index 00000000000..be64b2c695b --- /dev/null +++ b/src/third_party/unwind/dist/src/x86_64/Los-solaris.c @@ -0,0 +1,5 @@ +#define UNW_LOCAL_ONLY +#include <libunwind.h> +#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) +#include "Gos-solaris.c" +#endif diff --git a/src/third_party/unwind/dist/src/x86_64/getcontext.S b/src/third_party/unwind/dist/src/x86_64/getcontext.S index 7a8b5664bda..e1450719b7d 100644 --- a/src/third_party/unwind/dist/src/x86_64/getcontext.S +++ b/src/third_party/unwind/dist/src/x86_64/getcontext.S @@ -57,11 +57,13 @@ _Ux86_64_getcontext: movq %rax, UC_MCONTEXT_GREGS_RAX(%rdi) movq %rcx, UC_MCONTEXT_GREGS_RCX(%rdi) -#if defined __linux__ +#if defined __linux__ || defined __sun /* Save fp state (not needed, except for setcontext not restoring garbage). */ leaq UC_MCONTEXT_FPREGS_MEM(%rdi),%r8 +#ifdef UC_MCONTEXT_FPREGS_PTR movq %r8, UC_MCONTEXT_FPREGS_PTR(%rdi) +#endif // UC_MCONTEXT_FPREGS_PTR fnstenv (%r8) stmxcsr FPREGS_OFFSET_MXCSR(%r8) #elif defined __FreeBSD__ diff --git a/src/third_party/unwind/dist/src/x86_64/setcontext.S b/src/third_party/unwind/dist/src/x86_64/setcontext.S index 358217defba..17e5ae12032 100644 --- a/src/third_party/unwind/dist/src/x86_64/setcontext.S +++ b/src/third_party/unwind/dist/src/x86_64/setcontext.S @@ -37,9 +37,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ _Ux86_64_setcontext: -#if defined __linux__ +#if defined __linux__ || defined __sun /* restore fp state */ +#ifdef UC_MCONTEXT_FPREGS_PTR mov UC_MCONTEXT_FPREGS_PTR(%rdi),%r8 +#else // UC_MCONTEXT_FPREGS_PTR + leaq UC_MCONTEXT_FPREGS_MEM(%rdi),%r8 +#endif // UC_MCONTEXT_FPREGS_PTR fldenv (%r8) ldmxcsr FPREGS_OFFSET_MXCSR(%r8) #elif defined __FreeBSD__ diff --git a/src/third_party/unwind/dist/src/x86_64/ucontext_i.h b/src/third_party/unwind/dist/src/x86_64/ucontext_i.h index aded941d053..e886c948453 100644 --- a/src/third_party/unwind/dist/src/x86_64/ucontext_i.h +++ b/src/third_party/unwind/dist/src/x86_64/ucontext_i.h @@ -78,5 +78,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define UC_MCONTEXT_FPOWNED_FPU 0x20001 #define UC_MCONTEXT_FPFMT_XMM 0x10002 #define UC_MCONTEXT_MC_LEN_VAL 0x320 +#elif defined __sun +#define UC_MCONTEXT_GREGS_R8 0x78 +#define UC_MCONTEXT_GREGS_R9 0x70 +#define UC_MCONTEXT_GREGS_R10 0x68 +#define UC_MCONTEXT_GREGS_R11 0x60 +#define UC_MCONTEXT_GREGS_R12 0x58 +#define UC_MCONTEXT_GREGS_R13 0x50 +#define UC_MCONTEXT_GREGS_R14 0x48 +#define UC_MCONTEXT_GREGS_R15 0x40 +#define UC_MCONTEXT_GREGS_RDI 0x80 +#define UC_MCONTEXT_GREGS_RSI 0x88 +#define UC_MCONTEXT_GREGS_RBP 0x90 +#define UC_MCONTEXT_GREGS_RBX 0x98 +#define UC_MCONTEXT_GREGS_RDX 0xa0 +#define UC_MCONTEXT_GREGS_RAX 0xb0 +#define UC_MCONTEXT_GREGS_RCX 0xa8 +#define UC_MCONTEXT_GREGS_RSP 0xe0 +#define UC_MCONTEXT_GREGS_RIP 0xc8 +#define UC_MCONTEXT_FPREGS_MEM 0x120 +#define FPREGS_OFFSET_MXCSR 0x18 #endif diff --git a/src/third_party/unwind/dist/tests/Gtest-bt.c b/src/third_party/unwind/dist/tests/Gtest-bt.c index beae2a3ccd9..d5b48447870 100644 --- a/src/third_party/unwind/dist/tests/Gtest-bt.c +++ b/src/third_party/unwind/dist/tests/Gtest-bt.c @@ -176,7 +176,7 @@ sighandler (int signal, void *siginfo UNUSED, void *context) { printf ("sighandler: got signal %d, sp=%p", signal, &sp); #if UNW_TARGET_IA64 -# if defined(__linux__) +# if defined(__linux__) || defined __sun printf (" @ %lx", uc->uc_mcontext.sc_ip); # else { @@ -189,13 +189,13 @@ sighandler (int signal, void *siginfo UNUSED, void *context) } # endif #elif UNW_TARGET_X86 -#if defined __linux__ +#if defined __linux__ || defined __sun printf (" @ %lx", (unsigned long) uc->uc_mcontext.gregs[REG_EIP]); #elif defined __FreeBSD__ printf (" @ %lx", (unsigned long) uc->uc_mcontext.mc_eip); #endif #elif UNW_TARGET_X86_64 -#if defined __linux__ +#if defined __linux__ || defined __sun printf (" @ %lx", (unsigned long) uc->uc_mcontext.gregs[REG_RIP]); #elif defined __FreeBSD__ printf (" @ %lx", (unsigned long) uc->uc_mcontext.mc_rip); diff --git a/src/third_party/unwind/dist/tests/Gtest-trace.c b/src/third_party/unwind/dist/tests/Gtest-trace.c index fc1f646eac6..48667bb9f4d 100644 --- a/src/third_party/unwind/dist/tests/Gtest-trace.c +++ b/src/third_party/unwind/dist/tests/Gtest-trace.c @@ -207,7 +207,7 @@ sighandler (int signal, void *siginfo UNUSED, void *context) printf (" @ %lx", (unsigned long) uc->uc_mcontext.mc_eip); #endif #elif UNW_TARGET_X86_64 -#if defined __linux__ +#if defined __linux__ || defined __sun printf (" @ %lx", (unsigned long) uc->uc_mcontext.gregs[REG_RIP]); #elif defined __FreeBSD__ printf (" @ %lx", (unsigned long) uc->uc_mcontext.mc_rip); diff --git a/src/third_party/unwind/dist/tests/Makefile.am b/src/third_party/unwind/dist/tests/Makefile.am index fee8a70bc5d..61d1bf875a8 100644 --- a/src/third_party/unwind/dist/tests/Makefile.am +++ b/src/third_party/unwind/dist/tests/Makefile.am @@ -39,7 +39,7 @@ if USE_ALTIVEC endif #USE_ALTIVEC else #!ARCH_PPC64 if ARCH_X86_64 - check_PROGRAMS_arch += Gx64-test-dwarf-expressions Lx64-test-dwarf-expressions + check_PROGRAMS_arch += Gx64-test-dwarf-expressions Lx64-test-dwarf-expressions x64-unwind-badjmp-signal-frame endif #ARCH X86_64 endif #!ARCH_PPC64 endif #!ARCH_IA64 @@ -157,6 +157,7 @@ Ltest_cxx_exceptions_SOURCES = Ltest-cxx-exceptions.cxx Ltest_init_local_signal_SOURCES = Ltest-init-local-signal.c Ltest-init-local-signal-lib.c +x64_unwind_badjmp_signal_frame_SOURCES = x64-unwind-badjmp-signal-frame.c Gtest_dyn1_SOURCES = Gtest-dyn1.c flush-cache.S flush-cache.h Ltest_dyn1_SOURCES = Ltest-dyn1.c flush-cache.S flush-cache.h test_static_link_SOURCES = test-static-link-loc.c test-static-link-gen.c @@ -203,6 +204,7 @@ Ltest_init_local_signal_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) Gtest_bt_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) Gtest_concurrent_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -lpthread +x64_unwind_badjmp_signal_frame_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) Gtest_dyn1_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) Gtest_exc_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) Gtest_init_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) @BACKTRACELIB@ diff --git a/src/third_party/unwind/dist/tests/Makefile.in b/src/third_party/unwind/dist/tests/Makefile.in index b3c09589072..19e28da77b2 100644 --- a/src/third_party/unwind/dist/tests/Makefile.in +++ b/src/third_party/unwind/dist/tests/Makefile.in @@ -98,7 +98,7 @@ target_triplet = @target@ @ARCH_IA64_TRUE@@REMOTE_ONLY_FALSE@ ia64-test-setjmp ia64-test-sig @ARCH_IA64_FALSE@@ARCH_PPC64_TRUE@@REMOTE_ONLY_FALSE@@USE_ALTIVEC_TRUE@am__append_4 = ppc64-test-altivec -@ARCH_IA64_FALSE@@ARCH_PPC64_FALSE@@ARCH_X86_64_TRUE@@REMOTE_ONLY_FALSE@am__append_5 = Gx64-test-dwarf-expressions Lx64-test-dwarf-expressions +@ARCH_IA64_FALSE@@ARCH_PPC64_FALSE@@ARCH_X86_64_TRUE@@REMOTE_ONLY_FALSE@am__append_5 = Gx64-test-dwarf-expressions Lx64-test-dwarf-expressions x64-unwind-badjmp-signal-frame @REMOTE_ONLY_FALSE@am__append_6 = Gtest-bt Ltest-bt Gtest-exc Ltest-exc \ @REMOTE_ONLY_FALSE@ Gtest-init Ltest-init \ @REMOTE_ONLY_FALSE@ Gtest-concurrent Ltest-concurrent \ @@ -187,7 +187,8 @@ am__EXEEXT_7 = $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ @ARCH_IA64_TRUE@@REMOTE_ONLY_FALSE@ ia64-test-setjmp$(EXEEXT) \ @ARCH_IA64_TRUE@@REMOTE_ONLY_FALSE@ ia64-test-sig$(EXEEXT) @ARCH_IA64_FALSE@@ARCH_PPC64_FALSE@@ARCH_X86_64_TRUE@@REMOTE_ONLY_FALSE@am__EXEEXT_9 = Gx64-test-dwarf-expressions$(EXEEXT) \ -@ARCH_IA64_FALSE@@ARCH_PPC64_FALSE@@ARCH_X86_64_TRUE@@REMOTE_ONLY_FALSE@ Lx64-test-dwarf-expressions$(EXEEXT) +@ARCH_IA64_FALSE@@ARCH_PPC64_FALSE@@ARCH_X86_64_TRUE@@REMOTE_ONLY_FALSE@ Lx64-test-dwarf-expressions$(EXEEXT) \ +@ARCH_IA64_FALSE@@ARCH_PPC64_FALSE@@ARCH_X86_64_TRUE@@REMOTE_ONLY_FALSE@ x64-unwind-badjmp-signal-frame$(EXEEXT) am__EXEEXT_10 = $(am__EXEEXT_8) $(am__EXEEXT_9) am__EXEEXT_11 = @REMOTE_ONLY_FALSE@am__EXEEXT_12 = forker$(EXEEXT) \ @@ -405,6 +406,12 @@ test_static_link_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ test_strerror_SOURCES = test-strerror.c test_strerror_OBJECTS = test-strerror.$(OBJEXT) test_strerror_DEPENDENCIES = $(LIBUNWIND) +am_x64_unwind_badjmp_signal_frame_OBJECTS = \ + x64-unwind-badjmp-signal-frame.$(OBJEXT) +x64_unwind_badjmp_signal_frame_OBJECTS = \ + $(am_x64_unwind_badjmp_signal_frame_OBJECTS) +x64_unwind_badjmp_signal_frame_DEPENDENCIES = $(LIBUNWIND) \ + $(LIBUNWIND_local) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -488,7 +495,8 @@ SOURCES = $(Gia64_test_nat_SOURCES) $(Gia64_test_rbs_SOURCES) \ test-coredump-unwind.c test-flush-cache.c test-init-remote.c \ test-mem.c test-proc-info.c test-ptrace.c \ $(test_ptrace_misc_SOURCES) test-reg-state.c test-setjmp.c \ - $(test_static_link_SOURCES) test-strerror.c + $(test_static_link_SOURCES) test-strerror.c \ + $(x64_unwind_badjmp_signal_frame_SOURCES) DIST_SOURCES = $(Gia64_test_nat_SOURCES) $(Gia64_test_rbs_SOURCES) \ $(Gia64_test_readonly_SOURCES) $(Gia64_test_stack_SOURCES) \ Gperf-simple.c Gperf-trace.c $(Gtest_bt_SOURCES) \ @@ -510,7 +518,8 @@ DIST_SOURCES = $(Gia64_test_nat_SOURCES) $(Gia64_test_rbs_SOURCES) \ test-coredump-unwind.c test-flush-cache.c test-init-remote.c \ test-mem.c test-proc-info.c test-ptrace.c \ $(test_ptrace_misc_SOURCES) test-reg-state.c test-setjmp.c \ - $(test_static_link_SOURCES) test-strerror.c + $(test_static_link_SOURCES) test-strerror.c \ + $(x64_unwind_badjmp_signal_frame_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -797,6 +806,7 @@ LIBLZMA = @LIBLZMA@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIBZ = @LIBZ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ @@ -946,6 +956,7 @@ Gtest_init_SOURCES = Gtest-init.cxx Ltest_init_SOURCES = Ltest-init.cxx Ltest_cxx_exceptions_SOURCES = Ltest-cxx-exceptions.cxx Ltest_init_local_signal_SOURCES = Ltest-init-local-signal.c Ltest-init-local-signal-lib.c +x64_unwind_badjmp_signal_frame_SOURCES = x64-unwind-badjmp-signal-frame.c Gtest_dyn1_SOURCES = Gtest-dyn1.c flush-cache.S flush-cache.h Ltest_dyn1_SOURCES = Ltest-dyn1.c flush-cache.S flush-cache.h test_static_link_SOURCES = test-static-link-loc.c test-static-link-gen.c @@ -982,6 +993,7 @@ Ltest_varargs_LDADD = $(LIBUNWIND_local) Ltest_init_local_signal_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) Gtest_bt_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) Gtest_concurrent_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -lpthread +x64_unwind_badjmp_signal_frame_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) Gtest_dyn1_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) Gtest_exc_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) Gtest_init_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) @BACKTRACELIB@ @@ -1297,6 +1309,10 @@ test-strerror$(EXEEXT): $(test_strerror_OBJECTS) $(test_strerror_DEPENDENCIES) $ @rm -f test-strerror$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strerror_OBJECTS) $(test_strerror_LDADD) $(LIBS) +x64-unwind-badjmp-signal-frame$(EXEEXT): $(x64_unwind_badjmp_signal_frame_OBJECTS) $(x64_unwind_badjmp_signal_frame_DEPENDENCIES) $(EXTRA_x64_unwind_badjmp_signal_frame_DEPENDENCIES) + @rm -f x64-unwind-badjmp-signal-frame$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(x64_unwind_badjmp_signal_frame_OBJECTS) $(x64_unwind_badjmp_signal_frame_LDADD) $(LIBS) + mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -1370,6 +1386,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-static-link-loc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strerror.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x64-test-dwarf-expressions.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x64-unwind-badjmp-signal-frame.Po@am__quote@ .S.o: @am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -1957,6 +1974,13 @@ Lx64-test-dwarf-expressions.log: Lx64-test-dwarf-expressions$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +x64-unwind-badjmp-signal-frame.log: x64-unwind-badjmp-signal-frame$(EXEEXT) + @p='x64-unwind-badjmp-signal-frame$(EXEEXT)'; \ + b='x64-unwind-badjmp-signal-frame'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) run-check-namespace.log: run-check-namespace @p='run-check-namespace'; \ b='run-check-namespace'; \ diff --git a/src/third_party/unwind/dist/tests/check-namespace.sh.in b/src/third_party/unwind/dist/tests/check-namespace.sh.in index 5ed94fd2a26..f43bca263bc 100644 --- a/src/third_party/unwind/dist/tests/check-namespace.sh.in +++ b/src/third_party/unwind/dist/tests/check-namespace.sh.in @@ -85,6 +85,11 @@ filter_misc () { ignore _ftext ignore _gp fi + + if [ ${os} == "solaris2.11" ]; then + ignore _PROCEDURE_LINKAGE_TABLE_ + ignore _etext + fi } check_local_unw_abi () { @@ -121,7 +126,7 @@ check_local_unw_abi () { match _U_dyn_register match unw_backtrace - match backtrace + @CONFIG_WEAK_BACKTRACE_TRUE@match backtrace case ${plat} in arm) diff --git a/src/third_party/unwind/dist/tests/test-coredump-unwind.c b/src/third_party/unwind/dist/tests/test-coredump-unwind.c index 53498237c2f..fb06a38effa 100644 --- a/src/third_party/unwind/dist/tests/test-coredump-unwind.c +++ b/src/third_party/unwind/dist/tests/test-coredump-unwind.c @@ -57,7 +57,11 @@ #include <grp.h> /* For SIGSEGV handler code */ -#include <execinfo.h> +#if HAVE_EXECINFO_H +# include <execinfo.h> +#else + extern int backtrace (void **, int); +#endif #include <sys/ucontext.h> #include <libunwind-coredump.h> @@ -242,7 +246,7 @@ void handle_sigsegv(int sig, siginfo_t *info, void *ucontext) void *array[50]; int size; size = backtrace(array, 50); -#ifdef __linux__ +#if defined __linux__ && HAVE_EXECINFO_H backtrace_symbols_fd(array, size, 2); #endif } diff --git a/src/third_party/unwind/dist/tests/x64-unwind-badjmp-signal-frame.c b/src/third_party/unwind/dist/tests/x64-unwind-badjmp-signal-frame.c new file mode 100644 index 00000000000..c7b7cf7335a --- /dev/null +++ b/src/third_party/unwind/dist/tests/x64-unwind-badjmp-signal-frame.c @@ -0,0 +1,124 @@ +/* libunwind - a platform-independent unwind library + Copyright (C) 2019 Brock York <twunknown AT gmail.com> + +This file is part of libunwind. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#include <stdio.h> +#include <stdlib.h> +#include <signal.h> +#include <string.h> +#include <execinfo.h> +#include <sys/types.h> +#include <sys/ucontext.h> +#include <unistd.h> + +#ifdef HAVE_SYS_PTRACE_H +#include <sys/ptrace.h> +#endif + +#define UNW_LOCAL_ONLY +#include <libunwind.h> + +/* + * unwind in the signal handler checking the backtrace is correct + * after a bad jump. + */ +void handle_sigsegv(int signal, siginfo_t *info, void *ucontext) +{ + /* + * 0 = success + * !0 = general failure + * 77 = test skipped + * 99 = complete failure + */ + int test_status = 0; + unw_cursor_t cursor; unw_context_t uc; + unw_word_t ip, sp, offset; + char name[1000]; + int found_signal_frame = 0; + int i = 0; + char *names[] = { + "", + "main", + }; + int names_count = sizeof(names) / sizeof(*names); + + unw_getcontext(&uc); + unw_init_local(&cursor, &uc); + + while (unw_step(&cursor) > 0 && !test_status) + { + if (unw_is_signal_frame(&cursor)) + { + found_signal_frame = 1; + } + if (found_signal_frame) + { + unw_get_reg(&cursor, UNW_REG_IP, &ip); + unw_get_reg(&cursor, UNW_REG_SP, &sp); + memset(name, 0, sizeof(char) * 1000); + unw_get_proc_name(&cursor, name, sizeof(char) * 1000, &offset); + printf("ip = %lx, sp = %lx offset = %lx name = %s\n", (long) ip, (long) sp, (long) offset, name); + if (i < names_count) + { + if (strcmp(names[i], name) != 0) + { + test_status = 1; + printf("frame %s doesn't match expected frame %s\n", name, names[i]); + } + else + { + i += 1; + } + } + } + } + + if (i != names_count) //Make sure we found all the frames! + { + printf("Failed to find all frames i:%d != names_count:%d\n", i, names_count); + test_status = 1; + } + + /*return test_status to test harness*/ + exit(test_status); +} + +void (*invalid_function)() = (void*)1; + +int main(int argc, char *argv[]) +{ + struct sigaction sa; + memset(&sa, 0, sizeof(sa)); + sa.sa_sigaction = handle_sigsegv; + sa.sa_flags = SA_SIGINFO; + sigaction(SIGSEGV, &sa, NULL); + + invalid_function(); + + /* + * 99 is the hard error exit status for automake tests: + * https://www.gnu.org/software/automake/manual/html_node/Scripts_002dbased-Testsuites.html#Scripts_002dbased-Testsuites + * If we dont end up in the signal handler something went horribly wrong. + */ + return 99; +} diff --git a/src/third_party/unwind/platform/linux_aarch64/build/include/config.h b/src/third_party/unwind/platform/linux_aarch64/build/include/config.h index 58a34bc167f..72f178a595c 100644 --- a/src/third_party/unwind/platform/linux_aarch64/build/include/config.h +++ b/src/third_party/unwind/platform/linux_aarch64/build/include/config.h @@ -10,6 +10,9 @@ /* Support for Microsoft ABI extensions */ /* #undef CONFIG_MSABI_SUPPORT */ +/* Define if the weak 'backtrace' symbol is provided. */ +#define CONFIG_WEAK_BACKTRACE 1 + /* Define to 1 if you want every memory access validated */ #define CONSERVATIVE_CHECKS 1 @@ -123,6 +126,9 @@ /* Define to 1 if you have the `mincore' function. */ #define HAVE_MINCORE 1 +/* Define to 1 if you have the `pipe2' function. */ +#define HAVE_PIPE2 1 + /* Define to 1 if you have the <signal.h> header file. */ #define HAVE_SIGNAL_H 1 @@ -180,6 +186,9 @@ /* Define to 1 if you have the <unistd.h> header file. */ #define HAVE_UNISTD_H 1 +/* Define if you have libz */ +#define HAVE_ZLIB 1 + /* Defined if __builtin_unreachable() is available */ #define HAVE__BUILTIN_UNREACHABLE 1 @@ -202,7 +211,7 @@ #define PACKAGE_NAME "libunwind" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "libunwind 1.4-rc1" +#define PACKAGE_STRING "libunwind 1.5.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "libunwind" @@ -211,7 +220,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.4-rc1" +#define PACKAGE_VERSION "1.5.0" /* The size of `off_t', as computed by sizeof. */ #define SIZEOF_OFF_T 8 @@ -220,7 +229,7 @@ #define STDC_HEADERS 1 /* Version number of package */ -#define VERSION "1.4-rc1" +#define VERSION "1.5.0" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ diff --git a/src/third_party/unwind/platform/linux_aarch64/build/include/libunwind-common.h b/src/third_party/unwind/platform/linux_aarch64/build/include/libunwind-common.h index 37b0ef4a5db..0beab1a9d8a 100644 --- a/src/third_party/unwind/platform/linux_aarch64/build/include/libunwind-common.h +++ b/src/third_party/unwind/platform/linux_aarch64/build/include/libunwind-common.h @@ -24,12 +24,25 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define UNW_VERSION_MAJOR 1 -#define UNW_VERSION_MINOR 4 -#define UNW_VERSION_EXTRA -rc1 +#define UNW_VERSION_MINOR 5 +#define UNW_VERSION_EXTRA 0 #define UNW_VERSION_CODE(maj,min) (((maj) << 16) | (min)) #define UNW_VERSION UNW_VERSION_CODE(UNW_VERSION_MAJOR, UNW_VERSION_MINOR) +#ifdef __sun +// On SmartOS, gcc fails with the following error: +// +// ../include/libunwind-common.h:43:41: error: expected identifier or '(' before numeric constant +// # define UNW_PREFIX UNW_PASTE(UNW_PASTE(_U,UNW_TARGET),_) +// ^ +// +// workaround is to undefine _U explicitly. +// see https://github.com/libunwind/libunwind/issues/118 for more details. +// +#undef _U +#endif + #define UNW_PASTE2(x,y) x##y #define UNW_PASTE(x,y) UNW_PASTE2(x,y) #define UNW_OBJ(fn) UNW_PASTE(UNW_PREFIX, fn) diff --git a/src/third_party/unwind/platform/linux_aarch64/install/include/libunwind-aarch64.h b/src/third_party/unwind/platform/linux_aarch64/install/include/libunwind-aarch64.h index 778b43626b9..aeaef630240 100644 --- a/src/third_party/unwind/platform/linux_aarch64/install/include/libunwind-aarch64.h +++ b/src/third_party/unwind/platform/linux_aarch64/install/include/libunwind-aarch64.h @@ -192,7 +192,7 @@ typedef struct unsigned long uc_flags; struct ucontext *uc_link; stack_t uc_stack; - __sigset_t uc_sigmask; + sigset_t uc_sigmask; struct unw_sigcontext uc_mcontext; } unw_tdep_context_t; diff --git a/src/third_party/unwind/platform/linux_aarch64/install/include/libunwind-common.h b/src/third_party/unwind/platform/linux_aarch64/install/include/libunwind-common.h index 37b0ef4a5db..0beab1a9d8a 100644 --- a/src/third_party/unwind/platform/linux_aarch64/install/include/libunwind-common.h +++ b/src/third_party/unwind/platform/linux_aarch64/install/include/libunwind-common.h @@ -24,12 +24,25 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define UNW_VERSION_MAJOR 1 -#define UNW_VERSION_MINOR 4 -#define UNW_VERSION_EXTRA -rc1 +#define UNW_VERSION_MINOR 5 +#define UNW_VERSION_EXTRA 0 #define UNW_VERSION_CODE(maj,min) (((maj) << 16) | (min)) #define UNW_VERSION UNW_VERSION_CODE(UNW_VERSION_MAJOR, UNW_VERSION_MINOR) +#ifdef __sun +// On SmartOS, gcc fails with the following error: +// +// ../include/libunwind-common.h:43:41: error: expected identifier or '(' before numeric constant +// # define UNW_PREFIX UNW_PASTE(UNW_PASTE(_U,UNW_TARGET),_) +// ^ +// +// workaround is to undefine _U explicitly. +// see https://github.com/libunwind/libunwind/issues/118 for more details. +// +#undef _U +#endif + #define UNW_PASTE2(x,y) x##y #define UNW_PASTE(x,y) UNW_PASTE2(x,y) #define UNW_OBJ(fn) UNW_PASTE(UNW_PREFIX, fn) diff --git a/src/third_party/unwind/platform/linux_x86_64/build/include/config.h b/src/third_party/unwind/platform/linux_x86_64/build/include/config.h index d8f0eb77411..620d9483731 100644 --- a/src/third_party/unwind/platform/linux_x86_64/build/include/config.h +++ b/src/third_party/unwind/platform/linux_x86_64/build/include/config.h @@ -10,6 +10,9 @@ /* Support for Microsoft ABI extensions */ /* #undef CONFIG_MSABI_SUPPORT */ +/* Define if the weak 'backtrace' symbol is provided. */ +#define CONFIG_WEAK_BACKTRACE 1 + /* Define to 1 if you want every memory access validated */ #define CONSERVATIVE_CHECKS 1 @@ -36,7 +39,7 @@ /* Define to 1 if you have the declaration of `PTRACE_SETREGSET', and to 0 if you don't. */ -#define HAVE_DECL_PTRACE_SETREGSET 1 +#define HAVE_DECL_PTRACE_SETREGSET 0 /* Define to 1 if you have the declaration of `PTRACE_SINGLESTEP', and to 0 if you don't. */ @@ -123,6 +126,9 @@ /* Define to 1 if you have the `mincore' function. */ #define HAVE_MINCORE 1 +/* Define to 1 if you have the `pipe2' function. */ +#define HAVE_PIPE2 1 + /* Define to 1 if you have the <signal.h> header file. */ #define HAVE_SIGNAL_H 1 @@ -180,6 +186,9 @@ /* Define to 1 if you have the <unistd.h> header file. */ #define HAVE_UNISTD_H 1 +/* Define if you have libz */ +#define HAVE_ZLIB 1 + /* Defined if __builtin_unreachable() is available */ #define HAVE__BUILTIN_UNREACHABLE 1 @@ -202,7 +211,7 @@ #define PACKAGE_NAME "libunwind" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "libunwind 1.4-rc1" +#define PACKAGE_STRING "libunwind 1.5.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "libunwind" @@ -211,7 +220,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.4-rc1" +#define PACKAGE_VERSION "1.5.0" /* The size of `off_t', as computed by sizeof. */ #define SIZEOF_OFF_T 8 @@ -220,7 +229,7 @@ #define STDC_HEADERS 1 /* Version number of package */ -#define VERSION "1.4-rc1" +#define VERSION "1.5.0" /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ diff --git a/src/third_party/unwind/platform/linux_x86_64/build/include/libunwind-common.h b/src/third_party/unwind/platform/linux_x86_64/build/include/libunwind-common.h index 37b0ef4a5db..0beab1a9d8a 100644 --- a/src/third_party/unwind/platform/linux_x86_64/build/include/libunwind-common.h +++ b/src/third_party/unwind/platform/linux_x86_64/build/include/libunwind-common.h @@ -24,12 +24,25 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define UNW_VERSION_MAJOR 1 -#define UNW_VERSION_MINOR 4 -#define UNW_VERSION_EXTRA -rc1 +#define UNW_VERSION_MINOR 5 +#define UNW_VERSION_EXTRA 0 #define UNW_VERSION_CODE(maj,min) (((maj) << 16) | (min)) #define UNW_VERSION UNW_VERSION_CODE(UNW_VERSION_MAJOR, UNW_VERSION_MINOR) +#ifdef __sun +// On SmartOS, gcc fails with the following error: +// +// ../include/libunwind-common.h:43:41: error: expected identifier or '(' before numeric constant +// # define UNW_PREFIX UNW_PASTE(UNW_PASTE(_U,UNW_TARGET),_) +// ^ +// +// workaround is to undefine _U explicitly. +// see https://github.com/libunwind/libunwind/issues/118 for more details. +// +#undef _U +#endif + #define UNW_PASTE2(x,y) x##y #define UNW_PASTE(x,y) UNW_PASTE2(x,y) #define UNW_OBJ(fn) UNW_PASTE(UNW_PREFIX, fn) diff --git a/src/third_party/unwind/platform/linux_x86_64/install/include/libunwind-common.h b/src/third_party/unwind/platform/linux_x86_64/install/include/libunwind-common.h index 37b0ef4a5db..0beab1a9d8a 100644 --- a/src/third_party/unwind/platform/linux_x86_64/install/include/libunwind-common.h +++ b/src/third_party/unwind/platform/linux_x86_64/install/include/libunwind-common.h @@ -24,12 +24,25 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define UNW_VERSION_MAJOR 1 -#define UNW_VERSION_MINOR 4 -#define UNW_VERSION_EXTRA -rc1 +#define UNW_VERSION_MINOR 5 +#define UNW_VERSION_EXTRA 0 #define UNW_VERSION_CODE(maj,min) (((maj) << 16) | (min)) #define UNW_VERSION UNW_VERSION_CODE(UNW_VERSION_MAJOR, UNW_VERSION_MINOR) +#ifdef __sun +// On SmartOS, gcc fails with the following error: +// +// ../include/libunwind-common.h:43:41: error: expected identifier or '(' before numeric constant +// # define UNW_PREFIX UNW_PASTE(UNW_PASTE(_U,UNW_TARGET),_) +// ^ +// +// workaround is to undefine _U explicitly. +// see https://github.com/libunwind/libunwind/issues/118 for more details. +// +#undef _U +#endif + #define UNW_PASTE2(x,y) x##y #define UNW_PASTE(x,y) UNW_PASTE2(x,y) #define UNW_OBJ(fn) UNW_PASTE(UNW_PREFIX, fn) diff --git a/src/third_party/unwind/scripts/import.sh b/src/third_party/unwind/scripts/import.sh index 2843a95e3b9..c57b2d7bd64 100755 --- a/src/third_party/unwind/scripts/import.sh +++ b/src/third_party/unwind/scripts/import.sh @@ -7,8 +7,8 @@ IFS=$'\n\t' set -vx NAME=libunwind -REVISION="v1.4-stable-mongo" # 2020-01-10 -VERSION="1.4-rc1" +REVISION="v1.5-stable-mongo" # 2021-01-13 +VERSION="1.5.0" DEST_DIR=$(git rev-parse --show-toplevel)/src/third_party/unwind if [[ -d $DEST_DIR/dist ]]; then |