From e6a35a1b4a009bd4af76f0152cf2d0d028039848 Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Thu, 13 Jul 2017 22:37:28 +0100 Subject: sys-libs/libunwind: workaround build failure on ia64 Missing files in tarball, outdated implementation. While at it fixed SRC_URI to point to mirrors://nongnu. Package-Manager: Portage-2.3.6, Repoman-2.3.2 --- .../files/libunwind-1.2-ia64-missing.patch | 93 ++++++++++++++++++++++ .../files/libunwind-1.2-ia64-ptrace-coredump.patch | 34 ++++++++ .../files/libunwind-1.2-ia64-undwarf.patch | 17 ++++ sys-libs/libunwind/libunwind-1.1-r1.ebuild | 4 +- sys-libs/libunwind/libunwind-1.2.ebuild | 6 +- sys-libs/libunwind/libunwind-1.2_rc1.ebuild | 4 +- 6 files changed, 153 insertions(+), 5 deletions(-) create mode 100644 sys-libs/libunwind/files/libunwind-1.2-ia64-missing.patch create mode 100644 sys-libs/libunwind/files/libunwind-1.2-ia64-ptrace-coredump.patch create mode 100644 sys-libs/libunwind/files/libunwind-1.2-ia64-undwarf.patch (limited to 'sys-libs/libunwind') 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 000000000000..e15250b4c61f --- /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 ++ ++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 000000000000..3785d8820cd9 --- /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 000000000000..1e3e2489828e --- /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/libunwind-1.1-r1.ebuild b/sys-libs/libunwind/libunwind-1.1-r1.ebuild index 5fa695527e4b..6028ba3e97cb 100644 --- a/sys-libs/libunwind/libunwind-1.1-r1.ebuild +++ b/sys-libs/libunwind/libunwind-1.1-r1.ebuild @@ -1,4 +1,4 @@ -# Copyright 1999-2016 Gentoo Foundation +# Copyright 1999-2017 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 EAPI="5" @@ -7,7 +7,7 @@ inherit eutils libtool DESCRIPTION="Portable and efficient API to determine the call-chain of a program" HOMEPAGE="https://savannah.nongnu.org/projects/libunwind" -SRC_URI="http://download.savannah.nongnu.org/releases/libunwind/${P}.tar.gz" +SRC_URI="mirror://nongnu/libunwind/${P}.tar.gz" LICENSE="MIT" SLOT="7" diff --git a/sys-libs/libunwind/libunwind-1.2.ebuild b/sys-libs/libunwind/libunwind-1.2.ebuild index 5c2191d3e1a0..1b9c51a459cd 100644 --- a/sys-libs/libunwind/libunwind-1.2.ebuild +++ b/sys-libs/libunwind/libunwind-1.2.ebuild @@ -9,7 +9,7 @@ inherit 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="http://download.savannah.nongnu.org/releases/libunwind/${MY_P}.tar.gz" +SRC_URI="mirror://nongnu/libunwind/${MY_P}.tar.gz" LICENSE="MIT" SLOT="7" @@ -46,6 +46,10 @@ MULTILIB_WRAPPED_HEADERS=( src_prepare() { epatch "${FILESDIR}"/${PN}-1.2-coredump-regs.patch #586092 + epatch "${FILESDIR}"/${PN}-1.2-ia64-undwarf.patch + epatch "${FILESDIR}"/${PN}-1.2-ia64-ptrace-coredump.patch + epatch -p1 "${FILESDIR}"/${PN}-1.2-ia64-missing.patch + chmod +x src/ia64/mk_cursor_i || die # These tests like to fail. bleh. echo 'int main(){return 0;}' > tests/Gtest-dyn1.c diff --git a/sys-libs/libunwind/libunwind-1.2_rc1.ebuild b/sys-libs/libunwind/libunwind-1.2_rc1.ebuild index 3071165ce32b..859d7de8faa0 100644 --- a/sys-libs/libunwind/libunwind-1.2_rc1.ebuild +++ b/sys-libs/libunwind/libunwind-1.2_rc1.ebuild @@ -1,4 +1,4 @@ -# Copyright 1999-2016 Gentoo Foundation +# Copyright 1999-2017 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 EAPI="5" @@ -9,7 +9,7 @@ inherit 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="http://download.savannah.nongnu.org/releases/libunwind/${MY_P}.tar.gz" +SRC_URI="mirror://nongnu/libunwind/${MY_P}.tar.gz" LICENSE="MIT" SLOT="7" -- cgit v1.2.3-65-gdbad