[PATCH 3/6] valgrind: Update to version 3.18.1

Hauke Mehrtens hauke at hauke-m.de
Mon Nov 1 09:54:19 PDT 2021


This version has some improvements for musl.
This version works fine for me on MIPS 32 BE without MIPS16 even on musl.

The additional patch is needed to make valgrind use the correct syscall
numbers for new syscalls like clock_gettime64. The MIPS architecture
uses special syscall ranges which are different from most other systems.
The patch is pending upstream: https://bugs.kde.org/show_bug.cgi?id=444781

Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
---

On MIPS BE 32 bit with glibc valgrind does not work for me any more.
I am getting this:
----------------------------------------------------
root at OpenWrt:/# valgrind uname -a
==1371== Memcheck, a memory error detector
==1371== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1371== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==1371== Command: uname -a
==1371== 

valgrind:  Fatal error at startup: a function redirection
valgrind:  which is mandatory for this platform-tool combination
valgrind:  cannot be set up.  Details of the redirection are:
valgrind:  
valgrind:  A must-be-redirected function
valgrind:  whose name matches the pattern:      index
valgrind:  in an object with soname matching:   ld.so.1
valgrind:  was not found whilst processing
valgrind:  symbols from the object with soname: ld.so.1
valgrind:  
valgrind:  Possible fixes: (1, short term): install glibc's debuginfo
valgrind:  package on this machine.  (2, longer term): ask the packagers
valgrind:  for your Linux distribution to please in future ship a non-
valgrind:  stripped ld.so (or whatever the dynamic linker .so is called)
valgrind:  that exports the above-named function using the standard
valgrind:  calling conventions for this platform.  The package you need
valgrind:  to install for fix (1) is called
valgrind:  
valgrind:    On Debian, Ubuntu:                 libc6-dbg
valgrind:    On SuSE, openSuSE, Fedora, RHEL:   glibc-debuginfo
valgrind:  
valgrind:  Note that if you are debugging a 32 bit process on a
valgrind:  64 bit system, you will need a corresponding 32 bit debuginfo
valgrind:  package (e.g. libc6-dbg:i386).
valgrind:  
valgrind:  Cannot continue -- exiting now.  Sorry.

root at OpenWrt:/# 
----------------------------------------------------


 package/devel/valgrind/Makefile               |   4 +-
 .../010-mips-Fix-new-syscall-numbers.patch    | 131 ++++++++++++++++++
 .../patches/130-mips_fix_soft_float.patch     |  12 +-
 3 files changed, 139 insertions(+), 8 deletions(-)
 create mode 100644 package/devel/valgrind/patches/010-mips-Fix-new-syscall-numbers.patch

diff --git a/package/devel/valgrind/Makefile b/package/devel/valgrind/Makefile
index 829f37569e9b..4f0e0fd49351 100644
--- a/package/devel/valgrind/Makefile
+++ b/package/devel/valgrind/Makefile
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=valgrind
-PKG_VERSION:=3.16.1
+PKG_VERSION:=3.18.1
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://sourceware.org/pub/valgrind/
-PKG_HASH:=c91f3a2f7b02db0f3bc99479861656154d241d2fdb265614ba918cc6720a33ca
+PKG_HASH:=00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5
 
 PKG_MAINTAINER:=Felix Fietkau <nbd at nbd.name>
 PKG_LICENSE:=GPL-2.0+
