[PATCH 35/94] dev-libs/elfutils: port to Hurd

Sam James <[email protected]>
Newsgroups gmane.linux.gentoo.devel
Message-ID <fa8f9e1ca7285e8a6354185292044b2512ea4185.1774994316.git.sam@gentoo.org>
Bug: https://sourceware.org/PR33974
Signed-off-by: Sam James <[email protected]>
---
 ...s-9999.ebuild => elfutils-0.194-r2.ebuild} |  10 +-
 .../elfutils/files/elfutils-0.194-hurd.patch  | 101 ++++++++++++++++++
 2 files changed, 108 insertions(+), 3 deletions(-)
 copy dev-libs/elfutils/{elfutils-9999.ebuild => elfutils-0.194-r2.ebuild} (94%)
 create mode 100644 dev-libs/elfutils/files/elfutils-0.194-hurd.patch

diff --git a/dev-libs/elfutils/elfutils-9999.ebuild b/dev-libs/elfutils/elfutils-0.194-r2.ebuild
similarity index 94%
copy from dev-libs/elfutils/elfutils-9999.ebuild
copy to dev-libs/elfutils/elfutils-0.194-r2.ebuild
index 0a0a771b81b2a..a97f8bc8fc037 100644
--- a/dev-libs/elfutils/elfutils-9999.ebuild
+++ b/dev-libs/elfutils/elfutils-0.194-r2.ebuild
@@ -38,9 +38,9 @@ RDEPEND="
 	bzip2? ( >=app-arch/bzip2-1.0.6-r4[static-libs?,${MULTILIB_USEDEP}] )
 	debuginfod? (
 		dev-db/sqlite:3=
-		>=dev-libs/json-c-0.11:=[${MULTILIB_USEDEP}]
+		>=dev-libs/json-c-0.11:=
 		>=net-libs/libmicrohttpd-0.9.33:=
-		>=net-misc/curl-7.29.0[static-libs?,${MULTILIB_USEDEP}]
+		>=net-misc/curl-7.29.0[static-libs?]
 	)
 	libarchive? ( >=app-arch/libarchive-3.1.2:= )
 	lzma? ( >=app-arch/xz-utils-5.0.5-r1[static-libs?,${MULTILIB_USEDEP}] )
