]> git.ipfire.org Git - people/arne_f/ipfire-3.x.git/commitdiff
debugedit: New package
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 26 Oct 2016 22:58:19 +0000 (23:58 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 26 Oct 2016 22:58:19 +0000 (23:58 +0100)
Stripped from RPM5 and built as a standalone version

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
debugedit/debugedit.nm [new file with mode: 0644]
debugedit/patches/debugedit-5.3.5-DWARF-4.patch [new file with mode: 0644]
debugedit/update/Makefile [new file with mode: 0644]
debugedit/update/README [new file with mode: 0644]
debugedit/update/update.sh [new file with mode: 0644]

diff --git a/debugedit/debugedit.nm b/debugedit/debugedit.nm
new file mode 100644 (file)
index 0000000..83f67a8
--- /dev/null
@@ -0,0 +1,38 @@
+###############################################################################
+# IPFire.org    - An Open Source Firewall Solution                            #
+# Copyright (C) - IPFire Development Team <info@ipfire.org>                   #
+###############################################################################
+
+name       = debugedit
+version    = 5.3.5
+release    = 1
+
+groups     = Development/Tools
+url        = http://www.rpm5.org/
+license    = GPLv2
+summary    = Standalone version of debugedit
+
+description
+       This package contains a standalone version of debugedit from RPM5.
+end
+
+build
+       requires
+               beecrypt-devel
+               elfutils-devel
+               popt-devel
+       end
+
+       install
+               mkdir -pv %{BUILDROOT}%{bindir}
+               install -v -m 755 debugedit %{BUILDROOT}%{bindir}/debugedit
+       end
+end
+
+packages
+       package %{name}
+
+       package %{name}-debuginfo
+               template DEBUGINFO
+       end
+end
diff --git a/debugedit/patches/debugedit-5.3.5-DWARF-4.patch b/debugedit/patches/debugedit-5.3.5-DWARF-4.patch
new file mode 100644 (file)
index 0000000..3e14061
--- /dev/null
@@ -0,0 +1,129 @@
+add DWARF 4 support
+
+https://bugs.gentoo.org/400663
+https://bugzilla.redhat.com/show_bug.cgi?id=707677
+
+--- debugedit-5.3.5/debugedit.c        2011-10-11 05:37:49.000000000 +0200
++++ debugedit-5.3.5/debugedit.c        2012-01-25 01:27:23.487999039 +0100
+@@ -70,6 +70,10 @@
+ #include <rpmtag.h>
+ #define DW_TAG_partial_unit 0x3c
++#define DW_FORM_sec_offset 0x17
++#define DW_FORM_exprloc 0x18
++#define DW_FORM_flag_present 0x19
++#define DW_FORM_ref_sig8 0x20
+ char *base_dir = NULL;
+ char *dest_dir = NULL;
+@@ -246,6 +250,7 @@
+ #define DEBUG_STR     8
+ #define DEBUG_FRAME   9
+ #define DEBUG_RANGES  10
++#define DEBUG_TYPES   11
+     { ".debug_info", NULL, NULL, 0, 0, 0 },
+     { ".debug_abbrev", NULL, NULL, 0, 0, 0 },
+     { ".debug_line", NULL, NULL, 0, 0, 0 },
+@@ -257,6 +262,7 @@
+     { ".debug_str", NULL, NULL, 0, 0, 0 },
+     { ".debug_frame", NULL, NULL, 0, 0, 0 },
+     { ".debug_ranges", NULL, NULL, 0, 0, 0 },
++    { ".debug_types", NULL, NULL, 0, 0, 0 },
+     { NULL, NULL, NULL, 0, 0, 0 }
+   };
+@@ -349,7 +355,8 @@
+               goto no_memory;
+           }
+         form = read_uleb128 (ptr);
+-        if (form == 2 || form > DW_FORM_indirect)
++        if (form == 2
++            || (form > DW_FORM_flag_present && form != DW_FORM_ref_sig8))
+           {
+             error (0, 0, "%s: Unknown DWARF DW_FORM_%d", dso->filename, form);
+             htab_delete (h);
+@@ -378,7 +385,6 @@
+ canonicalize_path (const char *s, char *d)
+ {
+   char *rv = d;
+-  const char *sroot;
+   char *droot;
+   if (IS_DIR_SEPARATOR (*s))
+@@ -394,7 +400,6 @@
+       s++;
+     }
+   droot = d;
+-  sroot = s;
+   while (*s)
+     {
+@@ -513,7 +518,7 @@
+     }
+   value = read_16 (ptr);
+-  if (value != 2 && value != 3)
++  if (value != 2 && value != 3 && value != 4)
+     {
+       error (0, 0, "%s: DWARF version %d unhandled", dso->filename,
+            value);
+@@ -529,8 +534,8 @@
+       return 1;
+     }
+   
+-  opcode_base = ptr[4];
+-  ptr = dir = ptr + 4 + opcode_base;
++  opcode_base = ptr[4 + (value >= 4)];
++  ptr = dir = ptr + 4 + (value >= 4) + opcode_base;
+   
+   /* dir table: */
+   value = 1;
+@@ -758,7 +763,8 @@
+       {
+         if (t->attr[i].attr == DW_AT_stmt_list)
+           {
+-            if (form == DW_FORM_data4)
++            if (form == DW_FORM_data4
++                || form == DW_FORM_sec_offset)
+               {
+                 list_offs = do_read_32_relocated (ptr);
+                 found_list_offs = 1;
+@@ -864,6 +870,8 @@
+             else
+               ptr += 4;
+             break;
++          case DW_FORM_flag_present:
++            break;
+           case DW_FORM_addr:
+             ptr += ptr_size;
+             break;
+@@ -878,10 +886,12 @@
+             break;
+           case DW_FORM_ref4:
+           case DW_FORM_data4:
++          case DW_FORM_sec_offset:
+             ptr += 4;
+             break;
+           case DW_FORM_ref8:
+           case DW_FORM_data8:
++          case DW_FORM_ref_sig8:
+             ptr += 8;
+             break;
+           case DW_FORM_sdata:
+@@ -910,6 +920,7 @@
+             form = DW_FORM_block1;
+             break;
+           case DW_FORM_block:
++          case DW_FORM_exprloc:
+             len = read_uleb128 (ptr);
+             form = DW_FORM_block1;
+             assert (len < UINT_MAX);
+@@ -1213,7 +1224,7 @@
+               }
+             
+             cu_version = read_16 (ptr);
+-            if (cu_version != 2 && cu_version != 3)
++            if (cu_version != 2 && cu_version != 3 && cu_version != 4)
+               {
+                 error (0, 0, "%s: DWARF version %d unhandled", dso->filename,
+                        cu_version);
diff --git a/debugedit/update/Makefile b/debugedit/update/Makefile
new file mode 100644 (file)
index 0000000..946a128
--- /dev/null
@@ -0,0 +1,11 @@
+CPPFLAGS += -I.
+LDLIBS = -lelf -lpopt -lbeecrypt
+
+all: debugedit
+
+debugedit: debugedit.o hashtab.o
+
+clean:
+       rm -f *.o debugedit
+
+.PHONY: clean
diff --git a/debugedit/update/README b/debugedit/update/README
new file mode 100644 (file)
index 0000000..2a676ae
--- /dev/null
@@ -0,0 +1 @@
+From https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-util/debugedit
diff --git a/debugedit/update/update.sh b/debugedit/update/update.sh
new file mode 100644 (file)
index 0000000..448624b
--- /dev/null
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+DISTDIR=/usr/portage/distfiles
+PN=debugedit
+
+set -e
+
+echo "Getting updated index"
+rm -f index.html
+wget -q http://rpm5.org/
+
+PV=$(sed -n '/Production:/{n;s:.*RPM ::;s:<.*::;p;q}' index.html)
+PV=5.3.5
+echo "Latest upstream version: ${PV}"
+rm -f index.html
+
+P="${PN}-${PV}"
+A=${P}.tar.gz
+
+echo "Fetching latest rpm tarball"
+r=rpm-${PV}
+wget -nv http://rpm5.org/files/rpm/rpm-${PV%.*}/${r}.tar.gz
+
+echo "Unpacking ${r}"
+rm -rf ${r}
+tar xf ${r}.tar.gz
+
+echo "Creating ${P}"
+rm -rf ${P}
+mkdir ${P}
+cp Makefile ${r}/tools/{hashtab.?,debugedit.c} ${P}/
+pushd ${P} >/dev/null
+more=true
+while ${more} ; do
+       more=false
+       for h in $(grep '#include' *.[ch] | awk '{print $NF}' | sed 's:[<>"]::g') ; do
+               [[ ${h} == */* ]] && continue
+               rh=$(find ../${r} -name ${h##*/})
+               if [[ -n ${rh} ]] && [[ ! -e ${rh##*/} ]] ; then
+                       # don't copy glibc includes
+                       if ! grep -qs 'This file is part of the GNU C Library' ${rh} ; then
+                               cp ${rh} ./
+                               more=true
+                       fi
+               fi
+       done
+done
+popd >/dev/null
+tar zcf ${A} ${P}
+
+echo "Testing build"
+pushd ${P} >/dev/null
+make -s
+popd >/dev/null
+
+echo "Cleaning up"
+rm -rf ${P} ${r}
+du -b ${A}