diff --git a/package/devel/valgrind/patches/010-mips-Fix-new-syscall-numbers.patch b/package/devel/valgrind/patches/010-mips-Fix-new-syscall-numbers.patch
new file mode 100644
index 000000000000..e84273c97322
--- /dev/null
+++ b/package/devel/valgrind/patches/010-mips-Fix-new-syscall-numbers.patch
@@ -0,0 +1,131 @@
+From 86ab9452bd10f08dbfa22d94e1155838f6f9f2e0 Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke at hauke-m.de>
+Date: Sun, 31 Oct 2021 23:11:11 +0100
+Subject: [PATCH] mips: Fix new syscall numbers
+
+The MIPS32 and MIPS64 O32 ABI are adding 4000 to all syscall numbers.
+The MIPS64 N64 ABI adds 5000 to each syscall and the MIPS64 N32 ABI adds
+6000 to each syscall number. We can not sue the shared file for MIPS and
+have to define this for each sycall separately.
+
+Without this change valgrind is not able to detect new syscalls like
+clock_gettime64 correctly.
+
+Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
+---
+ include/pub_tool_vkiscnums_asm.h      |  3 ---
+ include/vki/vki-scnums-mips32-linux.h | 36 +++++++++++++++++++++++++++
+ include/vki/vki-scnums-mips64-linux.h | 32 ++++++++++++++++++++++++
+ 3 files changed, 68 insertions(+), 3 deletions(-)
+
+--- a/include/pub_tool_vkiscnums_asm.h
++++ b/include/pub_tool_vkiscnums_asm.h
+@@ -63,15 +63,12 @@
+ #  include "vki/vki-scnums-arm64-linux.h"
+ 
+ #elif defined(VGP_mips32_linux)
+-#  include "vki/vki-scnums-shared-linux.h"
+-#  include "vki/vki-scnums-32bit-linux.h"
+ #  include "vki/vki-scnums-mips32-linux.h"
+ 
+ #elif defined(VGP_nanomips_linux)
+ #  include "vki/vki-scnums-nanomips-linux.h"
+ 
+ #elif defined(VGP_mips64_linux)
+-#  include "vki/vki-scnums-shared-linux.h"
+ #  include "vki/vki-scnums-mips64-linux.h"
+ 
+ #elif defined(VGP_x86_freebsd) || defined(VGP_amd64_freebsd)
+--- a/include/vki/vki-scnums-mips32-linux.h
++++ b/include/vki/vki-scnums-mips32-linux.h
+@@ -401,6 +401,42 @@
+ #define __NR_pkey_free			(__NR_Linux + 365)
+ #define __NR_statx			(__NR_Linux + 366)
+ 
++#define __NR_clock_gettime64		(__NR_Linux + 403)
++#define __NR_clock_settime64		(__NR_Linux + 404)
++#define __NR_clock_adjtime64		(__NR_Linux + 405)
++#define __NR_clock_getres_time64	(__NR_Linux + 406)
++#define __NR_clock_nanosleep_time64	(__NR_Linux + 407)
++#define __NR_timer_gettime64		(__NR_Linux + 408)
++#define __NR_timer_settime64		(__NR_Linux + 409)
++#define __NR_timerfd_gettime64		(__NR_Linux + 410)
++#define __NR_timerfd_settime64		(__NR_Linux + 411)
++#define __NR_utimensat_time64		(__NR_Linux + 412)
++#define __NR_pselect6_time64		(__NR_Linux + 413)
++#define __NR_ppoll_time64		(__NR_Linux + 414)
++#define __NR_io_pgetevents_time64	(__NR_Linux + 416)
++#define __NR_recvmmsg_time64		(__NR_Linux + 417)
++#define __NR_mq_timedsend_time64	(__NR_Linux + 418)
++#define __NR_mq_timedreceive_time64	(__NR_Linux + 419)
++#define __NR_semtimedop_time64		(__NR_Linux + 420)
++#define __NR_rt_sigtimedwait_time64	(__NR_Linux + 421)
++#define __NR_futex_time64		(__NR_Linux + 422)
++#define __NR_sched_rr_get_interval_time64	(__NR_Linux + 423)
++#define __NR_pidfd_send_signal		(__NR_Linux + 424)
++#define __NR_io_uring_setup		(__NR_Linux + 425)
++#define __NR_io_uring_enter		(__NR_Linux + 426)
++#define __NR_io_uring_register		(__NR_Linux + 427)
++#define __NR_open_tree			(__NR_Linux + 428)
++#define __NR_move_mount			(__NR_Linux + 429)
++#define __NR_fsopen			(__NR_Linux + 430)
++#define __NR_fsconfig			(__NR_Linux + 431)
++#define __NR_fsmount			(__NR_Linux + 432)
++#define __NR_fspick			(__NR_Linux + 433)
++
++#define __NR_clone3			(__NR_Linux + 435)
++#define __NR_close_range		(__NR_Linux + 436)
++
++#define __NR_faccessat2			(__NR_Linux + 439)
++
+ /*
+  * Offset of the last Linux o32 flavoured syscall
+  */
+--- a/include/vki/vki-scnums-mips64-linux.h
++++ b/include/vki/vki-scnums-mips64-linux.h
+@@ -363,6 +363,22 @@
+ #define __NR_pkey_free              (__NR_Linux + 325)
+ #define __NR_statx                  (__NR_Linux + 326)
+ 
++#define __NR_pidfd_send_signal       (__NR_Linux + 424)
++#define __NR_io_uring_setup          (__NR_Linux + 425)
++#define __NR_io_uring_enter          (__NR_Linux + 426)
++#define __NR_io_uring_register       (__NR_Linux + 427)
++#define __NR_open_tree               (__NR_Linux + 428)
++#define __NR_move_mount              (__NR_Linux + 429)
++#define __NR_fsopen                  (__NR_Linux + 430)
++#define __NR_fsconfig                (__NR_Linux + 431)
++#define __NR_fsmount                 (__NR_Linux + 432)
++#define __NR_fspick                  (__NR_Linux + 433)
++
++#define __NR_clone3                  (__NR_Linux + 435)
++#define __NR_close_range             (__NR_Linux + 436)
++
++#define __NR_faccessat2              (__NR_Linux + 439)
++
+ #elif defined(VGABI_N32)
+ 
+ /*
+@@ -702,6 +718,22 @@
+ #define __NR_pkey_free               (__NR_Linux + 329)
+ #define __NR_statx                   (__NR_Linux + 330)
+ 
++#define __NR_pidfd_send_signal       (__NR_Linux + 424)
++#define __NR_io_uring_setup          (__NR_Linux + 425)
++#define __NR_io_uring_enter          (__NR_Linux + 426)
++#define __NR_io_uring_register       (__NR_Linux + 427)
++#define __NR_open_tree               (__NR_Linux + 428)
++#define __NR_move_mount              (__NR_Linux + 429)
++#define __NR_fsopen                  (__NR_Linux + 430)
++#define __NR_fsconfig                (__NR_Linux + 431)
++#define __NR_fsmount                 (__NR_Linux + 432)
++#define __NR_fspick                  (__NR_Linux + 433)
++
++#define __NR_clone3                  (__NR_Linux + 435)
++#define __NR_close_range             (__NR_Linux + 436)
++
++#define __NR_faccessat2              (__NR_Linux + 439)
++
+ #else
+ #error unknown mips64 abi
+ #endif
diff --git a/package/devel/valgrind/patches/130-mips_fix_soft_float.patch b/package/devel/valgrind/patches/130-mips_fix_soft_float.patch
index 05be099ca5e4..427aa85524c3 100644
--- a/package/devel/valgrind/patches/130-mips_fix_soft_float.patch
+++ b/package/devel/valgrind/patches/130-mips_fix_soft_float.patch
@@ -14,7 +14,7 @@ This fixes the following error message when compiling with a GCC 10 MIPS BE 32:
 
 --- a/VEX/priv/guest_mips_helpers.c
 +++ b/VEX/priv/guest_mips_helpers.c
-@@ -617,6 +617,7 @@ extern UInt mips_dirtyhelper_calculate_F
+@@ -616,6 +616,7 @@ extern UInt mips_dirtyhelper_calculate_F
                                                     flt_op inst )
  {
     UInt ret = 0;
@@ -22,7 +22,7 @@ This fixes the following error message when compiling with a GCC 10 MIPS BE 32:
  #if defined(__mips__)
     VexGuestMIPS32State* guest_state = (VexGuestMIPS32State*)gs;
     UInt loFsVal, hiFsVal, loFtVal, hiFtVal;
-@@ -699,6 +700,7 @@ extern UInt mips_dirtyhelper_calculate_F
+@@ -698,6 +699,7 @@ extern UInt mips_dirtyhelper_calculate_F
           break;
     }
  #endif
@@ -30,7 +30,7 @@ This fixes the following error message when compiling with a GCC 10 MIPS BE 32:
     return ret;
  }
  
-@@ -708,6 +710,7 @@ extern UInt mips_dirtyhelper_calculate_F
+@@ -707,6 +709,7 @@ extern UInt mips_dirtyhelper_calculate_F
                                                     flt_op inst )
  {
     UInt ret = 0;
@@ -38,7 +38,7 @@ This fixes the following error message when compiling with a GCC 10 MIPS BE 32:
  #if defined(__mips__) && ((__mips == 64) ||                                  \
                            (defined(__mips_isa_rev) && (__mips_isa_rev >= 2)))
  #if defined(VGA_mips32)
-@@ -860,6 +863,7 @@ extern UInt mips_dirtyhelper_calculate_F
+@@ -859,6 +862,7 @@ extern UInt mips_dirtyhelper_calculate_F
           break;
     }
  #endif
@@ -48,7 +48,7 @@ This fixes the following error message when compiling with a GCC 10 MIPS BE 32:
  
 --- a/coregrind/m_machine.c
 +++ b/coregrind/m_machine.c
-@@ -1828,6 +1828,7 @@ Bool VG_(machine_get_hwcaps)( void )
+@@ -2103,6 +2103,7 @@ Bool VG_(machine_get_hwcaps)( void )
             we are using alternative way to determine FP mode */
          ULong result = 0;
  
@@ -56,7 +56,7 @@ This fixes the following error message when compiling with a GCC 10 MIPS BE 32:
          if (!VG_MINIMAL_SETJMP(env_unsup_insn)) {
             __asm__ volatile (
                ".set push\n\t"
-@@ -1845,6 +1846,9 @@ Bool VG_(machine_get_hwcaps)( void )
+@@ -2120,6 +2121,9 @@ Bool VG_(machine_get_hwcaps)( void )
  
             fpmode = (result != 0x3FF0000000000000ull);
          }
-- 
2.30.2




More information about the openwrt-devel mailing list