From 395e64825659fe5be1744b577bcdb4854d72d5d7 Mon Sep 17 00:00:00 2001 From: Philipp Rudo Date: Wed, 17 Dec 2025 14:40:28 +0100 Subject: [PATCH] libdrgn: orc_info: work around ORC backports in RHEL 9.6 Resolves: RHEL-136527 Upstream: https://github.com/osandov/drgn This problem is fixed in the kernel with b9f174c811e3 ("x86/unwind/orc: Add ELF section with ORC version identifier"). But the fix won't work as expected due to missing commit 321648455061 ("kbuild: use obj-y instead extra-y for objects placed at the head"). The second commit however is very invasive and shouldn't be backported this late in the RHEL9 cycle (see RHEL-27234 for details). So backport the workaround in drgn instead. commit 8660ee186377aabf28cd54d76beb942b9a06d09a Author: Stephen Brennan Date: Fri Dec 5 10:43:44 2025 -0800 libdrgn: orc_info: work around ORC backports in RHEL 9.6 Add a special case to detect RHEL 9 kernel versions since release 5.14.0-517.el9, and use ORC "v3" for these kernels. Fixes #578. Signed-off-by: Stephen Brennan Signed-off-by: Philipp Rudo --- ...-work-around-ORC-backports-in-RHEL-9.patch | 44 +++++++++++++++++++ python-drgn.spec | 8 +++- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 0001-libdrgn-orc_info-work-around-ORC-backports-in-RHEL-9.patch diff --git a/0001-libdrgn-orc_info-work-around-ORC-backports-in-RHEL-9.patch b/0001-libdrgn-orc_info-work-around-ORC-backports-in-RHEL-9.patch new file mode 100644 index 0000000..c865e7c --- /dev/null +++ b/0001-libdrgn-orc_info-work-around-ORC-backports-in-RHEL-9.patch @@ -0,0 +1,44 @@ +From 8660ee186377aabf28cd54d76beb942b9a06d09a Mon Sep 17 00:00:00 2001 +From: Stephen Brennan +Date: Fri, 5 Dec 2025 10:43:44 -0800 +Subject: [PATCH] libdrgn: orc_info: work around ORC backports in RHEL 9.6 + +Add a special case to detect RHEL 9 kernel versions since release +5.14.0-517.el9, and use ORC "v3" for these kernels. + +Fixes #578. + +Signed-off-by: Stephen Brennan +--- + libdrgn/orc_info.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/libdrgn/orc_info.c b/libdrgn/orc_info.c +index 7015d096..83ea3f4e 100644 +--- a/libdrgn/orc_info.c ++++ b/libdrgn/orc_info.c +@@ -254,6 +254,21 @@ static int orc_version_from_osrelease(struct drgn_program *prog) + long minor = 0; + if (*p == '.') + minor = strtol(p + 1, NULL, 10); ++ ++ // RHEL & derivatives started shipping backported ORC patches without ++ // the ".orc_header" section in 9.6. According to git history this was ++ // introduced in kernel version 5.14.0-517.el9. With those changes, the ++ // kernel's ORC "format" is indeed v3, but we cannot detect that without ++ // the ORC header hash. Add special-case detection for this situation. ++ // If it is fixed by including the ".orc_header" section, this fix will ++ // not be active, but will still be necessary for the already released ++ // kernels. ++ char *rhrelease = NULL; ++ if (major == 5 && minor == 14 && strstr(p, ".el9") ++ && (rhrelease = strchr(p, '-')) ++ && strtol(rhrelease + 1, NULL, 10) >= 517) ++ return 3; ++ + if (major > 6 || (major == 6 && minor >= 4)) + return 3; + else if (major == 6 && minor == 3) +-- +2.52.0 + diff --git a/python-drgn.spec b/python-drgn.spec index fd90e79..160fdc6 100644 --- a/python-drgn.spec +++ b/python-drgn.spec @@ -15,7 +15,7 @@ scripting in Python.} Name: python-%{pypi_name} Version: 0.0.33 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Programmable debugger License: LGPL-2.1-or-later @@ -46,6 +46,8 @@ BuildRequires: autoconf BuildRequires: automake BuildRequires: libtool +Patch001: 0001-libdrgn-orc_info-work-around-ORC-backports-in-RHEL-9.patch + %description %{_description} %package -n %{pypi_name} @@ -125,6 +127,10 @@ cp -PR man/drgn.1* %{buildroot}%{_mandir}/man1 %endif %changelog +* Wed Dec 17 2025 Philipp Rudo - 0.0.33-2 +- Work around ORC backports in RHEL 9.6 + Resolves: RHEL-136527 + * Thu Nov 13 2025 Philipp Rudo - 0.0.33-1 - Rebase to upstream v0.0.33 Resolves: RHEL-114118