From: Peter Michael Green Date: Fri, 9 Sep 2022 17:53:50 +0000 (+0100) Subject: Import elfutils_0.187-2+rpi1.debian.tar.xz X-Git-Tag: archive/raspbian/0.188-2.1+rpi1~1^2~9^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=328e3a8a4141bd59551d55eeaecacc4cdc54853d;p=elfutils.git Import elfutils_0.187-2+rpi1.debian.tar.xz [dgit import tarball elfutils 0.187-2+rpi1 elfutils_0.187-2+rpi1.debian.tar.xz] --- 328e3a8a4141bd59551d55eeaecacc4cdc54853d diff --git a/changelog b/changelog new file mode 100644 index 0000000..be2754a --- /dev/null +++ b/changelog @@ -0,0 +1,962 @@ +elfutils (0.187-2+rpi1) bookworm-staging; urgency=medium + + * Don't try to install elfutils.urls, raspbian does not currently run + a debuginfod service. + + -- Peter Michael Green Fri, 09 Sep 2022 17:53:50 +0000 + +elfutils (0.187-2) unstable; urgency=medium + + * Pass --sysconfdir to configure and install elfutils.urls. + - d/rules: Pass --sysconfdir to configure; don't delete elfutils.urls. + - d/libdebuginfod-common.install: Adjust paths and install + elfutils.urls. + * d/rules: Cleanup debuginfod code and support Ubuntu's debuginfod. + * d/libdebuginfod-common.templates: New question for Ubuntu's debuginfod. + * d/libdebuginfod-common.config: Ask about Ubuntu's debuginfod. + * d/libdebuginfod-common.post{inst,rm}: Cleanup code, fix problems + and support Ubuntu. + Thanks to наб (Closes: #987787) + + -- Sergio Durigan Junior Fri, 02 Sep 2022 17:11:29 -0400 + +elfutils (0.187-1) unstable; urgency=medium + + * New upstream release. + + -- Matthias Klose Wed, 04 May 2022 01:08:42 +0200 + +elfutils (0.186-1build1) jammy; urgency=medium + + * No-change rebuild for ppc64el baseline bump. + + -- Łukasz 'sil2100' Zemczak Wed, 23 Mar 2022 14:51:35 +0100 + +elfutils (0.186-1) unstable; urgency=medium + + * New upstream release. + * Don't yet install elfutils.urls. + * Update symbols file. + + -- Matthias Klose Wed, 17 Nov 2021 21:49:08 +0100 + +elfutils (0.185-2) unstable; urgency=medium + + * Upload to unstable. + + -- Matthias Klose Sun, 15 Aug 2021 18:27:02 +0200 + +elfutils (0.185-1) experimental; urgency=medium + + * New upstream release. + * Refresh patches. + + -- Matthias Klose Tue, 25 May 2021 20:31:36 +0200 + +elfutils (0.184-1) experimental; urgency=medium + + * New upstream release. + + -- Matthias Klose Mon, 17 May 2021 12:10:27 +0200 + +elfutils (0.183-8) experimental; urgency=medium + + * libdebuginfod1: Relax dependency on libdebuginfod-common. Closes: #986375. + * libdebuginfod-common: Update package description. Closes: #987036. + * Always install the shell snippets into /etc/profile.d/. + + -- Matthias Klose Sat, 17 Apr 2021 09:58:41 +0200 + +elfutils (0.183-7) experimental; urgency=medium + + [ Sergio Durigan Junior ] + * d/rules: Populate binary-indep with proper build instructions. + * d/control: Remove ${shlibs:Depends} from libdebuginfod-common. + + [ Matthias Klose ] + * d/rules: Move dh_install to the install target. + * d/rules: Add -a/-i options to the dh_ commands. + + -- Matthias Klose Thu, 15 Apr 2021 17:49:43 +0200 + +elfutils (0.183-6) experimental; urgency=medium + + * d/libdebuginfod-common.install: Remove file. + * d/rules: + Implement logic to decide whether to install the debuginfod shell + snippets under /etc/profile.d/ based on the existence of a debuginfod + service available for the current distribution. This is needed mostly + for Ubuntu and other derivatives which don't have debuginfod services + available yet. + + -- Sergio Durigan Junior Fri, 26 Mar 2021 01:14:28 -0400 + +elfutils (0.183-5) experimental; urgency=medium + + * d/libdebuginfod-common.install: + Install the debuginfod profile.d snippets under + /usr/share/libdebuginfod-common/ instead of directly under + /etc/profile.d/. + * d/libdebuginfod-common.config: + Check for the "debuginfod.sh" snippet under + /usr/share/libdebuginfod-common/. + * d/libdebuginfod-common.postinst: + Perform modifications in the debuginfod shell snippets that now live + under /usr/share/libdebuginfod-common/, before moving them (using ucf) + to /etc/profile.d/. (Closes: #985044) + * d/libdebuginfod-common.postrm: + New postrm file which takes care of purging the debuginfod shell + snippets under /etc/profile.d/. + * d/control: Make libdebuginfod-common depend on ucf. + + -- Sergio Durigan Junior Fri, 19 Mar 2021 15:58:25 -0400 + +elfutils (0.183-4) experimental; urgency=medium + + * Apply KFreeBSD patches (Christoph Berg), not forwarded. + * Fix build on the Hurd. + + -- Matthias Klose Tue, 09 Mar 2021 20:10:42 +0100 + +elfutils (0.183-2) unstable; urgency=medium + + * d/control: + - B-D on lsb-release. + - B-D on po-debconf. + - Create new libdebuginfod-common package. + - Add myself to Uploaders. + * d/rules: + - Use https://debuginfod.debian.net as our default service. + Also, revamp the code responsible for determining libdebuginfod + configuration flags. + - Invoke dh_installdebconf. + * d/libdebuginfod-common.templates: Create a debconf template. + Also, create d/po/POTFILES.in and d/po/templates.pot. + This template is for the question of whether the user accepts GDB or + another debuginfo consumer program to connect to Debian's debuginfod + server. + * d/libdebuginfod-common.config: Ask if the user accepts to use Debian's + debuginfod. + * d/libdebuginfod-common.postinst: Act upon the user's answer to the + debconf question. + If the user has accepted to use Debian's debuginfod, then the script + confirms the value of the DEBUGINFOD_URLS environment variable present + in the shell excerpts under /etc/profile.d. Otherwise, the script + will set the variable to an empty value, disabling the remote + connection to the debuginfod server. (Closes: #983434) + * d/libdebuginfod-common.install: Install the profile.d snippets. + + -- Sergio Durigan Junior Sun, 28 Feb 2021 21:07:16 -0500 + +elfutils (0.183-1) unstable; urgency=medium + + * New upstream release. Changes compared to the snapshot: + - backends/ppc_initreg.c: include . + - NEWS and version, and copyright updates. + + -- Matthias Klose Mon, 08 Feb 2021 09:56:24 +0100 + +elfutils (0.182+20210205-1) unstable; urgency=high + + * Snapshot, taken three days before the 0.183 release. Create a source + tarball using make dist. + * Make the build reproducible (Helmut Grohne). Closes: #981835, #981924. + + -- Matthias Klose Fri, 05 Feb 2021 19:07:32 +0100 + +elfutils (0.182+20210203-1) unstable; urgency=medium + + * Snapshot, taken five days before the 0.183 release. + * Update libdebuginfod1 symbols file. + + -- Matthias Klose Wed, 03 Feb 2021 14:59:12 +0100 + +elfutils (0.182-3) unstable; urgency=medium + + * Build with -flto-partition=none when building with -flto. + * Stop building with -fpermissive. + * tests/dwfl-proc-attach.c: Remove old glibc hack. + + -- Matthias Klose Wed, 06 Jan 2021 14:05:13 +0100 + +elfutils (0.182-2) unstable; urgency=medium + + * Fix FTCBFS: perform bootstrap build with dummy libdebuginfod and without + debuginfod (Helmut Grohne). Closes: #973981. + * Fix build profile pkg.elfutils.nodebuginfod. Closes: #976875. + * Don't use MAKEFLAGS in the packaging. Closes: #965955. + * Fix unwinding support for 32bit S390, taken from the trunk. + Thanks to Andreas Krebbel and Frank Heimes. LP: #1908756. + * Call dh_dwz. + * Bump standards version. + + -- Matthias Klose Thu, 31 Dec 2020 12:52:31 +0100 + +elfutils (0.182-1) unstable; urgency=medium + + * New upstream release. + * Fix typo in debian/copyright. Closes: #914414. + * Add pkg.elfutils.nodebuginfod build profile (Helmut Grohne). + Closes: #966705. + + -- Matthias Klose Sat, 07 Nov 2020 10:22:37 +0100 + +elfutils (0.181-1) unstable; urgency=medium + + * New upstream release. + + -- Matthias Klose Tue, 15 Sep 2020 22:31:59 +0200 + +elfutils (0.180-1) unstable; urgency=medium + + * Transfer to team maintenance, add Kurt Roeckx and myself as uploaders. + * Add VCS attributes to the control file. + * New upstream release. + * Build-depend on pkg-config, libarchive-dev, libmicrohttpd-dev, + libcurl4-gnutls-dev, libsqlite3-dev. + * Build with -fpermissive. + * Don't package debuginfod yet. + * New binary packages debuginfod, libdebuginfod1, libdebuginfod-dev. + * Use dh_autoreconf. + + -- Matthias Klose Thu, 16 Jul 2020 19:34:22 +0200 + +elfutils (0.176-1.1) unstable; urgency=medium + + * Non-maintainer upload with maintainer permission + * Fixes FTBFS on riscv64 (Closes: #928832) + + -- Karsten Merker Tue, 28 May 2019 20:53:12 +0200 + +elfutils (0.176-1) unstable; urgency=medium + + * New upstream release + - Fixes CVE-2019-7150 (Closes: #920909) + - Fixes CVE-2019-7149 (Closes: #920910) + - Fixes CVE-2019-7146 (Closes: #920911) + - Fixes CVE-2019-7665 (Closes: #921880) + - Fixes CVE-2019-7664 (Closes: #921881) + - Fixes CVE-2019-7148 + - Drop 0001-tests-Call-test_cleanup-in-backtrace-subr.sh-check_u.patch, + applied upstream. + * Update upstream PGP key to new one + + -- Kurt Roeckx Sat, 16 Feb 2019 14:54:50 +0100 + +elfutils (0.175-2) unstable; urgency=medium + + * Add support for the mips ABI CFI callback + * Properly clean up in test suite on skipped tests + + -- Kurt Roeckx Sun, 30 Dec 2018 15:02:01 +0100 + +elfutils (0.175-1) unstable; urgency=medium + + * New upstream release + - Build with gcc-8 (Closes: #911276) + - Drop fix-gcc7-ftbfs.diff + - Drop GNU_variable_value.patch + - Drop locviews.patch + - Update patches + * Fixes CVE-2018-18521 (Closes: #911413) + * Fixes CVE-2018-18520 (Closes: #911414) + * Fixes CVE-2018-18310 (Closes: #911083) + * Fixes CVE-2018-16403 + * Fixes CVE-2018-16402 + * Fixes CVE-2018-16062 (Closes: #907562) + + -- Kurt Roeckx Sun, 18 Nov 2018 23:01:23 +0100 + +elfutils (0.170-0.5) unstable; urgency=medium + + * Non-maintainer upload acked by Kurt Roeckx. + * Fix FTCBFS: Add zlib1g-dev:native to Build-Depends. (Closes: #901748) + + -- Helmut Grohne Sun, 24 Jun 2018 20:54:50 +0200 + +elfutils (0.170-0.4) unstable; urgency=medium + + * Non-maintainer upload. + * Backport patches for DWARF locview support (Mark Wielaard). + + -- Matthias Klose Mon, 09 Apr 2018 14:21:19 +0200 + +elfutils (0.170-0.3) unstable; urgency=medium + + * Non-maintainer upload. + * Add disable_werror.patch. (Closes: #886004) + + -- Helmut Grohne Sun, 28 Jan 2018 14:52:20 +0100 + +elfutils (0.170-0.2) unstable; urgency=medium + + * Non-maintainer upload, acked by maintainer. + * libelf-dev,libdw-dev: Add missing dependencies for packages that + our pkg-config files requires (zlib1g-dev, liblzma-dev). + (Closes: #885071) + + -- Andreas Henriksson Sat, 30 Dec 2017 18:14:17 +0100 + +elfutils (0.170-0.1) unstable; urgency=medium + + * Non-maintainer upload. + * New upstream release + * Fix fallthrough warnings exposed by GCC 7. Closes: #853387. + * Bump standards version. + * Configure with --disable-silent-rules. + * Update libdw1 symbols file. + + -- Matthias Klose Tue, 12 Sep 2017 00:07:19 +0200 + +elfutils (0.168-1) unstable; urgency=medium + + * Fix CVE-2017-7607 (Closes: #859996) + * Fix CVE-2017-7608 (Closes: #859995) + * Fix CVE-2017-7609 (Closes: #859994) + * Fix CVE-2017-7610 (Closes: #859993) + * Fix CVE-2017-7611 (Closes: #859992) + * Fix CVE-2017-7612 (Closes: #859991) + * Fix CVE-2017-7613 (Closes: #859990) + + -- Kurt Roeckx Sat, 27 May 2017 15:05:37 +0200 + +elfutils (0.168-0.2) unstable; urgency=medium + + * debian/copyright: Update to the current licensing, as introduced + with elfutils 0.154. + * Drop the m68k_backend.diff patch. + + -- Matthias Klose Thu, 29 Dec 2016 14:23:54 +0100 + +elfutils (0.168-0.1) experimental; urgency=medium + + * Non-maintainer upload. + * New upstream release + - m68k_backend.diff: Don't apply. + - testsuite-amd64-fix-backtrace-native.patch: Remove, applied upstream. + - Refresh patches. + - Build failure on non Linux targets fixed. Closes: #816394. + * Update libdw1 symbols file. + * Improve DEB_BUILD_OPTIONS=nocheck handling (Helmut Grohne). See #832456. + - Don't treat DEB_BUILD_OPTIONS=casinocheck as nocheck. + - Don't default to nocheck for cross building. + - Annotate Build-Depends: gcc-multilib with profile. + * Update reference to new sourceware.org home. + + -- Matthias Klose Thu, 29 Dec 2016 06:09:04 +0100 + +elfutils (0.166-2.2) unstable; urgency=medium + + * Non-maintainer upload. + * testsuite-amd64-fix-backtrace-native.patch: Backport upstream + patch to fix FTBFS on amd64 (Closes: #841124) + + -- James Clarke Tue, 18 Oct 2016 08:13:34 +0100 + +elfutils (0.166-2.1) unstable; urgency=medium + + * Non-maintainer upload. + * Build-Depend on gcc-multilib and libc6-dbg on sparc64 (Closes: #832584) + + -- James Clarke Fri, 07 Oct 2016 15:16:09 +0100 + +elfutils (0.166-2) unstable; urgency=medium + + * Actually add ignore_strmerge.diff to the patch series. + + -- Kurt Roeckx Sat, 23 Jul 2016 18:46:20 +0200 + +elfutils (0.166-1) unstable; urgency=medium + + * New upstream release + * Ignore run-native-test on Hurd, the maps file doesn't have + paths in it. Patch from Samuel Thibault + (Closes: #682101) + * Make cross compilation actually work. Patch from Helmut Grohne + (Closes: #818099) + * Add libebl.a to libdw-dev (Closes: #825747, #647918) + * Ignore strmerge test failured, needed on at least mips. Patch + from Jurica Stanojkovic + (Closes: #818485) + * Change versioned build-depends on debhelper from 8.1.3 to 9 to + make lintian happy. + * Update Standards-Version to 3.9.8, no changes required. + + -- Kurt Roeckx Sat, 23 Jul 2016 17:25:04 +0200 + +elfutils (0.165-3) unstable; urgency=medium + + * Add patches from Mark Wielaard to fix non-Linux issues. + + -- Kurt Roeckx Sat, 16 Jan 2016 17:53:34 +0100 + +elfutils (0.165-2) unstable; urgency=medium + + * Make the new libelf.h work with older elf.h from glibc (Closes: #810885) + + -- Kurt Roeckx Wed, 13 Jan 2016 17:50:08 +0100 + +elfutils (0.165-1) unstable; urgency=medium + + * New upstream release + * Install libelf.pc and libdw.pc file. + * Update libelf1.symbols and libdw1.symbols with 0.165 version + + -- Kurt Roeckx Mon, 11 Jan 2016 21:28:32 +0100 + +elfutils (0.164-1) unstable; urgency=medium + + * New upstream release + - Fixes sparc64 issues (Closes: #805630) + - Drop patches applied upstream: 0001-Reduce-scope-of-some-includes.patch, + 0002-tests-Mark-an-unused-argument-as-such.patch, + 0003-tests-dwfl-bug-fd-leak-Guard-against-null-module-add.patch, + 0004-tests-skip-run-deleted.sh-when-dwfl_linux_proc_attac.patch, + pr18792.diff + - Remove redhat-portability.diff and scanf-format.patch + - Update backend to use to stop using the old-style function + definition: hppa_backend.diff, m68k_backend.diff, mips_backend.diff + + -- Kurt Roeckx Sat, 26 Dec 2015 20:55:48 +0100 + +elfutils (0.163-5.1) unstable; urgency=medium + + * Non-maintainer upload. + * Fix finding the detached debug info when no build-id's are used. + Closes: #795386. + + -- Matthias Klose Fri, 14 Aug 2015 12:25:05 +0200 + +elfutils (0.163-5) unstable; urgency=medium + + * Fix typo in 0003-Add-mips-n64-relocation-format-hack.patch that + causing crash (Closes: #794488) + + -- Kurt Roeckx Sat, 08 Aug 2015 15:12:31 +0200 + +elfutils (0.163-4) unstable; urgency=medium + + * More fixes for kfreebsd and hurd + + -- Kurt Roeckx Tue, 21 Jul 2015 11:39:55 +0000 + +elfutils (0.163-3) unstable; urgency=medium + + * Fix build failures on kfreebsd and hurd + + -- Kurt Roeckx Tue, 21 Jul 2015 13:01:57 +0200 + +elfutils (0.163-2) unstable; urgency=medium + + * Drop non_linux.patch, it has been applied upstream + + -- Kurt Roeckx Mon, 20 Jul 2015 15:49:09 +0200 + +elfutils (0.163-1) unstable; urgency=medium + + * New upstream release + - Drop arm_unsupported.patch, arm64.patch, CVE-2014-9447.patch, + arm_syscall.patch, arm_func_value.patch, arm_unwind_ret_mask.patch, + unaligned.patch, aarch64-run-native-test-fix.patch: applied upstream + - Added ppc64el support (Closes: #754798) + - Fixed too much string replacement (Closes: #775117) + * Add flex and bison to build-depends + * Change hppa, m68k and mips backend to not use the removed DW_TAG_mutable_type. + * Ignore errors on kfreebsd in the native test suite (Closes: #649038) + * Add mips64el support (Closes: #774639) + * install known-dwarf.h in libdw-dev + * Update libdw1.symbols file + + -- Kurt Roeckx Mon, 20 Jul 2015 14:30:21 +0200 + +elfutils (0.159-4.2) unstable; urgency=medium + + * Non-maintainer upload. + * Apply an upstream patch to fix the build failure on arm64 (closes: #776523). + + -- Michael Gilbert Fri, 13 Feb 2015 22:30:44 +0000 + +elfutils (0.159-4.1) unstable; urgency=high + + * Non-maintainer upload by the Security Team. + * Fix CVE-2014-9447: path traversal issue in ar (closes: #775536). + + -- Michael Gilbert Mon, 26 Jan 2015 01:49:30 +0000 + +elfutils (0.159-4) unstable; urgency=medium + + [ Wookey ] + * Fix failing run-native-test on arm64 (from Mark Wielaard) + (Closes: #753552) + + -- Kurt Roeckx Sun, 06 Jul 2014 15:21:48 +0200 + +elfutils (0.159-3) unstable; urgency=medium + + * Make it build again on the non linux ports. + * Handle unaligned data when reading core files. + + -- Kurt Roeckx Tue, 24 Jun 2014 22:14:25 +0200 + +elfutils (0.159-2) unstable; urgency=medium + + * Add patches from Mark Wielaard to make + things work on armhf. + * Build-Depends on libc6-dbg on arm* to make the backtrace + tests work instead of skip. + + -- Kurt Roeckx Sun, 15 Jun 2014 16:15:55 +0200 + +elfutils (0.159-1) unstable; urgency=medium + + * New upstream release + - Removed patches applied upstream: elfutils-robustify.patch, + core_filename.patch, CVE-2014-0172.patch, unwind_non_linux.patch + - Add libdwelf.h to libdw-dev + - New functions in libdw: udpate symbols file + * Also output tests/test-suite.log on failure + * Also Build-Depend on libc6-dbg on powerpcspe, ppc64 and ppc64el + + -- Kurt Roeckx Mon, 26 May 2014 22:03:29 +0200 + +elfutils (0.158-2) unstable; urgency=medium + + * There is no support for unwinding on non-Linux ports, make it + build on them and make the test suite skip the tests. + * Build-Depend on libc6-dbg on powerpc so that we have unwind + information. This is a work around for things not being + build using -fasynchronous-unwind-tables + * Output tests/test-suite.log + * Add support for parallel building + + -- Kurt Roeckx Thu, 01 May 2014 19:04:06 +0200 + +elfutils (0.158-1) unstable; urgency=medium + + * New upstream release + - Drop patch applied upstream + - Add supports for arm64 (Closes: #745368) + - Update libdw1.symbols. + * Apply core_filename.patch from Matthias Klose + * Fix CVE-2014-0172 (Closes: #744017) + * Add upstream signing key. + * Remove config/ar-lib file during clean + + -- Kurt Roeckx Mon, 21 Apr 2014 12:59:25 +0200 + +elfutils (0.157-3) unstable; urgency=low + + * Build-Depend on gcc-multilib on [any-amd64] instead of [amd64] + + -- Kurt Roeckx Sun, 17 Nov 2013 22:54:31 +0100 + +elfutils (0.157-2) unstable; urgency=low + + * Application in the readelf binary package, libdw1 itself use internal + APIs from libelf and so need a strict dependency on the same libelf1 + binary package. libasm1 also needs a strict dependency on libdw1 since + it uses libebl.a and so uses the MODVERSION to open the backends. The + dependency from libasm1 to libdw1 was missing. + Disabling the thread safety resulted in struct Elf's size changing + causing things like eu-readelf to break when an older libelf1 was + installed. + * Apply patch from upstream to fix the IA64 regression failure + with a powerpc binary + + -- Kurt Roeckx Sun, 03 Nov 2013 15:20:06 +0100 + +elfutils (0.157-1) unstable; urgency=low + + * New upstream release + - Update portability and robustify patch + - Make arm_backend.diff apply to the new upstream version + - Adjust symbol files for new symbols + * Adjust addrcfi test results for arm to work with our arm patch. + + -- Kurt Roeckx Tue, 01 Oct 2013 18:21:23 +0200 + +elfutils (0.156-1) unstable; urgency=low + + * New upstream release + - Update portability and robustify patch + - Make hppa_backend.diff, arm_backend.diff, mips_backend.diff, + m68k_backend.diff, testsuite-ignore-elflint apply to the new + upstream version + - Drop patches elf_end_unlock.patch, alldts.patch, strip_sh_type.patch: + applied upstream + - Works with binutils-gold (Closes: #647359) + - Works with gcc 4.8 (Closes: #701271) + * drop elf_additions.diff, it's not used. + * Remove config.h.in and test-driver during clean (Closes: #695927) + * Add build dependency on gcc-multilib [amd64] to have a working gcc -m32 + for the test suite. + * arm backend: change r12 back to signed, no idea why it was made unsigned. + * arm backend: rename the "special" set to "state". + * Our arm backend patch adds more registers, update the arm_backend.diff to + expectd those changes in the test suite + * disable thread safety, it's not tested upstream. + * Update libdw1.symbols + + -- Kurt Roeckx Sun, 28 Jul 2013 14:32:23 +0200 + +elfutils (0.153-2) unstable; urgency=low + + * Make it actually build properly using build-arch. (Closes: #684528) + * Call rwlock_unlock() before rwlock_fini(). The lock was still held + causing problems on kfreebsd. (Closes: #662041) + * Don't exclude sh_type >= SHT_NUM from stripping, it's set to + SHT_MIPS_DWARF on mips. (Closes: #662041) + * readelf -w didn't show the content of debug sections on mips + because sh_type was set to SHT_MIPS_DWARF. + + -- Kurt Roeckx Tue, 18 Sep 2012 21:12:08 +0200 + +elfutils (0.153-1) unstable; urgency=low + + [ Jonathan Nieder ] + * Run autotools at build time. + - debian/control: Build-Depends: autoconf, automake. + - debian/rules: + - config.status: + - depend on configure.ac, not configure. + - autoreconf -fis. + - clean: remove autotools-generated files to avoid .diff.gz + changes when built twice in a row. + - debian/patches: remove do-autoreconf.diff. + + [ Marcin Juszkiewicz ] + * Convert to multiarch. (Closes: #657139) + * Added build-{arch,indep} targets. + * Switched to use 'dh_prep' instead of 'dh_clean -k' + + [ Kurt Roeckx ] + * New upstream release + - Portability patch has workaround for broken bswap_32 macro. + This should also have been fixed in glibc code. (Closes: #595496) + - Fix bashism in configure script (Closes: #647350) + * Remove Christian Aichinger from uploaders (Closes: #661119) + * Make the m68k port functional, thanks to a patch from + Thorsten Glaser (Patch in #595496, #384794) + * Fix test suite to set up test environment (alldts.patch). + * Use dpkg-buildflags. Build-Depend on dpkg-dev (>= 1.16.1~) for + buildflags.mk. + * Call configure with --enable-maintainer-mode so all files get regenerated + Also add Build-Depends on gawk for this to work. + * Revert %m[ to %a[ change in addr2line and line2addr from the portability + patch. + * Clean up more files (Makefile.in, libdw/known-dwarf.h) + * Set libdir to the multiarch dir, so that the rpath gets set up correctly + and that we don't have to move the files in the rules file. + + -- Kurt Roeckx Fri, 24 Feb 2012 20:23:08 +0100 + +elfutils (0.152-1) unstable; urgency=low + + * New upstream release + - Update portability and robustify patch. + - Update symbol file for libdw1, 2 new functions. + * Remove obsolete files from the debian dir. + * Update watch file to work with newer versions. + + -- Kurt Roeckx Wed, 08 Sep 2010 19:54:20 +0200 + +elfutils (0.148-1) unstable; urgency=low + + * New upstream release + - Drop debug_filename.patch, applied upstream. + - New symbols in libdw1, update symbols file. + + -- Kurt Roeckx Sat, 03 Jul 2010 15:01:59 +0200 + +elfutils (0.147-2) unstable; urgency=low + + * Open the proper file with debug info in case they have the same + name. (Closes: #555549) + + -- Kurt Roeckx Thu, 17 Jun 2010 18:38:27 +0200 + +elfutils (0.147-1) unstable; urgency=low + + * New upstream release + + -- Kurt Roeckx Mon, 24 May 2010 10:49:05 +0200 + +elfutils (0.146-1) unstable; urgency=low + + * New upstream release + - adds better support for the sh arch + - Add build-depedency on liblzma-dev + - Add build-depedency on gettext + - Add tanslations to libelf1. All packges making use of those + files depend on it. + - New symbols dwfl_core_file_report in libdw1, update symbol file. + * Call configure with --enable-thread-safety + + -- Kurt Roeckx Sat, 24 Apr 2010 11:55:24 +0200 + +elfutils (0.145-1) unstable; urgency=low + + * New upstream release + * Make elfutils depend libdw1 (= ${binary:Version}). The static libebl.a + that it used by the applications in changes MODVERSION on rebuild. It's + the only thing making use of libebl.a + + -- Kurt Roeckx Wed, 24 Feb 2010 19:36:07 +0100 + +elfutils (0.144-1) unstable; urgency=low + + * New upstream version + - Fixes segfault in systemtap (Closes: #556133) + - Remove elflint-comment.diff and nobits.diff, applied upstream. + - dwarf_aggregate_size got added in libdw1, + elf_getphdrnum got added to libelf: update symbol file. + * Switch to dpkg-source 3.0 (quilt) format + * hppa: Use dwarf_aggregate_size(). + * Add ${misc:Depends} to all packages + * Change Standards-Version to 3.8.4, no changes required. + + -- Kurt Roeckx Mon, 15 Feb 2010 23:27:18 +0100 + +elfutils (0.143-2) unstable; urgency=low + + * Prevent segfault from debug only files. (Closes: #556133) + + -- Kurt Roeckx Mon, 16 Nov 2009 18:22:43 +0100 + +elfutils (0.143-1) unstable; urgency=low + + * New upstream release. + - Upstream added new symbols in libdw1, adjust symbol file. + * Remove the fix-bswap-warnings.diff and pointer_cast.diff + patch, they weren't used anyway. + * Remove posix_fadvise.diff and namelen.diff, applied upstream. + * Add elflint-comment.diff, from upstream git. Fixes a regression + suite error with newer binutils. + + -- Kurt Roeckx Mon, 21 Sep 2009 21:06:21 +0000 + +elfutils (0.142-1) unstable; urgency=low + + * New upstream version + * Provide a static version of libdw. Do not use it unless you + know what you're doing. (Closes: #538375) + * Replace elf_getshstrndx by elf_getshdrstrndx in the mips backend. + elf_getshstrndx has been deprecated. + * Upstream added new symbols, adjust symbol files. + + -- Kurt Roeckx Fri, 14 Aug 2009 13:56:30 +0200 + +elfutils (0.141-2) unstable; urgency=low + + * Make libdw-dev Depend on libdw1 (Closes: #526824) + + -- Kurt Roeckx Sun, 03 May 2009 22:07:59 +0200 + +elfutils (0.141-1) unstable; urgency=low + + * New upstream release + - Update redhat-robustify.diff and redhat-portability.diff + - Remove redhat-strip-copy-symtab.diff, does not seem to be used anymore. + Also remove things in the rules file that deal with it, and + drop sharutils from build-depends. + - Remove elflint_initialization.diff, unaligned.diff, pointer_cast.diff, + gnu_inline.diff, readelf_subelf.diff, gcc-4.3_support: applied or + fixed some other way upstream + * Update watch file to new location. + * Make libasm-dev conflict with libasm0-dev (Closes: #509042) + * Create a shared version of libdw, and move libebl's file + in the libdw1 package. Drop the static versions of libdw and libebl. + There is no libebl-dev anymore. (Closes: #457543) + * Add elfutils/version.h to libelf-dev + * Run test suite with LC_CTYPE=C, to have the same sort ordering. + * Add Build-Dependency on zlib1g-dev, libbz2-dev and m4. + * Start using dpkg-gensymbols: + - libasm1: Upstream added disasm_begin, disasm_cb, disasm_end + and disasm_str to ELFUTILS_1.0 in 0.132, the others are there + since 0.120. + - libelf1: ELFUTILS_1.2 was added in 0.122, ELFUTILS_1.3 in + 0.130 and ELFUTILS_1.4 in 0.132. gelf_rawchunk + and gelf_freechunk got removed in 0.131. + - libdw1: Versions are when get got introduced. dwarf_getelf + was removed from ELFUTILS_0.122 and changed to ELFUTILS_0.126 + in 0.126 + * libasm1 and libelf1 added new functions, bump shlibs + * Update Standards-Version to 3.8.1 + - Change ${Source-Version} to ${binary:Version} + - Add support for DEB_BUILD_OPTIONS nocheck + - Add upstream Homepage + * Don't use -$(MAKE) distclean + * Remove debian/dirs file. + + -- Kurt Roeckx Sat, 02 May 2009 16:30:39 +0200 + +elfutils (0.131-4) unstable; urgency=low + + * Move static functions the only file that uses it. Avoids warning + using gcc-4.3. Thanks to Maximiliano Curia for the patch. + (Closes: #467103) + + -- Kurt Roeckx Sat, 05 Apr 2008 13:40:13 +0000 + +elfutils (0.131-3) unstable; urgency=low + + * Add m68k backend. + * Fix copyright file to point to /usr/share/common-licenses/GPL-2 + + -- Kurt Roeckx Wed, 26 Dec 2007 19:53:09 +0100 + +elfutils (0.131-2) unstable; urgency=low + + * Bump shlibs for libelf1 since it added new functions. + + -- Kurt Roeckx Mon, 17 Dec 2007 18:33:45 +0100 + +elfutils (0.131-1) unstable; urgency=low + + * New usptream version. (Closes: #455878) + - ebl_core_note() changed function arguments. + - libelf: Add functions: gelf_getauxv(), gelf_update_auxv(), + gelf_getnote(), elf_getdata_rawchunk(). + removed gelf_rawchunk(), gelf_freechunk() + - Changed some types from off_t to off64_t. The library + was always build with LFS, so it's just a correction of the types. + * merge patches + * arm, hppa and mips backend: Use dwarf_attr_integrate() instead of + dwarf_attr(), and dwarf_hasattr_integrate() instead of dwarf_hasattr(). + * Add patch from Aurelien Jarno to support + GNU/kFreeBSD (Closes: #452428) + + -- Kurt Roeckx Sat, 15 Dec 2007 20:31:14 +0100 + +elfutils (0.128-1) unstable; urgency=low + + * New upstream release: + Remove patch alpha_backend_regs.diff, upstream implemented + it themself (with the aliases for the register names). + * Make libasm-dev conflict with libelfsh0-dev again, the 0.123-3 change + got lost. (Closes: #404054) + * First cast main to an intptr_t before casting it to a 64 bit int. + Directly casting from a pointer to 64 bit int gives a warning + on 32 bit systems (with gcc-4.2). (Closes: #431455) + * Also check for /proc/$$. + + -- Kurt Roeckx Sun, 08 Jul 2007 19:28:46 +0000 + +elfutils (0.127-4) unstable; urgency=low + + * Use the gnu_inline attribute for inline functions so it build with + gcc-4.2. (Closes: #424548) + * Add check for maps and auxv file in the proc dir to try and debug + the sparc build failure. + + -- Kurt Roeckx Fri, 18 May 2007 13:41:35 +0200 + +elfutils (0.127-3) unstable; urgency=low + + * Update unaligned patch to also work when we're using -O2. + + -- Kurt Roeckx Sun, 13 May 2007 22:48:57 +0200 + +elfutils (0.127-2) unstable; urgency=low + + * Remove duplicate initialization of DT_PLTRELSZ in elflint. + (Closes: #393812) + * Only using posix_fadvise() when we have POSIX_FADV_SEQUENTIAL since + some arches like kFreeBSD don't support it. (Closes: #404091) + * Fix unaligned accesses on IA64. Added patch unaligned.diff. + + -- Kurt Roeckx Sun, 13 May 2007 18:12:01 +0200 + +elfutils (0.127-1) unstable; urgency=low + + * New upstream release: + Remove patches applied upstream: fix-testsuite.diff, maintainer_mode.diff, + fix-distclean-to-really-distclean.diff, sparc_retval-backend.diff, + elflint-alpha.diff, fix-readelf.diff, fix-alignment-sparc.diff, + native-pid.diff, unalligned-endian.diff + * register_name() got replaced by register_info(). Update backends + to add dwarf type and number of bits info for those backends: + alpha, arm, hppa, mips + * Added redhat-strip-copy-symtab.diff patch. Inlucde + testfile16.symtab.bz2 and testfile16.symtab.debug.bz2 test files. + Add sharutils to build-depends for uudecode. + * Updated redhat-portability.diff: Now includes fix-mipsel-ftbfs.diff + so remove it. + * Add various types to elf.h + * Update watch file to use a different url. + + -- Kurt Roeckx Sat, 5 May 2007 15:59:46 +0200 + +elfutils (0.123-2) unstable; urgency=low + + [ Kurt Roeckx ] + * Add backend support for alpha: adding the registers. + * Add backend support for arm: adding regs and retval. + Thanks to Eugeniy Meshcheryakov + * Add backend support for hppa, thanks to + Eugeniy Meshcheryakov + * Add some missing ELFOSABI_* and EM_* to elf.h + + [ Christian Aichinger ] + * Fix sparc backend retval + * Add mips backend. + * Rewrite the static backend so making changes to the backends + is easier. + + -- Kurt Roeckx Sun, 27 Aug 2006 15:48:23 +0000 + +elfutils (0.123-1) unstable; urgency=low + + * New upstream release + - Add IA64 backend support + - Remove redhat-fix-cast.diff, applied upstream + - Make patches apply to new upstream version. + * Include configure and all Makefile.in's in the configure patch. + + -- Kurt Roeckx Tue, 15 Aug 2006 19:42:44 +0000 + +elfutils (0.122-4) unstable; urgency=low + + [ Kurt Roeckx ] + * The backends init functions should be functions, not pointers + to functions. Also thanks to Eugeniy Meshcheryakov + for pointing out the same. This should fix the segmentation faults + seen on ia64. + * When doing x && y &, bash retuns the pid for x, while the script + expected the one for y. Other shells I've tried return that of y. + As a result the run-native-test.sh keeps a "native" process running. + Removed the &&, so it always gets the correct pid. (Closes: #382758) + * Fix endiannes problems for opening files of your own endiannes + when not avoiding unaligned access. This didn't affect + i386 and amd64. + + -- Kurt Roeckx Sun, 13 Aug 2006 15:08:32 +0000 + +elfutils (0.122-3) unstable; urgency=low + + [ Kurt Roeckx ] + * Add build dependency on bzip2, so that all the regression + tests can run. + * elflint: Add EM_ALPHA to valid_e_machine. + + [ Christian Aichinger] + * Add retval to the sparc backend. + * Ignore testsuite failures that elflint reports. + * readelf should check destshdr instead of shdr. + * Fix alignment problems in libdw_alloc seen on sparc. + + -- Kurt Roeckx Wed, 9 Aug 2006 19:21:05 +0000 + +elfutils (0.122-2) unstable; urgency=low + + * Make libelf-dev Conflict with libelfg0-dev since they both ship + the same library and headers. + + -- Kurt Roeckx Fri, 4 Aug 2006 19:38:32 +0000 + +elfutils (0.122-1) unstable; urgency=low + + * Initial release (Closes: #368248) + + -- Kurt Roeckx Sun, 21 May 2006 15:03:01 +0000 + diff --git a/compat b/compat new file mode 100644 index 0000000..b4de394 --- /dev/null +++ b/compat @@ -0,0 +1 @@ +11 diff --git a/control b/control new file mode 100644 index 0000000..b47dc7f --- /dev/null +++ b/control @@ -0,0 +1,167 @@ +Source: elfutils +Priority: optional +Maintainer: Debian Elfutils Maintainers +Uploaders: Kurt Roeckx , + Matthias Klose , + Sergio Durigan Junior , +Build-Depends: debhelper (>= 11), + autoconf, automake, lsb-release, + bzip2, zlib1g-dev, zlib1g-dev:native, libbz2-dev, liblzma-dev, + m4, gettext, po-debconf, + gawk, dpkg-dev (>= 1.16.1~), + gcc-multilib [any-amd64 sparc64] , + libc6-dbg [powerpc powerpcspe ppc64 ppc64el armel armhf arm64 sparc64 riscv64], + flex, bison, + pkg-config, + libarchive-dev , + libmicrohttpd-dev , libcurl4-gnutls-dev , libsqlite3-dev , +Build-Conflicts: autoconf2.13 +Standards-Version: 4.5.1 +Section: libs +Homepage: https://sourceware.org/elfutils/ +Vcs-Browser: https://salsa.debian.org/toolchain-team/elfutils +Vcs-Git: https://salsa.debian.org/toolchain-team/elfutils.git + +Package: elfutils +Section: utils +Architecture: any +Multi-Arch: foreign +Depends: ${shlibs:Depends}, ${misc:Depends}, + libelf1 (= ${binary:Version}), libdw1 (= ${binary:Version}) +Description: collection of utilities to handle ELF objects + Elfutils is a collection of utilities, including eu-ld (a linker), + eu-nm (for listing symbols from object files), eu-size (for listing the + section sizes of an object or archive file), eu-strip (for discarding + symbols), eu-readelf (to see the raw ELF file structures), and eu-elflint + (to check for well-formed ELF files). + +Package: libelf1 +Architecture: any +Multi-Arch: same +Depends: ${shlibs:Depends}, ${misc:Depends} +Pre-Depends: ${misc:Pre-Depends} +Description: library to read and write ELF files + The libelf1 package provides a shared library which allows reading and + writing ELF files on a high level. Third party programs depend on + this package to read internals of ELF files. The programs of the + elfutils package use it also to generate new ELF files. + . + This library is part of elfutils. + +Package: libelf-dev +Section: libdevel +Architecture: any +Multi-Arch: same +Depends: libelf1 (= ${binary:Version}), ${misc:Depends}, zlib1g-dev +Conflicts: libelfg0-dev +Description: libelf1 development libraries and header files + libelf1 provides a shared library which allows reading and writing of ELF + files on a high level. + . + This package contains development libraries and header files for libelf1. + +Package: libdw-dev +Section: libdevel +Architecture: any +Multi-Arch: same +Depends: libelf-dev, libdw1 (= ${binary:Version}), ${misc:Depends}, + zlib1g-dev, liblzma-dev +Description: libdw1 development libraries and header files + libdw1 provides a library that provides access to DWARF debug information + stored inside ELF files. + . + This package contains development libraries and header files for libdw1. + . + It also contains a static version of libdw. Only link to the static version + for special cases and when you don't need anything from the ebl backends. + +Package: libdw1 +Architecture: any +Multi-Arch: same +Depends: ${shlibs:Depends}, libelf1 (= ${binary:Version}), ${misc:Depends} +Pre-Depends: ${misc:Pre-Depends} +Description: library that provides access to the DWARF debug information + libdw1 provides a library that provides access to DWARF debug information + stored inside ELF files. + . + This library is part of elfutils. + +Package: libasm1 +Architecture: any +Multi-Arch: same +Depends: ${shlibs:Depends}, ${misc:Depends}, + libelf1 (= ${binary:Version}), libdw1 (= ${binary:Version}) +Pre-Depends: ${misc:Pre-Depends} +Description: library with a programmable assembler interface + The libasm1 package provides a library with a programmable assembler + interface. It allows you to create ELF files on a low level. + . + This library is part of elfutils. + +Package: libasm-dev +Section: libdevel +Architecture: any +Multi-Arch: same +Depends: libasm1 (= ${binary:Version}), libelf-dev, ${misc:Depends} +Conflicts: libelfsh0-dev, libasm0-dev +Description: libasm development libraries and header files + libasm1 allows you to create ELF files on a low level. + . + This package contains development libraries and header files for libasm1. + +Package: libdebuginfod1 +Build-Profiles: +Architecture: any +Multi-Arch: same +Depends: ${shlibs:Depends}, ${misc:Depends}, + libelf1 (= ${binary:Version}), libdw1 (= ${binary:Version}), + libdebuginfod-common (>= ${source:Version}) +Pre-Depends: ${misc:Pre-Depends} +Description: library to interact with debuginfod (development files) + The libdebuginfo1 package provides a library with an interface to interact + with debuginfod. + . + This library is part of elfutils. + +Package: libdebuginfod-dev +Build-Profiles: +Section: libdevel +Architecture: any +Multi-Arch: same +Depends: libdebuginfod1 (= ${binary:Version}), ${misc:Depends}, libelf-dev, +Description: libdebuginfod development libraries and header files + libasm1 allows you to interact with debuginfod. + . + This package contains development libraries and header files for + libdebuginfod1. + +Package: debuginfod +Build-Profiles: +Section: devel +Architecture: any +Depends: libdebuginfod1 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: debuginfo-related http file-server daemon + Server, client tool and library to index and fetch ELF/DWARF files + addressed by build-id through HTTP. + +Package: libdebuginfod-common +Build-Profiles: +Section: devel +Architecture: all +Multi-Arch: foreign +Depends: ${misc:Depends}, ucf +Pre-Depends: ${misc:Pre-Depends}, debconf +Description: configuration to enable the Debian debug info server + This package asks if it should enable use of the Debian debug info + server with debugging tools that use libdebuginfo such as GDB. + . + When this is allowed by the sysadmin, a snippet will be added to the + shell configuration. You will need to restart your shell after + installing this package before the snippet will work. + . + The Debian debug info server will be contacted every time debugging + tools attempt to look up debug info for binaries or libraries but the + server does not log requests for debug info. + . + The Debian debug info server uses https to securely transfer debugging + files but does not offer OpenPGP signing of debug info. diff --git a/copyright b/copyright new file mode 100644 index 0000000..c0603db --- /dev/null +++ b/copyright @@ -0,0 +1,71 @@ +This package was debianized by Kurt Roeckx on +Sun, 21 May 2006 15:03:01 +0000. + +It was downloaded from +https://sourceware.org/elfutils/ftp/0.168/ + +It was original a .tar.bz2. It has been decompressed and +recompressed again using gzip. + +Copyright Holder: + Copyright (C) 2000 - 2016 Red Hat, Inc. + + Written by: + Ulrich Drepper + Jeff Johnson + Alexander Larsson + Jakub Jelinek + Roland McGrath + + +License: + +Most of the libraries (lib, libelf, libebl, libdw, libdwfl) have the following license: + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see . */ + +The other files are covered by the following license: + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License version 2 can be found in +`/usr/share/common-licenses/GPL-2', the complete text of the GNU +General Public License version 3 can be found in +`/usr/share/common-licenses/GPL-3' and the complete text of the GNU +Lesser General Public License version 3 can be found in +`/usr/share/common-licenses/LGPL-3'. + diff --git a/debuginfod.install b/debuginfod.install new file mode 100644 index 0000000..344d740 --- /dev/null +++ b/debuginfod.install @@ -0,0 +1,4 @@ +usr/bin/debuginfod +usr/bin/debuginfod-find +usr/share/man/man1/debuginfod-find.1 +usr/share/man/man8/debuginfod.8 diff --git a/docs b/docs new file mode 100644 index 0000000..5502ed8 --- /dev/null +++ b/docs @@ -0,0 +1,3 @@ +NEWS +README +TODO diff --git a/elfutils.install b/elfutils.install new file mode 100644 index 0000000..407593f --- /dev/null +++ b/elfutils.install @@ -0,0 +1,3 @@ +usr/bin +usr/share/man/man1/eu-elfclassify.1 +usr/share/man/man1/eu-readelf.1 diff --git a/libasm-dev.install b/libasm-dev.install new file mode 100644 index 0000000..7c0a960 --- /dev/null +++ b/libasm-dev.install @@ -0,0 +1,3 @@ +usr/include/elfutils/libasm.h +usr/lib/*/libasm.a +usr/lib/*/libasm.so diff --git a/libasm1.install b/libasm1.install new file mode 100644 index 0000000..aa35d27 --- /dev/null +++ b/libasm1.install @@ -0,0 +1,2 @@ +usr/lib/*/libasm.so.1 +usr/lib/*/libasm-*.so diff --git a/libasm1.symbols b/libasm1.symbols new file mode 100644 index 0000000..0c72b9d --- /dev/null +++ b/libasm1.symbols @@ -0,0 +1,6 @@ +libasm.so.1 libasm1 #MINVER# + *@ELFUTILS_1.0 0.120 + disasm_begin@ELFUTILS_1.0 0.132 + disasm_cb@ELFUTILS_1.0 0.132 + disasm_end@ELFUTILS_1.0 0.132 + disasm_str@ELFUTILS_1.0 0.132 diff --git a/libdebuginfod-common.config b/libdebuginfod-common.config new file mode 100644 index 0000000..acfc4dd --- /dev/null +++ b/libdebuginfod-common.config @@ -0,0 +1,22 @@ +#!/bin/sh + +set -e + +. /usr/share/debconf/confmodule + +CONFTEMPLATEPATH="/usr/share/libdebuginfod-common" + +db_version 2.0 +db_capb + +# Ask whether the user is OK with using debuginfod. We just bother +# with the question if there is actually a debuginfod profile.d script +# available. +if [ -f "${CONFTEMPLATEPATH}"/debuginfod.sh ]; then + if grep -qFx "ID=debian" /etc/os-release; then + db_input medium libdebuginfod/usedebiandebuginfod || true + elif grep -qFx "ID=ubuntu" /etc/os-release; then + db_input high libdebuginfod/useubuntudebuginfod || true + fi + db_go || true +fi diff --git a/libdebuginfod-common.install b/libdebuginfod-common.install new file mode 100644 index 0000000..97dd938 --- /dev/null +++ b/libdebuginfod-common.install @@ -0,0 +1,2 @@ +etc/profile.d/debuginfod.* usr/share/libdebuginfod-common/ +usr/share/man/man7/debuginfod-client-config.7 diff --git a/libdebuginfod-common.postinst b/libdebuginfod-common.postinst new file mode 100644 index 0000000..e9b4f11 --- /dev/null +++ b/libdebuginfod-common.postinst @@ -0,0 +1,52 @@ +#!/bin/bash + +set -e + +. /usr/share/debconf/confmodule + +configure_debuginfod() +{ + local -r CONFTEMPLATEPATH="/usr/share/libdebuginfod-common" + local RET="false" + + if grep -qFx "ID=debian" /etc/os-release; then + db_get libdebuginfod/usedebiandebuginfod || RET="false" + elif grep -qFx "ID=ubuntu" /etc/os-release; then + db_get libdebuginfod/useubuntudebuginfod || RET="false" + fi + + for ext in sh csh; do + [ -f "${CONFTEMPLATEPATH}/debuginfod.${ext}" ] || continue + + if [ "$RET" = "true" ]; then + UCF_FORCE_CONFMISS=1 ucf --three-way --debconf-ok \ + "${CONFTEMPLATEPATH}/debuginfod.${ext}" \ + "/etc/profile.d/debuginfod.${ext}" + ucfr libdebuginfod-common "/etc/profile.d/debuginfod.${ext}" + chmod 0644 "/etc/profile.d/debuginfod.${ext}" + else + rm -f "/etc/profile.d/debuginfod.${ext}" + fi + done +} + +case "$1" in + configure) + configure_debuginfod + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/libdebuginfod-common.postrm b/libdebuginfod-common.postrm new file mode 100644 index 0000000..c072e1e --- /dev/null +++ b/libdebuginfod-common.postrm @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +case "$1" in + purge) + for ext in sh csh; do + [ -f /etc/profile.d/debuginfod."${ext}" ] || continue + + if command -v ucf > /dev/null; then + ucf --purge /etc/profile.d/debuginfod."${ext}" + fi + if command -v ucfr > /dev/null; then + ucfr --purge libdebuginfod-common /etc/profile.d/debuginfod."${ext}" + fi + rm -f /etc/profile.d/debuginfod."${ext}" + done + ;; + + remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/libdebuginfod-common.templates b/libdebuginfod-common.templates new file mode 100644 index 0000000..4e168ba --- /dev/null +++ b/libdebuginfod-common.templates @@ -0,0 +1,25 @@ +Template: libdebuginfod/usedebiandebuginfod +Type: boolean +Default: false +_Description: Connect to Debian's debuginfod server to download debug symbols? + While debugging programs (with GDB, for example) or using + debuginfo-consumer applications, it is possible to connect to + Debian's debuginfod server and download the necessary debug + information for the program you are debugging on-the-fly, without the + need to configure the debian-debug apt repository nor installing + any dbgsym packages. This service is maintained by Debian, and the + only information you will have to send to it is the Build-ID hash of + the program(s)/library(ies) being debugged. + +Template: libdebuginfod/useubuntudebuginfod +Type: boolean +Default: false +_Description: Connect to Ubuntu's debuginfod server to download debug symbols? + While debugging programs (with GDB, for example) or using + debuginfo-consumer applications, it is possible to connect to + Ubuntu's debuginfod server and download the necessary debug + information for the program you are debugging on-the-fly, without the + need to configure the ddebs apt repository nor installing + any ddeb package. This service is maintained by Ubuntu, and the + only information you will have to send to it is the Build-ID hash of + the program(s)/library(ies) being debugged. diff --git a/libdebuginfod-dev.install b/libdebuginfod-dev.install new file mode 100644 index 0000000..f809099 --- /dev/null +++ b/libdebuginfod-dev.install @@ -0,0 +1,4 @@ +usr/lib/*/libdebuginfod.so +usr/lib/*/pkgconfig/libdebuginfod.pc +usr/include/elfutils/debuginfod.h +usr/share/man/man3/debuginfod_*.3 diff --git a/libdebuginfod1.install b/libdebuginfod1.install new file mode 100644 index 0000000..62b1838 --- /dev/null +++ b/libdebuginfod1.install @@ -0,0 +1,2 @@ +usr/lib/*/libdebuginfod.so.* +usr/lib/*/libdebuginfod-*.so diff --git a/libdebuginfod1.symbols b/libdebuginfod1.symbols new file mode 100644 index 0000000..59568fc --- /dev/null +++ b/libdebuginfod1.symbols @@ -0,0 +1,5 @@ +libdebuginfod.so.1 libdebuginfod1 #MINVER# + (symver)ELFUTILS_0.178 0.180 + (symver)ELFUTILS_0.179 0.180 + (symver)ELFUTILS_0 0.180 + (symver)ELFUTILS_0.183 0.182+20210203 diff --git a/libdw-dev.install b/libdw-dev.install new file mode 100644 index 0000000..4e08f98 --- /dev/null +++ b/libdw-dev.install @@ -0,0 +1,8 @@ +usr/include/dwarf.h +usr/include/elfutils/libdw.h +usr/include/elfutils/libdwfl.h +usr/include/elfutils/libdwelf.h +usr/include/elfutils/known-dwarf.h +usr/lib/*/libdw.so +usr/lib/*/libdw.a +usr/lib/*/pkgconfig/libdw.pc diff --git a/libdw1.install b/libdw1.install new file mode 100644 index 0000000..344fc0f --- /dev/null +++ b/libdw1.install @@ -0,0 +1,2 @@ +usr/lib/*/libdw.so.1 +usr/lib/*/libdw-0.*.so diff --git a/libdw1.symbols b/libdw1.symbols new file mode 100644 index 0000000..2e759d1 --- /dev/null +++ b/libdw1.symbols @@ -0,0 +1,28 @@ +libdw.so.1 libdw1 #MINVER# + *@ELFUTILS_0.122 0.126 + *@ELFUTILS_0.126 0.126 + *@ELFUTILS_0.127 0.127 + *@ELFUTILS_0.130 0.130 + *@ELFUTILS_0.136 0.136 + *@ELFUTILS_0.138 0.138 + *@ELFUTILS_0.142 0.142 + *@ELFUTILS_0.143 0.143 + *@ELFUTILS_0.144 0.144 + *@ELFUTILS_0.146 0.146 + *@ELFUTILS_0.148 0.148 + *@ELFUTILS_0.149 0.149 + *@ELFUTILS_0.156 0.156 + *@ELFUTILS_0.157 0.157 + *@ELFUTILS_0.158 0.158 + *@ELFUTILS_0.159 0.159 + *@ELFUTILS_0.160 0.160 + *@ELFUTILS_0.161 0.161 + *@ELFUTILS_0.165 0.165 + *@ELFUTILS_0.167 0.167 + *@ELFUTILS_0.170 0.170 + *@ELFUTILS_0.171 0.171 + *@ELFUTILS_0.173 0.173 + *@ELFUTILS_0.175 0.175 + *@ELFUTILS_0.177 0.177 + *@ELFUTILS_0.186 0.186 + *@ELFUTILS_0 0.126 diff --git a/libelf-dev.install b/libelf-dev.install new file mode 100644 index 0000000..6e14773 --- /dev/null +++ b/libelf-dev.install @@ -0,0 +1,9 @@ +usr/include/libelf.h +usr/include/gelf.h +usr/include/nlist.h +usr/include/elfutils/elf-knowledge.h +usr/include/elfutils/version.h +usr/lib/*/libelf.a +usr/lib/*/libelf.so +usr/lib/*/pkgconfig/libelf.pc +usr/share/man/man3/elf_*.3 diff --git a/libelf1.install b/libelf1.install new file mode 100644 index 0000000..4e2d096 --- /dev/null +++ b/libelf1.install @@ -0,0 +1,3 @@ +usr/lib/*/libelf.so.1 +usr/lib/*/libelf-*.so +usr/share/locale/ diff --git a/libelf1.symbols b/libelf1.symbols new file mode 100644 index 0000000..731af1f --- /dev/null +++ b/libelf1.symbols @@ -0,0 +1,10 @@ +libelf.so.1 libelf1 #MINVER# + *@ELFUTILS_1.0 0.131 + *@ELFUTILS_1.1 0.131 + *@ELFUTILS_1.1.1 0.131 + *@ELFUTILS_1.2 0.131 + *@ELFUTILS_1.3 0.131 + *@ELFUTILS_1.4 0.132 + *@ELFUTILS_1.5 0.142 + *@ELFUTILS_1.6 0.144 + *@ELFUTILS_1.7 0.165 diff --git a/patches/0001-Ignore-differences-between-mips-machine-identifiers.patch b/patches/0001-Ignore-differences-between-mips-machine-identifiers.patch new file mode 100644 index 0000000..a9a7210 --- /dev/null +++ b/patches/0001-Ignore-differences-between-mips-machine-identifiers.patch @@ -0,0 +1,31 @@ +From 77cb4a53c270d5854d3af24f19547bc3de825233 Mon Sep 17 00:00:00 2001 +From: James Cowgill +Date: Mon, 5 Jan 2015 15:16:58 +0000 +Subject: [PATCH 1/3] Ignore differences between mips machine identifiers + +Little endian binaries actually use EM_MIPS so you can't tell the endianness +from the elf machine id. Also, the EM_MIPS_RS3_LE machine is dead anyway (the +kernel will not load binaries containing it). + +Signed-off-by: James Cowgill +--- + backends/mips_init.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +Index: b/backends/mips_init.c +=================================================================== +--- a/backends/mips_init.c ++++ b/backends/mips_init.c +@@ -45,11 +45,7 @@ mips_init (Elf *elf __attribute__ ((unus + return NULL; + + /* We handle it. */ +- if (machine == EM_MIPS) +- eh->name = "MIPS R3000 big-endian"; +- else if (machine == EM_MIPS_RS3_LE) +- eh->name = "MIPS R3000 little-endian"; +- ++ eh->name = "MIPS"; + mips_init_reloc (eh); + HOOK (eh, reloc_simple_type); + HOOK (eh, return_value_location); diff --git a/patches/0002-Add-support-for-mips64-abis-in-mips_retval.c.patch b/patches/0002-Add-support-for-mips64-abis-in-mips_retval.c.patch new file mode 100644 index 0000000..72125c9 --- /dev/null +++ b/patches/0002-Add-support-for-mips64-abis-in-mips_retval.c.patch @@ -0,0 +1,168 @@ +From fdaab18a65ed2529656baa64cb6169f34d7e507b Mon Sep 17 00:00:00 2001 +From: James Cowgill +Date: Mon, 5 Jan 2015 15:17:01 +0000 +Subject: [PATCH 2/3] Add support for mips64 abis in mips_retval.c + +Signed-off-by: James Cowgill +--- + backends/mips_retval.c | 104 ++++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 94 insertions(+), 10 deletions(-) + +diff --git a/backends/mips_retval.c b/backends/mips_retval.c +index 33f12a7..d5c6ef0 100644 +--- a/backends/mips_retval.c ++++ b/backends/mips_retval.c +@@ -91,6 +91,8 @@ enum mips_abi find_mips_abi(Elf *elf) + default: + if ((elf_flags & EF_MIPS_ABI2)) + return MIPS_ABI_N32; ++ else if ((ehdr->e_ident[EI_CLASS] == ELFCLASS64)) ++ return MIPS_ABI_N64; + } + + /* GCC creates a pseudo-section whose name describes the ABI. */ +@@ -195,6 +197,57 @@ static const Dwarf_Op loc_aggregate[] = + }; + #define nloc_aggregate 1 + ++/* Test if a struct member is a float */ ++static int is_float_child(Dwarf_Die *childdie) ++{ ++ /* Test if this is actually a struct member */ ++ if (dwarf_tag(childdie) != DW_TAG_member) ++ return 0; ++ ++ /* Get type of member */ ++ Dwarf_Attribute attr_mem; ++ Dwarf_Die child_type_mem; ++ Dwarf_Die *child_typedie = ++ dwarf_formref_die(dwarf_attr_integrate(childdie, ++ DW_AT_type, ++ &attr_mem), &child_type_mem); ++ ++ if (dwarf_tag(child_typedie) != DW_TAG_base_type) ++ return 0; ++ ++ /* Get base subtype */ ++ Dwarf_Word encoding; ++ if (dwarf_formudata (dwarf_attr_integrate (child_typedie, ++ DW_AT_encoding, ++ &attr_mem), &encoding) != 0) ++ return 0; ++ ++ return encoding == DW_ATE_float; ++} ++ ++/* Returns the number of fpregs which can be returned in the given struct */ ++static int get_struct_fpregs(Dwarf_Die *structtypedie) ++{ ++ Dwarf_Die child_mem; ++ int fpregs = 0; ++ ++ /* Get first structure member */ ++ if (dwarf_child(structtypedie, &child_mem) != 0) ++ return 0; ++ ++ do ++ { ++ /* Ensure this register is a float */ ++ if (!is_float_child(&child_mem)) ++ return 0; ++ ++ fpregs++; ++ } ++ while (dwarf_siblingof (&child_mem, &child_mem) == 0); ++ ++ return fpregs; ++} ++ + int + mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + { +@@ -240,6 +293,7 @@ mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + tag = dwarf_tag (typedie); + } + ++ Dwarf_Word size; + switch (tag) + { + case -1: +@@ -258,8 +312,6 @@ mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + case DW_TAG_enumeration_type: + case DW_TAG_pointer_type: + case DW_TAG_ptr_to_member_type: +- { +- Dwarf_Word size; + if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size, + &attr_mem), &size) != 0) + { +@@ -289,7 +341,7 @@ mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + if (size <= 4*regsize && abi == MIPS_ABI_O32) + return nloc_fpregquad; + +- goto aggregate; ++ goto large; + } + } + *locp = ABI_LOC(loc_intreg, regsize); +@@ -298,18 +350,50 @@ mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + if (size <= 2*regsize) + return nloc_intregpair; + +- /* Else fall through. Shouldn't happen though (at least with gcc) */ +- } ++ /* Else pass in memory. Shouldn't happen though (at least with gcc) */ ++ goto large; + + case DW_TAG_structure_type: + case DW_TAG_class_type: + case DW_TAG_union_type: +- case DW_TAG_array_type: +- aggregate: +- /* XXX TODO: Can't handle structure return with other ABI's yet :-/ */ +- if ((abi != MIPS_ABI_O32) && (abi != MIPS_ABI_O64)) +- return -2; ++ /* Handle special cases for structures <= 128 bytes in newer ABIs */ ++ if (abi == MIPS_ABI_EABI32 || abi == MIPS_ABI_EABI64 || ++ abi == MIPS_ABI_N32 || abi == MIPS_ABI_N64) ++ { ++ if (dwarf_aggregate_size (typedie, &size) == 0 && size <= 16) ++ { ++ /* ++ * Special case in N64 / N32 - ++ * structures containing only floats are returned in fp regs. ++ * Everything else is returned in integer regs. ++ */ ++ if (tag != DW_TAG_union_type && ++ (abi == MIPS_ABI_N32 || abi == MIPS_ABI_N64)) ++ { ++ int num_fpregs = get_struct_fpregs(typedie); ++ if (num_fpregs == 1 || num_fpregs == 2) ++ { ++ *locp = loc_fpreg; ++ if (num_fpregs == 1) ++ return nloc_fpreg; ++ else ++ return nloc_fpregpair; ++ } ++ } ++ ++ *locp = loc_intreg; ++ if (size <= 8) ++ return nloc_intreg; ++ else ++ return nloc_intregpair; ++ } ++ } ++ ++ /* Fallthrough to handle large types */ + ++ case DW_TAG_array_type: ++ large: ++ /* Return large structures in memory */ + *locp = loc_aggregate; + return nloc_aggregate; + } +-- +2.1.4 + diff --git a/patches/0003-Add-mips-n64-relocation-format-hack.patch b/patches/0003-Add-mips-n64-relocation-format-hack.patch new file mode 100644 index 0000000..7cefeae --- /dev/null +++ b/patches/0003-Add-mips-n64-relocation-format-hack.patch @@ -0,0 +1,226 @@ +From 59d4b8c48e5040af7e02b34eb26ea602ec82a38e Mon Sep 17 00:00:00 2001 +From: James Cowgill +Date: Mon, 5 Jan 2015 15:17:02 +0000 +Subject: [PATCH 3/3] Add mips n64 relocation format hack + +MIPSEL N64 ELF files use a slightly different format for storing relocation +entries which is incompatible with the normal R_SYM / R_INFO macros. +To workaround this, we rearrange the bytes in the relocation's r_info field +when reading and writing the relocations. + +This patch also ensures that strip.c sets the correct value of e_machine +before manipulating relocations so that these changes take effect. + +Signed-off-by: James Cowgill +--- + libelf/gelf_getrel.c | 25 +++++++++++++++++++++++-- + libelf/gelf_getrela.c | 25 +++++++++++++++++++++++-- + libelf/gelf_update_rel.c | 20 +++++++++++++++++++- + libelf/gelf_update_rela.c | 20 +++++++++++++++++++- + src/strip.c | 17 +++++++++++++++++ + 5 files changed, 101 insertions(+), 6 deletions(-) + +Index: elfutils-0.175/libelf/gelf_getrel.c +=================================================================== +--- elfutils-0.175.orig/libelf/gelf_getrel.c ++++ elfutils-0.175/libelf/gelf_getrel.c +@@ -36,6 +36,7 @@ + + #include "libelfP.h" + ++#define EF_MIPS_ABI 0x0000F000 + + GElf_Rel * + gelf_getrel (Elf_Data *data, int ndx, GElf_Rel *dst) +@@ -89,8 +90,28 @@ gelf_getrel (Elf_Data *data, int ndx, GE + result = NULL; + } + else +- result = memcpy (dst, &((Elf64_Rel *) data_scn->d.d_buf)[ndx], +- sizeof (Elf64_Rel)); ++ { ++ GElf_Ehdr hdr; ++ result = memcpy (dst, &((Elf64_Rel *) data_scn->d.d_buf)[ndx], ++ sizeof (Elf64_Rel)); ++ ++ if (gelf_getehdr(scn->elf, &hdr) != NULL && ++ hdr.e_ident[EI_DATA] == ELFDATA2LSB && ++ hdr.e_machine == EM_MIPS && ++ (hdr.e_flags & EF_MIPS_ABI) == 0) ++ { ++ /* ++ * The relocation format is mangled on MIPSEL N64 ++ * We'll adjust it so at least R_SYM will work on it ++ */ ++ GElf_Xword r_info = dst->r_info; ++ dst->r_info = (r_info << 32) | ++ ((r_info >> 8) & 0xFF000000) | ++ ((r_info >> 24) & 0x00FF0000) | ++ ((r_info >> 40) & 0x0000FF00) | ++ ((r_info >> 56) & 0x000000FF); ++ } ++ } + } + + rwlock_unlock (scn->elf->lock); +Index: elfutils-0.175/libelf/gelf_getrela.c +=================================================================== +--- elfutils-0.175.orig/libelf/gelf_getrela.c ++++ elfutils-0.175/libelf/gelf_getrela.c +@@ -36,6 +36,7 @@ + + #include "libelfP.h" + ++#define EF_MIPS_ABI 0x0000F000 + + GElf_Rela * + gelf_getrela (Elf_Data *data, int ndx, GElf_Rela *dst) +@@ -90,8 +91,28 @@ gelf_getrela (Elf_Data *data, int ndx, G + result = NULL; + } + else +- result = memcpy (dst, &((Elf64_Rela *) data_scn->d.d_buf)[ndx], +- sizeof (Elf64_Rela)); ++ { ++ GElf_Ehdr hdr; ++ result = memcpy (dst, &((Elf64_Rela *) data_scn->d.d_buf)[ndx], ++ sizeof (Elf64_Rela)); ++ ++ if (gelf_getehdr(scn->elf, &hdr) != NULL && ++ hdr.e_ident[EI_DATA] == ELFDATA2LSB && ++ hdr.e_machine == EM_MIPS && ++ (hdr.e_flags & EF_MIPS_ABI) == 0) ++ { ++ /* ++ * The relocation format is mangled on MIPSEL N64 ++ * We'll adjust it so at least R_SYM will work on it ++ */ ++ GElf_Xword r_info = dst->r_info; ++ dst->r_info = (r_info << 32) | ++ ((r_info >> 8) & 0xFF000000) | ++ ((r_info >> 24) & 0x00FF0000) | ++ ((r_info >> 40) & 0x0000FF00) | ++ ((r_info >> 56) & 0x000000FF); ++ } ++ } + } + + rwlock_unlock (scn->elf->lock); +Index: elfutils-0.175/libelf/gelf_update_rel.c +=================================================================== +--- elfutils-0.175.orig/libelf/gelf_update_rel.c ++++ elfutils-0.175/libelf/gelf_update_rel.c +@@ -36,6 +36,7 @@ + + #include "libelfP.h" + ++#define EF_MIPS_ABI 0x0000F000 + + int + gelf_update_rel (Elf_Data *dst, int ndx, GElf_Rel *src) +@@ -86,6 +87,9 @@ gelf_update_rel (Elf_Data *dst, int ndx, + } + else + { ++ GElf_Ehdr hdr; ++ GElf_Rel value = *src; ++ + /* Check whether we have to resize the data buffer. */ + if (INVALID_NDX (ndx, Elf64_Rel, &data_scn->d)) + { +@@ -93,7 +97,21 @@ gelf_update_rel (Elf_Data *dst, int ndx, + goto out; + } + +- ((Elf64_Rel *) data_scn->d.d_buf)[ndx] = *src; ++ if (gelf_getehdr(scn->elf, &hdr) != NULL && ++ hdr.e_ident[EI_DATA] == ELFDATA2LSB && ++ hdr.e_machine == EM_MIPS && ++ (hdr.e_flags & EF_MIPS_ABI) == 0) ++ { ++ /* Undo the MIPSEL N64 hack from gelf_getrel */ ++ GElf_Xword r_info = value.r_info; ++ value.r_info = (r_info >> 32) | ++ ((r_info << 8) & 0x000000FF00000000) | ++ ((r_info << 24) & 0x0000FF0000000000) | ++ ((r_info << 40) & 0x00FF000000000000) | ++ ((r_info << 56) & 0xFF00000000000000); ++ } ++ ++ ((Elf64_Rel *) data_scn->d.d_buf)[ndx] = value; + } + + result = 1; +Index: elfutils-0.175/libelf/gelf_update_rela.c +=================================================================== +--- elfutils-0.175.orig/libelf/gelf_update_rela.c ++++ elfutils-0.175/libelf/gelf_update_rela.c +@@ -36,6 +36,7 @@ + + #include "libelfP.h" + ++#define EF_MIPS_ABI 0x0000F000 + + int + gelf_update_rela (Elf_Data *dst, int ndx, GElf_Rela *src) +@@ -89,6 +90,9 @@ gelf_update_rela (Elf_Data *dst, int ndx + } + else + { ++ GElf_Ehdr hdr; ++ GElf_Rela value = *src; ++ + /* Check whether we have to resize the data buffer. */ + if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d)) + { +@@ -96,7 +100,21 @@ gelf_update_rela (Elf_Data *dst, int ndx + goto out; + } + +- ((Elf64_Rela *) data_scn->d.d_buf)[ndx] = *src; ++ if (gelf_getehdr(scn->elf, &hdr) != NULL && ++ hdr.e_ident[EI_DATA] == ELFDATA2LSB && ++ hdr.e_machine == EM_MIPS && ++ (hdr.e_flags & EF_MIPS_ABI) == 0) ++ { ++ /* Undo the MIPSEL N64 hack from gelf_getrel */ ++ GElf_Xword r_info = value.r_info; ++ value.r_info = (r_info >> 32) | ++ ((r_info << 8) & 0x000000FF00000000) | ++ ((r_info << 24) & 0x0000FF0000000000) | ++ ((r_info << 40) & 0x00FF000000000000) | ++ ((r_info << 56) & 0xFF00000000000000); ++ } ++ ++ ((Elf64_Rela *) data_scn->d.d_buf)[ndx] = value; + } + + result = 1; +Index: elfutils-0.175/src/strip.c +=================================================================== +--- elfutils-0.175.orig/src/strip.c ++++ elfutils-0.175/src/strip.c +@@ -1062,6 +1062,23 @@ handle_elf (int fd, Elf *elf, const char + goto fail; + } + ++ /* Copy identity part of the ELF header now */ ++ newehdr = gelf_getehdr (newelf, &newehdr_mem); ++ if (newehdr == NULL) ++ INTERNAL_ERROR (fname); ++ ++ memcpy (newehdr->e_ident, ehdr->e_ident, EI_NIDENT); ++ newehdr->e_type = ehdr->e_type; ++ newehdr->e_machine = ehdr->e_machine; ++ newehdr->e_version = ehdr->e_version; ++ ++ if (gelf_update_ehdr (newelf, newehdr) == 0) ++ { ++ error (0, 0, gettext ("%s: error while creating ELF header: %s"), ++ fname, elf_errmsg (-1)); ++ return 1; ++ } ++ + /* Copy over the old program header if needed. */ + if (phnum > 0) + { diff --git a/patches/arm_backend.diff b/patches/arm_backend.diff new file mode 100644 index 0000000..6a85baf --- /dev/null +++ b/patches/arm_backend.diff @@ -0,0 +1,600 @@ +Index: elfutils-0.175/backends/arm_init.c +=================================================================== +--- elfutils-0.175.orig/backends/arm_init.c ++++ elfutils-0.175/backends/arm_init.c +@@ -35,20 +35,31 @@ + #define RELOC_PREFIX R_ARM_ + #include "libebl_CPU.h" + ++#include "libebl_arm.h" ++ + /* This defines the common reloc hooks based on arm_reloc.def. */ + #include "common-reloc.c" + + + const char * +-arm_init (Elf *elf __attribute__ ((unused)), ++arm_init (Elf *elf, + GElf_Half machine __attribute__ ((unused)), + Ebl *eh, + size_t ehlen) + { ++ int soft_float = 0; ++ + /* Check whether the Elf_BH object has a sufficent size. */ + if (ehlen < sizeof (Ebl)) + return NULL; + ++ if (elf) { ++ GElf_Ehdr ehdr_mem; ++ GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); ++ if (ehdr && (ehdr->e_flags & EF_ARM_SOFT_FLOAT)) ++ soft_float = 1; ++ } ++ + /* We handle it. */ + eh->name = "ARM"; + arm_init_reloc (eh); +@@ -60,7 +71,10 @@ arm_init (Elf *elf __attribute__ ((unuse + HOOK (eh, core_note); + HOOK (eh, auxv_info); + HOOK (eh, check_object_attribute); +- HOOK (eh, return_value_location); ++ if (soft_float) ++ eh->return_value_location = arm_return_value_location_soft; ++ else ++ eh->return_value_location = arm_return_value_location_hard; + HOOK (eh, abi_cfi); + HOOK (eh, check_reloc_target_type); + HOOK (eh, symbol_type_name); +Index: elfutils-0.175/backends/arm_regs.c +=================================================================== +--- elfutils-0.175.orig/backends/arm_regs.c ++++ elfutils-0.175/backends/arm_regs.c +@@ -31,6 +31,7 @@ + #endif + + #include ++#include + #include + + #define BACKEND arm_ +@@ -76,6 +77,9 @@ arm_register_info (Ebl *ebl __attribute_ + break; + + case 16 + 0 ... 16 + 7: ++ /* AADWARF says that there are no registers in that range, ++ * but gcc maps FPA registers here ++ */ + regno += 96 - 16; + FALLTHROUGH; + case 96 + 0 ... 96 + 7: +@@ -87,11 +91,139 @@ arm_register_info (Ebl *ebl __attribute_ + namelen = 2; + break; + ++ case 64 + 0 ... 64 + 9: ++ *setname = "VFP"; ++ *bits = 32; ++ *type = DW_ATE_float; ++ name[0] = 's'; ++ name[1] = regno - 64 + '0'; ++ namelen = 2; ++ break; ++ ++ case 64 + 10 ... 64 + 31: ++ *setname = "VFP"; ++ *bits = 32; ++ *type = DW_ATE_float; ++ name[0] = 's'; ++ name[1] = (regno - 64) / 10 + '0'; ++ name[2] = (regno - 64) % 10 + '0'; ++ namelen = 3; ++ break; ++ ++ case 104 + 0 ... 104 + 7: ++ /* XXX TODO: ++ * This can be either intel wireless MMX general purpose/control ++ * registers or xscale accumulator, which have different usage. ++ * We only have the intel wireless MMX here now. ++ * The name needs to be changed for the xscale accumulator too. */ ++ *setname = "MMX"; ++ *type = DW_ATE_unsigned; ++ *bits = 32; ++ memcpy(name, "wcgr", 4); ++ name[4] = regno - 104 + '0'; ++ namelen = 5; ++ break; ++ ++ case 112 + 0 ... 112 + 9: ++ *setname = "MMX"; ++ *type = DW_ATE_unsigned; ++ *bits = 64; ++ name[0] = 'w'; ++ name[1] = 'r'; ++ name[2] = regno - 112 + '0'; ++ namelen = 3; ++ break; ++ ++ case 112 + 10 ... 112 + 15: ++ *setname = "MMX"; ++ *type = DW_ATE_unsigned; ++ *bits = 64; ++ name[0] = 'w'; ++ name[1] = 'r'; ++ name[2] = '1'; ++ name[3] = regno - 112 - 10 + '0'; ++ namelen = 4; ++ break; ++ + case 128: ++ *setname = "state"; + *type = DW_ATE_unsigned; + return stpcpy (name, "spsr") + 1 - name; + ++ case 129: ++ *setname = "state"; ++ *type = DW_ATE_unsigned; ++ return stpcpy(name, "spsr_fiq") + 1 - name; ++ ++ case 130: ++ *setname = "state"; ++ *type = DW_ATE_unsigned; ++ return stpcpy(name, "spsr_irq") + 1 - name; ++ ++ case 131: ++ *setname = "state"; ++ *type = DW_ATE_unsigned; ++ return stpcpy(name, "spsr_abt") + 1 - name; ++ ++ case 132: ++ *setname = "state"; ++ *type = DW_ATE_unsigned; ++ return stpcpy(name, "spsr_und") + 1 - name; ++ ++ case 133: ++ *setname = "state"; ++ *type = DW_ATE_unsigned; ++ return stpcpy(name, "spsr_svc") + 1 - name; ++ ++ case 144 ... 150: ++ *setname = "integer"; ++ *type = DW_ATE_signed; ++ *bits = 32; ++ return sprintf(name, "r%d_usr", regno - 144 + 8) + 1; ++ ++ case 151 ... 157: ++ *setname = "integer"; ++ *type = DW_ATE_signed; ++ *bits = 32; ++ return sprintf(name, "r%d_fiq", regno - 151 + 8) + 1; ++ ++ case 158 ... 159: ++ *setname = "integer"; ++ *type = DW_ATE_signed; ++ *bits = 32; ++ return sprintf(name, "r%d_irq", regno - 158 + 13) + 1; ++ ++ case 160 ... 161: ++ *setname = "integer"; ++ *type = DW_ATE_signed; ++ *bits = 32; ++ return sprintf(name, "r%d_abt", regno - 160 + 13) + 1; ++ ++ case 162 ... 163: ++ *setname = "integer"; ++ *type = DW_ATE_signed; ++ *bits = 32; ++ return sprintf(name, "r%d_und", regno - 162 + 13) + 1; ++ ++ case 164 ... 165: ++ *setname = "integer"; ++ *type = DW_ATE_signed; ++ *bits = 32; ++ return sprintf(name, "r%d_svc", regno - 164 + 13) + 1; ++ ++ case 192 ... 199: ++ *setname = "MMX"; ++ *bits = 32; ++ *type = DW_ATE_unsigned; ++ name[0] = 'w'; ++ name[1] = 'c'; ++ name[2] = regno - 192 + '0'; ++ namelen = 3; ++ break; ++ + case 256 + 0 ... 256 + 9: ++ /* XXX TODO: Neon also uses those registers and can contain ++ * both float and integers */ + *setname = "VFP"; + *type = DW_ATE_float; + *bits = 64; +Index: elfutils-0.175/backends/arm_retval.c +=================================================================== +--- elfutils-0.175.orig/backends/arm_retval.c ++++ elfutils-0.175/backends/arm_retval.c +@@ -48,6 +48,13 @@ static const Dwarf_Op loc_intreg[] = + #define nloc_intreg 1 + #define nloc_intregs(n) (2 * (n)) + ++/* f1 */ /* XXX TODO: f0 can also have number 96 if program was compiled with -mabi=aapcs */ ++static const Dwarf_Op loc_fpreg[] = ++ { ++ { .atom = DW_OP_reg16 }, ++ }; ++#define nloc_fpreg 1 ++ + /* The return value is a structure and is actually stored in stack space + passed in a hidden argument by the caller. But, the compiler + helpfully returns the address of that space in r0. */ +@@ -58,8 +65,9 @@ static const Dwarf_Op loc_aggregate[] = + #define nloc_aggregate 1 + + +-int +-arm_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) ++static int ++arm_return_value_location_ (Dwarf_Die *functypedie, const Dwarf_Op **locp, ++ int soft_float) + { + /* Start with the function's type, and get the DW_AT_type attribute, + which is the type of the return value. */ +@@ -98,6 +106,21 @@ arm_return_value_location (Dwarf_Die *fu + else + return -1; + } ++ if (tag == DW_TAG_base_type) ++ { ++ Dwarf_Word encoding; ++ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, ++ &attr_mem), &encoding) != 0) ++ return -1; ++ ++ if ((encoding == DW_ATE_float) && !soft_float) ++ { ++ *locp = loc_fpreg; ++ if (size <= 8) ++ return nloc_fpreg; ++ goto aggregate; ++ } ++ } + if (size <= 16) + { + intreg: +@@ -106,6 +129,7 @@ arm_return_value_location (Dwarf_Die *fu + } + + aggregate: ++ /* XXX TODO sometimes aggregates are returned in r0 (-mabi=aapcs) */ + *locp = loc_aggregate; + return nloc_aggregate; + } +@@ -125,3 +149,18 @@ arm_return_value_location (Dwarf_Die *fu + DWARF and might be valid. */ + return -2; + } ++ ++/* return location for -mabi=apcs-gnu -msoft-float */ ++int ++arm_return_value_location_soft (Dwarf_Die *functypedie, const Dwarf_Op **locp) ++{ ++ return arm_return_value_location_ (functypedie, locp, 1); ++} ++ ++/* return location for -mabi=apcs-gnu -mhard-float (current default) */ ++int ++arm_return_value_location_hard (Dwarf_Die *functypedie, const Dwarf_Op **locp) ++{ ++ return arm_return_value_location_ (functypedie, locp, 0); ++} ++ +Index: elfutils-0.175/libelf/elf.h +=================================================================== +--- elfutils-0.175.orig/libelf/elf.h ++++ elfutils-0.175/libelf/elf.h +@@ -2694,6 +2694,9 @@ enum + #define EF_ARM_EABI_VER4 0x04000000 + #define EF_ARM_EABI_VER5 0x05000000 + ++/* EI_OSABI values */ ++#define ELFOSABI_ARM_AEABI 64 /* Contains symbol versioning. */ ++ + /* Additional symbol types for Thumb. */ + #define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */ + #define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */ +@@ -2711,12 +2714,19 @@ enum + + /* Processor specific values for the Phdr p_type field. */ + #define PT_ARM_EXIDX (PT_LOPROC + 1) /* ARM unwind segment. */ ++#define PT_ARM_UNWIND PT_ARM_EXIDX + + /* Processor specific values for the Shdr sh_type field. */ + #define SHT_ARM_EXIDX (SHT_LOPROC + 1) /* ARM unwind section. */ + #define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) /* Preemption details. */ + #define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) /* ARM attributes section. */ + ++/* Processor specific values for the Dyn d_tag field. */ ++#define DT_ARM_RESERVED1 (DT_LOPROC + 0) ++#define DT_ARM_SYMTABSZ (DT_LOPROC + 1) ++#define DT_ARM_PREEMTMAB (DT_LOPROC + 2) ++#define DT_ARM_RESERVED2 (DT_LOPROC + 3) ++#define DT_ARM_NUM 4 + + /* AArch64 relocs. */ + +@@ -3009,6 +3019,7 @@ enum + TLS block (LDR, STR). */ + #define R_ARM_TLS_IE12GP 111 /* 12 bit GOT entry relative + to GOT origin (LDR). */ ++/* 112 - 127 private range */ + #define R_ARM_ME_TOO 128 /* Obsolete. */ + #define R_ARM_THM_TLS_DESCSEQ 129 + #define R_ARM_THM_TLS_DESCSEQ16 129 +Index: elfutils-0.175/backends/libebl_arm.h +=================================================================== +--- /dev/null ++++ elfutils-0.175/backends/libebl_arm.h +@@ -0,0 +1,9 @@ ++#ifndef _LIBEBL_ARM_H ++#define _LIBEBL_ARM_H 1 ++ ++#include ++ ++extern int arm_return_value_location_soft(Dwarf_Die *, const Dwarf_Op **locp); ++extern int arm_return_value_location_hard(Dwarf_Die *, const Dwarf_Op **locp); ++ ++#endif +Index: elfutils-0.175/tests/run-allregs.sh +=================================================================== +--- elfutils-0.175.orig/tests/run-allregs.sh ++++ elfutils-0.175/tests/run-allregs.sh +@@ -2672,7 +2672,28 @@ integer registers: + 13: sp (sp), address 32 bits + 14: lr (lr), address 32 bits + 15: pc (pc), address 32 bits +- 128: spsr (spsr), unsigned 32 bits ++ 144: r8_usr (r8_usr), signed 32 bits ++ 145: r9_usr (r9_usr), signed 32 bits ++ 146: r10_usr (r10_usr), signed 32 bits ++ 147: r11_usr (r11_usr), signed 32 bits ++ 148: r12_usr (r12_usr), signed 32 bits ++ 149: r13_usr (r13_usr), signed 32 bits ++ 150: r14_usr (r14_usr), signed 32 bits ++ 151: r8_fiq (r8_fiq), signed 32 bits ++ 152: r9_fiq (r9_fiq), signed 32 bits ++ 153: r10_fiq (r10_fiq), signed 32 bits ++ 154: r11_fiq (r11_fiq), signed 32 bits ++ 155: r12_fiq (r12_fiq), signed 32 bits ++ 156: r13_fiq (r13_fiq), signed 32 bits ++ 157: r14_fiq (r14_fiq), signed 32 bits ++ 158: r13_irq (r13_irq), signed 32 bits ++ 159: r14_irq (r14_irq), signed 32 bits ++ 160: r13_abt (r13_abt), signed 32 bits ++ 161: r14_abt (r14_abt), signed 32 bits ++ 162: r13_und (r13_und), signed 32 bits ++ 163: r14_und (r14_und), signed 32 bits ++ 164: r13_svc (r13_svc), signed 32 bits ++ 165: r14_svc (r14_svc), signed 32 bits + FPA registers: + 16: f0 (f0), float 96 bits + 17: f1 (f1), float 96 bits +@@ -2690,7 +2711,72 @@ FPA registers: + 101: f5 (f5), float 96 bits + 102: f6 (f6), float 96 bits + 103: f7 (f7), float 96 bits ++MMX registers: ++ 104: wcgr0 (wcgr0), unsigned 32 bits ++ 105: wcgr1 (wcgr1), unsigned 32 bits ++ 106: wcgr2 (wcgr2), unsigned 32 bits ++ 107: wcgr3 (wcgr3), unsigned 32 bits ++ 108: wcgr4 (wcgr4), unsigned 32 bits ++ 109: wcgr5 (wcgr5), unsigned 32 bits ++ 110: wcgr6 (wcgr6), unsigned 32 bits ++ 111: wcgr7 (wcgr7), unsigned 32 bits ++ 112: wr0 (wr0), unsigned 64 bits ++ 113: wr1 (wr1), unsigned 64 bits ++ 114: wr2 (wr2), unsigned 64 bits ++ 115: wr3 (wr3), unsigned 64 bits ++ 116: wr4 (wr4), unsigned 64 bits ++ 117: wr5 (wr5), unsigned 64 bits ++ 118: wr6 (wr6), unsigned 64 bits ++ 119: wr7 (wr7), unsigned 64 bits ++ 120: wr8 (wr8), unsigned 64 bits ++ 121: wr9 (wr9), unsigned 64 bits ++ 122: wr10 (wr10), unsigned 64 bits ++ 123: wr11 (wr11), unsigned 64 bits ++ 124: wr12 (wr12), unsigned 64 bits ++ 125: wr13 (wr13), unsigned 64 bits ++ 126: wr14 (wr14), unsigned 64 bits ++ 127: wr15 (wr15), unsigned 64 bits ++ 192: wc0 (wc0), unsigned 32 bits ++ 193: wc1 (wc1), unsigned 32 bits ++ 194: wc2 (wc2), unsigned 32 bits ++ 195: wc3 (wc3), unsigned 32 bits ++ 196: wc4 (wc4), unsigned 32 bits ++ 197: wc5 (wc5), unsigned 32 bits ++ 198: wc6 (wc6), unsigned 32 bits ++ 199: wc7 (wc7), unsigned 32 bits + VFP registers: ++ 64: s0 (s0), float 32 bits ++ 65: s1 (s1), float 32 bits ++ 66: s2 (s2), float 32 bits ++ 67: s3 (s3), float 32 bits ++ 68: s4 (s4), float 32 bits ++ 69: s5 (s5), float 32 bits ++ 70: s6 (s6), float 32 bits ++ 71: s7 (s7), float 32 bits ++ 72: s8 (s8), float 32 bits ++ 73: s9 (s9), float 32 bits ++ 74: s10 (s10), float 32 bits ++ 75: s11 (s11), float 32 bits ++ 76: s12 (s12), float 32 bits ++ 77: s13 (s13), float 32 bits ++ 78: s14 (s14), float 32 bits ++ 79: s15 (s15), float 32 bits ++ 80: s16 (s16), float 32 bits ++ 81: s17 (s17), float 32 bits ++ 82: s18 (s18), float 32 bits ++ 83: s19 (s19), float 32 bits ++ 84: s20 (s20), float 32 bits ++ 85: s21 (s21), float 32 bits ++ 86: s22 (s22), float 32 bits ++ 87: s23 (s23), float 32 bits ++ 88: s24 (s24), float 32 bits ++ 89: s25 (s25), float 32 bits ++ 90: s26 (s26), float 32 bits ++ 91: s27 (s27), float 32 bits ++ 92: s28 (s28), float 32 bits ++ 93: s29 (s29), float 32 bits ++ 94: s30 (s30), float 32 bits ++ 95: s31 (s31), float 32 bits + 256: d0 (d0), float 64 bits + 257: d1 (d1), float 64 bits + 258: d2 (d2), float 64 bits +@@ -2723,6 +2809,13 @@ VFP registers: + 285: d29 (d29), float 64 bits + 286: d30 (d30), float 64 bits + 287: d31 (d31), float 64 bits ++state registers: ++ 128: spsr (spsr), unsigned 32 bits ++ 129: spsr_fiq (spsr_fiq), unsigned 32 bits ++ 130: spsr_irq (spsr_irq), unsigned 32 bits ++ 131: spsr_abt (spsr_abt), unsigned 32 bits ++ 132: spsr_und (spsr_und), unsigned 32 bits ++ 133: spsr_svc (spsr_svc), unsigned 32 bits + EOF + + # See run-readelf-mixed-corenote.sh for instructions to regenerate +Index: elfutils-0.175/tests/run-readelf-mixed-corenote.sh +=================================================================== +--- elfutils-0.175.orig/tests/run-readelf-mixed-corenote.sh ++++ elfutils-0.175/tests/run-readelf-mixed-corenote.sh +@@ -31,12 +31,11 @@ Note segment of 892 bytes at offset 0x27 + pid: 11087, ppid: 11063, pgrp: 11087, sid: 11063 + utime: 0.000000, stime: 0.010000, cutime: 0.000000, cstime: 0.000000 + orig_r0: -1, fpvalid: 1 +- r0: 1 r1: -1091672508 r2: -1091672500 +- r3: 0 r4: 0 r5: 0 +- r6: 33728 r7: 0 r8: 0 +- r9: 0 r10: -1225703496 r11: -1091672844 +- r12: 0 sp: 0xbeee64f4 lr: 0xb6dc3f48 +- pc: 0x00008500 spsr: 0x60000010 ++ r0: 1 r1: -1091672508 r2: -1091672500 r3: 0 ++ r4: 0 r5: 0 r6: 33728 r7: 0 ++ r8: 0 r9: 0 r10: -1225703496 r11: -1091672844 ++ r12: 0 sp: 0xbeee64f4 lr: 0xb6dc3f48 pc: 0x00008500 ++ spsr: 0x60000010 + CORE 124 PRPSINFO + state: 0, sname: R, zomb: 0, nice: 0, flag: 0x00400500 + uid: 0, gid: 0, pid: 11087, ppid: 11063, pgrp: 11087, sid: 11063 +Index: elfutils-0.175/tests/run-addrcfi.sh +=================================================================== +--- elfutils-0.175.orig/tests/run-addrcfi.sh ++++ elfutils-0.175/tests/run-addrcfi.sh +@@ -3554,6 +3554,38 @@ dwarf_cfi_addrframe (.eh_frame): no matc + FPA reg21 (f5): undefined + FPA reg22 (f6): undefined + FPA reg23 (f7): undefined ++ VFP reg64 (s0): undefined ++ VFP reg65 (s1): undefined ++ VFP reg66 (s2): undefined ++ VFP reg67 (s3): undefined ++ VFP reg68 (s4): undefined ++ VFP reg69 (s5): undefined ++ VFP reg70 (s6): undefined ++ VFP reg71 (s7): undefined ++ VFP reg72 (s8): undefined ++ VFP reg73 (s9): undefined ++ VFP reg74 (s10): undefined ++ VFP reg75 (s11): undefined ++ VFP reg76 (s12): undefined ++ VFP reg77 (s13): undefined ++ VFP reg78 (s14): undefined ++ VFP reg79 (s15): undefined ++ VFP reg80 (s16): undefined ++ VFP reg81 (s17): undefined ++ VFP reg82 (s18): undefined ++ VFP reg83 (s19): undefined ++ VFP reg84 (s20): undefined ++ VFP reg85 (s21): undefined ++ VFP reg86 (s22): undefined ++ VFP reg87 (s23): undefined ++ VFP reg88 (s24): undefined ++ VFP reg89 (s25): undefined ++ VFP reg90 (s26): undefined ++ VFP reg91 (s27): undefined ++ VFP reg92 (s28): undefined ++ VFP reg93 (s29): undefined ++ VFP reg94 (s30): undefined ++ VFP reg95 (s31): undefined + FPA reg96 (f0): undefined + FPA reg97 (f1): undefined + FPA reg98 (f2): undefined +@@ -3562,7 +3594,66 @@ dwarf_cfi_addrframe (.eh_frame): no matc + FPA reg101 (f5): undefined + FPA reg102 (f6): undefined + FPA reg103 (f7): undefined +- integer reg128 (spsr): undefined ++ MMX reg104 (wcgr0): undefined ++ MMX reg105 (wcgr1): undefined ++ MMX reg106 (wcgr2): undefined ++ MMX reg107 (wcgr3): undefined ++ MMX reg108 (wcgr4): undefined ++ MMX reg109 (wcgr5): undefined ++ MMX reg110 (wcgr6): undefined ++ MMX reg111 (wcgr7): undefined ++ MMX reg112 (wr0): undefined ++ MMX reg113 (wr1): undefined ++ MMX reg114 (wr2): undefined ++ MMX reg115 (wr3): undefined ++ MMX reg116 (wr4): undefined ++ MMX reg117 (wr5): undefined ++ MMX reg118 (wr6): undefined ++ MMX reg119 (wr7): undefined ++ MMX reg120 (wr8): undefined ++ MMX reg121 (wr9): undefined ++ MMX reg122 (wr10): undefined ++ MMX reg123 (wr11): undefined ++ MMX reg124 (wr12): undefined ++ MMX reg125 (wr13): undefined ++ MMX reg126 (wr14): undefined ++ MMX reg127 (wr15): undefined ++ state reg128 (spsr): undefined ++ state reg129 (spsr_fiq): undefined ++ state reg130 (spsr_irq): undefined ++ state reg131 (spsr_abt): undefined ++ state reg132 (spsr_und): undefined ++ state reg133 (spsr_svc): undefined ++ integer reg144 (r8_usr): undefined ++ integer reg145 (r9_usr): undefined ++ integer reg146 (r10_usr): undefined ++ integer reg147 (r11_usr): undefined ++ integer reg148 (r12_usr): undefined ++ integer reg149 (r13_usr): undefined ++ integer reg150 (r14_usr): undefined ++ integer reg151 (r8_fiq): undefined ++ integer reg152 (r9_fiq): undefined ++ integer reg153 (r10_fiq): undefined ++ integer reg154 (r11_fiq): undefined ++ integer reg155 (r12_fiq): undefined ++ integer reg156 (r13_fiq): undefined ++ integer reg157 (r14_fiq): undefined ++ integer reg158 (r13_irq): undefined ++ integer reg159 (r14_irq): undefined ++ integer reg160 (r13_abt): undefined ++ integer reg161 (r14_abt): undefined ++ integer reg162 (r13_und): undefined ++ integer reg163 (r14_und): undefined ++ integer reg164 (r13_svc): undefined ++ integer reg165 (r14_svc): undefined ++ MMX reg192 (wc0): undefined ++ MMX reg193 (wc1): undefined ++ MMX reg194 (wc2): undefined ++ MMX reg195 (wc3): undefined ++ MMX reg196 (wc4): undefined ++ MMX reg197 (wc5): undefined ++ MMX reg198 (wc6): undefined ++ MMX reg199 (wc7): undefined + VFP reg256 (d0): undefined + VFP reg257 (d1): undefined + VFP reg258 (d2): undefined diff --git a/patches/disable-some-tests.diff b/patches/disable-some-tests.diff new file mode 100644 index 0000000..7e79223 --- /dev/null +++ b/patches/disable-some-tests.diff @@ -0,0 +1,11 @@ +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -37,7 +37,7 @@ tests_rpath = no + endif + + check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ +- showptable update1 update2 update3 update4 test-nlist \ ++ showptable update1 update2 update3 update4 \ + show-die-info get-files next-files get-lines next-lines \ + get-pubnames \ + get-aranges allfcts line2addr addrscopes funcscopes \ diff --git a/patches/disable_werror.patch b/patches/disable_werror.patch new file mode 100644 index 0000000..155a78f --- /dev/null +++ b/patches/disable_werror.patch @@ -0,0 +1,23 @@ +From: Helmut Grohne +Subject: disable -Werror as it tends to break with new gcc versions +Bug-Debian: https://bugs.debian.org/886004 +Last-Update: 2018-01-01 + +--- a/config/eu.am ++++ b/config/eu.am +@@ -91,7 +91,6 @@ AM_CFLAGS = -std=gnu99 -Wall -Wshadow -W + -Wold-style-definition -Wstrict-prototypes $(TRAMPOLINES_WARNING) \ + $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ + $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ +- $(if $($(*F)_no_Werror),,-Werror) \ + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ + $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ + $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ +@@ -101,7 +100,6 @@ AM_CXXFLAGS = -std=c++11 -Wall -Wshadow + $(TRAMPOLINES_WARNING) \ + $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ + $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ +- $(if $($(*F)_no_Werror),,-Werror) \ + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ + $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ + $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ diff --git a/patches/hppa_backend.diff b/patches/hppa_backend.diff new file mode 100644 index 0000000..658c4b2 --- /dev/null +++ b/patches/hppa_backend.diff @@ -0,0 +1,778 @@ +--- /dev/null ++++ b/backends/parisc_init.c +@@ -0,0 +1,73 @@ ++/* Initialization of PA-RISC specific backend library. ++ Copyright (C) 2002, 2005, 2006 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ Written by Ulrich Drepper , 2002. ++ ++ Red Hat elfutils is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#define BACKEND parisc_ ++#define RELOC_PREFIX R_PARISC_ ++#include "libebl_CPU.h" ++#include "libebl_parisc.h" ++ ++/* This defines the common reloc hooks based on parisc_reloc.def. */ ++#include "common-reloc.c" ++ ++ ++const char * ++parisc_init (Elf *elf __attribute__ ((unused)), ++ GElf_Half machine __attribute__ ((unused)), ++ Ebl *eh, ++ size_t ehlen) ++{ ++ int pa64 = 0; ++ ++ /* Check whether the Elf_BH object has a sufficent size. */ ++ if (ehlen < sizeof (Ebl)) ++ return NULL; ++ ++ if (elf) { ++ GElf_Ehdr ehdr_mem; ++ GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); ++ if (ehdr && (ehdr->e_flags & EF_PARISC_WIDE)) ++ pa64 = 1; ++ } ++ /* We handle it. */ ++ eh->name = "PA-RISC"; ++ parisc_init_reloc (eh); ++ HOOK (eh, reloc_simple_type); ++ HOOK (eh, machine_flag_check); ++ HOOK (eh, symbol_type_name); ++ HOOK (eh, segment_type_name); ++ HOOK (eh, section_type_name); ++ HOOK (eh, register_info); ++ if (pa64) ++ eh->return_value_location = parisc_return_value_location_64; ++ else ++ eh->return_value_location = parisc_return_value_location_32; ++ ++ return MODVERSION; ++} +--- /dev/null ++++ b/backends/parisc_regs.c +@@ -0,0 +1,159 @@ ++/* Register names and numbers for PA-RISC DWARF. ++ Copyright (C) 2005, 2006 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ ++ Red Hat elfutils is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++ ++#define BACKEND parisc_ ++#include "libebl_CPU.h" ++ ++ssize_t ++parisc_register_info (Ebl *ebl, int regno, char *name, size_t namelen, ++ const char **prefix, const char **setname, ++ int *bits, int *type) ++{ ++ int pa64 = 0; ++ ++ if (ebl->elf) { ++ GElf_Ehdr ehdr_mem; ++ GElf_Ehdr *ehdr = gelf_getehdr (ebl->elf, &ehdr_mem); ++ if (ehdr->e_flags & EF_PARISC_WIDE) ++ pa64 = 1; ++ } ++ ++ int nregs = pa64 ? 127 : 128; ++ ++ if (name == NULL) ++ return nregs; ++ ++ if (regno < 0 || regno >= nregs || namelen < 6) ++ return -1; ++ ++ *prefix = "%"; ++ ++ if (regno < 32) ++ { ++ *setname = "integer"; ++ *type = DW_ATE_signed; ++ if (pa64) ++ { ++ *bits = 64; ++ } ++ else ++ { ++ *bits = 32; ++ } ++ } ++ else if (regno == 32) ++ { ++ *setname = "special"; ++ if (pa64) ++ { ++ *bits = 6; ++ } ++ else ++ { ++ *bits = 5; ++ } ++ *type = DW_ATE_unsigned; ++ } ++ else ++ { ++ *setname = "FPU"; ++ *type = DW_ATE_float; ++ if (pa64) ++ { ++ *bits = 64; ++ } ++ else ++ { ++ *bits = 32; ++ } ++ } ++ ++ if (regno < 33) { ++ switch (regno) ++ { ++ case 0 ... 9: ++ name[0] = 'r'; ++ name[1] = regno + '0'; ++ namelen = 2; ++ break; ++ case 10 ... 31: ++ name[0] = 'r'; ++ name[1] = regno / 10 + '0'; ++ name[2] = regno % 10 + '0'; ++ namelen = 3; ++ break; ++ case 32: ++ *prefix = NULL; ++ name[0] = 'S'; ++ name[1] = 'A'; ++ name[2] = 'R'; ++ namelen = 3; ++ break; ++ } ++ } ++ else { ++ if (pa64 && ((regno - 72) % 2)) { ++ *setname = NULL; ++ return 0; ++ } ++ ++ switch (regno) ++ { ++ case 72 + 0 ... 72 + 11: ++ name[0] = 'f'; ++ name[1] = 'r'; ++ name[2] = (regno + 8 - 72) / 2 + '0'; ++ namelen = 3; ++ if ((regno + 8 - 72) % 2) { ++ name[3] = 'R'; ++ namelen++; ++ } ++ break; ++ case 72 + 12 ... 72 + 55: ++ name[0] = 'f'; ++ name[1] = 'r'; ++ name[2] = (regno + 8 - 72) / 2 / 10 + '0'; ++ name[3] = (regno + 8 - 72) / 2 % 10 + '0'; ++ namelen = 4; ++ if ((regno + 8 - 72) % 2) { ++ name[4] = 'R'; ++ namelen++; ++ } ++ break; ++ default: ++ *setname = NULL; ++ return 0; ++ } ++ } ++ name[namelen++] = '\0'; ++ return namelen; ++} +--- /dev/null ++++ b/backends/parisc_reloc.def +@@ -0,0 +1,128 @@ ++/* List the relocation types for PA-RISC. -*- C -*- ++ Copyright (C) 2005 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ ++ Red Hat elfutils is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++/* NAME, REL|EXEC|DYN */ ++ ++RELOC_TYPE (NONE, EXEC|DYN) ++RELOC_TYPE (DIR32, REL|EXEC|DYN) ++RELOC_TYPE (DIR21L, REL|EXEC|DYN) ++RELOC_TYPE (DIR17R, REL) ++RELOC_TYPE (DIR17F, REL) ++RELOC_TYPE (DIR14R, REL|DYN) ++RELOC_TYPE (PCREL32, REL) ++RELOC_TYPE (PCREL21L, REL) ++RELOC_TYPE (PCREL17R, REL) ++RELOC_TYPE (PCREL17F, REL) ++RELOC_TYPE (PCREL14R, REL|EXEC) ++RELOC_TYPE (DPREL21L, REL) ++RELOC_TYPE (DPREL14WR, REL) ++RELOC_TYPE (DPREL14DR, REL) ++RELOC_TYPE (DPREL14R, REL) ++RELOC_TYPE (GPREL21L, 0) ++RELOC_TYPE (GPREL14R, 0) ++RELOC_TYPE (LTOFF21L, REL) ++RELOC_TYPE (LTOFF14R, REL) ++RELOC_TYPE (DLTIND14F, 0) ++RELOC_TYPE (SETBASE, 0) ++RELOC_TYPE (SECREL32, REL) ++RELOC_TYPE (BASEREL21L, 0) ++RELOC_TYPE (BASEREL17R, 0) ++RELOC_TYPE (BASEREL14R, 0) ++RELOC_TYPE (SEGBASE, 0) ++RELOC_TYPE (SEGREL32, REL) ++RELOC_TYPE (PLTOFF21L, 0) ++RELOC_TYPE (PLTOFF14R, 0) ++RELOC_TYPE (PLTOFF14F, 0) ++RELOC_TYPE (LTOFF_FPTR32, 0) ++RELOC_TYPE (LTOFF_FPTR21L, 0) ++RELOC_TYPE (LTOFF_FPTR14R, 0) ++RELOC_TYPE (FPTR64, 0) ++RELOC_TYPE (PLABEL32, REL|DYN) ++RELOC_TYPE (PCREL64, 0) ++RELOC_TYPE (PCREL22C, 0) ++RELOC_TYPE (PCREL22F, 0) ++RELOC_TYPE (PCREL14WR, 0) ++RELOC_TYPE (PCREL14DR, 0) ++RELOC_TYPE (PCREL16F, 0) ++RELOC_TYPE (PCREL16WF, 0) ++RELOC_TYPE (PCREL16DF, 0) ++RELOC_TYPE (DIR64, REL|DYN) ++RELOC_TYPE (DIR14WR, REL) ++RELOC_TYPE (DIR14DR, REL) ++RELOC_TYPE (DIR16F, REL) ++RELOC_TYPE (DIR16WF, REL) ++RELOC_TYPE (DIR16DF, REL) ++RELOC_TYPE (GPREL64, 0) ++RELOC_TYPE (GPREL14WR, 0) ++RELOC_TYPE (GPREL14DR, 0) ++RELOC_TYPE (GPREL16F, 0) ++RELOC_TYPE (GPREL16WF, 0) ++RELOC_TYPE (GPREL16DF, 0) ++RELOC_TYPE (LTOFF64, 0) ++RELOC_TYPE (LTOFF14WR, 0) ++RELOC_TYPE (LTOFF14DR, 0) ++RELOC_TYPE (LTOFF16F, 0) ++RELOC_TYPE (LTOFF16WF, 0) ++RELOC_TYPE (LTOFF16DF, 0) ++RELOC_TYPE (SECREL64, 0) ++RELOC_TYPE (BASEREL14WR, 0) ++RELOC_TYPE (BASEREL14DR, 0) ++RELOC_TYPE (SEGREL64, 0) ++RELOC_TYPE (PLTOFF14WR, 0) ++RELOC_TYPE (PLTOFF14DR, 0) ++RELOC_TYPE (PLTOFF16F, 0) ++RELOC_TYPE (PLTOFF16WF, 0) ++RELOC_TYPE (PLTOFF16DF, 0) ++RELOC_TYPE (LTOFF_FPTR64, 0) ++RELOC_TYPE (LTOFF_FPTR14WR, 0) ++RELOC_TYPE (LTOFF_FPTR14DR, 0) ++RELOC_TYPE (LTOFF_FPTR16F, 0) ++RELOC_TYPE (LTOFF_FPTR16WF, 0) ++RELOC_TYPE (LTOFF_FPTR16DF, 0) ++RELOC_TYPE (COPY, EXEC) ++RELOC_TYPE (IPLT, EXEC|DYN) ++RELOC_TYPE (EPLT, 0) ++RELOC_TYPE (TPREL32, DYN) ++RELOC_TYPE (TPREL21L, 0) ++RELOC_TYPE (TPREL14R, 0) ++RELOC_TYPE (LTOFF_TP21L, 0) ++RELOC_TYPE (LTOFF_TP14R, 0) ++RELOC_TYPE (LTOFF_TP14F, 0) ++RELOC_TYPE (TPREL64, 0) ++RELOC_TYPE (TPREL14WR, 0) ++RELOC_TYPE (TPREL14DR, 0) ++RELOC_TYPE (TPREL16F, 0) ++RELOC_TYPE (TPREL16WF, 0) ++RELOC_TYPE (TPREL16DF, 0) ++RELOC_TYPE (LTOFF_TP64, 0) ++RELOC_TYPE (LTOFF_TP14WR, 0) ++RELOC_TYPE (LTOFF_TP14DR, 0) ++RELOC_TYPE (LTOFF_TP16F, 0) ++RELOC_TYPE (LTOFF_TP16WF, 0) ++RELOC_TYPE (LTOFF_TP16DF, 0) ++RELOC_TYPE (TLS_DTPMOD32, DYN) ++RELOC_TYPE (TLS_DTPMOD64, DYN) ++ ++#define NO_RELATIVE_RELOC 1 +--- /dev/null ++++ b/backends/parisc_retval.c +@@ -0,0 +1,213 @@ ++/* Function return value location for Linux/PA-RISC ABI. ++ Copyright (C) 2005 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ ++ Red Hat elfutils is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++ ++#define BACKEND parisc_ ++#include "libebl_CPU.h" ++#include "libebl_parisc.h" ++ ++/* %r28, or pair %r28, %r29. */ ++static const Dwarf_Op loc_intreg32[] = ++ { ++ { .atom = DW_OP_reg28 }, { .atom = DW_OP_piece, .number = 4 }, ++ { .atom = DW_OP_reg29 }, { .atom = DW_OP_piece, .number = 4 }, ++ }; ++ ++static const Dwarf_Op loc_intreg[] = ++ { ++ { .atom = DW_OP_reg28 }, { .atom = DW_OP_piece, .number = 8 }, ++ { .atom = DW_OP_reg29 }, { .atom = DW_OP_piece, .number = 8 }, ++ }; ++#define nloc_intreg 1 ++#define nloc_intregpair 4 ++ ++/* %fr4L, or pair %fr4L, %fr4R on pa-32 */ ++static const Dwarf_Op loc_fpreg32[] = ++ { ++ { .atom = DW_OP_regx, .number = 72 }, { .atom = DW_OP_piece, .number = 4 }, ++ { .atom = DW_OP_regx, .number = 73 }, { .atom = DW_OP_piece, .number = 4 }, ++ }; ++#define nloc_fpreg32 2 ++#define nloc_fpregpair32 4 ++ ++/* $fr4 */ ++static const Dwarf_Op loc_fpreg[] = ++ { ++ { .atom = DW_OP_regx, .number = 72 }, ++ }; ++#define nloc_fpreg 1 ++ ++#if 0 ++/* The return value is a structure and is actually stored in stack space ++ passed in a hidden argument by the caller. Address of the location is stored ++ in %r28 before function call, but it may be changed by function. */ ++static const Dwarf_Op loc_aggregate[] = ++ { ++ { .atom = DW_OP_breg28 }, ++ }; ++#define nloc_aggregate 1 ++#endif ++ ++static int ++parisc_return_value_location_ (Dwarf_Die *functypedie, const Dwarf_Op **locp, int pa64) ++{ ++ Dwarf_Word regsize = pa64 ? 8 : 4; ++ ++ /* Start with the function's type, and get the DW_AT_type attribute, ++ which is the type of the return value. */ ++ ++ Dwarf_Attribute attr_mem; ++ Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type, &attr_mem); ++ if (attr == NULL) ++ /* The function has no return value, like a `void' function in C. */ ++ return 0; ++ ++ Dwarf_Die die_mem; ++ Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem); ++ int tag = dwarf_tag (typedie); ++ ++ /* Follow typedefs and qualifiers to get to the actual type. */ ++ while (tag == DW_TAG_typedef ++ || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type ++ || tag == DW_TAG_restrict_type) ++ { ++ attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); ++ typedie = dwarf_formref_die (attr, &die_mem); ++ tag = dwarf_tag (typedie); ++ } ++ ++ switch (tag) ++ { ++ case -1: ++ return -1; ++ ++ case DW_TAG_subrange_type: ++ if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) ++ { ++ attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); ++ typedie = dwarf_formref_die (attr, &die_mem); ++ tag = dwarf_tag (typedie); ++ } ++ /* Fall through. */ ++ ++ case DW_TAG_base_type: ++ case DW_TAG_enumeration_type: ++ case DW_TAG_pointer_type: ++ case DW_TAG_ptr_to_member_type: ++ { ++ Dwarf_Word size; ++ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size, ++ &attr_mem), &size) != 0) ++ { ++ if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type) ++ size = 4; ++ else ++ return -1; ++ } ++ if (tag == DW_TAG_base_type) ++ { ++ Dwarf_Word encoding; ++ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, ++ &attr_mem), &encoding) != 0) ++ return -1; ++ ++ if (encoding == DW_ATE_float) ++ { ++ if (pa64) { ++ *locp = loc_fpreg; ++ if (size <= 8) ++ return nloc_fpreg; ++ } ++ else { ++ *locp = loc_fpreg32; ++ if (size <= 4) ++ return nloc_fpreg32; ++ else if (size <= 8) ++ return nloc_fpregpair32; ++ } ++ goto aggregate; ++ } ++ } ++ if (pa64) ++ *locp = loc_intreg; ++ else ++ *locp = loc_intreg32; ++ if (size <= regsize) ++ return nloc_intreg; ++ if (size <= 2 * regsize) ++ return nloc_intregpair; ++ ++ /* Else fall through. */ ++ } ++ ++ case DW_TAG_structure_type: ++ case DW_TAG_class_type: ++ case DW_TAG_union_type: ++ case DW_TAG_array_type: ++ aggregate: { ++ Dwarf_Word size; ++ if (dwarf_aggregate_size (typedie, &size) != 0) ++ return -1; ++ if (pa64) ++ *locp = loc_intreg; ++ else ++ *locp = loc_intreg32; ++ if (size <= regsize) ++ return nloc_intreg; ++ if (size <= 2 * regsize) ++ return nloc_intregpair; ++#if 0 ++ /* there should be some way to know this location... But I do not see it. */ ++ *locp = loc_aggregate; ++ return nloc_aggregate; ++#endif ++ /* fall through. */ ++ } ++ } ++ ++ /* XXX We don't have a good way to return specific errors from ebl calls. ++ This value means we do not understand the type, but it is well-formed ++ DWARF and might be valid. */ ++ return -2; ++} ++ ++int ++parisc_return_value_location_32 (Dwarf_Die *functypedie, const Dwarf_Op **locp) ++{ ++ return parisc_return_value_location_ (functypedie, locp, 0); ++} ++ ++int ++parisc_return_value_location_64 (Dwarf_Die *functypedie, const Dwarf_Op **locp) ++{ ++ return parisc_return_value_location_ (functypedie, locp, 1); ++} ++ +--- /dev/null ++++ b/backends/parisc_symbol.c +@@ -0,0 +1,113 @@ ++/* PA-RISC specific symbolic name handling. ++ Copyright (C) 2002, 2005 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ Written by Ulrich Drepper , 2002. ++ ++ Red Hat elfutils is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++ ++#define BACKEND parisc_ ++#include "libebl_CPU.h" ++ ++const char * ++parisc_segment_type_name (int segment, char *buf __attribute__ ((unused)), ++ size_t len __attribute__ ((unused))) ++{ ++ switch (segment) ++ { ++ case PT_PARISC_ARCHEXT: ++ return "PARISC_ARCHEXT"; ++ case PT_PARISC_UNWIND: ++ return "PARISC_UNWIND"; ++ default: ++ break; ++ } ++ return NULL; ++} ++ ++/* Return symbolic representation of symbol type. */ ++const char * ++parisc_symbol_type_name(int symbol, char *buf __attribute__ ((unused)), ++ size_t len __attribute__ ((unused))) ++{ ++ if (symbol == STT_PARISC_MILLICODE) ++ return "PARISC_MILLI"; ++ return NULL; ++} ++ ++/* Return symbolic representation of section type. */ ++const char * ++parisc_section_type_name (int type, ++ char *buf __attribute__ ((unused)), ++ size_t len __attribute__ ((unused))) ++{ ++ switch (type) ++ { ++ case SHT_PARISC_EXT: ++ return "PARISC_EXT"; ++ case SHT_PARISC_UNWIND: ++ return "PARISC_UNWIND"; ++ case SHT_PARISC_DOC: ++ return "PARISC_DOC"; ++ } ++ ++ return NULL; ++} ++ ++/* Check whether machine flags are valid. */ ++bool ++parisc_machine_flag_check (GElf_Word flags) ++{ ++ if (flags &~ (EF_PARISC_TRAPNIL | EF_PARISC_EXT | EF_PARISC_LSB | ++ EF_PARISC_WIDE | EF_PARISC_NO_KABP | ++ EF_PARISC_LAZYSWAP | EF_PARISC_ARCH)) ++ return 0; ++ ++ GElf_Word arch = flags & EF_PARISC_ARCH; ++ ++ return ((arch == EFA_PARISC_1_0) || (arch == EFA_PARISC_1_1) || ++ (arch == EFA_PARISC_2_0)); ++} ++ ++/* Check for the simple reloc types. */ ++Elf_Type ++parisc_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type, ++ int *addsub __attribute__ ((unused))) ++{ ++ switch (type) ++ { ++ case R_PARISC_DIR64: ++ case R_PARISC_SECREL64: ++ return ELF_T_XWORD; ++ case R_PARISC_DIR32: ++ case R_PARISC_SECREL32: ++ return ELF_T_WORD; ++ default: ++ return ELF_T_NUM; ++ } ++} +--- /dev/null ++++ b/backends/libebl_parisc.h +@@ -0,0 +1,9 @@ ++#ifndef _LIBEBL_HPPA_H ++#define _LIBEBL_HPPA_H 1 ++ ++#include ++ ++extern int parisc_return_value_location_32(Dwarf_Die *, const Dwarf_Op **locp); ++extern int parisc_return_value_location_64(Dwarf_Die *, const Dwarf_Op **locp); ++ ++#endif +--- a/backends/Makefile.am ++++ b/backends/Makefile.am +@@ -37,7 +37,7 @@ AM_CPPFLAGS += -I$(top_srcdir)/libebl -I + noinst_LIBRARIES = libebl_backends.a libebl_backends_pic.a + + modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \ +- tilegx m68k bpf riscv csky ++ tilegx m68k bpf riscv csky parisc + + i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \ + i386_retval.c i386_regs.c i386_auxv.c i386_syscall.c \ +@@ -49,6 +49,9 @@ x86_64_SRCS = x86_64_init.c x86_64_symbo + x86_64_retval.c x86_64_regs.c x86_64_syscall.c x86_64_initreg.c \ + x86_64_unwind.c x32_corenote.c + ++parisc_SRCS = parisc_init.c parisc_symbol.c parisc_regs.c parisc_retval.c ++libebl_parisc_pic_a_SOURCES = $(parisc_SRCS) ++am_libebl_parisc_pic_a_OBJECTS = $(parisc_SRCS:.c=.os) + + ia64_SRCS = ia64_init.c ia64_symbol.c ia64_regs.c ia64_retval.c + +--- a/libelf/elf.h ++++ b/libelf/elf.h +@@ -2182,16 +2182,24 @@ enum + #define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */ + #define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */ + #define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */ ++#define R_PARISC_DPREL14WR 19 ++#define R_PARISC_DPREL14DR 20 + #define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */ + #define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */ + #define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */ + #define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */ + #define R_PARISC_LTOFF14R 38 /* LT-relative, right 14 bits. */ ++#define R_PARISC_DLTIND14F 39 ++#define R_PARISC_SETBASE 40 + #define R_PARISC_SECREL32 41 /* 32 bits section rel. address. */ ++#define R_PARISC_BASEREL21L 42 ++#define R_PARISC_BASEREL17R 43 ++#define R_PARISC_BASEREL14R 46 + #define R_PARISC_SEGBASE 48 /* No relocation, set segment base. */ + #define R_PARISC_SEGREL32 49 /* 32 bits segment rel. address. */ + #define R_PARISC_PLTOFF21L 50 /* PLT rel. address, left 21 bits. */ + #define R_PARISC_PLTOFF14R 54 /* PLT rel. address, right 14 bits. */ ++#define R_PARISC_PLTOFF14F 55 + #define R_PARISC_LTOFF_FPTR32 57 /* 32 bits LT-rel. function pointer. */ + #define R_PARISC_LTOFF_FPTR21L 58 /* LT-rel. fct ptr, left 21 bits. */ + #define R_PARISC_LTOFF_FPTR14R 62 /* LT-rel. fct ptr, right 14 bits. */ +@@ -2200,6 +2208,7 @@ enum + #define R_PARISC_PLABEL21L 66 /* Left 21 bits of fdesc address. */ + #define R_PARISC_PLABEL14R 70 /* Right 14 bits of fdesc address. */ + #define R_PARISC_PCREL64 72 /* 64 bits PC-rel. address. */ ++#define R_PARISC_PCREL22C 73 + #define R_PARISC_PCREL22F 74 /* 22 bits PC-rel. address. */ + #define R_PARISC_PCREL14WR 75 /* PC-rel. address, right 14 bits. */ + #define R_PARISC_PCREL14DR 76 /* PC rel. address, right 14 bits. */ +@@ -2225,6 +2234,8 @@ enum + #define R_PARISC_LTOFF16WF 102 /* 16 bits LT-rel. address. */ + #define R_PARISC_LTOFF16DF 103 /* 16 bits LT-rel. address. */ + #define R_PARISC_SECREL64 104 /* 64 bits section rel. address. */ ++#define R_PARISC_BASEREL14WR 107 ++#define R_PARISC_BASEREL14DR 108 + #define R_PARISC_SEGREL64 112 /* 64 bits segment rel. address. */ + #define R_PARISC_PLTOFF14WR 115 /* PLT-rel. address, right 14 bits. */ + #define R_PARISC_PLTOFF14DR 116 /* PLT-rel. address, right 14 bits. */ diff --git a/patches/hurd-hacks.diff b/patches/hurd-hacks.diff new file mode 100644 index 0000000..0758022 --- /dev/null +++ b/patches/hurd-hacks.diff @@ -0,0 +1,58 @@ +--- a/debuginfod/debuginfod-client.c ++++ b/debuginfod/debuginfod-client.c +@@ -45,6 +45,10 @@ + #include + #include + ++#ifndef PATH_MAX ++#define PATH_MAX 1024 ++#endif ++ + /* We might be building a bootstrap dummy library, which is really simple. */ + #ifdef DUMMY_LIBDEBUGINFOD + +--- a/debuginfod/debuginfod.cxx ++++ b/debuginfod/debuginfod.cxx +@@ -32,6 +32,8 @@ + #include "config.h" + #endif + ++#include ++ + extern "C" { + #include "printversion.h" + #include "system.h" +@@ -40,7 +42,6 @@ extern "C" { + #include "debuginfod.h" + #include + +-#include + #ifdef __GNUC__ + #undef __attribute__ /* glibc bug - rhbz 1763325 */ + #endif +@@ -633,10 +634,10 @@ parse_opt (int key, char *arg, + argp_failure(state, 1, EINVAL, "inconsistent options with passive mode"); + break; + // case 'h': argp_state_help (state, stderr, ARGP_HELP_LONG|ARGP_HELP_EXIT_OK); +- default: return ARGP_ERR_UNKNOWN; ++ default: return (error_t) ARGP_ERR_UNKNOWN; + } + +- return 0; ++ return (error_t)0; + } + + +--- a/tests/backtrace.c ++++ b/tests/backtrace.c +@@ -40,6 +40,10 @@ + #endif + #include "system.h" + ++#ifndef PATH_MAX ++#define PATH_MAX 1024 ++#endif ++ + #ifndef __linux__ + + int diff --git a/patches/hurd_path.patch b/patches/hurd_path.patch new file mode 100644 index 0000000..4440e39 --- /dev/null +++ b/patches/hurd_path.patch @@ -0,0 +1,14 @@ +Index: elfutils-0.165/tests/run-native-test.sh +=================================================================== +--- elfutils-0.165.orig/tests/run-native-test.sh ++++ elfutils-0.165/tests/run-native-test.sh +@@ -83,6 +83,9 @@ native_test() + # "cannot attach to process: Function not implemented". + [ "$(uname)" = "GNU/kFreeBSD" ] && exit 77 + ++# hurd's /proc/$PID/maps does not give paths yet. ++[ "$(uname)" = "GNU" ] && exit 77 ++ + native_test ${abs_builddir}/allregs + native_test ${abs_builddir}/funcretval + diff --git a/patches/ignore_strmerge.diff b/patches/ignore_strmerge.diff new file mode 100644 index 0000000..1e6d7a2 --- /dev/null +++ b/patches/ignore_strmerge.diff @@ -0,0 +1,11 @@ +--- elfutils-0.165.orig/tests/run-strip-strmerge.sh ++++ elfutils-0.165/tests/run-strip-strmerge.sh +@@ -30,7 +30,7 @@ remerged=remerged.elf + tempfiles $merged $stripped $debugfile $remerged + + echo elflint $input +-testrun ${abs_top_builddir}/src/elflint --gnu $input ++testrun_on_self_skip ${abs_top_builddir}/src/elflint --gnu $input + echo elfstrmerge + testrun ${abs_top_builddir}/tests/elfstrmerge -o $merged $input + echo elflint $merged diff --git a/patches/kfreebsd-debuginfod b/patches/kfreebsd-debuginfod new file mode 100644 index 0000000..ffd7d88 --- /dev/null +++ b/patches/kfreebsd-debuginfod @@ -0,0 +1,23 @@ +--- a/debuginfod/debuginfod-client.c ++++ b/debuginfod/debuginfod-client.c +@@ -77,7 +77,9 @@ void debuginfod_end (debuginfod_client * + #include + #include + #include ++#ifdef __linux__ + #include ++#endif + #include + #include + #include +@@ -108,6 +110,10 @@ libcurl_init(void) + curl_global_init(CURL_GLOBAL_DEFAULT); + } + ++#ifndef ETIME ++#define ETIME ETIMEDOUT /* Timer expired, fallback if not found in errno.h like on Linux */ ++#endif ++ + struct debuginfod_client + { + /* Progress/interrupt callback function. */ diff --git a/patches/kfreebsd-mremap-stub b/patches/kfreebsd-mremap-stub new file mode 100644 index 0000000..ecb4885 --- /dev/null +++ b/patches/kfreebsd-mremap-stub @@ -0,0 +1,17 @@ +--- a/libelf/elf_update.c ++++ b/libelf/elf_update.c +@@ -39,6 +39,14 @@ + + #include "libelfP.h" + ++#if defined(__FreeBSD_kernel__) || defined(__gnu_hurd__) ++void *mremap(void *old_address, size_t old_size, ++ size_t new_size, int flags, ... /* void *new_address */) ++{ ++ errno = ENOMEM; ++ return MAP_FAILED; ++} ++#endif + + static int64_t + write_file (Elf *elf, int64_t size, int change_bo, size_t shnum) diff --git a/patches/kfreebsd_path.patch b/patches/kfreebsd_path.patch new file mode 100644 index 0000000..9a19b58 --- /dev/null +++ b/patches/kfreebsd_path.patch @@ -0,0 +1,17 @@ +Index: b/tests/run-native-test.sh +=================================================================== +--- a/tests/run-native-test.sh ++++ b/tests/run-native-test.sh +@@ -77,6 +77,12 @@ native_test() + test $native -eq 0 || testrun "$@" -p $native > /dev/null + } + ++# On the Debian buildds, GNU/kFreeBSD linprocfs /proc/$PID/maps does ++# not give absolute paths due to sbuild's bind mounts (bug #570805) ++# therefore the next two test programs are expected to fail with ++# "cannot attach to process: Function not implemented". ++[ "$(uname)" = "GNU/kFreeBSD" ] && exit 77 ++ + native_test ${abs_builddir}/allregs + native_test ${abs_builddir}/funcretval + diff --git a/patches/mips_backend.diff b/patches/mips_backend.diff new file mode 100644 index 0000000..29b72c4 --- /dev/null +++ b/patches/mips_backend.diff @@ -0,0 +1,685 @@ +Index: elfutils-0.175/backends/mips_init.c +=================================================================== +--- /dev/null ++++ elfutils-0.175/backends/mips_init.c +@@ -0,0 +1,59 @@ ++/* Initialization of mips specific backend library. ++ Copyright (C) 2006 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ ++ Red Hat elfutils is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#define BACKEND mips_ ++#define RELOC_PREFIX R_MIPS_ ++#include "libebl_CPU.h" ++ ++/* This defines the common reloc hooks based on mips_reloc.def. */ ++#include "common-reloc.c" ++ ++const char * ++mips_init (Elf *elf __attribute__ ((unused)), ++ GElf_Half machine __attribute__ ((unused)), ++ Ebl *eh, ++ size_t ehlen) ++{ ++ /* Check whether the Elf_BH object has a sufficent size. */ ++ if (ehlen < sizeof (Ebl)) ++ return NULL; ++ ++ /* We handle it. */ ++ if (machine == EM_MIPS) ++ eh->name = "MIPS R3000 big-endian"; ++ else if (machine == EM_MIPS_RS3_LE) ++ eh->name = "MIPS R3000 little-endian"; ++ ++ mips_init_reloc (eh); ++ HOOK (eh, reloc_simple_type); ++ HOOK (eh, return_value_location); ++ HOOK (eh, register_info); ++ ++ return MODVERSION; ++} +Index: elfutils-0.175/backends/mips_regs.c +=================================================================== +--- /dev/null ++++ elfutils-0.175/backends/mips_regs.c +@@ -0,0 +1,104 @@ ++/* Register names and numbers for MIPS DWARF. ++ Copyright (C) 2006 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ ++ Red Hat elfutils is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++ ++#define BACKEND mips_ ++#include "libebl_CPU.h" ++ ++ssize_t ++mips_register_info (Ebl *ebl __attribute__((unused)), ++ int regno, char *name, size_t namelen, ++ const char **prefix, const char **setname, ++ int *bits, int *type) ++{ ++ if (name == NULL) ++ return 66; ++ ++ if (regno < 0 || regno > 65 || namelen < 4) ++ return -1; ++ ++ *prefix = "$"; ++ ++ if (regno < 32) ++ { ++ *setname = "integer"; ++ *type = DW_ATE_signed; ++ *bits = 32; ++ if (regno < 32 + 10) ++ { ++ name[0] = regno + '0'; ++ namelen = 1; ++ } ++ else ++ { ++ name[0] = (regno / 10) + '0'; ++ name[1] = (regno % 10) + '0'; ++ namelen = 2; ++ } ++ } ++ else if (regno < 64) ++ { ++ *setname = "FPU"; ++ *type = DW_ATE_float; ++ *bits = 32; ++ name[0] = 'f'; ++ if (regno < 32 + 10) ++ { ++ name[1] = (regno - 32) + '0'; ++ namelen = 2; ++ } ++ else ++ { ++ name[1] = (regno - 32) / 10 + '0'; ++ name[2] = (regno - 32) % 10 + '0'; ++ namelen = 3; ++ } ++ } ++ else if (regno == 64) ++ { ++ *type = DW_ATE_signed; ++ *bits = 32; ++ name[0] = 'h'; ++ name[1] = 'i'; ++ namelen = 2; ++ } ++ else ++ { ++ *type = DW_ATE_signed; ++ *bits = 32; ++ name[0] = 'l'; ++ name[1] = 'o'; ++ namelen = 2; ++ } ++ ++ name[namelen++] = '\0'; ++ return namelen; ++} +Index: elfutils-0.175/backends/mips_reloc.def +=================================================================== +--- /dev/null ++++ elfutils-0.175/backends/mips_reloc.def +@@ -0,0 +1,79 @@ ++/* List the relocation types for mips. -*- C -*- ++ Copyright (C) 2006 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ ++ Red Hat elfutils is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++/* NAME, REL|EXEC|DYN */ ++ ++RELOC_TYPE (NONE, 0) ++RELOC_TYPE (16, 0) ++RELOC_TYPE (32, 0) ++RELOC_TYPE (REL32, 0) ++RELOC_TYPE (26, 0) ++RELOC_TYPE (HI16, 0) ++RELOC_TYPE (LO16, 0) ++RELOC_TYPE (GPREL16, 0) ++RELOC_TYPE (LITERAL, 0) ++RELOC_TYPE (GOT16, 0) ++RELOC_TYPE (PC16, 0) ++RELOC_TYPE (CALL16, 0) ++RELOC_TYPE (GPREL32, 0) ++ ++RELOC_TYPE (SHIFT5, 0) ++RELOC_TYPE (SHIFT6, 0) ++RELOC_TYPE (64, 0) ++RELOC_TYPE (GOT_DISP, 0) ++RELOC_TYPE (GOT_PAGE, 0) ++RELOC_TYPE (GOT_OFST, 0) ++RELOC_TYPE (GOT_HI16, 0) ++RELOC_TYPE (GOT_LO16, 0) ++RELOC_TYPE (SUB, 0) ++RELOC_TYPE (INSERT_A, 0) ++RELOC_TYPE (INSERT_B, 0) ++RELOC_TYPE (DELETE, 0) ++RELOC_TYPE (HIGHER, 0) ++RELOC_TYPE (HIGHEST, 0) ++RELOC_TYPE (CALL_HI16, 0) ++RELOC_TYPE (CALL_LO16, 0) ++RELOC_TYPE (SCN_DISP, 0) ++RELOC_TYPE (REL16, 0) ++RELOC_TYPE (ADD_IMMEDIATE, 0) ++RELOC_TYPE (PJUMP, 0) ++RELOC_TYPE (RELGOT, 0) ++RELOC_TYPE (JALR, 0) ++RELOC_TYPE (TLS_DTPMOD32, 0) ++RELOC_TYPE (TLS_DTPREL32, 0) ++RELOC_TYPE (TLS_DTPMOD64, 0) ++RELOC_TYPE (TLS_DTPREL64, 0) ++RELOC_TYPE (TLS_GD, 0) ++RELOC_TYPE (TLS_LDM, 0) ++RELOC_TYPE (TLS_DTPREL_HI16, 0) ++RELOC_TYPE (TLS_DTPREL_LO16, 0) ++RELOC_TYPE (TLS_GOTTPREL, 0) ++RELOC_TYPE (TLS_TPREL32, 0) ++RELOC_TYPE (TLS_TPREL64, 0) ++RELOC_TYPE (TLS_TPREL_HI16, 0) ++RELOC_TYPE (TLS_TPREL_LO16, 0) ++ ++#define NO_COPY_RELOC 1 ++#define NO_RELATIVE_RELOC 1 +Index: elfutils-0.175/backends/mips_retval.c +=================================================================== +--- /dev/null ++++ elfutils-0.175/backends/mips_retval.c +@@ -0,0 +1,321 @@ ++/* Function return value location for Linux/mips ABI. ++ Copyright (C) 2005 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ ++ Red Hat elfutils is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++#include "../libebl/libeblP.h" ++#include "../libdw/libdwP.h" ++ ++#define BACKEND mips_ ++#include "libebl_CPU.h" ++ ++/* The ABI of the file. Also see EF_MIPS_ABI2 above. */ ++#define EF_MIPS_ABI 0x0000F000 ++ ++/* The original o32 abi. */ ++#define E_MIPS_ABI_O32 0x00001000 ++ ++/* O32 extended to work on 64 bit architectures */ ++#define E_MIPS_ABI_O64 0x00002000 ++ ++/* EABI in 32 bit mode */ ++#define E_MIPS_ABI_EABI32 0x00003000 ++ ++/* EABI in 64 bit mode */ ++#define E_MIPS_ABI_EABI64 0x00004000 ++ ++/* All the possible MIPS ABIs. */ ++enum mips_abi ++ { ++ MIPS_ABI_UNKNOWN = 0, ++ MIPS_ABI_N32, ++ MIPS_ABI_O32, ++ MIPS_ABI_N64, ++ MIPS_ABI_O64, ++ MIPS_ABI_EABI32, ++ MIPS_ABI_EABI64, ++ MIPS_ABI_LAST ++ }; ++ ++/* Find the mips ABI of the current file */ ++enum mips_abi find_mips_abi(Elf *elf) ++{ ++ GElf_Ehdr ehdr_mem; ++ GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); ++ ++ if (ehdr == NULL) ++ return MIPS_ABI_LAST; ++ ++ GElf_Word elf_flags = ehdr->e_flags; ++ ++ /* Check elf_flags to see if it specifies the ABI being used. */ ++ switch ((elf_flags & EF_MIPS_ABI)) ++ { ++ case E_MIPS_ABI_O32: ++ return MIPS_ABI_O32; ++ case E_MIPS_ABI_O64: ++ return MIPS_ABI_O64; ++ case E_MIPS_ABI_EABI32: ++ return MIPS_ABI_EABI32; ++ case E_MIPS_ABI_EABI64: ++ return MIPS_ABI_EABI64; ++ default: ++ if ((elf_flags & EF_MIPS_ABI2)) ++ return MIPS_ABI_N32; ++ } ++ ++ /* GCC creates a pseudo-section whose name describes the ABI. */ ++ size_t shstrndx; ++ if (elf_getshdrstrndx (elf, &shstrndx) < 0) ++ return MIPS_ABI_LAST; ++ ++ const char *name; ++ Elf_Scn *scn = NULL; ++ while ((scn = elf_nextscn (elf, scn)) != NULL) ++ { ++ GElf_Shdr shdr_mem; ++ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); ++ if (shdr == NULL) ++ return MIPS_ABI_LAST; ++ ++ name = elf_strptr (elf, shstrndx, shdr->sh_name) ?: ""; ++ if (strncmp (name, ".mdebug.", 8) != 0) ++ continue; ++ ++ if (strcmp (name, ".mdebug.abi32") == 0) ++ return MIPS_ABI_O32; ++ else if (strcmp (name, ".mdebug.abiN32") == 0) ++ return MIPS_ABI_N32; ++ else if (strcmp (name, ".mdebug.abi64") == 0) ++ return MIPS_ABI_N64; ++ else if (strcmp (name, ".mdebug.abiO64") == 0) ++ return MIPS_ABI_O64; ++ else if (strcmp (name, ".mdebug.eabi32") == 0) ++ return MIPS_ABI_EABI32; ++ else if (strcmp (name, ".mdebug.eabi64") == 0) ++ return MIPS_ABI_EABI64; ++ else ++ return MIPS_ABI_UNKNOWN; ++ } ++ ++ return MIPS_ABI_UNKNOWN; ++} ++ ++unsigned int ++mips_abi_regsize (enum mips_abi abi) ++{ ++ switch (abi) ++ { ++ case MIPS_ABI_EABI32: ++ case MIPS_ABI_O32: ++ return 4; ++ case MIPS_ABI_N32: ++ case MIPS_ABI_N64: ++ case MIPS_ABI_O64: ++ case MIPS_ABI_EABI64: ++ return 8; ++ case MIPS_ABI_UNKNOWN: ++ case MIPS_ABI_LAST: ++ default: ++ return 0; ++ } ++} ++ ++ ++/* $v0 or pair $v0, $v1 */ ++static const Dwarf_Op loc_intreg_o32[] = ++ { ++ { .atom = DW_OP_reg2 }, { .atom = DW_OP_piece, .number = 4 }, ++ { .atom = DW_OP_reg3 }, { .atom = DW_OP_piece, .number = 4 }, ++ }; ++ ++static const Dwarf_Op loc_intreg[] = ++ { ++ { .atom = DW_OP_reg2 }, { .atom = DW_OP_piece, .number = 8 }, ++ { .atom = DW_OP_reg3 }, { .atom = DW_OP_piece, .number = 8 }, ++ }; ++#define nloc_intreg 1 ++#define nloc_intregpair 4 ++ ++/* $f0 (float), or pair $f0, $f1 (double). ++ * f2/f3 are used for COMPLEX (= 2 doubles) returns in Fortran */ ++static const Dwarf_Op loc_fpreg_o32[] = ++ { ++ { .atom = DW_OP_regx, .number = 32 }, { .atom = DW_OP_piece, .number = 4 }, ++ { .atom = DW_OP_regx, .number = 33 }, { .atom = DW_OP_piece, .number = 4 }, ++ { .atom = DW_OP_regx, .number = 34 }, { .atom = DW_OP_piece, .number = 4 }, ++ { .atom = DW_OP_regx, .number = 35 }, { .atom = DW_OP_piece, .number = 4 }, ++ }; ++ ++/* $f0, or pair $f0, $f2. */ ++static const Dwarf_Op loc_fpreg[] = ++ { ++ { .atom = DW_OP_regx, .number = 32 }, { .atom = DW_OP_piece, .number = 8 }, ++ { .atom = DW_OP_regx, .number = 34 }, { .atom = DW_OP_piece, .number = 8 }, ++ }; ++#define nloc_fpreg 1 ++#define nloc_fpregpair 4 ++#define nloc_fpregquad 8 ++ ++/* The return value is a structure and is actually stored in stack space ++ passed in a hidden argument by the caller. But, the compiler ++ helpfully returns the address of that space in $v0. */ ++static const Dwarf_Op loc_aggregate[] = ++ { ++ { .atom = DW_OP_breg2, .number = 0 } ++ }; ++#define nloc_aggregate 1 ++ ++int ++mips_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) ++{ ++ /* First find the ABI used by the elf object */ ++ enum mips_abi abi = find_mips_abi(functypedie->cu->dbg->elf); ++ ++ /* Something went seriously wrong while trying to figure out the ABI */ ++ if (abi == MIPS_ABI_LAST) ++ return -1; ++ ++ /* We couldn't identify the ABI, but the file seems valid */ ++ if (abi == MIPS_ABI_UNKNOWN) ++ return -2; ++ ++ /* Can't handle EABI variants */ ++ if ((abi == MIPS_ABI_EABI32) || (abi == MIPS_ABI_EABI64)) ++ return -2; ++ ++ unsigned int regsize = mips_abi_regsize (abi); ++ if (!regsize) ++ return -2; ++ ++ /* Start with the function's type, and get the DW_AT_type attribute, ++ which is the type of the return value. */ ++ ++ Dwarf_Attribute attr_mem; ++ Dwarf_Attribute *attr = dwarf_attr_integrate (functypedie, DW_AT_type, &attr_mem); ++ if (attr == NULL) ++ /* The function has no return value, like a `void' function in C. */ ++ return 0; ++ ++ Dwarf_Die die_mem; ++ Dwarf_Die *typedie = dwarf_formref_die (attr, &die_mem); ++ int tag = dwarf_tag (typedie); ++ ++ /* Follow typedefs and qualifiers to get to the actual type. */ ++ while (tag == DW_TAG_typedef ++ || tag == DW_TAG_const_type || tag == DW_TAG_volatile_type ++ || tag == DW_TAG_restrict_type) ++ { ++ attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); ++ typedie = dwarf_formref_die (attr, &die_mem); ++ tag = dwarf_tag (typedie); ++ } ++ ++ switch (tag) ++ { ++ case -1: ++ return -1; ++ ++ case DW_TAG_subrange_type: ++ if (! dwarf_hasattr_integrate (typedie, DW_AT_byte_size)) ++ { ++ attr = dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem); ++ typedie = dwarf_formref_die (attr, &die_mem); ++ tag = dwarf_tag (typedie); ++ } ++ /* Fall through. */ ++ ++ case DW_TAG_base_type: ++ case DW_TAG_enumeration_type: ++ case DW_TAG_pointer_type: ++ case DW_TAG_ptr_to_member_type: ++ { ++ Dwarf_Word size; ++ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_byte_size, ++ &attr_mem), &size) != 0) ++ { ++ if (tag == DW_TAG_pointer_type || tag == DW_TAG_ptr_to_member_type) ++ size = regsize; ++ else ++ return -1; ++ } ++ if (tag == DW_TAG_base_type) ++ { ++ Dwarf_Word encoding; ++ if (dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, ++ &attr_mem), &encoding) != 0) ++ return -1; ++ ++#define ABI_LOC(loc, regsize) ((regsize) == 4 ? (loc ## _o32) : (loc)) ++ ++ if (encoding == DW_ATE_float) ++ { ++ *locp = ABI_LOC(loc_fpreg, regsize); ++ if (size <= regsize) ++ return nloc_fpreg; ++ ++ if (size <= 2*regsize) ++ return nloc_fpregpair; ++ ++ if (size <= 4*regsize && abi == MIPS_ABI_O32) ++ return nloc_fpregquad; ++ ++ goto aggregate; ++ } ++ } ++ *locp = ABI_LOC(loc_intreg, regsize); ++ if (size <= regsize) ++ return nloc_intreg; ++ if (size <= 2*regsize) ++ return nloc_intregpair; ++ ++ /* Else fall through. Shouldn't happen though (at least with gcc) */ ++ } ++ ++ case DW_TAG_structure_type: ++ case DW_TAG_class_type: ++ case DW_TAG_union_type: ++ case DW_TAG_array_type: ++ aggregate: ++ /* XXX TODO: Can't handle structure return with other ABI's yet :-/ */ ++ if ((abi != MIPS_ABI_O32) && (abi != MIPS_ABI_O64)) ++ return -2; ++ ++ *locp = loc_aggregate; ++ return nloc_aggregate; ++ } ++ ++ /* XXX We don't have a good way to return specific errors from ebl calls. ++ This value means we do not understand the type, but it is well-formed ++ DWARF and might be valid. */ ++ return -2; ++} +Index: elfutils-0.175/backends/mips_symbol.c +=================================================================== +--- /dev/null ++++ elfutils-0.175/backends/mips_symbol.c +@@ -0,0 +1,53 @@ ++/* MIPS specific symbolic name handling. ++ Copyright (C) 2002, 2003, 2005 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ Written by Jakub Jelinek , 2002. ++ ++ Red Hat elfutils is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++ ++#define BACKEND mips_ ++#include "libebl_CPU.h" ++ ++/* Check for the simple reloc types. */ ++Elf_Type ++mips_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type, ++ int *addsub __attribute__ ((unused))) ++{ ++ switch (type) ++ { ++ case R_MIPS_16: ++ return ELF_T_HALF; ++ case R_MIPS_32: ++ return ELF_T_WORD; ++ case R_MIPS_64: ++ return ELF_T_XWORD; ++ default: ++ return ELF_T_NUM; ++ } ++} +Index: elfutils-0.175/libebl/eblopenbackend.c +=================================================================== +--- elfutils-0.175.orig/libebl/eblopenbackend.c ++++ elfutils-0.175/libebl/eblopenbackend.c +@@ -71,6 +71,8 @@ static const struct + { "sparc", "elf_sparc", "sparc", 5, EM_SPARC, 0, 0 }, + { "sparc", "elf_sparcv8plus", "sparc", 5, EM_SPARC32PLUS, 0, 0 }, + { "s390", "ebl_s390", "s390", 4, EM_S390, 0, 0 }, ++ { "mips", "elf_mips", "mips", 4, EM_MIPS, 0, 0 }, ++ { "mips", "elf_mipsel", "mipsel", 4, EM_MIPS_RS3_LE, 0, 0 }, + + { "m32", "elf_m32", "m32", 3, EM_M32, 0, 0 }, + { "m68k", "elf_m68k", "m68k", 4, EM_68K, ELFCLASS32, ELFDATA2MSB }, +Index: elfutils-0.175/backends/Makefile.am +=================================================================== +--- elfutils-0.175.orig/backends/Makefile.am ++++ elfutils-0.175/backends/Makefile.am +@@ -33,13 +33,13 @@ AM_CPPFLAGS += -I$(top_srcdir)/libebl -I + + + modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \ +- tilegx m68k bpf riscv parisc ++ tilegx m68k bpf riscv parisc mips + libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \ + libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \ + libebl_aarch64_pic.a libebl_sparc_pic.a libebl_ppc_pic.a \ + libebl_ppc64_pic.a libebl_s390_pic.a libebl_tilegx_pic.a \ + libebl_m68k_pic.a libebl_bpf_pic.a libebl_riscv_pic.a \ +- libebl_parisc_pic.a ++ libebl_parisc_pic.a libebl_mips_pic.a + noinst_LIBRARIES = $(libebl_pic) + noinst_DATA = $(libebl_pic:_pic.a=.so) + +@@ -141,6 +141,10 @@ parisc_SRCS = parisc_init.c parisc_symbo + libebl_parisc_pic_a_SOURCES = $(parisc_SRCS) + am_libebl_parisc_pic_a_OBJECTS = $(parisc_SRCS:.c=.os) + ++mips_SRCS = mips_init.c mips_symbol.c mips_regs.c mips_retval.c ++libebl_mips_pic_a_SOURCES = $(mips_SRCS) ++am_libebl_mips_pic_a_OBJECTS = $(mips_SRCS:.c=.os) ++ + libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw) $(libeu) + @rm -f $(@:.so=.map) + $(AM_V_at)echo 'ELFUTILS_$(PACKAGE_VERSION) { global: $*_init; local: *; };' \ diff --git a/patches/mips_cfi.patch b/patches/mips_cfi.patch new file mode 100644 index 0000000..8dada52 --- /dev/null +++ b/patches/mips_cfi.patch @@ -0,0 +1,114 @@ +Description: Add MIPS ABI CFI callback +Author: Kurt Roeckx +Last-Update: 2018-12-30 + +Index: elfutils-0.175/backends/Makefile.am +=================================================================== +--- elfutils-0.175.orig/backends/Makefile.am ++++ elfutils-0.175/backends/Makefile.am +@@ -141,7 +141,7 @@ parisc_SRCS = parisc_init.c parisc_symbo + libebl_parisc_pic_a_SOURCES = $(parisc_SRCS) + am_libebl_parisc_pic_a_OBJECTS = $(parisc_SRCS:.c=.os) + +-mips_SRCS = mips_init.c mips_symbol.c mips_regs.c mips_retval.c ++mips_SRCS = mips_init.c mips_symbol.c mips_regs.c mips_retval.c mips_cfi.c + libebl_mips_pic_a_SOURCES = $(mips_SRCS) + am_libebl_mips_pic_a_OBJECTS = $(mips_SRCS:.c=.os) + +Index: elfutils-0.175/backends/mips_cfi.c +=================================================================== +--- /dev/null ++++ elfutils-0.175/backends/mips_cfi.c +@@ -0,0 +1,80 @@ ++/* MIPS ABI-specified defaults for DWARF CFI. ++ Copyright (C) 2018 Kurt Roeckx, Inc. ++ This file is part of elfutils. ++ ++ This file is free software; you can redistribute it and/or modify ++ it under the terms of either ++ ++ * the GNU Lesser General Public License as published by the Free ++ Software Foundation; either version 3 of the License, or (at ++ your option) any later version ++ ++ or ++ ++ * the GNU General Public License as published by the Free ++ Software Foundation; either version 2 of the License, or (at ++ your option) any later version ++ ++ or both in parallel, as here. ++ ++ elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received copies of the GNU General Public License and ++ the GNU Lesser General Public License along with this program. If ++ not, see . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++ ++#define BACKEND mips_ ++#include "libebl_CPU.h" ++ ++int ++mips_abi_cfi (Ebl *ebl __attribute__ ((unused)), Dwarf_CIE *abi_info) ++{ ++ static const uint8_t abi_cfi[] = ++ { ++ /* Call-saved regs. */ ++ DW_CFA_same_value, ULEB128_7 (16), /* $16 */ ++ DW_CFA_same_value, ULEB128_7 (17), /* $17 */ ++ DW_CFA_same_value, ULEB128_7 (18), /* $18 */ ++ DW_CFA_same_value, ULEB128_7 (19), /* $19 */ ++ DW_CFA_same_value, ULEB128_7 (20), /* $20 */ ++ DW_CFA_same_value, ULEB128_7 (21), /* $21 */ ++ DW_CFA_same_value, ULEB128_7 (22), /* $22 */ ++ DW_CFA_same_value, ULEB128_7 (23), /* $23 */ ++ DW_CFA_same_value, ULEB128_7 (28), /* $28 */ ++ DW_CFA_same_value, ULEB128_7 (29), /* $29 */ ++ DW_CFA_same_value, ULEB128_7 (30), /* $30 */ ++ ++ DW_CFA_same_value, ULEB128_7 (52), /* $f20 */ ++ DW_CFA_same_value, ULEB128_7 (53), /* $f21 */ ++ DW_CFA_same_value, ULEB128_7 (54), /* $f22 */ ++ DW_CFA_same_value, ULEB128_7 (55), /* $f23 */ ++ DW_CFA_same_value, ULEB128_7 (56), /* $f24 */ ++ DW_CFA_same_value, ULEB128_7 (57), /* $f25 */ ++ DW_CFA_same_value, ULEB128_7 (58), /* $f26 */ ++ DW_CFA_same_value, ULEB128_7 (59), /* $f27 */ ++ DW_CFA_same_value, ULEB128_7 (60), /* $f28 */ ++ DW_CFA_same_value, ULEB128_7 (61), /* $f29 */ ++ DW_CFA_same_value, ULEB128_7 (62), /* $f30 */ ++ DW_CFA_same_value, ULEB128_7 (63), /* $f31 */ ++ ++ /* The CFA is the SP. */ ++ DW_CFA_def_cfa, ULEB128_7 (29), ULEB128_7 (0), ++ }; ++ ++ abi_info->initial_instructions = abi_cfi; ++ abi_info->initial_instructions_end = &abi_cfi[sizeof abi_cfi]; ++ abi_info->data_alignment_factor = 4; ++ ++ abi_info->return_address_register = 31; /* $31 */ ++ ++ return 0; ++} +Index: elfutils-0.175/backends/mips_init.c +=================================================================== +--- elfutils-0.175.orig/backends/mips_init.c ++++ elfutils-0.175/backends/mips_init.c +@@ -50,6 +50,7 @@ mips_init (Elf *elf __attribute__ ((unus + HOOK (eh, reloc_simple_type); + HOOK (eh, return_value_location); + HOOK (eh, register_info); ++ HOOK (eh, abi_cfi); + + return MODVERSION; + } diff --git a/patches/mips_readelf_w.patch b/patches/mips_readelf_w.patch new file mode 100644 index 0000000..c888037 --- /dev/null +++ b/patches/mips_readelf_w.patch @@ -0,0 +1,22 @@ +From: Kurt Roeckx +Subject: Make readelf -w output debug information on mips +Bug-Debian: http://bugs.debian.org/662041 +Forwarded: not-needed + +Upstreams wants a change where this is handled by a hook that needs +to be filled in by the backend for the arch. + +Index: elfutils-0.175/src/readelf.c +=================================================================== +--- elfutils-0.175.orig/src/readelf.c ++++ elfutils-0.175/src/readelf.c +@@ -11133,7 +11133,8 @@ print_debug (Dwfl_Module *dwflmod, Ebl * + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + +- if (shdr != NULL && shdr->sh_type == SHT_PROGBITS) ++ if (shdr != NULL && ( ++ (shdr->sh_type == SHT_PROGBITS) || (shdr->sh_type == SHT_MIPS_DWARF))) + { + static const struct + { diff --git a/patches/remove-old-glibc-hack.diff b/patches/remove-old-glibc-hack.diff new file mode 100644 index 0000000..545a8e8 --- /dev/null +++ b/patches/remove-old-glibc-hack.diff @@ -0,0 +1,17 @@ +--- elfutils-0.182.orig/tests/dwfl-proc-attach.c ++++ elfutils-0.182/tests/dwfl-proc-attach.c +@@ -107,6 +107,7 @@ main (int argc __attribute__ ((unused)), + return (threads == 3) ? 0 : -1; + } + ++#if 0 + /* HACK. This is a simple workaround for a combination of old glibc + and valgrind. libdw will try to dlopen libdebuginfod this causes + some unsuppressable memory leak warnings when the process is +@@ -118,5 +119,6 @@ void *dlopen (void) + { + return NULL; + } ++#endif + + #endif /* __linux__ */ diff --git a/patches/riscv-retval-workaround.patch b/patches/riscv-retval-workaround.patch new file mode 100644 index 0000000..237aad1 --- /dev/null +++ b/patches/riscv-retval-workaround.patch @@ -0,0 +1,11 @@ +--- a/backends/riscv_retval.c ++++ b/backends/riscv_retval.c +@@ -111,7 +111,7 @@ + Dwarf_Die *arg1 __attribute__ ((unused))) + { + /* ??? */ +- return 1; ++ return 0; + } + + static int diff --git a/patches/series b/patches/series new file mode 100644 index 0000000..e8c7757 --- /dev/null +++ b/patches/series @@ -0,0 +1,19 @@ +#hppa_backend.diff +#arm_backend.diff +#mips_backend.diff +testsuite-ignore-elflint.diff +#mips_readelf_w.patch +#kfreebsd_path.patch +#0001-Ignore-differences-between-mips-machine-identifiers.patch +#0002-Add-support-for-mips64-abis-in-mips_retval.c.patch +#0003-Add-mips-n64-relocation-format-hack.patch +#hurd_path.patch +ignore_strmerge.diff +disable_werror.patch +#mips_cfi.patch +riscv-retval-workaround.patch +#disable-some-tests.diff +remove-old-glibc-hack.diff +kfreebsd-debuginfod +kfreebsd-mremap-stub +hurd-hacks.diff diff --git a/patches/testsuite-ignore-elflint.diff b/patches/testsuite-ignore-elflint.diff new file mode 100644 index 0000000..6a1ddcc --- /dev/null +++ b/patches/testsuite-ignore-elflint.diff @@ -0,0 +1,36 @@ +On many architectures this test fails because binaries/libs produced by +binutils don't pass elflint. However elfutils shouldn't FTBFS because of this. + +So we run the tests on all archs to see what breaks, but if it breaks we ignore +the result (exitcode 77 means: this test was skipped). + +--- a/tests/run-elflint-self.sh ++++ b/tests/run-elflint-self.sh +@@ -18,5 +18,5 @@ + + . $srcdir/test-subr.sh + +-testrun_on_self ${abs_top_builddir}/src/elflint --quiet --gnu-ld ++testrun_on_self_skip ${abs_top_builddir}/src/elflint --quiet --gnu-ld + testrun_on_self_compressed ${abs_top_builddir}/src/elflint --quiet --gnu-ld +--- a/tests/test-subr.sh ++++ b/tests/test-subr.sh +@@ -212,3 +212,18 @@ testrun_on_self_quiet() + # Only exit if something failed + if test $exit_status != 0; then exit $exit_status; fi + } ++ ++# Same as testrun_on_self(), but skip on failure. ++testrun_on_self_skip() ++{ ++ exit_status=0 ++ ++ for file in $self_test_files; do ++ testrun $* $file \ ++ || { echo "*** failure in $* $file"; exit_status=77; } ++ done ++ ++ # Only exit if something failed ++ if test $exit_status != 0; then exit $exit_status; fi ++} ++ diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..2cb80c3 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1 @@ +[type: gettext/rfc822deb] libdebuginfod-common.templates diff --git a/po/templates.pot b/po/templates.pot new file mode 100644 index 0000000..638ffc3 --- /dev/null +++ b/po/templates.pot @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the elfutils package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: elfutils\n" +"Report-Msgid-Bugs-To: elfutils@packages.debian.org\n" +"POT-Creation-Date: 2021-03-06 18:23-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../libdebuginfod-common.templates:1001 +msgid "Connect to Debian's debuginfod server to download debug symbols?" +msgstr "" + +#. Type: boolean +#. Description +#: ../libdebuginfod-common.templates:1001 +msgid "" +"While debugging programs (with GDB, for example) or using debuginfo-consumer " +"applications, it is possible to connect to Debian's debuginfod server and " +"download the necessary debug information for the program you are debugging " +"on-the-fly, without the need to configure the debian-debug apt repository " +"nor installing any dbgsym packages. This service is maintained by Debian, " +"and the only information you will have to send to it is the Build-ID hash of " +"the program(s)/library(ies) being debugged." +msgstr "" diff --git a/rules b/rules new file mode 100755 index 0000000..b2093dd --- /dev/null +++ b/rules @@ -0,0 +1,181 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Copyright 2006, Kurt Roeckx + +# Based on the sample file from dh-make: +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +DISTRO = $(shell lsb_release -is) + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) + +ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) + confflags += --build=$(DEB_HOST_GNU_TYPE) --enable-maintainer-mode +else + confflags += --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) +endif + +ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) + NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) + USE_JOBS = -j$(NUMJOBS) +endif + +DPKG_EXPORT_BUILDFLAGS = 1 +include /usr/share/dpkg/buildflags.mk + +# https://sourceware.org/pipermail/elfutils-devel/2020q2/002733.html +ifneq (,$(findstring -flto, $(CFLAGS))) + CFLAGS += -flto-partition=none -Wno-error=stack-usage= + CXXFLAGS += -flto-partition=none + LDFLAGS += -Wno-error=stack-usage= +endif +CFLAGS := $(patsubst -O%,-O3, $(CFLAGS)) +CXXFLAGS := $(patsubst -O%,-O3, $(CXXFLAGS)) + +# debuginfod configuration flags. +ifneq (,$(filter pkg.elfutils.nodebuginfod,$(DEB_BUILD_PROFILES))) + conf_debuginfod = \ + --disable-libdebuginfod \ + --disable-debuginfod +else + conf_debuginfod = \ + --enable-libdebuginfod \ + --enable-debuginfod + + ifeq ($(DISTRO),Debian) + conf_debuginfod += \ + --enable-debuginfod-urls="https://debuginfod.debian.net" + else ifeq ($(DISTRO),Ubuntu) + conf_debuginfod += \ + --enable-debuginfod-urls="https://debuginfod.ubuntu.com" + endif +endif + + +stamps/configure: + dh_testdir + dh_autoreconf + @mkdir -p stamps +ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) + ./configure --enable-maintainer-mode \ + --enable-libdebuginfod=dummy \ + --disable-debuginfod + $(MAKE) $(USE_JOBS) + $(MAKE) clean +endif + CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \ + ./configure $(confflags) --prefix=/usr \ + --sysconfdir=/etc \ + --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \ + --program-prefix=eu- --disable-silent-rules \ + $(conf_debuginfod) + touch $@ + +build: stamps/build +stamps/build: stamps/configure + dh_testdir + + $(MAKE) $(USE_JOBS) + +ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) + # Check that those files exist. + -ls -l /proc/$$$$/maps + -ls -l /proc/$$$$/auxv + -ls -l /proc/$$$$/ + -LC_CTYPE=C $(MAKE) check $(USE_JOBS) || { cat tests/test-suite.log; exit 1; } + cat tests/test-suite.log +endif + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -rf stamps + [ ! -f Makefile ] || $(MAKE) distclean + dh_autoreconf_clean + dh_clean + +install: build + dh_testdir + dh_testroot + dh_prep + dh_installdirs + + # Add here commands to install the package into debian/tmp + $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp + # We do not provide a libebl anymore, use libdw instead. + rm -f debian/tmp/usr/include/elfutils/libebl.h + + dh_install --sourcedir=debian/tmp + rm -f debian/elfutils/usr/bin/debuginfod* + dh_missing --fail-missing --sourcedir=debian/tmp + +# Build architecture-independent files here. +build-indep: build +binary-indep: build-indep install + dh_testdir + dh_testroot + dh_installchangelogs -i ChangeLog + dh_installdocs -i + + dh_compress -i + dh_fixperms -i + dh_installdebconf -i + dh_installdeb -i + dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i + +# We have nothing to do. + +# Build architecture-dependent files here. +build-arch: build +binary-arch: build-arch install + dh_testdir + dh_testroot + dh_installchangelogs -a ChangeLog + dh_installdocs -a ChangeLog + + : # FIXME: package those ... +# find debian/tmp -name '*debuginfod*' | xargs -r rm -f +# rm -f debian/tmp/usr/share/man/man1/eu-elfclassify.1 +# rm -f debian/tmp/usr/share/man/man1/eu-readelf.1 +# rm -f debian/tmp/usr/share/man/man3/elf_*.3 + + dh_dwz -a + dh_strip -a + dh_strip_nondeterminism -a + dh_compress -a + dh_fixperms -a + dpkg-gensymbols -Pdebian/libdw1/ -plibdw1 -c4 + dpkg-gensymbols -Pdebian/libasm1/ -plibasm1 -c4 + dpkg-gensymbols -Pdebian/libelf1/ -plibelf1 -c4 + dh_makeshlibs -plibelf1 -V "libelf1 (>= 0.132)" + dh_makeshlibs -plibasm1 -V "libasm1 (>= 0.132)" + dh_makeshlibs -plibdw1 -V "libdw1 (>= 0.138)" + dh_makeshlibs -plibdebuginfod1 + dh_installdebconf -a + dh_installdeb -a + dh_shlibdeps -a + dh_gencontrol -a + dh_md5sums -a + dh_builddeb -a + +binary: binary-indep binary-arch + +maint-unpatch: + bash debian/unpatch.sh debian/patches + +.PHONY: build clean binary-indep binary-arch binary install maint-unpatch diff --git a/source/format b/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/source/include-binaries b/source/include-binaries new file mode 100644 index 0000000..95a390b --- /dev/null +++ b/source/include-binaries @@ -0,0 +1 @@ +debian/upstream-signing-key.pgp diff --git a/upstream-signing-key.pgp b/upstream-signing-key.pgp new file mode 100644 index 0000000..dee56c4 Binary files /dev/null and b/upstream-signing-key.pgp differ diff --git a/watch b/watch new file mode 100644 index 0000000..ced214e --- /dev/null +++ b/watch @@ -0,0 +1,7 @@ +# Watch control file for uscan +# See uscan(1) for format + +# Compulsory line, this is a version 3 file +version=3 + +opts=pgpsigurlmangle=s/$/.sig/ https://sourceware.org/elfutils/ftp/(\d.\d*)/elfutils-(.*).tar.bz2