packages: rpm/rpm-rpm5-debugedit.patch (NEW) - update tools/debugedit.c r2....

glen glen at pld-linux.org
Wed Jan 27 18:12:55 CET 2010


Author: glen                         Date: Wed Jan 27 17:12:55 2010 GMT
Module: packages                      Tag: HEAD
---- Log message:
- update tools/debugedit.c r2.22 from rpm5 trunk (raw)

---- Files affected:
packages/rpm:
   rpm-rpm5-debugedit.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/rpm/rpm-rpm5-debugedit.patch
diff -u /dev/null packages/rpm/rpm-rpm5-debugedit.patch:1.1
--- /dev/null	Wed Jan 27 18:12:55 2010
+++ packages/rpm/rpm-rpm5-debugedit.patch	Wed Jan 27 18:12:49 2010
@@ -0,0 +1,457 @@
+--- trunk/tools/debugedit.c	2010-01-27 18:57:49.758813670 +0200
++++ rpm-4.5/tools/debugedit.c	2008-04-06 23:32:15.000000000 +0300
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2001, 2002, 2003, 2005, 2007, 2009 Red Hat, Inc.
++/* Copyright (C) 2001, 2002, 2003, 2005, 2007 Red Hat, Inc.
+    Written by Alexander Larsson <alexl at redhat.com>, 2002
+    Based on code by Jakub Jelinek <jakub at redhat.com>, 2001.
+ 
+@@ -66,8 +66,8 @@
+ #define DW_FORM_indirect	0x16
+ 
+ #include <beecrypt/beecrypt.h>
++
+ #include "hashtab.h"
+-#include <rpmtag.h>
+ 
+ #define DW_TAG_partial_unit 0x3c
+ 
+@@ -77,6 +77,9 @@
+ int list_file_fd = -1;
+ int do_build_id = 0;
+ 
++typedef unsigned int uint_32;
++typedef unsigned short uint_16;
++
+ typedef struct
+ {
+   Elf *elf;
+@@ -90,7 +93,7 @@
+ typedef struct
+ {
+   unsigned char *ptr;
+-  rpmuint32_t addend;
++  uint_32 addend;
+ } REL;
+ 
+ #define read_uleb128(ptr) ({		\
+@@ -109,32 +112,31 @@
+   ret;					\
+ })
+ 
+-static rpmuint16_t (*do_read_16) (unsigned char *ptr);
+-static rpmuint32_t (*do_read_32) (unsigned char *ptr);
++static uint_16 (*do_read_16) (unsigned char *ptr);
++static uint_32 (*do_read_32) (unsigned char *ptr);
+ static void (*write_32) (unsigned char *ptr, GElf_Addr val);
+ 
+ static int ptr_size;
+-static int cu_version;
+ 
+-static inline rpmuint16_t
++static inline uint_16
+ buf_read_ule16 (unsigned char *data)
+ {
+   return data[0] | (data[1] << 8);
+ }
+ 
+-static inline rpmuint16_t
++static inline uint_16
+ buf_read_ube16 (unsigned char *data)
+ {
+   return data[1] | (data[0] << 8);
+ }
+ 
+-static inline rpmuint32_t
++static inline uint_32
+ buf_read_ule32 (unsigned char *data)
+ {
+   return data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
+ }
+ 
+-static inline rpmuint32_t
++static inline uint_32
+ buf_read_ube32 (unsigned char *data)
+ {
+   return data[3] | (data[2] << 8) | (data[1] << 16) | (data[0] << 24);
+@@ -154,7 +156,7 @@
+ 	{
+ 	  if (data->d_buf
+ 	      && offset >= data->d_off
+-	      && offset < data->d_off + (off_t)data->d_size)
++	      && offset < data->d_off + data->d_size)
+ 	    return (const char *) data->d_buf + (offset - data->d_off);
+ 	}
+     }
+@@ -166,13 +168,13 @@
+ #define read_1(ptr) *ptr++
+ 
+ #define read_16(ptr) ({					\
+-  rpmuint16_t ret = do_read_16 (ptr);			\
++  uint_16 ret = do_read_16 (ptr);			\
+   ptr += 2;						\
+   ret;							\
+ })
+ 
+ #define read_32(ptr) ({					\
+-  rpmuint32_t ret = do_read_32 (ptr);			\
++  uint_32 ret = do_read_32 (ptr);			\
+   ptr += 4;						\
+   ret;							\
+ })
+@@ -181,7 +183,7 @@
+ int reltype;
+ 
+ #define do_read_32_relocated(ptr) ({			\
+-  rpmuint32_t dret = do_read_32 (ptr);			\
++  uint_32 dret = do_read_32 (ptr);			\
+   if (relptr)						\
+     {							\
+       while (relptr < relend && relptr->ptr < ptr)	\
+@@ -198,7 +200,7 @@
+ })
+ 
+ #define read_32_relocated(ptr) ({			\
+-  rpmuint32_t ret = do_read_32_relocated (ptr);		\
++  uint_32 ret = do_read_32_relocated (ptr);		\
+   ptr += 4;						\
+   ret;							\
+ })
+@@ -206,7 +208,7 @@
+ static void
+ dwarf2_write_le32 (unsigned char *p, GElf_Addr val)
+ {
+-  rpmuint32_t v = (rpmuint32_t) val;
++  uint_32 v = (uint_32) val;
+ 
+   p[0] = v;
+   p[1] = v >> 8;
+@@ -218,7 +220,7 @@
+ static void
+ dwarf2_write_be32 (unsigned char *p, GElf_Addr val)
+ {
+-  rpmuint32_t v = (rpmuint32_t) val;
++  uint_32 v = (uint_32) val;
+ 
+   p[3] = v;
+   p[2] = v >> 8;
+@@ -240,18 +242,16 @@
+ #define DEBUG_LINE	2
+ #define DEBUG_ARANGES	3
+ #define DEBUG_PUBNAMES	4
+-#define DEBUG_PUBTYPES	5
+-#define DEBUG_MACINFO	6
+-#define DEBUG_LOC	7
+-#define DEBUG_STR	8
+-#define DEBUG_FRAME	9
+-#define DEBUG_RANGES	10
++#define DEBUG_MACINFO	5
++#define DEBUG_LOC	6
++#define DEBUG_STR	7
++#define DEBUG_FRAME	8
++#define DEBUG_RANGES	9
+     { ".debug_info", NULL, NULL, 0, 0, 0 },
+     { ".debug_abbrev", NULL, NULL, 0, 0, 0 },
+     { ".debug_line", NULL, NULL, 0, 0, 0 },
+     { ".debug_aranges", NULL, NULL, 0, 0, 0 },
+     { ".debug_pubnames", NULL, NULL, 0, 0, 0 },
+-    { ".debug_pubtypes", NULL, NULL, 0, 0, 0 },
+     { ".debug_macinfo", NULL, NULL, 0, 0, 0 },
+     { ".debug_loc", NULL, NULL, 0, 0, 0 },
+     { ".debug_str", NULL, NULL, 0, 0, 0 },
+@@ -331,7 +331,7 @@
+         }
+       if (*slot != NULL)
+ 	{
+-	  error (0, 0, "%s: Duplicate DWARF abbreviation %d", dso->filename,
++	  error (0, 0, "%s: Duplicate DWARF-2 abbreviation %d", dso->filename,
+ 		 t->entry);
+ 	  free (t);
+ 	  htab_delete (h);
+@@ -351,7 +351,7 @@
+ 	  form = read_uleb128 (ptr);
+ 	  if (form == 2 || form > DW_FORM_indirect)
+ 	    {
+-	      error (0, 0, "%s: Unknown DWARF DW_FORM_%d", dso->filename, form);
++	      error (0, 0, "%s: Unknown DWARF-2 DW_FORM_%d", dso->filename, form);
+ 	      htab_delete (h);
+ 	      return NULL;
+ 	    }
+@@ -361,7 +361,7 @@
+         }
+       if (read_uleb128 (ptr) != 0)
+         {
+-	  error (0, 0, "%s: DWARF abbreviation does not end with 2 zeros",
++	  error (0, 0, "%s: DWARF-2 abbreviation does not end with 2 zeros",
+ 		 dso->filename);
+ 	  htab_delete (h);
+ 	  return NULL;
+@@ -468,8 +468,8 @@
+ has_prefix (const char  *str,
+ 	    const char  *prefix)
+ {
+-  size_t str_len;
+-  size_t prefix_len;
++  int str_len;
++  int prefix_len;
+   
+   str_len = strlen (str);
+   prefix_len = strlen (prefix);
+@@ -481,14 +481,14 @@
+ }
+ 
+ static int
+-edit_dwarf2_line (DSO *dso, rpmuint32_t off, char *comp_dir, int phase)
++edit_dwarf2_line (DSO *dso, uint_32 off, char *comp_dir, int phase)
+ {
+   unsigned char *ptr = debug_sections[DEBUG_LINE].data, *dir;
+   unsigned char **dirt;
+   unsigned char *endsec = ptr + debug_sections[DEBUG_LINE].size;
+   unsigned char *endcu, *endprol;
+   unsigned char opcode_base;
+-  rpmuint32_t value, dirt_cnt;
++  uint_32 value, dirt_cnt;
+   size_t comp_dir_len = strlen (comp_dir);
+   size_t abs_file_cnt = 0, abs_dir_cnt = 0;
+ 
+@@ -513,7 +513,7 @@
+     }
+ 
+   value = read_16 (ptr);
+-  if (value != 2 && value != 3)
++  if (value != 2)
+     {
+       error (0, 0, "%s: DWARF version %d unhandled", dso->filename,
+ 	     value);
+@@ -679,12 +679,9 @@
+ 	  if (--shrank == 0)
+ 	    error (EXIT_FAILURE, 0,
+ 		   "canonicalization unexpectedly shrank by one character");
+-	  else
+-	    {	    
+-	      memset (ptr, 'X', shrank);
+-	      ptr += shrank;
+-	      *ptr++ = '\0';
+-	    }
++	  memset (ptr, 'X', shrank);
++	  ptr += shrank;
++	  *ptr++ = '\0';
+ 	}
+ 
+       if (abs_dir_cnt + abs_file_cnt != 0)
+@@ -740,7 +737,7 @@
+ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
+ {
+   int i;
+-  rpmuint32_t list_offs;
++  uint_32 list_offs;
+   int found_list_offs;
+   char *comp_dir;
+   
+@@ -749,9 +746,9 @@
+   found_list_offs = 0;
+   for (i = 0; i < t->nattr; ++i)
+     {
+-      rpmuint32_t form = t->attr[i].form;
+-      size_t len = 0;
+-      size_t base_len, dest_len;
++      uint_32 form = t->attr[i].form;
++      uint_32 len = 0;
++      int base_len, dest_len;
+       
+ 
+       while (1)
+@@ -794,7 +791,7 @@
+ 	      {
+ 		  char *dir;
+ 
+-		  dir = (char *) debug_sections[DEBUG_STR].data
++		  dir = (char *)debug_sections[DEBUG_STR].data
+ 		      + do_read_32_relocated (ptr);
+ 
+ 		  free (comp_dir);
+@@ -824,7 +821,7 @@
+ 	    {
+ 	      char *name;
+ 	      
+-	      name = (char *) debug_sections[DEBUG_STR].data
++	      name = (char *)debug_sections[DEBUG_STR].data
+ 		     + do_read_32_relocated (ptr);
+ 	      if (*name == '/' && comp_dir == NULL)
+ 		{
+@@ -858,12 +855,7 @@
+ 
+ 	  switch (form)
+ 	    {
+-	    case DW_FORM_ref_addr:
+-	      if (cu_version == 2)
+-		ptr += ptr_size;
+-	      else
+-		ptr += 4;
+-	      break;
++	    case DW_FORM_ref_addr: /* ptr_size in DWARF 2, offset in DWARF 3 */
+ 	    case DW_FORM_addr:
+ 	      ptr += ptr_size;
+ 	      break;
+@@ -915,7 +907,7 @@
+ 	      assert (len < UINT_MAX);
+ 	      break;
+ 	    default:
+-	      error (0, 0, "%s: Unknown DWARF DW_FORM_%d", dso->filename,
++	      error (0, 0, "%s: Unknown DWARF-2 DW_FORM_%d", dso->filename,
+ 		     form);
+ 	      return NULL;
+ 	    }
+@@ -926,34 +918,6 @@
+ 	  break;
+ 	}
+     }
+-
+-  /* Ensure the CU current directory will exist even if only empty.  Source
+-     filenames possibly located in its parent directories refer relatively to
+-     it and the debugger (GDB) cannot safely optimize out the missing
+-     CU current dir subdirectories.  */
+-  if (comp_dir && list_file_fd != -1)
+-    {
+-      char *p;
+-      size_t size;
+-
+-      if (base_dir && has_prefix (comp_dir, base_dir))
+-	p = comp_dir + strlen (base_dir);
+-      else if (dest_dir && has_prefix (comp_dir, dest_dir))
+-	p = comp_dir + strlen (dest_dir);
+-      else
+-	p = comp_dir;
+-
+-      size = strlen (p) + 1;
+-      while (size > 0)
+-	{
+-	  ssize_t ret = write (list_file_fd, p, size);
+-	  if (ret == -1)
+-	    break;
+-	  size -= ret;
+-	  p += ret;
+-	}
+-    }
+-
+   if (found_list_offs && comp_dir)
+     edit_dwarf2_line (dso, list_offs, comp_dir, phase);
+ 
+@@ -1070,7 +1034,7 @@
+   if (debug_sections[DEBUG_INFO].data != NULL)
+     {
+       unsigned char *ptr, *endcu, *endsec;
+-      rpmuint32_t value;
++      uint_32 value;
+       htab_t abbrev;
+       struct abbrev_tag tag, *t;
+       int phase;
+@@ -1212,11 +1176,11 @@
+ 		  return 1;
+ 		}
+ 	      
+-	      cu_version = read_16 (ptr);
+-	      if (cu_version != 2 && cu_version != 3)
++	      value = read_16 (ptr);
++	      if (value != 2)
+ 		{
+ 		  error (0, 0, "%s: DWARF version %d unhandled", dso->filename,
+-			 cu_version);
++			 value);
+ 		  return 1;
+ 		}
+ 	      
+@@ -1226,7 +1190,7 @@
+ 		  if (debug_sections[DEBUG_ABBREV].data == NULL)
+ 		    error (0, 0, "%s: .debug_abbrev not present", dso->filename);
+ 		  else
+-		    error (0, 0, "%s: DWARF CU abbrev offset too large",
++		    error (0, 0, "%s: DWARF-2 CU abbrev offset too large",
+ 			   dso->filename);
+ 		  return 1;
+ 		}
+@@ -1236,14 +1200,14 @@
+ 		  ptr_size = read_1 (ptr);
+ 		  if (ptr_size != 4 && ptr_size != 8)
+ 		    {
+-		      error (0, 0, "%s: Invalid DWARF pointer size %d",
++		      error (0, 0, "%s: Invalid DWARF-2 pointer size %d",
+ 			     dso->filename, ptr_size);
+ 		      return 1;
+ 		    }
+ 		}
+ 	      else if (read_1 (ptr) != ptr_size)
+ 		{
+-		  error (0, 0, "%s: DWARF pointer size differs between CUs",
++		  error (0, 0, "%s: DWARF-2 pointer size differs between CUs",
+ 			 dso->filename);
+ 		  return 1;
+ 		}
+@@ -1261,7 +1225,7 @@
+ 		  t = htab_find_with_hash (abbrev, &tag, tag.entry);
+ 		  if (t == NULL)
+ 		    {
+-		      error (0, 0, "%s: Could not find DWARF abbreviation %d",
++		      error (0, 0, "%s: Could not find DWARF-2 abbreviation %d",
+ 			     dso->filename, tag.entry);
+ 		      htab_delete (abbrev);
+ 		      return 1;
+@@ -1410,12 +1374,12 @@
+      or Elf64 object, only that we are consistent in what bits feed the
+      hash so it comes out the same for the same file contents.  */
+   {
+-    auto inline void process (const void *data, size_t size);
+-    auto inline void process (const void *data, size_t size)
++    inline void process (const void *data, size_t size)
+     {
+       memchunk chunk = { .data = (void *) data, .size = size };
+       hashFunctionContextUpdateMC (&ctx, &chunk);
+     }
++
+     union
+     {
+       GElf_Ehdr ehdr;
+@@ -1475,11 +1439,11 @@
+ 
+   /* Now format the build ID bits in hex to print out.  */
+   {
+-    const rpmuint8_t * id = (rpmuint8_t *)build_id->d_buf + build_id_offset;
++    const unsigned char * id = (unsigned char *) build_id->d_buf + build_id_offset;
+     char hex[build_id_size * 2 + 1];
+     int n = snprintf (hex, 3, "%02" PRIx8, id[0]);
+     assert (n == 2);
+-    for (i = 1; i < (int)build_id_size; ++i)
++    for (i = 1; i < build_id_size; ++i)
+       {
+ 	n = snprintf (&hex[i * 2], 3, "%02" PRIx8, id[i]);
+ 	assert (n == 2);
+@@ -1502,7 +1466,8 @@
+   Elf_Data *build_id = NULL;
+   size_t build_id_offset = 0, build_id_size = 0;
+ 
+-  optCon = poptGetContext("debugedit", argc, (const char **)argv, optionsTable, 0);
++  optCon = poptGetContext("debugedit", argc, (const char **)argv,
++			  optionsTable, 0);
+   
+   while ((nextopt = poptGetNextOpt (optCon)) > 0 || nextopt == POPT_ERROR_BADOPT)
+     /* do nothing */ ;
+@@ -1620,8 +1585,7 @@
+ 	      Elf_Data src = dst;
+ 	      src.d_buf = data->d_buf;
+ 	      assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
+-	      while ((char *) data->d_buf + data->d_size - 
+-		     (char *) src.d_buf > (int) sizeof nh
++	      while ((char *) data->d_buf + data->d_size - (char *) src.d_buf > (int) sizeof nh
+ 		     && elf32_xlatetom (&dst, &src, dso->ehdr.e_ident[EI_DATA]))
+ 		{
+ 		  Elf32_Word len = sizeof nh + nh.n_namesz;
+@@ -1631,8 +1595,7 @@
+ 		      && !memcmp ((char *) src.d_buf + sizeof nh, "GNU", sizeof "GNU"))
+ 		    {
+ 		      build_id = data;
+-		      build_id_offset = (char *) src.d_buf + len - 
+-					(char *) data->d_buf;
++		      build_id_offset = (char *) src.d_buf + len - (char *) data->d_buf;
+ 		      build_id_size = nh.n_descsz;
+ 		      break;
+ 		    }
================================================================


More information about the pld-cvs-commit mailing list