- patch debugedit so that it also handles the .debug.macro section
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=426
This commit is contained in:
parent
387ac01cee
commit
dd9ebc05d7
94
debugedit-macro.diff
Normal file
94
debugedit-macro.diff
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
--- ./tools/debugedit.c.orig 2017-12-15 12:17:02.564975374 +0000
|
||||||
|
+++ ./tools/debugedit.c 2017-12-15 12:17:29.058901941 +0000
|
||||||
|
@@ -71,6 +71,14 @@
|
||||||
|
#define DW_FORM_ref_udata 0x15
|
||||||
|
#define DW_FORM_indirect 0x16
|
||||||
|
|
||||||
|
+#define DW_MACRO_GNU_define 1
|
||||||
|
+#define DW_MACRO_GNU_undef 2
|
||||||
|
+#define DW_MACRO_GNU_start_file 3
|
||||||
|
+#define DW_MACRO_GNU_end_file 4
|
||||||
|
+#define DW_MACRO_GNU_define_indirect 5
|
||||||
|
+#define DW_MACRO_GNU_undef_indirect 6
|
||||||
|
+#define DW_MACRO_GNU_transparent_include 7
|
||||||
|
+
|
||||||
|
/* Unfortunately strtab manipulation functions were only officially added
|
||||||
|
to elfutils libdw in 0.167. Before that there were internal unsupported
|
||||||
|
ebl variants. While libebl.h isn't supported we'll try to use it anyway
|
||||||
|
@@ -2209,6 +2217,67 @@ edit_dwarf2 (DSO *dso)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* the macro section also contains offsets into the str section,
|
||||||
|
+ * so we need to update those as well if we update the strings
|
||||||
|
+ */
|
||||||
|
+ if (need_strp_update && debug_sections[DEBUG_MACRO].data)
|
||||||
|
+ {
|
||||||
|
+ ptr = debug_sections[DEBUG_MACRO].data;
|
||||||
|
+ endsec = ptr + debug_sections[DEBUG_MACRO].size;
|
||||||
|
+ int op = 0, macro_version, macro_flags;
|
||||||
|
+
|
||||||
|
+ while (ptr < endsec)
|
||||||
|
+ {
|
||||||
|
+ if (!op)
|
||||||
|
+ {
|
||||||
|
+ macro_version = read_16 (ptr);
|
||||||
|
+ macro_flags = read_8 (ptr);
|
||||||
|
+ if (macro_version != 4 || (macro_flags & ~2) != 0)
|
||||||
|
+ error (1, 0, "unhandled .debug_macro version/flags");
|
||||||
|
+ if ((macro_flags & 2) != 0)
|
||||||
|
+ ptr += 4;
|
||||||
|
+ }
|
||||||
|
+ op = read_8 (ptr);
|
||||||
|
+ if (!op)
|
||||||
|
+ continue;
|
||||||
|
+ switch(op)
|
||||||
|
+ {
|
||||||
|
+ case DW_MACRO_GNU_define:
|
||||||
|
+ case DW_MACRO_GNU_undef:
|
||||||
|
+ read_uleb128 (ptr);
|
||||||
|
+ ptr = (unsigned char *) strchr ((char *) ptr, '\0') + 1;
|
||||||
|
+ break;
|
||||||
|
+ case DW_MACRO_GNU_start_file:
|
||||||
|
+ read_uleb128 (ptr);
|
||||||
|
+ read_uleb128 (ptr);
|
||||||
|
+ break;
|
||||||
|
+ case DW_MACRO_GNU_define_indirect:
|
||||||
|
+ case DW_MACRO_GNU_undef_indirect:
|
||||||
|
+ read_uleb128 (ptr);
|
||||||
|
+ if (phase == 0)
|
||||||
|
+ {
|
||||||
|
+ size_t idx = read_32 (ptr);
|
||||||
|
+ record_existing_string_entry_idx (&dso->strings, idx);
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ struct stridxentry *entry;
|
||||||
|
+ size_t idx, new_idx;
|
||||||
|
+ idx = do_read_32 (ptr);
|
||||||
|
+ entry = string_find_entry (&dso->strings, idx);
|
||||||
|
+ new_idx = strent_offset (entry->entry);
|
||||||
|
+ write_32 (ptr, new_idx);
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ case DW_MACRO_GNU_transparent_include:
|
||||||
|
+ ptr += 4;
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* Same for the debug_str section. Make sure everything is
|
||||||
|
in place for phase 1 updating of debug_info
|
||||||
|
references. */
|
||||||
|
@@ -2238,6 +2307,8 @@ edit_dwarf2 (DSO *dso)
|
||||||
|
new strp, strings and/or linep offsets. */
|
||||||
|
if (need_strp_update || need_string_replacement || need_stmt_update)
|
||||||
|
dirty_section (DEBUG_INFO);
|
||||||
|
+ if (need_strp_update)
|
||||||
|
+ dirty_section (DEBUG_MACRO);
|
||||||
|
|
||||||
|
/* Update any debug_info relocations addends we might have touched. */
|
||||||
|
if (relbuf != NULL && reltype == SHT_RELA)
|
@ -1,3 +1,9 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Dec 15 13:18:39 CET 2017 - mls@suse.de
|
||||||
|
|
||||||
|
- patch debugedit so that it also handles the .debug.macro section
|
||||||
|
new patch: debugedit-macro.diff
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Dec 7 17:02:52 CET 2017 - mls@suse.de
|
Thu Dec 7 17:02:52 CET 2017 - mls@suse.de
|
||||||
|
|
||||||
|
3
rpm.spec
3
rpm.spec
@ -131,6 +131,7 @@ Patch104: editdwarf.diff
|
|||||||
Patch105: rofs.diff
|
Patch105: rofs.diff
|
||||||
Patch106: transfiletriggerpostun.diff
|
Patch106: transfiletriggerpostun.diff
|
||||||
Patch107: hardlink.diff
|
Patch107: hardlink.diff
|
||||||
|
Patch108: debugedit-macro.diff
|
||||||
Patch6464: auto-config-update-aarch64-ppc64le.diff
|
Patch6464: auto-config-update-aarch64-ppc64le.diff
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
#
|
#
|
||||||
@ -226,7 +227,7 @@ rm -f rpmdb/db.h
|
|||||||
%patch -P 70 -P 71 -P 73 -P 74 -P 75 -P 77 -P 78
|
%patch -P 70 -P 71 -P 73 -P 74 -P 75 -P 77 -P 78
|
||||||
%patch -P 85
|
%patch -P 85
|
||||||
%patch -P 93 -P 94 -P 99
|
%patch -P 93 -P 94 -P 99
|
||||||
%patch -P 100 -P 102 -P 103 -P 104 -P 105 -P 106 -P 107
|
%patch -P 100 -P 102 -P 103 -P 104 -P 105 -P 106 -P 107 -P 108
|
||||||
|
|
||||||
%ifarch aarch64 ppc64le
|
%ifarch aarch64 ppc64le
|
||||||
%patch6464
|
%patch6464
|
||||||
|
Loading…
x
Reference in New Issue
Block a user