RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  j...@rpm5.org
  Module: rpm                              Date:   15-Jun-2009 16:16:21
  Branch: HEAD                             Handle: 2009061514162001

  Modified files:
    rpm                     CHANGES
    rpm/tools               debugedit.c

  Log:
    - debugedit: handle DWARF-3 changes (#505774).

  Summary:
    Revision    Changes     Path
    1.3026      +1  -0      rpm/CHANGES
    2.22        +27 -19     rpm/tools/debugedit.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3025 -r1.3026 CHANGES
  --- rpm/CHANGES       14 Jun 2009 23:41:25 -0000      1.3025
  +++ rpm/CHANGES       15 Jun 2009 14:16:20 -0000      1.3026
  @@ -1,5 +1,6 @@
   
   5.2b1 -> 5.3a1
  +    - jbj: debugedit: handle DWARF-3 changes (#505774).
       - jbj: augtool: use rpmaug globals where useful.
       - jbj: rpmaug: add rpmaugPoptTable and global parameters.
       - jbj: rpmaug: add global augtool interpreter.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/tools/debugedit.c
  ============================================================================
  $ cvs diff -u -r2.21 -r2.22 debugedit.c
  --- rpm/tools/debugedit.c     25 Dec 2008 17:21:43 -0000      2.21
  +++ rpm/tools/debugedit.c     15 Jun 2009 14:16:21 -0000      2.22
  @@ -1,4 +1,4 @@
  -/* Copyright (C) 2001, 2002, 2003, 2005, 2007 Red Hat, Inc.
  +/* Copyright (C) 2001, 2002, 2003, 2005, 2007, 2009 Red Hat, Inc.
      Written by Alexander Larsson <al...@redhat.com>, 2002
      Based on code by Jakub Jelinek <ja...@redhat.com>, 2001.
   
  @@ -114,6 +114,7 @@
   static void (*write_32) (unsigned char *ptr, GElf_Addr val);
   
   static int ptr_size;
  +static int cu_version;
   
   static inline rpmuint16_t
   buf_read_ule16 (unsigned char *data)
  @@ -239,16 +240,18 @@
   #define DEBUG_LINE   2
   #define DEBUG_ARANGES        3
   #define DEBUG_PUBNAMES       4
  -#define DEBUG_MACINFO        5
  -#define DEBUG_LOC    6
  -#define DEBUG_STR    7
  -#define DEBUG_FRAME  8
  -#define DEBUG_RANGES 9
  +#define DEBUG_PUBTYPES       5
  +#define DEBUG_MACINFO        6
  +#define DEBUG_LOC    7
  +#define DEBUG_STR    8
  +#define DEBUG_FRAME  9
  +#define DEBUG_RANGES 10
       { ".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 },
  @@ -328,7 +331,7 @@
           }
         if (*slot != NULL)
        {
  -       error (0, 0, "%s: Duplicate DWARF-2 abbreviation %d", dso->filename,
  +       error (0, 0, "%s: Duplicate DWARF abbreviation %d", dso->filename,
                 t->entry);
          free (t);
          htab_delete (h);
  @@ -348,7 +351,7 @@
          form = read_uleb128 (ptr);
          if (form == 2 || form > DW_FORM_indirect)
            {
  -           error (0, 0, "%s: Unknown DWARF-2 DW_FORM_%d", dso->filename, 
form);
  +           error (0, 0, "%s: Unknown DWARF DW_FORM_%d", dso->filename, form);
              htab_delete (h);
              return NULL;
            }
  @@ -358,7 +361,7 @@
           }
         if (read_uleb128 (ptr) != 0)
           {
  -       error (0, 0, "%s: DWARF-2 abbreviation does not end with 2 zeros",
  +       error (0, 0, "%s: DWARF abbreviation does not end with 2 zeros",
                 dso->filename);
          htab_delete (h);
          return NULL;
  @@ -510,7 +513,7 @@
       }
   
     value = read_16 (ptr);
  -  if (value != 2)
  +  if (value != 2 && value != 3)
       {
         error (0, 0, "%s: DWARF version %d unhandled", dso->filename,
             value);
  @@ -855,7 +858,12 @@
   
          switch (form)
            {
  -         case DW_FORM_ref_addr: /* ptr_size in DWARF 2, offset in DWARF 3 */
  +         case DW_FORM_ref_addr:
  +           if (cu_version == 2)
  +             ptr += ptr_size;
  +           else
  +             ptr += 4;
  +           break;
            case DW_FORM_addr:
              ptr += ptr_size;
              break;
  @@ -907,7 +915,7 @@
              assert (len < UINT_MAX);
              break;
            default:
  -           error (0, 0, "%s: Unknown DWARF-2 DW_FORM_%d", dso->filename,
  +           error (0, 0, "%s: Unknown DWARF DW_FORM_%d", dso->filename,
                     form);
              return NULL;
            }
  @@ -1204,11 +1212,11 @@
                  return 1;
                }
              
  -           value = read_16 (ptr);
  -           if (value != 2)
  +           cu_version = read_16 (ptr);
  +           if (cu_version != 2 && cu_version != 3)
                {
                  error (0, 0, "%s: DWARF version %d unhandled", dso->filename,
  -                      value);
  +                      cu_version);
                  return 1;
                }
              
  @@ -1218,7 +1226,7 @@
                  if (debug_sections[DEBUG_ABBREV].data == NULL)
                    error (0, 0, "%s: .debug_abbrev not present", 
dso->filename);
                  else
  -                 error (0, 0, "%s: DWARF-2 CU abbrev offset too large",
  +                 error (0, 0, "%s: DWARF CU abbrev offset too large",
                           dso->filename);
                  return 1;
                }
  @@ -1228,14 +1236,14 @@
                  ptr_size = read_1 (ptr);
                  if (ptr_size != 4 && ptr_size != 8)
                    {
  -                   error (0, 0, "%s: Invalid DWARF-2 pointer size %d",
  +                   error (0, 0, "%s: Invalid DWARF pointer size %d",
                             dso->filename, ptr_size);
                      return 1;
                    }
                }
              else if (read_1 (ptr) != ptr_size)
                {
  -               error (0, 0, "%s: DWARF-2 pointer size differs between CUs",
  +               error (0, 0, "%s: DWARF pointer size differs between CUs",
                         dso->filename);
                  return 1;
                }
  @@ -1253,7 +1261,7 @@
                  t = htab_find_with_hash (abbrev, &tag, tag.entry);
                  if (t == NULL)
                    {
  -                   error (0, 0, "%s: Could not find DWARF-2 abbreviation %d",
  +                   error (0, 0, "%s: Could not find DWARF abbreviation %d",
                             dso->filename, tag.entry);
                      htab_delete (abbrev);
                      return 1;
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to