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