@@ -66,6 +66,8 @@ BDEPEND+="
 PATCHES=(
 	"${FILESDIR}"/${PN}-0.189-musl-aarch64-regs.patch
 	"${FILESDIR}"/${PN}-0.191-musl-macros.patch
+	"${FILESDIR}"/${P}-tests.patch
+	"${FILESDIR}"/${PN}-0.194-hurd.patch
 )
 
 src_prepare() {
@@ -99,6 +101,8 @@ src_configure() {
 	# bug 660738
 	filter-flags -fno-asynchronous-unwind-tables
 
+	use debuginfod && MULTILIB_WRAPPED_HEADERS+=( /usr/include/elfutils/debuginfod.h )
+
 	multilib-minimal_src_configure
 }
 
@@ -110,7 +114,7 @@ multilib_src_configure() {
 		$(multilib_native_use_enable debuginfod)
 		# Could do dummy if needed? We could also split libdebuginfod
 		# (client support) into its own USE if required.
-		$(use_enable debuginfod libdebuginfod)
+		$(multilib_native_use_enable debuginfod libdebuginfod)
 		$(multilib_native_use_enable stacktrace)
 		$(use_enable valgrind valgrind-annotations)
 
diff --git a/dev-libs/elfutils/files/elfutils-0.194-hurd.patch b/dev-libs/elfutils/files/elfutils-0.194-hurd.patch
new file mode 100644
index 0000000000000..9c90380be6575
--- /dev/null
+++ b/dev-libs/elfutils/files/elfutils-0.194-hurd.patch
@@ -0,0 +1,101 @@
+https://inbox.sourceware.org/elfutils-devel/[email protected]/
+
+From: Serhei Makarov <[email protected]>
+To: [email protected]
+Cc: Serhei Makarov <[email protected]>
+Subject: [PATCH v3] libdwfl/linux-pid-attach.c PR33974: __libdwfl_set_initial_registers_thread on non-Linux
+Date: Mon, 16 Mar 2026 10:48:17 -0400
+Message-ID: <[email protected]>
+X-Mailer: git-send-email 2.52.0
+MIME-Version: 1.0
+Content-Transfer-Encoding: 8bit
+X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,JMQ_SPF_NEUTRAL,RCVD_IN_DNSWL_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS,SPF_PASS,TXREP,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6
+X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org
+List-Id: <elfutils-devel.sourceware.org>
+
+libdwfl_stacktrace uses __libdwfl_set_initial_registers_thread but it
+is wrapped by #ifdef __linux__, causing build errors on non-Linux
+platforms.
+
+* linux-pid-attach.c (__libdwfl_set_initial_registers_thread):
+  Remove from inside the '#ifdef __linux__'.
+* dwfl_frame_regs.c (__libdwfl_set_initial_registers_thread):
+  Move here.
+---
+ libdwfl/dwfl_frame_regs.c  | 27 +++++++++++++++++++++++++++
+ libdwfl/linux-pid-attach.c | 25 -------------------------
+ 2 files changed, 27 insertions(+), 25 deletions(-)
+
+diff --git a/libdwfl/dwfl_frame_regs.c b/libdwfl/dwfl_frame_regs.c
+index 572ac676..99de3c22 100644
+--- a/libdwfl/dwfl_frame_regs.c
++++ b/libdwfl/dwfl_frame_regs.c
+@@ -77,3 +77,30 @@ dwfl_frame_reg (Dwfl_Frame *state, unsigned regno, Dwarf_Word *val)
+   return res;
+ }
+ INTDEF(dwfl_frame_reg)
++
++/* Implement the ebl_set_initial_registers_tid setfunc callback.  */
++
++bool
++/* Not internal_function, since that allows calling-convention changes
++   e.g. on i386, and stable ABI is needed to use this as an
++   ebl_tid_registers_t * callback in linux-pid-attach.c and
++   libdwfl_stacktrace.  */
++__libdwfl_set_initial_registers_thread (int firstreg, unsigned nregs,
++				   const Dwarf_Word *regs, void *arg)
++{
++  Dwfl_Thread *thread = (Dwfl_Thread *) arg;
++  if (firstreg == -1)
++    {
++      assert (nregs == 1);
++      INTUSE(dwfl_thread_state_register_pc) (thread, *regs);
++      return true;
++    }
++  else if (firstreg == -2)
++    {
++      assert (nregs == 1);
++      INTUSE(dwfl_thread_state_registers) (thread, firstreg, nregs, regs);
++      return true;
++     }
++  assert (nregs > 0);
++  return INTUSE(dwfl_thread_state_registers) (thread, firstreg, nregs, regs);
++}
+diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c
+index a6e4e41a..9472b041 100644
+--- a/libdwfl/linux-pid-attach.c
++++ b/libdwfl/linux-pid-attach.c
+@@ -302,31 +302,6 @@ pid_getthread (Dwfl *dwfl __attribute__ ((unused)), pid_t tid,
+   return true;
+ }
+ 
+-/* Implement the ebl_set_initial_registers_tid setfunc callback.  */
+-
+-bool
+-/* XXX No internal_function annotation,
+-   as this function gets passed as ebl_tid_registers_t *.  */
+-__libdwfl_set_initial_registers_thread (int firstreg, unsigned nregs,
+-				   const Dwarf_Word *regs, void *arg)
+-{
+-  Dwfl_Thread *thread = (Dwfl_Thread *) arg;
+-  if (firstreg == -1)
+-    {
+-      assert (nregs == 1);
+-      INTUSE(dwfl_thread_state_register_pc) (thread, *regs);
+-      return true;
+-    }
+-  else if (firstreg == -2)
+-    {
+-      assert (nregs == 1);
+-      INTUSE(dwfl_thread_state_registers) (thread, firstreg, nregs, regs);
+-      return true;
+-     }
+-  assert (nregs > 0);
+-  return INTUSE(dwfl_thread_state_registers) (thread, firstreg, nregs, regs);
+-}
+-
+ static bool
+ pid_set_initial_registers (Dwfl_Thread *thread, void *thread_arg)
+ {
+-- 
+2.52.0
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.