diff options
author | Jory A. Pratt <anarchy@gentoo.org> | 2018-06-30 22:49:25 -0500 |
---|---|---|
committer | Jory A. Pratt <anarchy@gentoo.org> | 2018-06-30 22:49:25 -0500 |
commit | bfc4cb8125638cda99e63d699d2afe787cf055b3 (patch) | |
tree | 7be08ec66d107beac357b51e335ce68d7f01aec0 /sys-libs | |
parent | sys-devel/gcc: cleanup (diff) | |
download | musl-bfc4cb8125638cda99e63d699d2afe787cf055b3.tar.gz musl-bfc4cb8125638cda99e63d699d2afe787cf055b3.tar.bz2 musl-bfc4cb8125638cda99e63d699d2afe787cf055b3.zip |
sys-libs/libunwind: Only include execinfo.h if it is avaliable on the
system.
Diffstat (limited to 'sys-libs')
9 files changed, 341 insertions, 0 deletions
diff --git a/sys-libs/libunwind/Manifest b/sys-libs/libunwind/Manifest new file mode 100644 index 00000000..4155a10d --- /dev/null +++ b/sys-libs/libunwind/Manifest @@ -0,0 +1 @@ +DIST libunwind-1.2.1.tar.gz 780774 BLAKE2B a5be4142e1e4932231023bdec2ab3ecd6b707faf2d32d2b571239252a1d0fb6a273a6a46c4a107db63f74f7b54c0c54cf252b8b79ad53216333ba7bcf63147a1 SHA512 af7c280d2a963779a4a2711887618bc96383011e4e5d52e4085aa7fb351e55e357468f6ff85e66a216f1c6826538f498335a917a5970575c93be74c96316319b diff --git a/sys-libs/libunwind/files/libunwind-1.2-coredump-regs.patch b/sys-libs/libunwind/files/libunwind-1.2-coredump-regs.patch new file mode 100644 index 00000000..3ddc610d --- /dev/null +++ b/sys-libs/libunwind/files/libunwind-1.2-coredump-regs.patch @@ -0,0 +1,16 @@ +https://bugs.gentoo.org/586092 + +this might not be correct, but at least it builds, and doesn't crash + +--- a/src/coredump/_UCD_access_reg_linux.c ++++ b/src/coredump/_UCD_access_reg_linux.c +@@ -51,6 +51,9 @@ _UCD_access_reg (unw_addr_space_t as, + #elif defined(UNW_TARGET_TILEGX) + if (regnum < 0 || regnum > UNW_TILEGX_CFA) + goto badreg; ++#elif defined(UNW_TARGET_IA64) || defined(UNW_TARGET_HPPA) || defined(UNW_TARGET_PPC32) || defined(UNW_TARGET_PPC64) ++ if (regnum < 0 || regnum >= ARRAY_SIZE(ui->prstatus->pr_reg)) ++ goto badreg; + #else + #if defined(UNW_TARGET_MIPS) + static const uint8_t remap_regs[] = diff --git a/sys-libs/libunwind/files/libunwind-1.2-ia64-missing.patch b/sys-libs/libunwind/files/libunwind-1.2-ia64-missing.patch new file mode 100644 index 00000000..e15250b4 --- /dev/null +++ b/sys-libs/libunwind/files/libunwind-1.2-ia64-missing.patch @@ -0,0 +1,93 @@ +Original libunwind release is missing a few ia64-specific files in tarball. +diff --git a/src/ia64/mk_Gcursor_i.c b/src/ia64/mk_Gcursor_i.c +new file mode 100644 +index 0000000..67b14d5 +--- /dev/null ++++ b/src/ia64/mk_Gcursor_i.c +@@ -0,0 +1,65 @@ ++/* libunwind - a platform-independent unwind library ++ Copyright (C) 2003 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. */ ++ ++/* Utility to generate cursor_i.h. */ ++ ++#include "libunwind_i.h" ++ ++#ifdef offsetof ++# undef offsetof ++#endif ++ ++#define offsetof(type,field) ((char *) &((type *) 0)->field - (char *) 0) ++ ++#define OFFSET(sym, offset) \ ++ asm volatile("\n->" #sym " %0" : : "i" (offset)) ++ ++int ++main (void) ++{ ++ OFFSET("IP_OFF", offsetof (struct cursor, ip)); ++ OFFSET("PR_OFF", offsetof (struct cursor, pr)); ++ OFFSET("BSP_OFF", offsetof (struct cursor, bsp)); ++ OFFSET("PSP_OFF", offsetof (struct cursor, psp)); ++ OFFSET("PFS_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_PFS])); ++ OFFSET("RNAT_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_RNAT])); ++ OFFSET("UNAT_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_UNAT])); ++ OFFSET("LC_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_LC])); ++ OFFSET("FPSR_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_FPSR])); ++ OFFSET("B1_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B1])); ++ OFFSET("B2_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B2])); ++ OFFSET("B3_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B3])); ++ OFFSET("B4_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B4])); ++ OFFSET("B5_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B5])); ++ OFFSET("F2_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F2])); ++ OFFSET("F3_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F3])); ++ OFFSET("F4_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F4])); ++ OFFSET("F5_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F5])); ++ OFFSET("FR_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F16])); ++ OFFSET("LOC_SIZE", ++ (offsetof (struct cursor, loc[1]) - offsetof (struct cursor, loc[0]))); ++ OFFSET("SIGCONTEXT_ADDR_OFF", offsetof (struct cursor, sigcontext_addr)); ++ return 0; ++} +diff --git a/src/ia64/mk_Lcursor_i.c b/src/ia64/mk_Lcursor_i.c +new file mode 100644 +index 0000000..aee2e7e +--- /dev/null ++++ b/src/ia64/mk_Lcursor_i.c +@@ -0,0 +1,2 @@ ++#define UNW_LOCAL_ONLY ++#include "mk_Gcursor_i.c" +diff --git a/src/ia64/mk_cursor_i b/src/ia64/mk_cursor_i +new file mode 100755 +index 0000000..9211f91 +--- /dev/null ++++ b/src/ia64/mk_cursor_i +@@ -0,0 +1,7 @@ ++#!/bin/sh ++test -z "$1" && exit 1 ++echo "/* GENERATED */" ++echo "#ifndef cursor_i_h" ++echo "#define cursor_i_h" ++sed -ne 's/^->"\(\S*\)" \(\d*\)/#define \1 \2/p' < $1 || exit $? ++echo "#endif" diff --git a/sys-libs/libunwind/files/libunwind-1.2-ia64-ptrace-coredump.patch b/sys-libs/libunwind/files/libunwind-1.2-ia64-ptrace-coredump.patch new file mode 100644 index 00000000..3785d882 --- /dev/null +++ b/sys-libs/libunwind/files/libunwind-1.2-ia64-ptrace-coredump.patch @@ -0,0 +1,34 @@ +Fix build failure on ia64. + coredump/_UPT_get_dyn_info_list_addr.c +is almost identical to + ptrace/_UPT_get_dyn_info_list_addr.c +It's clearly an __ia64 implementation copy. +diff --git a/src/coredump/_UPT_get_dyn_info_list_addr.c b/src/coredump/_UPT_get_dyn_info_list_addr.c +index 0d11905..176b146 100644 +--- a/src/coredump/_UPT_get_dyn_info_list_addr.c ++++ b/src/coredump/_UPT_get_dyn_info_list_addr.c +@@ -31,2 +31,3 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + # include "os-linux.h" ++# include "../ptrace/_UPT_internal.h" + +@@ -40,3 +41,2 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, + char path[PATH_MAX]; +- unw_dyn_info_t *di; + unw_word_t res; +@@ -50,5 +50,5 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, + +- invalidate_edi (&ui->edi); ++ invalidate_edi(&ui->edi); + +- if (elf_map_image (&ui->ei, path) < 0) ++ if (elf_map_image (&ui->edi.ei, path) < 0) + /* ignore unmappable stuff like "/SYSV00001b58 (deleted)" */ +@@ -58,6 +58,5 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, + +- di = tdep_find_unwind_table (&ui->edi, as, path, lo, off); +- if (di) ++ if (tdep_find_unwind_table (&ui->edi, as, path, lo, off, 0) > 0) + { +- res = _Uia64_find_dyn_list (as, di, arg); ++ res = _Uia64_find_dyn_list (as, &ui->edi.di_cache, arg); + if (res && count++ == 0) diff --git a/sys-libs/libunwind/files/libunwind-1.2-ia64-undwarf.patch b/sys-libs/libunwind/files/libunwind-1.2-ia64-undwarf.patch new file mode 100644 index 00000000..1e3e2489 --- /dev/null +++ b/sys-libs/libunwind/files/libunwind-1.2-ia64-undwarf.patch @@ -0,0 +1,17 @@ +diff --git a/src/mi/Gget_proc_name.c b/src/mi/Gget_proc_name.c +index 5376f82..64d2503 100644 +--- a/src/mi/Gget_proc_name.c ++++ b/src/mi/Gget_proc_name.c +@@ -106,8 +106,12 @@ 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; ++#endif + error = get_proc_name (tdep_get_as (c), ip, buf, buf_len, offp, + tdep_get_as_arg (c)); ++#if !defined(__ia64) + if (c->dwarf.use_prev_instr && offp != NULL && error == 0) + *offp += 1; ++#endif + return error; diff --git a/sys-libs/libunwind/files/libunwind-1.2.1-fix_version_macros.patch b/sys-libs/libunwind/files/libunwind-1.2.1-fix_version_macros.patch new file mode 100644 index 00000000..63202937 --- /dev/null +++ b/sys-libs/libunwind/files/libunwind-1.2.1-fix_version_macros.patch @@ -0,0 +1,13 @@ +diff --git a/configure.ac b/configure.ac +index a254bbe..fe0247b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,6 +1,6 @@ + define(pkg_major, 1) +-define(pkg_minor, 2.1) +-define(pkg_extra, ) ++define(pkg_minor, 2) ++define(pkg_extra, 1) + define(pkg_maintainer, libunwind-devel@nongnu.org) + define(mkvers, $1.$2$3) + dnl Process this file with autoconf to produce a configure script. diff --git a/sys-libs/libunwind/files/libunwind-1.2.1-only-include-execinfo_h-if-avaliable.patch b/sys-libs/libunwind/files/libunwind-1.2.1-only-include-execinfo_h-if-avaliable.patch new file mode 100644 index 00000000..cc42b150 --- /dev/null +++ b/sys-libs/libunwind/files/libunwind-1.2.1-only-include-execinfo_h-if-avaliable.patch @@ -0,0 +1,52 @@ +From 0f3f41a86842f2b19aa07af5242cb775ef9b20d3 Mon Sep 17 00:00:00 2001 +From: "Jory A. Pratt" <anarchy@gentoo.org> +Date: Sat, 30 Jun 2018 22:44:22 -0500 +Subject: [PATCH] Only include execinfo.h where avaliable + +Signed-off-by: Jory A. Pratt <anarchy@gentoo.org> +--- + tests/test-coredump-unwind.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/tests/test-coredump-unwind.c b/tests/test-coredump-unwind.c +index 5254708..33f92b0 100644 +--- a/tests/test-coredump-unwind.c ++++ b/tests/test-coredump-unwind.c +@@ -57,7 +57,9 @@ + #include <grp.h> + + /* For SIGSEGV handler code */ ++#if HAVE_EXECINFO_H + #include <execinfo.h> ++#endif + #include <sys/ucontext.h> + + #include <libunwind-coredump.h> +@@ -202,7 +204,7 @@ void die_out_of_memory(void) + /* End of utility logging functions */ + + +- ++#if HAVE_EXECINFO_H + static + void handle_sigsegv(int sig, siginfo_t *info, void *ucontext) + { +@@ -249,12 +251,14 @@ void handle_sigsegv(int sig, siginfo_t *info, void *ucontext) + + _exit(1); + } +- ++#endif + static void install_sigsegv_handler(void) + { + struct sigaction sa; + memset(&sa, 0, sizeof(sa)); ++#if HAVE_EXECINFO_H + sa.sa_sigaction = handle_sigsegv; ++#endif + sa.sa_flags = SA_SIGINFO; + sigaction(SIGSEGV, &sa, NULL); + sigaction(SIGILL, &sa, NULL); +-- +2.18.0 + diff --git a/sys-libs/libunwind/libunwind-1.2.1-r1.ebuild b/sys-libs/libunwind/libunwind-1.2.1-r1.ebuild new file mode 100644 index 00000000..a4690fc0 --- /dev/null +++ b/sys-libs/libunwind/libunwind-1.2.1-r1.ebuild @@ -0,0 +1,103 @@ +# Copyright 1999-2018 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +MY_PV=${PV/_/-} +MY_P=${PN}-${MY_PV} +inherit autotools eutils libtool multilib-minimal + +DESCRIPTION="Portable and efficient API to determine the call-chain of a program" +HOMEPAGE="https://savannah.nongnu.org/projects/libunwind" +SRC_URI="mirror://nongnu/libunwind/${MY_P}.tar.gz" + +LICENSE="MIT" +SLOT="7" +KEYWORDS="amd64 arm arm64 hppa ia64 ~mips ppc ppc64 x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux" +IUSE="debug debug-frame doc libatomic lzma +static-libs" + +RESTRICT="test" # half of tests are broken (toolchain version dependent) + +# We just use the header from libatomic. +RDEPEND="lzma? ( app-arch/xz-utils )" +DEPEND="${RDEPEND} + libatomic? ( dev-libs/libatomic_ops )" + +S="${WORKDIR}/${MY_P}" + +MULTILIB_WRAPPED_HEADERS=( + /usr/include/libunwind.h + + # see libunwind.h for the full list of arch-specific headers + /usr/include/libunwind-aarch64.h + /usr/include/libunwind-arm.h + /usr/include/libunwind-hppa.h + /usr/include/libunwind-ia64.h + /usr/include/libunwind-mips.h + /usr/include/libunwind-ppc32.h + /usr/include/libunwind-ppc64.h + /usr/include/libunwind-sh.h + /usr/include/libunwind-tilegx.h + /usr/include/libunwind-x86.h + /usr/include/libunwind-x86_64.h +) + +PATCHES=( + "${FILESDIR}"/${PN}-1.2-coredump-regs.patch #586092 + "${FILESDIR}"/${PN}-1.2-ia64-undwarf.patch + "${FILESDIR}"/${PN}-1.2-ia64-ptrace-coredump.patch + "${FILESDIR}"/${PN}-1.2-ia64-missing.patch + "${FILESDIR}"/${PN}-1.2.1-fix_version_macros.patch + "${FILESDIR}"/${PN}-1.2.1-only-include-execinfo_h-if-avaliable.patch +) + +src_prepare() { + default + chmod +x src/ia64/mk_cursor_i || die + # Since we have tests disabled via RESTRICT, disable building in the subdir + # entirely. This worksaround some build errors too. #484846 + sed -i -e '/^SUBDIRS/s:tests::' Makefile.in || die + + elibtoolize + eautoreconf +} + +multilib_src_configure() { + # --enable-cxx-exceptions: always enable it, headers provide the interface + # and on some archs it is disabled by default causing a mismatch between the + # API and the ABI, bug #418253 + # conservative-checks: validate memory addresses before use; as of 1.0.1, + # only x86_64 supports this, yet may be useful for debugging, couple it with + # debug useflag. + ECONF_SOURCE="${S}" \ + ac_cv_header_atomic_ops_h=$(usex libatomic) \ + econf \ + --enable-cxx-exceptions \ + --enable-coredump \ + --enable-ptrace \ + --enable-setjmp \ + $(use_enable debug-frame) \ + $(use_enable doc documentation) \ + $(use_enable lzma minidebuginfo) \ + $(use_enable static-libs static) \ + $(use_enable debug conservative_checks) \ + $(use_enable debug) +} + +multilib_src_compile() { + # Bug 586208 + CCACHE_NODIRECT=1 default +} + +multilib_src_test() { + # Explicitly allow parallel build of tests. + # Sandbox causes some tests to freak out. + SANDBOX_ON=0 emake check +} + +multilib_src_install() { + default + # libunwind-ptrace.a (and libunwind-ptrace.h) is separate API and without + # shared library, so we keep it in any case + use static-libs || find "${ED}"usr '(' -name 'libunwind-generic.a' -o -name 'libunwind*.la' ')' -delete +} diff --git a/sys-libs/libunwind/metadata.xml b/sys-libs/libunwind/metadata.xml new file mode 100644 index 00000000..95faca4e --- /dev/null +++ b/sys-libs/libunwind/metadata.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="project"> + <email>toolchain@gentoo.org</email> + <name>Gentoo Toolchain Project</name> + </maintainer> + <use> + <flag name="debug-frame">Adds support for DWARF .debug_frame section: Use the information from this section if available</flag> + <flag name="libatomic">Use libatomic instead of builtin atomic operations</flag> + </use> +</pkgmetadata> |