From 84eff794116cc679341ebb5a22e9e1a0e60abea0 Mon Sep 17 00:00:00 2001 From: Sergio Date: Thu, 27 Aug 2026 20:41:23 +0000 Subject: [PATCH] =?UTF-8?q?elfutils-libdw:=20construir=20tambi=C3=A9n=20li?= =?UTF-8?q?bdwfl=20(dwarves=20lo=20necesita)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dwarves llama a 15 `dwfl_*` distintas desde dwarf_loader.c, así que libdw sola no alcanza. libdwfl SÍ arrastra argp (argp-std.c) y fts (linux-kernel-modules.c) ⇒ la receta declara `argp-standalone` y `musl-fts`. Esos objetos casi nunca se enlazan (dwarves no usa dwfl_standard_argp ni dwfl_linux_kernel_*) pero tienen que COMPILAR. Dos cosas que costaron: · libdwfl no se puede construir suelto: su Makefile lee los .manifest de otros subdirs. Hay que seguir el orden de SUBDIRS del raíz: lib → libelf → libcpu → backends → libebl → libdwelf → libdw → libdwfl. · `rm -f compat/argp.h`: el shim de la canónica es sólo tipos/decls y no declara `argp_failure`, que usa argp-std.c. Como esta variante trae argp de verdad, hay que BORRAR el shim para que gane el /usr/include/argp.h real — `-I$PWD/compat` va primero y si no lo tapa. --- recipes/elfutils-libdw.toml | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/recipes/elfutils-libdw.toml b/recipes/elfutils-libdw.toml index d4ca9229..27c6221f 100644 --- a/recipes/elfutils-libdw.toml +++ b/recipes/elfutils-libdw.toml @@ -33,8 +33,14 @@ # · `obstack` → en `libdw/` aparece UNA vez y es **dentro de un COMENTARIO** de `libdwP.h`: # elfutils lleva su propia «simplified thread-local reimplementation of obstacks» y NO incluye # `` en ningún sitio de libdw. -# ⇒ construir `libdw` no necesita ni argp ni fts ni obstack de verdad; los stubs de `compat/` que -# ya monta la fase configure siguen bastando. +# ⇒ `libdw` a secas no necesita ni argp ni fts ni obstack de verdad. +# +# ⚠ PERO `dwarves` SÍ necesita `libdwfl` (llama a 15 `dwfl_*` distintas desde `dwarf_loader.c`), y +# libdwfl sí arrastra los dos: `argp-std.c` usa argp y `linux-kernel-modules.c` usa fts. Por eso +# esta receta declara `argp-standalone` y `musl-fts`: no por libdw, por libdwfl. +# En la práctica esos objetos casi nunca se ENLAZAN (dwarves no usa `dwfl_standard_argp` ni +# `dwfl_linux_kernel_*`), pero tienen que COMPILAR, y para eso hacen falta `` y `` +# de verdad — el `compat/` de la canónica trae un argp.h de mentira y NINGÚN fts.h. # name = "elfutils-libdw" version = "0.194" @@ -50,7 +56,7 @@ link = "dynamic" zig_version = "0.13.0" [deps] -build = ["binutils"] +build = ["binutils", "argp-standalone", "musl-fts"] [build.phases] configure = """ @@ -137,7 +143,11 @@ CFLAGS="-O2 -g -I$PWD/compat" CPPFLAGS="-I$PWD/compat" LDFLAGS="-L$PWD/compat" \ # El -include del shim de rawmemchr va SÓLO en compile (en configure rompe el test "undeclared builtins" # de autoconf). CFLAGS aquí reemplaza el de configure (mismo valor + el -include); AM_CFLAGS (warnings/ # -Werror) se preserva. -compile = "make -C lib CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libelf libelf.a libelf.so CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdw libdw.a CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\"" +# ⚠ `rm -f compat/argp.h`: el shim de la canónica es sólo tipos/decls y NO declara +# `argp_failure`, que usa `libdwfl/argp-std.c`. Esta variante SÍ trae argp de verdad +# (`argp-standalone`), así que se borra el shim para que gane el `/usr/include/argp.h` real — +# `-I$PWD/compat` va primero y si no lo taparía. +compile = "rm -f compat/argp.h && make -C lib CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libelf libelf.a libelf.so CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libcpu CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C backends CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libebl CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdwelf CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdw libdw.a CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdwfl libdwfl.a CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\"" install = """ mkdir -p /out/usr/lib/pkgconfig /out/usr/include && \ cp -a libelf/libelf.a libelf/libelf.so* /out/usr/lib/ && \ @@ -146,7 +156,11 @@ cp -a config/libelf.pc /out/usr/lib/pkgconfig/ 2>/dev/null || true mkdir -p /out/usr/include/elfutils cp -a libdw/libdw.a /out/usr/lib/ cp -a libdw/dwarf.h libdw/libdw.h libdw/known-dwarf.h /out/usr/include/ +cp -a libdwfl/libdwfl.h /out/usr/include/ +cp -a libdw/libdw.a libdwfl/libdwfl.a /out/usr/lib/ cp -a libdw/libdw.h libdw/known-dwarf.h /out/usr/include/elfutils/ +cp -a libdwfl/libdwfl.h /out/usr/include/elfutils/ +cp -a version.h /out/usr/include/elfutils/ 2>/dev/null || true cp -a config/libdw.pc /out/usr/lib/pkgconfig/ 2>/dev/null || true -test -f /out/usr/lib/libdw.a && test -f /out/usr/include/dwarf.h && test -f /out/usr/include/libdw.h +test -f /out/usr/lib/libdw.a && test -f /out/usr/include/dwarf.h && test -f /out/usr/include/libdw.h && test -f /out/usr/lib/libdwfl.a && test -f /out/usr/include/elfutils/libdwfl.h """