elfutils: fix header colliding with binary in llvm (#331192)

authored by tomberek and committed by GitHub e2c10d90 ad9ad206

+338 -3
+331
pkgs/development/tools/misc/elfutils/cxx-header-collision.patch
··· 1 + From: Tristan Ross <tristan.ross@midstall.com> 2 + Date: Wed, 31 Jul 2024 04:03:03 +0000 (-0700) 3 + Subject: Prevent binaries in src from colliding with libc++ headers 4 + X-Git-Url: https://sourceware.org/git/?p=elfutils.git;a=commitdiff_plain;h=232b9ede92cbecabbd61291c2fc9aaf3fc61061f;hp=87a60d22299c4ba7b94cbce04a32c2abf015f98a 5 + 6 + Prevent binaries in src from colliding with libc++ headers 7 + 8 + Discovered with Nix and LLVM 17. Headers inside of libc++ can easily 9 + collide with binaries being linked in src. This results in clang trying 10 + to include a binary as a header. 11 + 12 + Fix this by removing '-I.' and '-I$(srcdir)' from AM_CPPFLAGS and 13 + DEFAULT_INCLUDES in src/Makefile.am. 14 + 15 + To facilitate this config/eu.am has been refactored. New file 16 + config/eu-common.am contains all of the old eu.am but with the 17 + AM_CPPFLAGS definition removed. eu.am now includes eu-common.am and 18 + contains the old AM_CPPFLAGS definition. 19 + 20 + eu.am functionality does not change, but src/Makefile.am can instead 21 + include eu-common.am and define its own AM_CPPFLAGS without causing a 22 + "multiply defined" warning during autoreconf. 23 + 24 + Signed-off-by: Tristan Ross <tristan.ross@midstall.com> 25 + --- 26 + 27 + diff --git a/config/eu-common.am b/config/eu-common.am 28 + new file mode 100644 29 + index 000000000..9cc7f6969 30 + --- /dev/null 31 + +++ b/config/eu-common.am 32 + @@ -0,0 +1,148 @@ 33 + +## Common automake fragments for elfutils subdirectory makefiles. 34 + +## 35 + +## Copyright (C) 2010, 2014, 2016 Red Hat, Inc. 36 + +## Copyright (C) 2023, Mark J. Wielaard <mark@klomp.org> 37 + +## 38 + +## This file is part of elfutils. 39 + +## 40 + +## This file is free software; you can redistribute it and/or modify 41 + +## it under the terms of either 42 + +## 43 + +## * the GNU Lesser General Public License as published by the Free 44 + +## Software Foundation; either version 3 of the License, or (at 45 + +## your option) any later version 46 + +## 47 + +## or 48 + +## 49 + +## * the GNU General Public License as published by the Free 50 + +## Software Foundation; either version 2 of the License, or (at 51 + +## your option) any later version 52 + +## 53 + +## or both in parallel, as here. 54 + +## 55 + +## elfutils is distributed in the hope that it will be useful, but 56 + +## WITHOUT ANY WARRANTY; without even the implied warranty of 57 + +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 58 + +## General Public License for more details. 59 + +## 60 + +## You should have received copies of the GNU General Public License and 61 + +## the GNU Lesser General Public License along with this program. If 62 + +## not, see <http://www.gnu.org/licenses/>. 63 + +## 64 + + 65 + +DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' 66 + + 67 + +# Drop the 'u' flag that automake adds by default. It is incompatible 68 + +# with deterministic archives. 69 + +ARFLAGS = cr 70 + + 71 + +# Warn about stack usage of more than 256K = 262144 bytes. 72 + +if ADD_STACK_USAGE_WARNING 73 + +STACK_USAGE_WARNING=-Wstack-usage=262144 74 + +STACK_USAGE_NO_ERROR=-Wno-error=stack-usage= 75 + +else 76 + +STACK_USAGE_WARNING= 77 + +STACK_USAGE_NO_ERROR= 78 + +endif 79 + + 80 + +if SANE_LOGICAL_OP_WARNING 81 + +LOGICAL_OP_WARNING=-Wlogical-op 82 + +else 83 + +LOGICAL_OP_WARNING= 84 + +endif 85 + + 86 + +if HAVE_DUPLICATED_COND_WARNING 87 + +DUPLICATED_COND_WARNING=-Wduplicated-cond 88 + +else 89 + +DUPLICATED_COND_WARNING= 90 + +endif 91 + + 92 + +if HAVE_NULL_DEREFERENCE_WARNING 93 + +NULL_DEREFERENCE_WARNING=-Wnull-dereference 94 + +else 95 + +NULL_DEREFERENCE_WARNING= 96 + +endif 97 + + 98 + +if HAVE_IMPLICIT_FALLTHROUGH_WARNING 99 + +# Use strict fallthrough. Only __attribute__((fallthrough)) will prevent the 100 + +# warning 101 + +if HAVE_IMPLICIT_FALLTHROUGH_5_WARNING 102 + +IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough=5 103 + +else 104 + +IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough 105 + +endif 106 + +else 107 + +IMPLICIT_FALLTHROUGH_WARNING= 108 + +endif 109 + + 110 + +if HAVE_TRAMPOLINES_WARNING 111 + +TRAMPOLINES_WARNING=-Wtrampolines 112 + +else 113 + +TRAMPOLINES_WARNING= 114 + +endif 115 + + 116 + +if HAVE_NO_PACKED_NOT_ALIGNED_WARNING 117 + +NO_PACKED_NOT_ALIGNED_WARNING=-Wno-packed-not-aligned 118 + +else 119 + +NO_PACKED_NOT_ALIGNED_WARNING= 120 + +endif 121 + + 122 + +if HAVE_USE_AFTER_FREE3_WARNING 123 + +USE_AFTER_FREE3_WARNING=-Wuse-after-free=3 124 + +else 125 + +USE_AFTER_FREE3_WARNING= 126 + +endif 127 + + 128 + +AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ 129 + + -Wold-style-definition -Wstrict-prototypes $(TRAMPOLINES_WARNING) \ 130 + + $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ 131 + + $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ 132 + + $(USE_AFTER_FREE3_WARNING) \ 133 + + $(if $($(*F)_no_Werror),,-Werror) \ 134 + + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ 135 + + $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ 136 + + $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ 137 + + $($(*F)_CFLAGS) 138 + + 139 + +AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \ 140 + + $(TRAMPOLINES_WARNING) \ 141 + + $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ 142 + + $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ 143 + + $(if $($(*F)_no_Werror),,-Werror) \ 144 + + $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ 145 + + $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ 146 + + $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ 147 + + $($(*F)_CXXFLAGS) 148 + + 149 + +COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) 150 + + 151 + +DEFS.os = -DPIC -DSHARED 152 + +if SYMBOL_VERSIONING 153 + +DEFS.os += -DSYMBOL_VERSIONING 154 + +else 155 + +endif 156 + + 157 + +%.os: %.c %.o 158 + +if AMDEP 159 + + $(AM_V_CC)if $(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) -MT $@ -MD -MP \ 160 + + -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \ 161 + + then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \ 162 + + rm -f "$(DEPDIR)/$*.Tpo"; \ 163 + + else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 164 + + fi 165 + +else 166 + + $(AM_V_CC)$(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) $< 167 + +endif 168 + + 169 + +CLEANFILES = *.gcno *.gcda 170 + + 171 + +textrel_msg = echo "WARNING: TEXTREL found in '$@'" 172 + +if FATAL_TEXTREL 173 + +textrel_found = $(textrel_msg); exit 1 174 + +else 175 + +textrel_found = $(textrel_msg) 176 + +endif 177 + +textrel_check = if $(READELF) -d $@ | grep -F -q TEXTREL; then $(textrel_found); fi 178 + + 179 + +print-%: 180 + + @echo $*=$($*) 181 + diff --git a/config/eu.am b/config/eu.am 182 + index e6c241f9d..3aa6048aa 100644 183 + --- a/config/eu.am 184 + +++ b/config/eu.am 185 + @@ -1,4 +1,5 @@ 186 + -## Common automake fragments for elfutils subdirectory makefiles. 187 + +## Common automake fragments for elfutils subdirectory makefiles 188 + +## with AM_CPPFLAGS set. 189 + ## 190 + ## Copyright (C) 2010, 2014, 2016 Red Hat, Inc. 191 + ## Copyright (C) 2023, Mark J. Wielaard <mark@klomp.org> 192 + @@ -30,120 +31,5 @@ 193 + ## not, see <http://www.gnu.org/licenses/>. 194 + ## 195 + 196 + -DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' 197 + AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. 198 + - 199 + -# Drop the 'u' flag that automake adds by default. It is incompatible 200 + -# with deterministic archives. 201 + -ARFLAGS = cr 202 + - 203 + -# Warn about stack usage of more than 256K = 262144 bytes. 204 + -if ADD_STACK_USAGE_WARNING 205 + -STACK_USAGE_WARNING=-Wstack-usage=262144 206 + -STACK_USAGE_NO_ERROR=-Wno-error=stack-usage= 207 + -else 208 + -STACK_USAGE_WARNING= 209 + -STACK_USAGE_NO_ERROR= 210 + -endif 211 + - 212 + -if SANE_LOGICAL_OP_WARNING 213 + -LOGICAL_OP_WARNING=-Wlogical-op 214 + -else 215 + -LOGICAL_OP_WARNING= 216 + -endif 217 + - 218 + -if HAVE_DUPLICATED_COND_WARNING 219 + -DUPLICATED_COND_WARNING=-Wduplicated-cond 220 + -else 221 + -DUPLICATED_COND_WARNING= 222 + -endif 223 + - 224 + -if HAVE_NULL_DEREFERENCE_WARNING 225 + -NULL_DEREFERENCE_WARNING=-Wnull-dereference 226 + -else 227 + -NULL_DEREFERENCE_WARNING= 228 + -endif 229 + - 230 + -if HAVE_IMPLICIT_FALLTHROUGH_WARNING 231 + -# Use strict fallthrough. Only __attribute__((fallthrough)) will prevent the 232 + -# warning 233 + -if HAVE_IMPLICIT_FALLTHROUGH_5_WARNING 234 + -IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough=5 235 + -else 236 + -IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough 237 + -endif 238 + -else 239 + -IMPLICIT_FALLTHROUGH_WARNING= 240 + -endif 241 + - 242 + -if HAVE_TRAMPOLINES_WARNING 243 + -TRAMPOLINES_WARNING=-Wtrampolines 244 + -else 245 + -TRAMPOLINES_WARNING= 246 + -endif 247 + - 248 + -if HAVE_NO_PACKED_NOT_ALIGNED_WARNING 249 + -NO_PACKED_NOT_ALIGNED_WARNING=-Wno-packed-not-aligned 250 + -else 251 + -NO_PACKED_NOT_ALIGNED_WARNING= 252 + -endif 253 + - 254 + -if HAVE_USE_AFTER_FREE3_WARNING 255 + -USE_AFTER_FREE3_WARNING=-Wuse-after-free=3 256 + -else 257 + -USE_AFTER_FREE3_WARNING= 258 + -endif 259 + - 260 + -AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ 261 + - -Wold-style-definition -Wstrict-prototypes $(TRAMPOLINES_WARNING) \ 262 + - $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ 263 + - $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ 264 + - $(USE_AFTER_FREE3_WARNING) \ 265 + - $(if $($(*F)_no_Werror),,-Werror) \ 266 + - $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ 267 + - $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ 268 + - $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ 269 + - $($(*F)_CFLAGS) 270 + - 271 + -AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \ 272 + - $(TRAMPOLINES_WARNING) \ 273 + - $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ 274 + - $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ 275 + - $(if $($(*F)_no_Werror),,-Werror) \ 276 + - $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ 277 + - $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ 278 + - $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ 279 + - $($(*F)_CXXFLAGS) 280 + - 281 + -COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) 282 + - 283 + -DEFS.os = -DPIC -DSHARED 284 + -if SYMBOL_VERSIONING 285 + -DEFS.os += -DSYMBOL_VERSIONING 286 + -else 287 + -endif 288 + - 289 + -%.os: %.c %.o 290 + -if AMDEP 291 + - $(AM_V_CC)if $(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) -MT $@ -MD -MP \ 292 + - -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \ 293 + - then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \ 294 + - rm -f "$(DEPDIR)/$*.Tpo"; \ 295 + - else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 296 + - fi 297 + -else 298 + - $(AM_V_CC)$(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) $< 299 + -endif 300 + - 301 + -CLEANFILES = *.gcno *.gcda 302 + - 303 + -textrel_msg = echo "WARNING: TEXTREL found in '$@'" 304 + -if FATAL_TEXTREL 305 + -textrel_found = $(textrel_msg); exit 1 306 + -else 307 + -textrel_found = $(textrel_msg) 308 + -endif 309 + -textrel_check = if $(READELF) -d $@ | grep -F -q TEXTREL; then $(textrel_found); fi 310 + - 311 + -print-%: 312 + - @echo $*=$($*) 313 + +include $(top_srcdir)/config/eu-common.am 314 + diff --git a/src/Makefile.am b/src/Makefile.am 315 + index 1d592d4de..5fcebc21d 100644 316 + --- a/src/Makefile.am 317 + +++ b/src/Makefile.am 318 + @@ -16,10 +16,12 @@ 319 + ## You should have received a copy of the GNU General Public License 320 + ## along with this program. If not, see <http://www.gnu.org/licenses/>. 321 + ## 322 + -include $(top_srcdir)/config/eu.am 323 + +include $(top_srcdir)/config/eu-common.am 324 + DEFS += $(YYDEBUG) -DDEBUGPRED=@DEBUGPRED@ \ 325 + -DSRCDIR=\"$(shell cd $(srcdir);pwd)\" -DOBJDIR=\"$(shell pwd)\" 326 + -AM_CPPFLAGS += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ 327 + +DEFAULT_INCLUDES = -I$(top_builddir) 328 + +AM_CPPFLAGS = -I$(top_srcdir)/lib -I.. \ 329 + + -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ 330 + -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf \ 331 + -I$(srcdir)/../libdwfl -I$(srcdir)/../libasm -I../debuginfod
+7 -3
pkgs/development/tools/misc/elfutils/default.nix
··· 2 2 , musl-obstack, m4, zlib, zstd, bzip2, bison, flex, gettext, xz, setupDebugInfoDirs 3 3 , argp-standalone 4 4 , enableDebuginfod ? true, sqlite, curl, libmicrohttpd, libarchive 5 - , gitUpdater 5 + , gitUpdater, autoreconfHook 6 6 }: 7 7 8 8 # TODO: Look at the hardcoded paths to kernel, modules etc. ··· 37 37 url = "https://git.alpinelinux.org/aports/plain/main/elfutils/musl-strndupa.patch?id=2e3d4976eeffb4704cf83e2cc3306293b7c7b2e9"; 38 38 sha256 = "sha256-7daehJj1t0wPtQzTv+/Rpuqqs5Ng/EYnZzrcf2o/Lb0="; 39 39 }) 40 - ] ++ lib.optionals stdenv.hostPlatform.isMusl [ ./musl-error_h.patch ]; 40 + ] ++ lib.optionals stdenv.hostPlatform.isMusl [ ./musl-error_h.patch ] 41 + # Prevent headers and binaries from colliding which results in an error. 42 + # https://sourceware.org/pipermail/elfutils-devel/2024q3/007281.html 43 + ++ lib.optional (stdenv.targetPlatform.useLLVM or false) ./cxx-header-collision.patch; 41 44 42 45 postPatch = '' 43 46 patchShebangs tests/*.sh ··· 53 56 # We need bzip2 in NativeInputs because otherwise we can't unpack the src, 54 57 # as the host-bzip2 will be in the path. 55 58 nativeBuildInputs = [ m4 bison flex gettext bzip2 ] 56 - ++ lib.optional enableDebuginfod pkg-config; 59 + ++ lib.optional enableDebuginfod pkg-config 60 + ++ lib.optional (stdenv.targetPlatform.useLLVM or false) autoreconfHook; 57 61 buildInputs = [ zlib zstd bzip2 xz ] 58 62 ++ lib.optionals stdenv.hostPlatform.isMusl [ 59 63 argp-standalone