0003-Fix-build-on-riscv32-675.patch 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. From 3f347c46272886a099852a4cd303ecf37a054de8 Mon Sep 17 00:00:00 2001
  2. From: Khem Raj <raj.khem@gmail.com>
  3. Date: Mon, 18 May 2020 10:23:50 -0700
  4. Subject: [PATCH] Fix build on riscv32 (#675)
  5. [Backport from upstream commit 3f347c46272886a099852a4cd303ecf37a054de8]
  6. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
  7. ---
  8. absl/base/internal/direct_mmap.h | 5 +++++
  9. absl/base/internal/spinlock_linux.inc | 8 ++++++++
  10. absl/synchronization/internal/waiter.cc | 8 ++++++++
  11. 3 files changed, 21 insertions(+)
  12. diff --git a/absl/base/internal/direct_mmap.h b/absl/base/internal/direct_mmap.h
  13. index 5618867..16accf0 100644
  14. --- a/absl/base/internal/direct_mmap.h
  15. +++ b/absl/base/internal/direct_mmap.h
  16. @@ -61,6 +61,10 @@ extern "C" void* __mmap2(void*, size_t, int, int, int, size_t);
  17. #endif
  18. #endif // __BIONIC__
  19. +#if defined(__NR_mmap2) && !defined(SYS_mmap2)
  20. +#define SYS_mmap2 __NR_mmap2
  21. +#endif
  22. +
  23. namespace absl {
  24. ABSL_NAMESPACE_BEGIN
  25. namespace base_internal {
  26. @@ -72,6 +76,7 @@ inline void* DirectMmap(void* start, size_t length, int prot, int flags, int fd,
  27. #if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__ARM_EABI__) || \
  28. (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) || \
  29. (defined(__PPC__) && !defined(__PPC64__)) || \
  30. + (defined(__riscv) && __riscv_xlen == 32) || \
  31. (defined(__s390__) && !defined(__s390x__))
  32. // On these architectures, implement mmap with mmap2.
  33. static int pagesize = 0;
  34. diff --git a/absl/base/internal/spinlock_linux.inc b/absl/base/internal/spinlock_linux.inc
  35. index 323edd6..e31c6ed 100644
  36. --- a/absl/base/internal/spinlock_linux.inc
  37. +++ b/absl/base/internal/spinlock_linux.inc
  38. @@ -46,6 +46,14 @@ static_assert(sizeof(std::atomic<uint32_t>) == sizeof(int),
  39. #endif
  40. #endif
  41. +#if defined(__NR_futex_time64) && !defined(SYS_futex_time64)
  42. +#define SYS_futex_time64 __NR_futex_time64
  43. +#endif
  44. +
  45. +#if defined(SYS_futex_time64) && !defined(SYS_futex)
  46. +#define SYS_futex SYS_futex_time64
  47. +#endif
  48. +
  49. extern "C" {
  50. ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
  51. diff --git a/absl/synchronization/internal/waiter.cc b/absl/synchronization/internal/waiter.cc
  52. index 2949f5a..b6150b9 100644
  53. --- a/absl/synchronization/internal/waiter.cc
  54. +++ b/absl/synchronization/internal/waiter.cc
  55. @@ -86,6 +86,14 @@ static void MaybeBecomeIdle() {
  56. #endif
  57. #endif
  58. +#if defined(__NR_futex_time64) && !defined(SYS_futex_time64)
  59. +#define SYS_futex_time64 __NR_futex_time64
  60. +#endif
  61. +
  62. +#if defined(SYS_futex_time64) && !defined(SYS_futex)
  63. +#define SYS_futex SYS_futex_time64
  64. +#endif
  65. +
  66. class Futex {
  67. public:
  68. static int WaitUntil(std::atomic<int32_t> *v, int32_t val,
  69. --
  70. 2.26.2