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

  Server: rpm5.org                         Name:   Matthew Dawkins
  Root:   /v/rpm/cvs                       Email:  mdawk...@rpm5.org
  Module: rpm                              Date:   08-May-2012 01:37:32
  Branch: rpm-5_4                          Handle: 2012050723373101

  Modified files:           (Branch: rpm-5_4)
    rpm                     CHANGES
    rpm/tools               debugedit.c

  Log:
    applied mdv patch 
rpm-5.4.4-debugedit-recompute-build-id-only-on-dwarf-change.patch
    
    Submitted by: mdawkins

  Summary:
    Revision    Changes     Path
    1.3501.2.265+2  -0      rpm/CHANGES
    2.23.2.2    +21 -11     rpm/tools/debugedit.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3501.2.264 -r1.3501.2.265 CHANGES
  --- rpm/CHANGES       7 May 2012 23:34:11 -0000       1.3501.2.264
  +++ rpm/CHANGES       7 May 2012 23:37:31 -0000       1.3501.2.265
  @@ -1,5 +1,7 @@
   5.4.8 -> 5.4.9: 
  +    - mdawkins: applied mdv patch 
rpm-5.4.4-debugedit-recompute-build-id-only-on-dwarf-change.patch
       - mdawkins: applied mdv patch rpm-5.4.4-debugedit-whitespace-fixups.patch
  +    - debugedit: swipe latest frpm @rpm.org and the ELF cabal.
       - mdawkins: applied mdv patch 
rpm-5.4.4-find-debuginfo-drop-useless-sort.patch
       - mdawkins: added python typelib G-IR support to pythonegg.py (gmoro mdv)
       - mdawkins: dropped vendor if defs for no-owner-group-on-srpm-install
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/tools/debugedit.c
  ============================================================================
  $ cvs diff -u -r2.23.2.1 -r2.23.2.2 debugedit.c
  --- rpm/tools/debugedit.c     7 May 2012 23:34:19 -0000       2.23.2.1
  +++ rpm/tools/debugedit.c     7 May 2012 23:37:32 -0000       2.23.2.2
  @@ -464,6 +464,14 @@
     return rv;
   }
   
  +static int dirty_elf;
  +static void
  +dirty_section (unsigned int sec)
  +{
  +  elf_flagdata (debug_sections[sec].elf_data, ELF_C_SET, ELF_F_DIRTY);
  +  dirty_elf = 1;
  +}
  +
   static int
   has_prefix (const char  *str,
            const char  *prefix)
  @@ -654,6 +662,8 @@
          size_t len = strlen ((char *)srcptr) + 1;
          const unsigned char *readptr = srcptr;
   
  +       char *orig = strdup ((const char *) srcptr);
  +
          if (*srcptr == '/' && has_prefix ((char *)srcptr, base_dir))
            {
              if (dest_len < base_len)
  @@ -670,8 +680,9 @@
          shrank -= len;
          ptr += len;
   
  -       elf_flagdata (debug_sections[DEBUG_STR].elf_data,
  -                     ELF_C_SET, ELF_F_DIRTY);
  +       if (memcmp (orig, ptr - len, len))
  +         dirty_section (DEBUG_STR);
  +       free (orig);
        }
   
         if (shrank > 0)
  @@ -713,8 +724,7 @@
                           len - base_len);
                  ptr += dest_len - base_len;
                }
  -           elf_flagdata (debug_sections[DEBUG_STR].elf_data,
  -                         ELF_C_SET, ELF_F_DIRTY);
  +           dirty_section (DEBUG_STR);
            }
          else if (ptr != srcptr)
            memmove (ptr, srcptr, len);
  @@ -782,11 +792,9 @@
                          
   
                        }
  -                   elf_flagdata (debug_sections[DEBUG_INFO].elf_data,
  -                                 ELF_C_SET, ELF_F_DIRTY);
  +                   dirty_section (DEBUG_INFO);
                    }
                }
  -
              else if (form == DW_FORM_strp &&
                       debug_sections[DEBUG_STR].data)
                {
  @@ -809,8 +817,7 @@
                          memmove (dir + dest_len, dir + base_len,
                                   strlen (dir + base_len) + 1);
                        }
  -                   elf_flagdata (debug_sections[DEBUG_STR].elf_data,
  -                                 ELF_C_SET, ELF_F_DIRTY);
  +                   dirty_section (DEBUG_STR);
                    }
                }
            }
  @@ -849,8 +856,7 @@
                      memmove (name + dest_len, name + base_len,
                               strlen (name + base_len) + 1);
                    }
  -               elf_flagdata (debug_sections[DEBUG_STR].elf_data,
  -                             ELF_C_SET, ELF_F_DIRTY);
  +               dirty_section (DEBUG_STR);
                }
            }
   
  @@ -1387,6 +1393,9 @@
         exit (1);
       }
   
  +  if (!dirty_elf)
  +    goto print;
  +
     if (elf_update (dso->elf, ELF_C_NULL) < 0)
       {
         fprintf (stderr, "Failed to update file: %s\n",
  @@ -1471,6 +1480,7 @@
   
     elf_flagdata (build_id, ELF_C_SET, ELF_F_DIRTY);
   
  + print:
     /* Now format the build ID bits in hex to print out.  */
     {
       const rpmuint8_t * id = (rpmuint8_t *)build_id->d_buf + build_id_offset;
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to