Import elfutils_0.176-1.1.debian.tar.xz
authorKarsten Merker <merker@debian.org>
Tue, 28 May 2019 18:53:12 +0000 (19:53 +0100)
committerKarsten Merker <merker@debian.org>
Tue, 28 May 2019 18:53:12 +0000 (19:53 +0100)
[dgit import tarball elfutils 0.176-1.1 elfutils_0.176-1.1.debian.tar.xz]

35 files changed:
changelog [new file with mode: 0644]
compat [new file with mode: 0644]
control [new file with mode: 0644]
copyright [new file with mode: 0644]
docs [new file with mode: 0644]
elfutils.install [new file with mode: 0644]
libasm-dev.install [new file with mode: 0644]
libasm1.install [new file with mode: 0644]
libasm1.symbols [new file with mode: 0644]
libdw-dev.install [new file with mode: 0644]
libdw1.install [new file with mode: 0644]
libdw1.symbols [new file with mode: 0644]
libelf-dev.install [new file with mode: 0644]
libelf1.install [new file with mode: 0644]
libelf1.symbols [new file with mode: 0644]
patches/0001-Ignore-differences-between-mips-machine-identifiers.patch [new file with mode: 0644]
patches/0002-Add-support-for-mips64-abis-in-mips_retval.c.patch [new file with mode: 0644]
patches/0003-Add-mips-n64-relocation-format-hack.patch [new file with mode: 0644]
patches/arm_backend.diff [new file with mode: 0644]
patches/disable_werror.patch [new file with mode: 0644]
patches/hppa_backend.diff [new file with mode: 0644]
patches/hurd_path.patch [new file with mode: 0644]
patches/ignore_strmerge.diff [new file with mode: 0644]
patches/kfreebsd_path.patch [new file with mode: 0644]
patches/mips_backend.diff [new file with mode: 0644]
patches/mips_cfi.patch [new file with mode: 0644]
patches/mips_readelf_w.patch [new file with mode: 0644]
patches/riscv-retval-workaround.patch [new file with mode: 0644]
patches/series [new file with mode: 0644]
patches/testsuite-ignore-elflint.diff [new file with mode: 0644]
rules [new file with mode: 0755]
source/format [new file with mode: 0644]
source/include-binaries [new file with mode: 0644]
upstream-signing-key.pgp [new file with mode: 0644]
watch [new file with mode: 0644]

diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..416e0cc
--- /dev/null
+++ b/changelog
@@ -0,0 +1,739 @@
+elfutils (0.176-1.1) unstable; urgency=medium
+
+  * Non-maintainer upload with maintainer permission
+  * Fixes FTBFS on riscv64 (Closes: #928832)
+
+ -- Karsten Merker <merker@debian.org>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <helmut@subdivi.de>  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 <doko@debian.org>  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 <helmut@subdivi.de>  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 <andreas@fatal.se>  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 <doko@debian.org>  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 <kurt@roeckx.be>  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 <doko@debian.org>  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 <!nocheck> profile.
+  * Update reference to new sourceware.org home.
+
+ -- Matthias Klose <doko@debian.org>  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 <jrtc27@jrtc27.com>  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 <jrtc27@jrtc27.com>  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 <kurt@roeckx.be>  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 <sthibault@debian.org> 
+    (Closes: #682101)
+  * Make cross compilation actually work.  Patch from Helmut Grohne
+    <helmut@subdivi.de>  (Closes: #818099)
+  * Add libebl.a to libdw-dev (Closes: #825747, #647918)
+  * Ignore strmerge test failured, needed on at least mips.  Patch
+    from Jurica Stanojkovic <Jurica.Stanojkovic@imgtec.com>
+    (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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <doko@debian.org>  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 <kurt@roeckx.be>  Sat, 08 Aug 2015 15:12:31 +0200
+
+elfutils (0.163-4) unstable; urgency=medium
+
+  * More fixes for kfreebsd and hurd
+
+ -- Kurt Roeckx <kurt@roeckx.be>  Tue, 21 Jul 2015 11:39:55 +0000
+
+elfutils (0.163-3) unstable; urgency=medium
+
+  * Fix build failures on kfreebsd and hurd
+
+ -- Kurt Roeckx <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <mgilbert@asachi.debian.org>  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 <mgilbert@debian.org>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  Tue, 24 Jun 2014 22:14:25 +0200
+
+elfutils (0.159-2) unstable; urgency=medium
+
+  * Add patches from Mark Wielaard <mjw@redhat.com> to make
+    things work on armhf.
+  * Build-Depends on libc6-dbg on arm* to make the backtrace
+    tests work instead of skip.
+
+ -- Kurt Roeckx <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  Tue, 18 Sep 2012 21:12:08 +0200
+
+elfutils (0.153-1) unstable; urgency=low
+
+  [ Jonathan Nieder <jrnieder@gmail.com> ]
+  * 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 <marcin.juszkiewicz@linaro.org> ]
+  * 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 <tg@mirbsd.de> (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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  Thu, 17 Jun 2010 18:38:27 +0200
+
+elfutils (0.147-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Kurt Roeckx <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <aurel32@debian.org> to support
+    GNU/kFreeBSD  (Closes: #452428)
+
+ -- Kurt Roeckx <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <eugeniy.meshcheryakov@googlemail.com>
+  * Add backend support for hppa, thanks to
+    Eugeniy Meshcheryakov <eugeniy.meshcheryakov@googlemail.com>
+  * 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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  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 <kurt@roeckx.be>  Fri,  4 Aug 2006 19:38:32 +0000
+
+elfutils (0.122-1) unstable; urgency=low
+
+  * Initial release (Closes: #368248)
+
+ -- Kurt Roeckx <kurt@roeckx.be>  Sun, 21 May 2006 15:03:01 +0000
+
diff --git a/compat b/compat
new file mode 100644 (file)
index 0000000..ec63514
--- /dev/null
+++ b/compat
@@ -0,0 +1 @@
+9
diff --git a/control b/control
new file mode 100644 (file)
index 0000000..d2a2050
--- /dev/null
+++ b/control
@@ -0,0 +1,93 @@
+Source: elfutils
+Priority: optional
+Maintainer: Kurt Roeckx <kurt@roeckx.be>
+Build-Depends: debhelper (>= 9), autotools-dev, autoconf, automake, bzip2, zlib1g-dev, zlib1g-dev:native, libbz2-dev, liblzma-dev, m4, gettext, autoconf, automake, gawk, dpkg-dev (>= 1.16.1~), gcc-multilib [any-amd64 sparc64] <!nocheck>, libc6-dbg [powerpc powerpcspe ppc64 ppc64el armel armhf arm64 sparc64 riscv64], flex, bison
+Build-Conflicts: autoconf2.13, automake1.4
+Standards-Version: 4.1.0
+Section: libs
+Homepage: https://sourceware.org/elfutils/
+
+Package: elfutils
+Section: utils
+Architecture: any
+Multi-Arch: foreign
+Depends: ${shlibs:Depends}, libelf1 (= ${binary:Version}), libdw1 (= ${binary:Version}), ${misc:Depends}
+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}, libelf1 (= ${binary:Version}), libdw1 (= ${binary:Version}), ${misc:Depends}
+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.
+
diff --git a/copyright b/copyright
new file mode 100644 (file)
index 0000000..a55e6d7
--- /dev/null
+++ b/copyright
@@ -0,0 +1,71 @@
+This package was debianized by Kurt Roeckx <kurt@roeckx.be> 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 <drepper@redhat.com>
+   Jeff Johnson <jbj@redhat.com>
+   Alexander Larsson
+   Jakub Jelinek <jakub@redhat.com>
+   Roland McGrath <roland@redhat.com>
+
+
+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 <http://www.gnu.org/licenses/>.  */
+
+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 <http://www.gnu.org/licenses/>.  */
+
+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-'.
+
diff --git a/docs b/docs
new file mode 100644 (file)
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 (file)
index 0000000..e772481
--- /dev/null
@@ -0,0 +1 @@
+usr/bin
diff --git a/libasm-dev.install b/libasm-dev.install
new file mode 100644 (file)
index 0000000..7c0a960
--- /dev/null
@@ -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 (file)
index 0000000..aa35d27
--- /dev/null
@@ -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 (file)
index 0000000..0c72b9d
--- /dev/null
@@ -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/libdw-dev.install b/libdw-dev.install
new file mode 100644 (file)
index 0000000..516ee14
--- /dev/null
@@ -0,0 +1,9 @@
+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/*/libebl.a
+usr/lib/*/pkgconfig/libdw.pc
diff --git a/libdw1.install b/libdw1.install
new file mode 100644 (file)
index 0000000..25ffc68
--- /dev/null
@@ -0,0 +1,3 @@
+usr/lib/*/libdw.so.1
+usr/lib/*/libdw-0.*.so
+usr/lib/*/elfutils/
diff --git a/libdw1.symbols b/libdw1.symbols
new file mode 100644 (file)
index 0000000..d723af1
--- /dev/null
@@ -0,0 +1,26 @@
+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 0.126
diff --git a/libelf-dev.install b/libelf-dev.install
new file mode 100644 (file)
index 0000000..d876280
--- /dev/null
@@ -0,0 +1,8 @@
+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
diff --git a/libelf1.install b/libelf1.install
new file mode 100644 (file)
index 0000000..4e2d096
--- /dev/null
@@ -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 (file)
index 0000000..731af1f
--- /dev/null
@@ -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 (file)
index 0000000..a9a7210
--- /dev/null
@@ -0,0 +1,31 @@
+From 77cb4a53c270d5854d3af24f19547bc3de825233 Mon Sep 17 00:00:00 2001
+From: James Cowgill <james410@cowgill.org.uk>
+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 <james410@cowgill.org.uk>
+---
+ 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 (file)
index 0000000..72125c9
--- /dev/null
@@ -0,0 +1,168 @@
+From fdaab18a65ed2529656baa64cb6169f34d7e507b Mon Sep 17 00:00:00 2001
+From: James Cowgill <james410@cowgill.org.uk>
+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 <james410@cowgill.org.uk>
+---
+ 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 (file)
index 0000000..7cefeae
--- /dev/null
@@ -0,0 +1,226 @@
+From 59d4b8c48e5040af7e02b34eb26ea602ec82a38e Mon Sep 17 00:00:00 2001
+From: James Cowgill <james410@cowgill.org.uk>
+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 <james410@cowgill.org.uk>
+---
+ 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 (file)
index 0000000..6a85baf
--- /dev/null
@@ -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 <string.h>
++#include <stdio.h>
+ #include <dwarf.h>
+ #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 <libdw.h>
++
++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_werror.patch b/patches/disable_werror.patch
new file mode 100644 (file)
index 0000000..4c1a544
--- /dev/null
@@ -0,0 +1,17 @@
+From: Helmut Grohne <helmut@subdivi.de>
+Subject: disable -Werror as it tends to break with new gcc versions
+Bug-Debian: https://bugs.debian.org/886004
+Last-Update: 2018-01-01
+
+Index: elfutils-0.176/config/eu.am
+===================================================================
+--- elfutils-0.176.orig/config/eu.am
++++ elfutils-0.176/config/eu.am
+@@ -73,7 +73,6 @@ AM_CFLAGS = -std=gnu99 -Wall -Wshadow -W
+           -Wold-style-definition -Wstrict-prototypes -Wtrampolines \
+           $(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),-Wno-packed-not-aligned,) \
diff --git a/patches/hppa_backend.diff b/patches/hppa_backend.diff
new file mode 100644 (file)
index 0000000..336ee2b
--- /dev/null
@@ -0,0 +1,801 @@
+Index: elfutils-0.175/backends/parisc_init.c
+===================================================================
+--- /dev/null
++++ elfutils-0.175/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 <drepper@redhat.com>, 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
++   <http://www.openinventionnetwork.com>.  */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#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;
++}
+Index: elfutils-0.175/backends/parisc_regs.c
+===================================================================
+--- /dev/null
++++ elfutils-0.175/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
++   <http://www.openinventionnetwork.com>.  */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <string.h>
++#include <dwarf.h>
++
++#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;
++}
+Index: elfutils-0.175/backends/parisc_reloc.def
+===================================================================
+--- /dev/null
++++ elfutils-0.175/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
++   <http://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
+Index: elfutils-0.175/backends/parisc_retval.c
+===================================================================
+--- /dev/null
++++ elfutils-0.175/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
++   <http://www.openinventionnetwork.com>.  */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <assert.h>
++#include <dwarf.h>
++
++#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);
++}
++
+Index: elfutils-0.175/backends/parisc_symbol.c
+===================================================================
+--- /dev/null
++++ elfutils-0.175/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 <drepper@redhat.com>, 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
++   <http://www.openinventionnetwork.com>.  */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <elf.h>
++#include <stddef.h>
++
++#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;
++    }
++}
+Index: elfutils-0.175/backends/libebl_parisc.h
+===================================================================
+--- /dev/null
++++ elfutils-0.175/backends/libebl_parisc.h
+@@ -0,0 +1,9 @@
++#ifndef _LIBEBL_HPPA_H
++#define _LIBEBL_HPPA_H 1
++
++#include <libdw.h>
++
++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
+Index: elfutils-0.175/backends/Makefile.am
+===================================================================
+--- elfutils-0.175.orig/backends/Makefile.am
++++ elfutils-0.175/backends/Makefile.am
+@@ -33,12 +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
++        tilegx m68k bpf riscv parisc
+ 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_m68k_pic.a libebl_bpf_pic.a libebl_riscv_pic.a \
++           libebl_parisc_pic.a
+ noinst_LIBRARIES = $(libebl_pic)
+ noinst_DATA = $(libebl_pic:_pic.a=.so)
+@@ -136,6 +137,9 @@ riscv_SRCS = riscv_init.c riscv_symbol.c
+ libebl_riscv_pic_a_SOURCES = $(riscv_SRCS)
+ am_libebl_riscv_pic_a_OBJECTS = $(riscv_SRCS:.c=.os)
++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)
+ libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw) $(libeu)
+       @rm -f $(@:.so=.map)
+Index: elfutils-0.175/libelf/elf.h
+===================================================================
+--- elfutils-0.175.orig/libelf/elf.h
++++ elfutils-0.175/libelf/elf.h
+@@ -2155,16 +2155,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. */
+@@ -2173,6 +2181,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.  */
+@@ -2198,6 +2207,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_path.patch b/patches/hurd_path.patch
new file mode 100644 (file)
index 0000000..4440e39
--- /dev/null
@@ -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 (file)
index 0000000..1e6d7a2
--- /dev/null
@@ -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_path.patch b/patches/kfreebsd_path.patch
new file mode 100644 (file)
index 0000000..9a19b58
--- /dev/null
@@ -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 (file)
index 0000000..29b72c4
--- /dev/null
@@ -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
++   <http://www.openinventionnetwork.com>.  */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#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
++   <http://www.openinventionnetwork.com>.  */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <string.h>
++#include <dwarf.h>
++
++#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
++   <http://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
++   <http://www.openinventionnetwork.com>.  */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <string.h>
++#include <assert.h>
++#include <dwarf.h>
++#include <elf.h>
++
++#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 <jakub@redhat.com>, 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
++   <http://www.openinventionnetwork.com>.  */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <elf.h>
++#include <stddef.h>
++
++#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 (file)
index 0000000..8dada52
--- /dev/null
@@ -0,0 +1,114 @@
+Description: Add MIPS ABI CFI callback
+Author: Kurt Roeckx <kurt@roeckx.be>
+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 <http://www.gnu.org/licenses/>.  */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include <dwarf.h>
++
++#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 (file)
index 0000000..c888037
--- /dev/null
@@ -0,0 +1,22 @@
+From: Kurt Roeckx <kurt@roeckx.be>
+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/riscv-retval-workaround.patch b/patches/riscv-retval-workaround.patch
new file mode 100644 (file)
index 0000000..237aad1
--- /dev/null
@@ -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 (file)
index 0000000..26f454f
--- /dev/null
@@ -0,0 +1,14 @@
+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
diff --git a/patches/testsuite-ignore-elflint.diff b/patches/testsuite-ignore-elflint.diff
new file mode 100644 (file)
index 0000000..2fb74fe
--- /dev/null
@@ -0,0 +1,40 @@
+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).
+
+Index: b/tests/run-elflint-self.sh
+===================================================================
+--- 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
+Index: b/tests/test-subr.sh
+===================================================================
+--- a/tests/test-subr.sh
++++ b/tests/test-subr.sh
+@@ -170,3 +170,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/rules b/rules
new file mode 100755 (executable)
index 0000000..76e4472
--- /dev/null
+++ b/rules
@@ -0,0 +1,127 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Copyright 2006, Kurt Roeckx <kurt@roeckx.be>
+
+# 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
+
+
+# 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)))
+    MAKEFLAGS += -j$(NUMJOBS)
+endif
+
+DPKG_EXPORT_BUILDFLAGS = 1
+include /usr/share/dpkg/buildflags.mk
+
+config.status: configure.ac
+       dh_testdir
+       autoreconf -fis
+ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+       ./configure --enable-maintainer-mode
+       $(MAKE) $(MAKEFLAGS)
+       $(MAKE) clean
+endif
+       CFLAGS="$(CFLAGS) -O3" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \
+               ./configure $(confflags) --prefix=/usr \
+               --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \
+               --program-prefix=eu- --disable-silent-rules
+
+build: build-stamp
+build-stamp:  config.status
+       dh_testdir
+
+       $(MAKE) $(MAKEFLAGS)
+
+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 $(MAKEFLAGS) || { cat tests/test-suite.log; exit 1; }
+       cat tests/test-suite.log
+endif
+
+       touch build-stamp
+
+clean:
+       dh_testdir
+       dh_testroot
+       rm -f build-stamp
+       [ ! -f Makefile ] || $(MAKE) distclean
+       rm -f configure version.h
+       rm -f INSTALL aclocal.m4
+       rm -f config/depcomp config/install-sh config/missing config/compile config/ylwrap config/ar-lib
+       rm -f config/config.guess config/config.sub elfutils.spec
+       rm -f config.h.in
+       rm -f config/test-driver
+       rm -rf autom4te.cache
+       rm -f rm Makefile.in backends/Makefile.in config/Makefile.in lib/Makefile.in libasm/Makefile.in libcpu/Makefile.in libdw/Makefile.in libdwfl/Makefile.in libebl/Makefile.in libelf/Makefile.in m4/Makefile.in src/Makefile.in tests/Makefile.in libdwelf/Makefile.in
+       rm -f libdw/known-dwarf.h
+
+       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 debian/tmp/usr/include/elfutils/libebl.h
+
+# Build architecture-independent files here.
+build-indep: build
+binary-indep: build-indep install
+# We have nothing to do.
+
+# Build architecture-dependent files here.
+build-arch: build
+binary-arch: build-arch install
+       dh_testdir
+       dh_testroot
+       dh_installchangelogs ChangeLog
+       dh_installdocs
+       dh_install --fail-missing --sourcedir=debian/tmp
+       dh_strip
+       dh_compress
+       dh_fixperms
+       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_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+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 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/source/include-binaries b/source/include-binaries
new file mode 100644 (file)
index 0000000..95a390b
--- /dev/null
@@ -0,0 +1 @@
+debian/upstream-signing-key.pgp
diff --git a/upstream-signing-key.pgp b/upstream-signing-key.pgp
new file mode 100644 (file)
index 0000000..dee56c4
Binary files /dev/null and b/upstream-signing-key.pgp differ
diff --git a/watch b/watch
new file mode 100644 (file)
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