summaryrefslogtreecommitdiff
path: root/debian/patches
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches')
-rw-r--r--debian/patches/configure.diff2
-rw-r--r--debian/patches/riscv-nan-formatting.diff20
-rw-r--r--debian/patches/riscv-rdcycle.diff71
-rw-r--r--debian/patches/series2
4 files changed, 94 insertions, 1 deletions
diff --git a/debian/patches/configure.diff b/debian/patches/configure.diff
index a5a5eef3..3cd575f0 100644
--- a/debian/patches/configure.diff
+++ b/debian/patches/configure.diff
@@ -21,7 +21,7 @@ Configure Abseil for Debian.
OUTPUT_NAME "absl_${_NAME}"
- SOVERSION "2308.0.0"
+ SOVERSION 20230802
-+ VERSION "20230802.0.0"
++ VERSION "20230802.0.1"
)
endif()
else()
diff --git a/debian/patches/riscv-nan-formatting.diff b/debian/patches/riscv-nan-formatting.diff
new file mode 100644
index 00000000..8ad9b629
--- /dev/null
+++ b/debian/patches/riscv-nan-formatting.diff
@@ -0,0 +1,20 @@
+From: Benjamin Barenblat <bbaren@google.com>
+Subject: riscv64: Disable negative NaN float ostream format checking
+Bug-Debian: https://bugs.debian.org/1059340
+
+Streaming a negative NaN float with libstdc++ on riscv64 produces an
+optimization-dependent result. Don't require that logging such a float with
+Abseil produce the same result as libstdc++ streaming.
+
+--- a/absl/log/log_format_test.cc
++++ b/absl/log/log_format_test.cc
+@@ -611,7 +611,9 @@
+ EXPECT_CALL(
+ test_sink,
+ Send(AllOf(
++#ifndef __riscv // see https://bugs.debian.org/1059340
+ TextMessage(MatchesOstream(comparison_stream)),
++#endif
+ TextMessage(AnyOf(Eq("-nan"), Eq("nan"), Eq("NaN"), Eq("-nan(ind)"))),
+ ENCODED_MESSAGE(
+ AnyOf(EqualsProto(R"pb(value { str: "-nan" })pb"),
diff --git a/debian/patches/riscv-rdcycle.diff b/debian/patches/riscv-rdcycle.diff
new file mode 100644
index 00000000..24682c93
--- /dev/null
+++ b/debian/patches/riscv-rdcycle.diff
@@ -0,0 +1,71 @@
+From: aurel32 <aurelien@aurel32.net>
+Subject: unscaledcycleclock: remove RISC-V support
+Bug-Debian: https://bugs.debian.org/1059532
+Origin: upstream, https://github.com/abseil/abseil-cpp/commit/7335a36d0b5c1c597566f9aa3f458a5b6817c3b4
+
+Starting with Linux 6.6 [1], RDCYCLE is a privileged instruction on
+RISC-V and can't be used directly from userland. There is a sysctl
+option to change that as a transition period, but it will eventually
+disappear.
+
+The RDTIME instruction is another less accurate alternative, however its
+frequency varies from board to board, and there is currently now way to
+get its frequency from userland [2].
+
+Therefore this patch just removes the code for unscaledcycleclock on
+RISC-V. Without processor specific implementation, abseil relies on
+std::chrono::steady_clock::now().time_since_epoch() which is basically a
+wrapper around clock_gettime (CLOCK_MONOTONIC), which in turns use
+__vdso_clock_gettime(). On RISC-V this VDSO is just a wrapper around
+RDTIME correctly scaled to use nanoseconds units.
+
+This fixes the testsuite on riscv64, tested on a VisionFive 2 board.
+
+[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc4c07c89aada16229084eeb93895c95b7eabaa3
+[2] https://github.com/abseil/abseil-cpp/pull/1631
+
+--- a/absl/base/internal/unscaledcycleclock.cc
++++ b/absl/base/internal/unscaledcycleclock.cc
+@@ -121,18 +121,6 @@
+ return aarch64_timer_frequency;
+ }
+
+-#elif defined(__riscv)
+-
+-int64_t UnscaledCycleClock::Now() {
+- int64_t virtual_timer_value;
+- asm volatile("rdcycle %0" : "=r"(virtual_timer_value));
+- return virtual_timer_value;
+-}
+-
+-double UnscaledCycleClock::Frequency() {
+- return base_internal::NominalCPUFrequency();
+-}
+-
+ #elif defined(_M_IX86) || defined(_M_X64)
+
+ #pragma intrinsic(__rdtsc)
+--- a/absl/base/internal/unscaledcycleclock_config.h
++++ b/absl/base/internal/unscaledcycleclock_config.h
+@@ -21,8 +21,8 @@
+
+ // The following platforms have an implementation of a hardware counter.
+ #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
+- defined(__powerpc__) || defined(__ppc__) || defined(__riscv) || \
+- defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))
++ defined(__powerpc__) || defined(__ppc__) || defined(_M_IX86) || \
++ (defined(_M_X64) && !defined(_M_ARM64EC))
+ #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1
+ #else
+ #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 0
+@@ -53,8 +53,8 @@
+ #if ABSL_USE_UNSCALED_CYCLECLOCK
+ // This macro can be used to test if UnscaledCycleClock::Frequency()
+ // is NominalCPUFrequency() on a particular platform.
+-#if (defined(__i386__) || defined(__x86_64__) || defined(__riscv) || \
+- defined(_M_IX86) || defined(_M_X64))
++#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || \
++ defined(_M_X64))
+ #define ABSL_INTERNAL_UNSCALED_CYCLECLOCK_FREQUENCY_IS_CPU_FREQUENCY
+ #endif
+ #endif
diff --git a/debian/patches/series b/debian/patches/series
index 29630f3c..ee48fdd3 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,3 +4,5 @@ latomic.diff
empty-flags-library.diff
cordz-info-statistics-test.diff
pkg-config-directives.diff
+riscv-nan-formatting.diff
+riscv-rdcycle.diff