diff --git a/pkgs/by-name/el/elfutils/cxx-header-collision.patch b/pkgs/by-name/el/elfutils/cxx-header-collision.patch deleted file mode 100644 index 3e123b1a62ba..000000000000 --- a/pkgs/by-name/el/elfutils/cxx-header-collision.patch +++ /dev/null @@ -1,338 +0,0 @@ -From: Tristan Ross -Date: Wed, 31 Jul 2024 04:03:03 +0000 (-0700) -Subject: Prevent binaries in src from colliding with libc++ headers -X-Git-Url: https://sourceware.org/git/?p=elfutils.git;a=commitdiff_plain;h=232b9ede92cbecabbd61291c2fc9aaf3fc61061f;hp=87a60d22299c4ba7b94cbce04a32c2abf015f98a - -Prevent binaries in src from colliding with libc++ headers - -Discovered with Nix and LLVM 17. Headers inside of libc++ can easily -collide with binaries being linked in src. This results in clang trying -to include a binary as a header. - -Fix this by removing '-I.' and '-I$(srcdir)' from AM_CPPFLAGS and -DEFAULT_INCLUDES in src/Makefile.am. - -To facilitate this config/eu.am has been refactored. New file -config/eu-common.am contains all of the old eu.am but with the -AM_CPPFLAGS definition removed. eu.am now includes eu-common.am and -contains the old AM_CPPFLAGS definition. - -eu.am functionality does not change, but src/Makefile.am can instead -include eu-common.am and define its own AM_CPPFLAGS without causing a -"multiply defined" warning during autoreconf. - -Signed-off-by: Tristan Ross ---- - -diff --git a/config/eu-common.am b/config/eu-common.am -new file mode 100644 -index 00000000..9cc7f696 ---- /dev/null -+++ b/config/eu-common.am -@@ -0,0 +1,148 @@ -+## Common automake fragments for elfutils subdirectory makefiles. -+## -+## Copyright (C) 2010, 2014, 2016 Red Hat, Inc. -+## Copyright (C) 2023, Mark J. Wielaard -+## -+## This file is part of elfutils. -+## -+## This file is free software; you can redistribute it and/or modify -+## it under the terms of either -+## -+## * the GNU Lesser General Public License as published by the Free -+## Software Foundation; either version 3 of the License, or (at -+## your option) any later version -+## -+## or -+## -+## * the GNU General Public License as published by the Free -+## Software Foundation; either version 2 of the License, or (at -+## your option) any later version -+## -+## or both in parallel, as here. -+## -+## elfutils is distributed in the hope that it will be useful, but -+## WITHOUT ANY WARRANTY; without even the implied warranty of -+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+## General Public License for more details. -+## -+## You should have received copies of the GNU General Public License and -+## the GNU Lesser General Public License along with this program. If -+## not, see . -+## -+ -+DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' -+ -+# Drop the 'u' flag that automake adds by default. It is incompatible -+# with deterministic archives. -+ARFLAGS = cr -+ -+# Warn about stack usage of more than 256K = 262144 bytes. -+if ADD_STACK_USAGE_WARNING -+STACK_USAGE_WARNING=-Wstack-usage=262144 -+STACK_USAGE_NO_ERROR=-Wno-error=stack-usage= -+else -+STACK_USAGE_WARNING= -+STACK_USAGE_NO_ERROR= -+endif -+ -+if SANE_LOGICAL_OP_WARNING -+LOGICAL_OP_WARNING=-Wlogical-op -+else -+LOGICAL_OP_WARNING= -+endif -+ -+if HAVE_DUPLICATED_COND_WARNING -+DUPLICATED_COND_WARNING=-Wduplicated-cond -+else -+DUPLICATED_COND_WARNING= -+endif -+ -+if HAVE_NULL_DEREFERENCE_WARNING -+NULL_DEREFERENCE_WARNING=-Wnull-dereference -+else -+NULL_DEREFERENCE_WARNING= -+endif -+ -+if HAVE_IMPLICIT_FALLTHROUGH_WARNING -+# Use strict fallthrough. Only __attribute__((fallthrough)) will prevent the -+# warning -+if HAVE_IMPLICIT_FALLTHROUGH_5_WARNING -+IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough=5 -+else -+IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough -+endif -+else -+IMPLICIT_FALLTHROUGH_WARNING= -+endif -+ -+if HAVE_TRAMPOLINES_WARNING -+TRAMPOLINES_WARNING=-Wtrampolines -+else -+TRAMPOLINES_WARNING= -+endif -+ -+if HAVE_NO_PACKED_NOT_ALIGNED_WARNING -+NO_PACKED_NOT_ALIGNED_WARNING=-Wno-packed-not-aligned -+else -+NO_PACKED_NOT_ALIGNED_WARNING= -+endif -+ -+if HAVE_USE_AFTER_FREE3_WARNING -+USE_AFTER_FREE3_WARNING=-Wuse-after-free=3 -+else -+USE_AFTER_FREE3_WARNING= -+endif -+ -+AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ -+ -Wold-style-definition -Wstrict-prototypes $(TRAMPOLINES_WARNING) \ -+ $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ -+ $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ -+ $(USE_AFTER_FREE3_WARNING) \ -+ $(if $($(*F)_no_Werror),,-Werror) \ -+ $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ -+ $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ -+ $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ -+ $($(*F)_CFLAGS) -+ -+AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \ -+ $(TRAMPOLINES_WARNING) \ -+ $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ -+ $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ -+ $(if $($(*F)_no_Werror),,-Werror) \ -+ $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ -+ $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ -+ $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ -+ $($(*F)_CXXFLAGS) -+ -+COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) -+ -+DEFS.os = -DPIC -DSHARED -+if SYMBOL_VERSIONING -+DEFS.os += -DSYMBOL_VERSIONING -+else -+endif -+ -+%.os: %.c %.o -+if AMDEP -+ $(AM_V_CC)if $(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) -MT $@ -MD -MP \ -+ -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \ -+ then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \ -+ rm -f "$(DEPDIR)/$*.Tpo"; \ -+ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ -+ fi -+else -+ $(AM_V_CC)$(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) $< -+endif -+ -+CLEANFILES = *.gcno *.gcda -+ -+textrel_msg = echo "WARNING: TEXTREL found in '$@'" -+if FATAL_TEXTREL -+textrel_found = $(textrel_msg); exit 1 -+else -+textrel_found = $(textrel_msg) -+endif -+textrel_check = if $(READELF) -d $@ | grep -F -q TEXTREL; then $(textrel_found); fi -+ -+print-%: -+ @echo $*=$($*) -diff --git a/config/eu.am b/config/eu.am -index 0b7dab5b..3aa6048a 100644 ---- a/config/eu.am -+++ b/config/eu.am -@@ -1,4 +1,5 @@ --## Common automake fragments for elfutils subdirectory makefiles. -+## Common automake fragments for elfutils subdirectory makefiles -+## with AM_CPPFLAGS set. - ## - ## Copyright (C) 2010, 2014, 2016 Red Hat, Inc. - ## Copyright (C) 2023, Mark J. Wielaard -@@ -30,120 +31,5 @@ - ## not, see . - ## - --DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' --AM_CPPFLAGS = -iquote . -I$(srcdir) -I$(top_srcdir)/lib -I.. -- --# Drop the 'u' flag that automake adds by default. It is incompatible --# with deterministic archives. --ARFLAGS = cr -- --# Warn about stack usage of more than 256K = 262144 bytes. --if ADD_STACK_USAGE_WARNING --STACK_USAGE_WARNING=-Wstack-usage=262144 --STACK_USAGE_NO_ERROR=-Wno-error=stack-usage= --else --STACK_USAGE_WARNING= --STACK_USAGE_NO_ERROR= --endif -- --if SANE_LOGICAL_OP_WARNING --LOGICAL_OP_WARNING=-Wlogical-op --else --LOGICAL_OP_WARNING= --endif -- --if HAVE_DUPLICATED_COND_WARNING --DUPLICATED_COND_WARNING=-Wduplicated-cond --else --DUPLICATED_COND_WARNING= --endif -- --if HAVE_NULL_DEREFERENCE_WARNING --NULL_DEREFERENCE_WARNING=-Wnull-dereference --else --NULL_DEREFERENCE_WARNING= --endif -- --if HAVE_IMPLICIT_FALLTHROUGH_WARNING --# Use strict fallthrough. Only __attribute__((fallthrough)) will prevent the --# warning --if HAVE_IMPLICIT_FALLTHROUGH_5_WARNING --IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough=5 --else --IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough --endif --else --IMPLICIT_FALLTHROUGH_WARNING= --endif -- --if HAVE_TRAMPOLINES_WARNING --TRAMPOLINES_WARNING=-Wtrampolines --else --TRAMPOLINES_WARNING= --endif -- --if HAVE_NO_PACKED_NOT_ALIGNED_WARNING --NO_PACKED_NOT_ALIGNED_WARNING=-Wno-packed-not-aligned --else --NO_PACKED_NOT_ALIGNED_WARNING= --endif -- --if HAVE_USE_AFTER_FREE3_WARNING --USE_AFTER_FREE3_WARNING=-Wuse-after-free=3 --else --USE_AFTER_FREE3_WARNING= --endif -- --AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ -- -Wold-style-definition -Wstrict-prototypes $(TRAMPOLINES_WARNING) \ -- $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ -- $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ -- $(USE_AFTER_FREE3_WARNING) \ -- $(if $($(*F)_no_Werror),,-Werror) \ -- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ -- $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ -- $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ -- $($(*F)_CFLAGS) -- --AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \ -- $(TRAMPOLINES_WARNING) \ -- $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ -- $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ -- $(if $($(*F)_no_Werror),,-Werror) \ -- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ -- $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ -- $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ -- $($(*F)_CXXFLAGS) -- --COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) -- --DEFS.os = -DPIC -DSHARED --if SYMBOL_VERSIONING --DEFS.os += -DSYMBOL_VERSIONING --else --endif -- --%.os: %.c %.o --if AMDEP -- $(AM_V_CC)if $(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) -MT $@ -MD -MP \ -- -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \ -- then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \ -- rm -f "$(DEPDIR)/$*.Tpo"; \ -- else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ -- fi --else -- $(AM_V_CC)$(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) $< --endif -- --CLEANFILES = *.gcno *.gcda -- --textrel_msg = echo "WARNING: TEXTREL found in '$@'" --if FATAL_TEXTREL --textrel_found = $(textrel_msg); exit 1 --else --textrel_found = $(textrel_msg) --endif --textrel_check = if $(READELF) -d $@ | grep -F -q TEXTREL; then $(textrel_found); fi -- --print-%: -- @echo $*=$($*) -+AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. -+include $(top_srcdir)/config/eu-common.am -diff --git a/src/Makefile.am b/src/Makefile.am -index 97a0c61a..5bb8c078 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -16,14 +16,15 @@ - ## You should have received a copy of the GNU General Public License - ## along with this program. If not, see . - ## --include $(top_srcdir)/config/eu.am -+include $(top_srcdir)/config/eu-common.am - DEFS += $(YYDEBUG) -DDEBUGPRED=@DEBUGPRED@ \ - -DSRCDIR=\"$(shell cd $(srcdir);pwd)\" -DOBJDIR=\"$(shell pwd)\" - --DEFAULT_INCLUDES = --AM_CPPFLAGS += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ -- -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf \ -- -I$(srcdir)/../libdwfl -I$(srcdir)/../libasm -I../debuginfod -+DEFAULT_INCLUDES = -I$(top_builddir) -+AM_CPPFLAGS = -I$(top_srcdir)/lib -I.. \ -+ -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ -+ -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf \ -+ -I$(srcdir)/../libdwfl -I$(srcdir)/../libasm -I../debuginfod - - AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw $(STACK_USAGE_NO_ERROR) diff --git a/pkgs/by-name/el/elfutils/package.nix b/pkgs/by-name/el/elfutils/package.nix index 84c713cf7cfa..25ddfb23fce8 100644 --- a/pkgs/by-name/el/elfutils/package.nix +++ b/pkgs/by-name/el/elfutils/package.nix @@ -23,7 +23,6 @@ libmicrohttpd, libarchive, gitUpdater, - autoreconfHook, }: # TODO: Look at the hardcoded paths to kernel, modules etc. @@ -36,34 +35,29 @@ stdenv.mkDerivation rec { hash = "sha256-eFf0S2JPTY1CHfhRqq57FALP5rzdLYBJ8V/AfT3edjU="; }; - patches = - [ - ./debug-info-from-env.patch - (fetchpatch { - name = "fix-aarch64_fregs.patch"; - url = "https://git.alpinelinux.org/aports/plain/main/elfutils/fix-aarch64_fregs.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9"; - sha256 = "zvncoRkQx3AwPx52ehjA2vcFroF+yDC2MQR5uS6DATs="; - }) - (fetchpatch { - name = "musl-asm-ptrace-h.patch"; - url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-asm-ptrace-h.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9"; - sha256 = "8D1wPcdgAkE/TNBOgsHaeTZYhd9l+9TrZg8d5C7kG6k="; - }) - (fetchpatch { - name = "musl-macros.patch"; - url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-macros.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9"; - sha256 = "tp6O1TRsTAMsFe8vw3LMENT/vAu6OmyA8+pzgThHeA8="; - }) - (fetchpatch { - name = "musl-strndupa.patch"; - url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-strndupa.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9"; - sha256 = "sha256-7daehJj1t0wPtQzTv+/Rpuqqs5Ng/EYnZzrcf2o/Lb0="; - }) - ] - ++ lib.optionals stdenv.hostPlatform.isMusl [ ./musl-error_h.patch ] - # Prevent headers and binaries from colliding which results in an error. - # https://sourceware.org/pipermail/elfutils-devel/2024q3/007281.html - ++ lib.optional (stdenv.targetPlatform.useLLVM or false) ./cxx-header-collision.patch; + patches = [ + ./debug-info-from-env.patch + (fetchpatch { + name = "fix-aarch64_fregs.patch"; + url = "https://git.alpinelinux.org/aports/plain/main/elfutils/fix-aarch64_fregs.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9"; + sha256 = "zvncoRkQx3AwPx52ehjA2vcFroF+yDC2MQR5uS6DATs="; + }) + (fetchpatch { + name = "musl-asm-ptrace-h.patch"; + url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-asm-ptrace-h.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9"; + sha256 = "8D1wPcdgAkE/TNBOgsHaeTZYhd9l+9TrZg8d5C7kG6k="; + }) + (fetchpatch { + name = "musl-macros.patch"; + url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-macros.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9"; + sha256 = "tp6O1TRsTAMsFe8vw3LMENT/vAu6OmyA8+pzgThHeA8="; + }) + (fetchpatch { + name = "musl-strndupa.patch"; + url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-strndupa.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9"; + sha256 = "sha256-7daehJj1t0wPtQzTv+/Rpuqqs5Ng/EYnZzrcf2o/Lb0="; + }) + ] ++ lib.optionals stdenv.hostPlatform.isMusl [ ./musl-error_h.patch ]; postPatch = '' @@ -85,16 +79,13 @@ stdenv.mkDerivation rec { # We need bzip2 in NativeInputs because otherwise we can't unpack the src, # as the host-bzip2 will be in the path. - nativeBuildInputs = - [ - m4 - bison - flex - gettext - bzip2 - ] - ++ lib.optional enableDebuginfod pkg-config - ++ lib.optional (stdenv.targetPlatform.useLLVM or false) autoreconfHook; + nativeBuildInputs = [ + m4 + bison + flex + gettext + bzip2 + ] ++ lib.optional enableDebuginfod pkg-config; buildInputs = [ zlib @@ -119,22 +110,28 @@ stdenv.mkDerivation rec { hardeningDisable = [ "strictflexarrays3" ]; - configureFlags = - [ - "--program-prefix=eu-" # prevent collisions with binutils - "--enable-deterministic-archives" - (lib.enableFeature enableDebuginfod "libdebuginfod") - (lib.enableFeature enableDebuginfod "debuginfod") + # build elfutils out-of-source-tree to avoid ./stack inclusion + # as a c++ header on libc++: https://sourceware.org/PR33103 + preConfigure = + if (stdenv.targetPlatform.useLLVM or false) then + '' + mkdir build-tree + cd build-tree + '' + else + null; + configureScript = if (stdenv.targetPlatform.useLLVM or false) then "../configure" else null; - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101766 - # Versioned symbols are nice to have, but we can do without. - (lib.enableFeature (!stdenv.hostPlatform.isMicroBlaze) "symbol-versioning") - ] - ++ lib.optional (stdenv.targetPlatform.useLLVM or false) "--disable-demangler" - ++ lib.optionals stdenv.cc.isClang [ - "CFLAGS=-Wno-unused-private-field" - "CXXFLAGS=-Wno-unused-private-field" - ]; + configureFlags = [ + "--program-prefix=eu-" # prevent collisions with binutils + "--enable-deterministic-archives" + (lib.enableFeature enableDebuginfod "libdebuginfod") + (lib.enableFeature enableDebuginfod "debuginfod") + + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101766 + # Versioned symbols are nice to have, but we can do without. + (lib.enableFeature (!stdenv.hostPlatform.isMicroBlaze) "symbol-versioning") + ] ++ lib.optional (stdenv.targetPlatform.useLLVM or false) "--disable-demangler"; enableParallelBuilding = true;