Loading pkgs/by-name/el/elfutils/cxx-header-collision.patchdeleted 100644 → 0 +0 −338 Original line number Diff line number Diff line From: Tristan Ross <tristan.ross@midstall.com> 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 <tristan.ross@midstall.com> --- 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 <mark@klomp.org> +## +## 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 <http://www.gnu.org/licenses/>. +## + +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 <mark@klomp.org> @@ -30,120 +31,5 @@ ## not, see <http://www.gnu.org/licenses/>. ## -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 <http://www.gnu.org/licenses/>. ## -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) pkgs/by-name/el/elfutils/package.nix +52 −55 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ libmicrohttpd, libarchive, gitUpdater, autoreconfHook, }: # TODO: Look at the hardcoded paths to kernel, modules etc. Loading @@ -36,8 +35,7 @@ stdenv.mkDerivation rec { hash = "sha256-eFf0S2JPTY1CHfhRqq57FALP5rzdLYBJ8V/AfT3edjU="; }; patches = [ patches = [ ./debug-info-from-env.patch (fetchpatch { name = "fix-aarch64_fregs.patch"; Loading @@ -59,11 +57,7 @@ stdenv.mkDerivation rec { 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; ] ++ lib.optionals stdenv.hostPlatform.isMusl [ ./musl-error_h.patch ]; postPatch = '' Loading @@ -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 = [ nativeBuildInputs = [ m4 bison flex gettext bzip2 ] ++ lib.optional enableDebuginfod pkg-config ++ lib.optional (stdenv.targetPlatform.useLLVM or false) autoreconfHook; ] ++ lib.optional enableDebuginfod pkg-config; buildInputs = [ zlib Loading @@ -119,8 +110,19 @@ stdenv.mkDerivation rec { hardeningDisable = [ "strictflexarrays3" ]; configureFlags = [ # 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; configureFlags = [ "--program-prefix=eu-" # prevent collisions with binutils "--enable-deterministic-archives" (lib.enableFeature enableDebuginfod "libdebuginfod") Loading @@ -129,12 +131,7 @@ stdenv.mkDerivation rec { # 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" ]; ] ++ lib.optional (stdenv.targetPlatform.useLLVM or false) "--disable-demangler"; enableParallelBuilding = true; Loading Loading
pkgs/by-name/el/elfutils/cxx-header-collision.patchdeleted 100644 → 0 +0 −338 Original line number Diff line number Diff line From: Tristan Ross <tristan.ross@midstall.com> 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 <tristan.ross@midstall.com> --- 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 <mark@klomp.org> +## +## 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 <http://www.gnu.org/licenses/>. +## + +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 <mark@klomp.org> @@ -30,120 +31,5 @@ ## not, see <http://www.gnu.org/licenses/>. ## -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 <http://www.gnu.org/licenses/>. ## -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)
pkgs/by-name/el/elfutils/package.nix +52 −55 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ libmicrohttpd, libarchive, gitUpdater, autoreconfHook, }: # TODO: Look at the hardcoded paths to kernel, modules etc. Loading @@ -36,8 +35,7 @@ stdenv.mkDerivation rec { hash = "sha256-eFf0S2JPTY1CHfhRqq57FALP5rzdLYBJ8V/AfT3edjU="; }; patches = [ patches = [ ./debug-info-from-env.patch (fetchpatch { name = "fix-aarch64_fregs.patch"; Loading @@ -59,11 +57,7 @@ stdenv.mkDerivation rec { 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; ] ++ lib.optionals stdenv.hostPlatform.isMusl [ ./musl-error_h.patch ]; postPatch = '' Loading @@ -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 = [ nativeBuildInputs = [ m4 bison flex gettext bzip2 ] ++ lib.optional enableDebuginfod pkg-config ++ lib.optional (stdenv.targetPlatform.useLLVM or false) autoreconfHook; ] ++ lib.optional enableDebuginfod pkg-config; buildInputs = [ zlib Loading @@ -119,8 +110,19 @@ stdenv.mkDerivation rec { hardeningDisable = [ "strictflexarrays3" ]; configureFlags = [ # 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; configureFlags = [ "--program-prefix=eu-" # prevent collisions with binutils "--enable-deterministic-archives" (lib.enableFeature enableDebuginfod "libdebuginfod") Loading @@ -129,12 +131,7 @@ stdenv.mkDerivation rec { # 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" ]; ] ++ lib.optional (stdenv.targetPlatform.useLLVM or false) "--disable-demangler"; enableParallelBuilding = true; Loading