Files
patches/valgrind/valgrind-3.26.0-ungnuify.patch
T
2026-05-26 02:08:47 -05:00

483 lines
16 KiB
Diff

diff -urN a/Makefile.tool.am b/Makefile.tool.am
--- a/Makefile.tool.am 2025-10-24 13:43:21.000000000 -0500
+++ b/Makefile.tool.am 2026-03-22 13:02:33.492002899 -0500
@@ -16,7 +16,9 @@
$(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
endif
-TOOL_LDADD_COMMON = -lgcc
+# Ask the compiler driver for its runtime support archive at link time so
+# clang can use compiler-rt instead of a hardcoded GNU libgcc.
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) $(TOOL_LDADD_COMMON)
if VGCONF_HAVE_PLATFORM_SEC
@@ -290,4 +292,3 @@
install-exec-local: install-noinst_PROGRAMS install-noinst_DSYMS
uninstall-local: uninstall-noinst_PROGRAMS uninstall-noinst_DSYMS
-
diff -urN a/cachegrind/Makefile.in b/cachegrind/Makefile.in
--- a/cachegrind/Makefile.in 2025-10-24 13:43:44.000000000 -0500
+++ b/cachegrind/Makefile.in 2026-03-22 12:59:22.464512205 -0500
@@ -742,7 +742,7 @@
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
-TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
$(TOOL_LDADD_COMMON) $(am__append_7) $(am__append_9)
diff -urN a/callgrind/Makefile.in b/callgrind/Makefile.in
--- a/callgrind/Makefile.in 2025-10-24 13:43:45.000000000 -0500
+++ b/callgrind/Makefile.in 2026-03-22 12:59:22.464050754 -0500
@@ -789,7 +789,7 @@
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
-TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
$(TOOL_LDADD_COMMON) $(am__append_7) $(am__append_9)
diff -urN a/coregrind/link_tool_exe_freebsd.in b/coregrind/link_tool_exe_freebsd.in
--- a/coregrind/link_tool_exe_freebsd.in 2025-10-24 13:43:21.000000000 -0500
+++ b/coregrind/link_tool_exe_freebsd.in 2026-03-22 12:59:22.464512205 -0500
@@ -56,6 +56,84 @@
use warnings;
use strict;
+sub capture_command_output {
+ my (@cmd) = @_;
+ my $pid = open(my $fh, "-|");
+ die "Can't fork: $!" if !defined $pid;
+
+ if ($pid == 0) {
+ open(STDERR, ">", "/dev/null")
+ or die "Can't redirect stderr: $!";
+ exec @cmd or die "Can't exec @cmd: $!";
+ }
+
+ local $/ = undef;
+ my $output = <$fh>;
+ close($fh);
+
+ return defined $output ? $output : "";
+}
+
+sub compiler_cmd_prefix {
+ my (@args) = @_;
+ my @prefix = ();
+
+ foreach my $arg (@args) {
+ last if $arg =~ /^-/;
+ last if $arg =~ /\.(?:a|o|c|cc|cpp|cxx|s|S)$/;
+ push @prefix, $arg;
+ }
+
+ die "Can't determine compiler command"
+ if scalar(@prefix) == 0;
+
+ return @prefix;
+}
+
+sub compiler_runtime_probe_args {
+ my (@args) = @_;
+ my @probe_args = ();
+
+ for (my $n = 0; $n <= $#args; $n++) {
+ my $arg = $args[$n];
+
+ if ($arg eq "-m32" || $arg eq "-m64") {
+ push @probe_args, $arg;
+ next;
+ }
+
+ if ($arg eq "-B" || $arg eq "--sysroot" || $arg eq "-resource-dir"
+ || $arg eq "-target" || $arg eq "--target"
+ || $arg eq "--gcc-toolchain") {
+ last if $n == $#args;
+ push @probe_args, $arg, $args[++$n];
+ next;
+ }
+
+ if ($arg =~ /^(-B|--sysroot=|-resource-dir=|-target=|--target=|--gcc-toolchain=|--rtlib=|-rtlib=|-stdlib=|-fuse-ld=)/) {
+ push @probe_args, $arg;
+ next;
+ }
+ }
+
+ return @probe_args;
+}
+
+sub compiler_runtime_archive {
+ my (@args) = @_;
+ my @compiler = compiler_cmd_prefix(@args);
+ my @probe_args = compiler_runtime_probe_args(@args);
+
+ foreach my $probe ("-print-libgcc-file-name", "-print-file-name=libgcc.a") {
+ my $path = capture_command_output(@compiler, @probe_args, $probe);
+ chomp $path;
+ next if $path eq "" || $path eq "libgcc.a";
+ return $path if -f $path;
+ }
+
+ return "-lgcc";
+}
+
# expect at least: alt-load-address gcc -o foo bar.o
die "Not enough arguments"
if (($#ARGV + 1) < 5);
@@ -67,7 +145,9 @@
die "Bogus alt-load address"
if (length($ala) < 3 || index($ala, "0x") != 0);
-my $cmd = join(" ", @ARGV, "-static -Wl,@FLAG_T_TEXT@=$ala");
+my $compiler_runtime = compiler_runtime_archive(@ARGV);
+
+my $cmd = join(" ", @ARGV, $compiler_runtime, "-static -Wl,@FLAG_T_TEXT@=$ala");
#print "link_tool_exe_freebsd: $cmd\n";
diff -urN a/coregrind/link_tool_exe_linux.in b/coregrind/link_tool_exe_linux.in
--- a/coregrind/link_tool_exe_linux.in 2025-10-24 13:43:21.000000000 -0500
+++ b/coregrind/link_tool_exe_linux.in 2026-03-22 12:59:22.464512205 -0500
@@ -58,6 +58,84 @@
use warnings;
use strict;
+sub capture_command_output {
+ my (@cmd) = @_;
+ my $pid = open(my $fh, "-|");
+ die "Can't fork: $!" if !defined $pid;
+
+ if ($pid == 0) {
+ open(STDERR, ">", "/dev/null")
+ or die "Can't redirect stderr: $!";
+ exec @cmd or die "Can't exec @cmd: $!";
+ }
+
+ local $/ = undef;
+ my $output = <$fh>;
+ close($fh);
+
+ return defined $output ? $output : "";
+}
+
+sub compiler_cmd_prefix {
+ my (@args) = @_;
+ my @prefix = ();
+
+ foreach my $arg (@args) {
+ last if $arg =~ /^-/;
+ last if $arg =~ /\.(?:a|o|c|cc|cpp|cxx|s|S)$/;
+ push @prefix, $arg;
+ }
+
+ die "Can't determine compiler command"
+ if scalar(@prefix) == 0;
+
+ return @prefix;
+}
+
+sub compiler_runtime_probe_args {
+ my (@args) = @_;
+ my @probe_args = ();
+
+ for (my $n = 0; $n <= $#args; $n++) {
+ my $arg = $args[$n];
+
+ if ($arg eq "-m32" || $arg eq "-m64") {
+ push @probe_args, $arg;
+ next;
+ }
+
+ if ($arg eq "-B" || $arg eq "--sysroot" || $arg eq "-resource-dir"
+ || $arg eq "-target" || $arg eq "--target"
+ || $arg eq "--gcc-toolchain") {
+ last if $n == $#args;
+ push @probe_args, $arg, $args[++$n];
+ next;
+ }
+
+ if ($arg =~ /^(-B|--sysroot=|-resource-dir=|-target=|--target=|--gcc-toolchain=|--rtlib=|-rtlib=|-stdlib=|-fuse-ld=)/) {
+ push @probe_args, $arg;
+ next;
+ }
+ }
+
+ return @probe_args;
+}
+
+sub compiler_runtime_archive {
+ my (@args) = @_;
+ my @compiler = compiler_cmd_prefix(@args);
+ my @probe_args = compiler_runtime_probe_args(@args);
+
+ foreach my $probe ("-print-libgcc-file-name", "-print-file-name=libgcc.a") {
+ my $path = capture_command_output(@compiler, @probe_args, $probe);
+ chomp $path;
+ next if $path eq "" || $path eq "libgcc.a";
+ return $path if -f $path;
+ }
+
+ return "-lgcc";
+}
+
# expect at least: alt-load-address gcc -o foo bar.o
die "Not enough arguments"
if (($#ARGV + 1) < 5);
@@ -69,7 +147,9 @@
die "Bogus alt-load address"
if (length($ala) < 3 || index($ala, "0x") != 0);
-my $cmd = join(" ", @ARGV, "-static -Wl,@FLAG_T_TEXT@=$ala");
+my $compiler_runtime = compiler_runtime_archive(@ARGV);
+
+my $cmd = join(" ", @ARGV, $compiler_runtime, "-static -Wl,@FLAG_T_TEXT@=$ala");
#print "link_tool_exe_linux: $cmd\n";
diff -urN a/coregrind/link_tool_exe_solaris.in b/coregrind/link_tool_exe_solaris.in
--- a/coregrind/link_tool_exe_solaris.in 2025-10-24 13:43:21.000000000 -0500
+++ b/coregrind/link_tool_exe_solaris.in 2026-03-22 12:59:22.464512205 -0500
@@ -21,6 +21,84 @@
use File::Temp qw/tempfile unlink0/;
use Fcntl qw/F_SETFD/;
+sub capture_command_output {
+ my (@cmd) = @_;
+ my $pid = open(my $fh, "-|");
+ die "Can't fork: $!" if !defined $pid;
+
+ if ($pid == 0) {
+ open(STDERR, ">", "/dev/null")
+ or die "Can't redirect stderr: $!";
+ exec @cmd or die "Can't exec @cmd: $!";
+ }
+
+ local $/ = undef;
+ my $output = <$fh>;
+ close($fh);
+
+ return defined $output ? $output : "";
+}
+
+sub compiler_cmd_prefix {
+ my (@args) = @_;
+ my @prefix = ();
+
+ foreach my $arg (@args) {
+ last if $arg =~ /^-/;
+ last if $arg =~ /\.(?:a|o|c|cc|cpp|cxx|s|S)$/;
+ push @prefix, $arg;
+ }
+
+ die "Can't determine compiler command"
+ if scalar(@prefix) == 0;
+
+ return @prefix;
+}
+
+sub compiler_runtime_probe_args {
+ my (@args) = @_;
+ my @probe_args = ();
+
+ for (my $n = 0; $n <= $#args; $n++) {
+ my $arg = $args[$n];
+
+ if ($arg eq "-m32" || $arg eq "-m64") {
+ push @probe_args, $arg;
+ next;
+ }
+
+ if ($arg eq "-B" || $arg eq "--sysroot" || $arg eq "-resource-dir"
+ || $arg eq "-target" || $arg eq "--target"
+ || $arg eq "--gcc-toolchain") {
+ last if $n == $#args;
+ push @probe_args, $arg, $args[++$n];
+ next;
+ }
+
+ if ($arg =~ /^(-B|--sysroot=|-resource-dir=|-target=|--target=|--gcc-toolchain=|--rtlib=|-rtlib=|-stdlib=|-fuse-ld=)/) {
+ push @probe_args, $arg;
+ next;
+ }
+ }
+
+ return @probe_args;
+}
+
+sub compiler_runtime_archive {
+ my (@args) = @_;
+ my @compiler = compiler_cmd_prefix(@args);
+ my @probe_args = compiler_runtime_probe_args(@args);
+
+ foreach my $probe ("-print-libgcc-file-name", "-print-file-name=libgcc.a") {
+ my $path = capture_command_output(@compiler, @probe_args, $probe);
+ chomp $path;
+ next if $path eq "" || $path eq "libgcc.a";
+ return $path if -f $path;
+ }
+
+ return "-lgcc";
+}
+
# expect at least: alt-load-address gcc -o foo bar.o
die "Not enough arguments"
if (($#ARGV + 1) < 5);
@@ -62,7 +140,9 @@
END
# build up the complete command here:
-# 'cc' -Wl,-Mtmpfile 'restargs'
+# 'cc' -Wl,-Mtmpfile 'restargs' compiler-runtime-archive
+
+my $compiler_runtime = compiler_runtime_archive(@ARGV[1 .. $#ARGV]);
my $cmd="$cc -Wl,-M/proc/$$/fd/" . fileno($fh);
@@ -71,6 +151,8 @@
$cmd = "$cmd $ARGV[$n]";
}
+$cmd = "$cmd $compiler_runtime";
+
#print "link_tool_exe_solaris: $cmd\n";
diff -urN a/dhat/Makefile.in b/dhat/Makefile.in
--- a/dhat/Makefile.in 2025-10-24 13:43:45.000000000 -0500
+++ b/dhat/Makefile.in 2026-03-22 12:59:22.461512099 -0500
@@ -767,7 +767,7 @@
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
-TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
$(TOOL_LDADD_COMMON) $(am__append_7) $(am__append_9)
diff -urN a/drd/Makefile.in b/drd/Makefile.in
--- a/drd/Makefile.in 2025-10-24 13:43:45.000000000 -0500
+++ b/drd/Makefile.in 2026-03-22 12:59:22.460512064 -0500
@@ -848,7 +848,7 @@
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
-TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
$(TOOL_LDADD_COMMON) $(am__append_7) $(am__append_9)
diff -urN a/exp-bbv/Makefile.in b/exp-bbv/Makefile.in
--- a/exp-bbv/Makefile.in 2025-10-24 13:43:45.000000000 -0500
+++ b/exp-bbv/Makefile.in 2026-03-22 12:59:22.462512134 -0500
@@ -703,7 +703,7 @@
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
-TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
$(TOOL_LDADD_COMMON) $(am__append_7) $(am__append_9)
diff -urN a/helgrind/Makefile.in b/helgrind/Makefile.in
--- a/helgrind/Makefile.in 2025-10-24 13:43:46.000000000 -0500
+++ b/helgrind/Makefile.in 2026-03-22 12:59:22.464050754 -0500
@@ -790,7 +790,7 @@
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
-TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
$(TOOL_LDADD_COMMON) $(am__append_7) $(am__append_9)
diff -urN a/lackey/Makefile.in b/lackey/Makefile.in
--- a/lackey/Makefile.in 2025-10-24 13:43:46.000000000 -0500
+++ b/lackey/Makefile.in 2026-03-22 12:59:22.461512099 -0500
@@ -703,7 +703,7 @@
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
-TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
$(TOOL_LDADD_COMMON) $(am__append_7) $(am__append_9)
diff -urN a/massif/Makefile.in b/massif/Makefile.in
--- a/massif/Makefile.in 2025-10-24 13:43:46.000000000 -0500
+++ b/massif/Makefile.in 2026-03-22 12:59:22.462512134 -0500
@@ -757,7 +757,7 @@
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
-TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
$(TOOL_LDADD_COMMON) $(am__append_7) $(am__append_9)
diff -urN a/memcheck/Makefile.in b/memcheck/Makefile.in
--- a/memcheck/Makefile.in 2025-10-24 13:43:46.000000000 -0500
+++ b/memcheck/Makefile.in 2026-03-22 12:59:22.459512028 -0500
@@ -790,7 +790,7 @@
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
-TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
$(TOOL_LDADD_COMMON) $(am__append_7) $(am__append_9)
diff -urN a/none/Makefile.in b/none/Makefile.in
--- a/none/Makefile.in 2025-10-24 13:43:47.000000000 -0500
+++ b/none/Makefile.in 2026-03-22 12:59:22.461512099 -0500
@@ -701,7 +701,7 @@
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
-TOOL_LDADD_COMMON = -lgcc
+TOOL_LDADD_COMMON =
TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
$(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
$(TOOL_LDADD_COMMON) $(am__append_7) $(am__append_9)
diff -urN a/none/tests/Makefile.am b/none/tests/Makefile.am
--- a/none/tests/Makefile.am 2025-10-24 13:43:21.000000000 -0500
+++ b/none/tests/Makefile.am 2026-03-22 12:59:22.458511993 -0500
@@ -502,9 +502,8 @@
vgprintf_nvalgrind_CFLAGS = ${AM_CFLAGS} -DNVALGRIND
valgrind_cpp_test_SOURCES = valgrind_cpp_test.cpp
-valgrind_cpp_test_LDADD = -lstdc++
+valgrind_cpp_test_LDADD =
# C++ tests
coolo_sigaction_SOURCES = coolo_sigaction.cpp
gxx304_SOURCES = gxx304.cpp
-
diff -urN a/none/tests/Makefile.in b/none/tests/Makefile.in
--- a/none/tests/Makefile.in 2025-10-24 13:43:47.000000000 -0500
+++ b/none/tests/Makefile.in 2026-03-22 12:59:22.459512028 -0500
@@ -1581,7 +1581,7 @@
vgprintf_nvalgrind_SOURCES = vgprintf.c
vgprintf_nvalgrind_CFLAGS = ${AM_CFLAGS} -DNVALGRIND
valgrind_cpp_test_SOURCES = valgrind_cpp_test.cpp
-valgrind_cpp_test_LDADD = -lstdc++
+valgrind_cpp_test_LDADD =
# C++ tests
coolo_sigaction_SOURCES = coolo_sigaction.cpp
diff -urN a/valgrind.pc.in b/valgrind.pc.in
--- a/valgrind.pc.in 2025-10-24 13:43:21.000000000 -0500
+++ b/valgrind.pc.in 2026-03-22 12:59:22.458511993 -0500
@@ -11,6 +11,5 @@
Description: A dynamic binary instrumentation framework
Version: @VERSION@
Requires:
-Libs: -L${libdir}/valgrind -lcoregrind-@VGCONF_ARCH_PRI@-@VGCONF_OS@ -lvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@ -lgcc
+Libs: -L${libdir}/valgrind -lcoregrind-@VGCONF_ARCH_PRI@-@VGCONF_OS@ -lvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@
Cflags: -I${includedir}
-