Add valgrind

git-svn-id: svn://svn.openwrt.org/openwrt/packages@9445 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
florian 2007-10-25 13:59:16 +00:00
parent 840de6b741
commit 16416a7f88
4 changed files with 493 additions and 0 deletions

66
utils/valgrind/Makefile Normal file
View File

@ -0,0 +1,66 @@
#
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
# $Id: $
include $(TOPDIR)/rules.mk
PKG_NAME:=valgrind
PKG_VERSION:=3.2.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://valgrind.org/downloads/
PKG_MD5SUM:=978847992b136c8d8cb5c6559a91df1c
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
include $(INCLUDE_DIR)/package.mk
define Package/valgrind
SECTION:=utils
CATEGORY:=Utilities
DEPENDS:=@TARGET_x86||@TARGET_rdc||@TARGET_ps3||@TARGET_magicbox||@TARGET_amcc||@TARGET_uml
TITLE:=debugging and profiling Linux programs
URL:=http://www.valgrind.org
endef
define Package/valgrind/description
Valgrind is an award-winning suite of tools for debugging and
profiling Linux programs. With the tools that come with Valgrind,
you can automatically detect many memory management and threading
bugs, avoiding hours of frustrating bug-hunting, making your
programs more stable. You can also perform detailed profiling,
to speed up and reduce memory use of your programs.
endef
CONFIGURE_ARGS += \
--disable-tls \
--enable-only32bit \
--without-x \
--without-uiout \
--disable-valgrindmi \
--disable-tui \
--disable-valgrindtk \
--without-included-gettext
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \
DESTDIR="$(PKG_INSTALL_DIR)" \
all install
endef
define Package/valgrind/install
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
$(INSTALL_BIN) ./files/valgrind.sh $(1)/usr/bin/
$(INSTALL_DIR) $(1)/usr/lib/valgrind
$(CP) ./files/uclibc.supp $(1)/usr/lib/valgrind/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/valgrind/*-linux $(1)/usr/lib/valgrind/
endef
$(eval $(call BuildPackage,valgrind))

View File

@ -0,0 +1,212 @@
{
<insert a suppression name here>
Memcheck:Addr1
fun:_dl_strdup
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr1
fun:_dl_malloc
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Cond
fun:_dl_get_ready_to_run
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr1
fun:_dl_get_ready_to_run
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr2
fun:_dl_get_ready_to_run
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_get_ready_to_run
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr1
fun:_dl_add_elf_hash_table
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr2
fun:_dl_add_elf_hash_table
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_add_elf_hash_table
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr1
fun:_dl_check_if_named_library_is_loaded
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_check_if_named_library_is_loaded
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr1
fun:_dl_check_hashed_files
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_check_hashed_files
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr1
fun:_dl_load_elf_shared_library
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr2
fun:_dl_load_elf_shared_library
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_load_elf_shared_library
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr2
fun:_dl_load_shared_library
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr1
fun:_dl_find_hash
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_find_hash
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_fixup
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr2
fun:_dl_fixup
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_linux_resolve
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_linux_resolver
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr2
fun:_dl_parse_lazy_relocation_information
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr2
obj:/lib/ld-uClibc*
fun:_dl_parse_lazy_relocation_information
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_parse_lazy_relocation_information
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
obj:/lib/ld-uClibc*
obj:/lib/ld-uClibc*
fun:_dl_parse_lazy_relocation_information
}
{
<insert a suppression name here>
Memcheck:Addr4
obj:/lib/ld-uClibc*
fun:_dl_parse_lazy_relocation_information
}
{
<insert a suppression name here>
Memcheck:Addr2
obj:/lib/ld-uClibc*
fun:_dl_parse_relocation_information
}
{
<insert a suppression name here>
Memcheck:Addr2
fun:_dl_parse_relocation_information
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
fun:_dl_parse_relocation_information
obj:/lib/ld-uClibc*
}
{
<insert a suppression name here>
Memcheck:Addr4
obj:/lib/ld-uClibc*
fun:_dl_parse_relocation_information
}
{
<insert a suppression name here>
Memcheck:Addr4
obj:/lib/ld-uClibc*
obj:/lib/ld-uClibc*
fun:_dl_parse_relocation_information
}
{
<insert a suppression name here>
Memcheck:Addr2
obj:/lib/ld-uClibc-0.9.28.so
fun:*
}
{
<insert a suppression name here>
Memcheck:Addr4
obj:/lib/ld-uClibc-0.9.28.so
fun:*
}

View File

@ -0,0 +1,10 @@
#!/bin/sh -e
#
# Valgrind wrapper
# Use special suppression file for uClibc
export VALGRIND_OPTS="$VALGRIND_OPTS --suppressions=/usr/lib/valgrind/uclibc.supp"
# Use 'exec' to avoid having another shell process hanging around.
exec $0.bin "$@"

View File

@ -0,0 +1,205 @@
--- valgrind/coregrind/m_syswrap/syswrap-amd64-linux.c.orig 2006-08-02 16:51:51.000000000 -0600
+++ valgrind/coregrind/m_syswrap/syswrap-amd64-linux.c 2006-08-02 16:53:19.000000000 -0600
@@ -1124,7 +1124,7 @@
GENXY(__NR_times, sys_times), // 100
PLAXY(__NR_ptrace, sys_ptrace), // 101
GENX_(__NR_getuid, sys_getuid), // 102
- // (__NR_syslog, sys_syslog), // 103
+ LINXY(__NR_syslog, sys_syslog), // 103
GENX_(__NR_getgid, sys_getgid), // 104
GENX_(__NR_setuid, sys_setuid), // 105
--- valgrind/include/vki-linux.h.orig 2006-08-02 18:22:21.000000000 -0600
+++ valgrind/include/vki-linux.h 2006-08-02 18:38:02.000000000 -0600
@@ -1556,7 +1556,9 @@
#define VKI_BLKROSET _VKI_IO(0x12,93) /* set device read-only (0 = read-write) */
#define VKI_BLKROGET _VKI_IO(0x12,94) /* get read-only status (0 = read_write) */
+#define VKI_BLKRRPART _VKI_IO(0x12,95) /* re-read partition table */
#define VKI_BLKGETSIZE _VKI_IO(0x12,96) /* return device size /512 (long *arg) */
+#define VKI_BLKFLSBUF _VKI_IO(0x12,97) /* flush buffer cache */
#define VKI_BLKRASET _VKI_IO(0x12,98) /* set read ahead for block device */
#define VKI_BLKRAGET _VKI_IO(0x12,99) /* get current read ahead setting */
#define VKI_BLKFRASET _VKI_IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
@@ -1631,6 +1633,54 @@
//#define SG_GET_COMMAND_Q 0x2270 /* Yields 0 (queuing off) or 1 (on) */
#define VKI_SG_SET_COMMAND_Q 0x2271 /* Change queuing state with 0 or 1 */
+
+typedef struct vki_scsi_idlun
+{
+ int mux4;
+ int host_unique_id;
+
+} vki_scsi_idlun_t;
+#define VKI_SCSI_IOCTL_GET_IDLUN 0x5382 /* Gets a struct vki_scsi_idlun */
+#define VKI_SCSI_IOCTL_PROBE_HOST 0x5385 /* Gets an arrary describing the SCSI host */
+#define VKI_SCSI_IOCTL_GET_BUS_NUMBER 0x5386 /* Get the bus number for a device */
+
+//----------------------------------------------------------------------
+// From linux-2.6.8.1/include/linux/fd.h
+//----------------------------------------------------------------------
+#define VKI_FDRESET 0x254 /* Takes an int by value */
+#define VKI_FDGETDRVTYP 0x20f /* Returns char floppy_drive_name[16] */
+typedef struct vki_floppy_drive_struct {
+ unsigned long flags;
+ unsigned long spinup_date;
+ unsigned long select_date;
+ unsigned long first_read_date;
+ short probed_format;
+ short track;
+ short maxblock;
+ short maxtrack;
+ int generation;
+ int keep_data;
+ int fd_ref;
+ int fd_device;
+ unsigned long last_checked;
+ char *dmabuf;
+ int bufblocks;
+} vki_floppy_drive_struct_t;
+#define VKI_FDPOLLDRVSTAT 0x213 /* returns a struct floppy_drive_struct */
+typedef struct vki_floppy_struct {
+ unsigned int size;
+ unsigned int sect;
+ unsigned int head;
+ unsigned int track;
+ unsigned int stretch;
+ unsigned char gap;
+ unsigned char rate;
+ unsigned char spec1;
+ unsigned char fmt_gap;
+ const char * name;
+} vki_floppy_struct_t;
+#define VKI_FDGETPRM 0x204 /* returns a struct floppy_struct */
+
//----------------------------------------------------------------------
// From linux-2.6.8.1/include/linux/cdrom.h
//----------------------------------------------------------------------
@@ -1640,6 +1690,7 @@
(struct cdrom_tochdr) */
#define VKI_CDROMREADTOCENTRY 0x5306 /* Read TOC entry
(struct cdrom_tocentry) */
+#define VKI_CDROMEJECT 0x5309 /* Eject cdrom media */
#define VKI_CDROMSUBCHNL 0x530b /* Read subchannel data
(struct cdrom_subchnl) */
#define VKI_CDROMREADMODE2 0x530c /* Read CDROM mode 2 data (2336 Bytes)
--- valgrind/coregrind/m_syswrap/syswrap-generic.c.orig 2006-08-02 18:22:13.000000000 -0600
+++ valgrind/coregrind/m_syswrap/syswrap-generic.c 2006-08-02 18:43:49.000000000 -0600
@@ -3227,6 +3227,33 @@
case VKI_SG_GET_SG_TABLESIZE: /* 0x227f */
PRE_MEM_WRITE( "ioctl(SG_GET_SG_TABLESIZE)", ARG3, sizeof(int) );
break;
+ case VKI_SCSI_IOCTL_GET_IDLUN:
+ PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_GET_IDLUN)", ARG3, sizeof(vki_scsi_idlun_t) );
+ break;
+ case VKI_SCSI_IOCTL_PROBE_HOST:
+ {
+ int arraylen;
+ char *array = (char*)ARG3;
+ PRE_MEM_READ("ioctl(SCSI_IOCTL_PROBE_HOST)", ARG3, sizeof(char)*4 );
+ arraylen = array[0] + (array[1]<<8) + (array[2]<<16) + (array[3]<<24);
+ PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_PROBE_HOST)", ARG3, sizeof(char)*arraylen );
+ }
+ break;
+ case VKI_SCSI_IOCTL_GET_BUS_NUMBER:
+ PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_GET_BUS_NUMBER)", ARG3, sizeof(int) );
+ break;
+
+ case VKI_FDRESET:
+ break;
+ case VKI_FDGETDRVTYP:
+ PRE_MEM_WRITE( "ioctl(FDGETDRVTYP)", ARG3, sizeof(char)*16 );
+ break;
+ case VKI_FDPOLLDRVSTAT:
+ PRE_MEM_WRITE( "ioctl(FDPOLLDRVSTAT)", ARG3, sizeof(vki_floppy_drive_struct_t) );
+ break;
+ case VKI_FDGETPRM:
+ PRE_MEM_WRITE( "ioctl(FDGETPRM)", ARG3, sizeof(vki_floppy_struct_t) );
+ break;
case VKI_IIOCGETCPS:
PRE_MEM_WRITE( "ioctl(IIOCGETCPS)", ARG3,
@@ -3550,6 +3578,8 @@
case VKI_BLKROGET:
PRE_MEM_WRITE( "ioctl(BLKROGET)", ARG3, sizeof(int));
break;
+ case VKI_BLKRRPART:
+ break;
case VKI_BLKGETSIZE:
PRE_MEM_WRITE( "ioctl(BLKGETSIZE)", ARG3, sizeof(unsigned long));
break;
@@ -3558,6 +3588,8 @@
case VKI_BLKRAGET:
PRE_MEM_WRITE( "ioctl(BLKRAGET)", ARG3, sizeof(long));
break;
+ case VKI_BLKFLSBUF:
+ break;
case VKI_BLKFRASET:
break;
case VKI_BLKFRAGET:
@@ -3624,6 +3656,8 @@
PRE_MEM_WRITE( "ioctl(CDROMREADTOCENTRY)", ARG3,
sizeof(struct vki_cdrom_tocentry));
break;
+ case VKI_CDROMEJECT:
+ break;
case VKI_CDROMMULTISESSION: /* 0x5310 */
PRE_MEM_WRITE( "ioctl(CDROMMULTISESSION)", ARG3,
sizeof(struct vki_cdrom_multisession));
@@ -4042,6 +4076,28 @@
case VKI_SG_GET_SG_TABLESIZE:
POST_MEM_WRITE(ARG3, sizeof(int));
break;
+ case VKI_SCSI_IOCTL_GET_IDLUN:
+ POST_MEM_WRITE(ARG3, sizeof(vki_scsi_idlun_t));
+ break;
+ case VKI_SCSI_IOCTL_PROBE_HOST:
+ if (RES > 0 && ARG3 )
+ POST_MEM_WRITE(ARG3, sizeof(char)*RES);
+ break;
+ case VKI_SCSI_IOCTL_GET_BUS_NUMBER:
+ POST_MEM_WRITE(ARG3, sizeof(int));
+ break;
+
+ case VKI_FDRESET:
+ break;
+ case VKI_FDGETDRVTYP:
+ POST_MEM_WRITE( ARG3, sizeof(char)*16 );
+ break;
+ case VKI_FDPOLLDRVSTAT:
+ POST_MEM_WRITE( ARG3, sizeof(vki_floppy_drive_struct_t) );
+ break;
+ case VKI_FDGETPRM:
+ POST_MEM_WRITE( ARG3, sizeof(vki_floppy_struct_t) );
+ break;
case VKI_IIOCGETCPS:
POST_MEM_WRITE( ARG3, VKI_ISDN_MAX_CHANNELS * 2 * sizeof(unsigned long) );
@@ -4260,6 +4317,8 @@
case VKI_BLKROGET:
POST_MEM_WRITE(ARG3, sizeof(int));
break;
+ case VKI_BLKRRPART:
+ break;
case VKI_BLKGETSIZE:
POST_MEM_WRITE(ARG3, sizeof(unsigned long));
break;
@@ -4268,6 +4327,8 @@
case VKI_BLKRAGET:
POST_MEM_WRITE(ARG3, sizeof(long));
break;
+ case VKI_BLKFLSBUF:
+ break;
case VKI_BLKFRASET:
break;
case VKI_BLKFRAGET:
@@ -4309,6 +4370,8 @@
case VKI_CDROMREADTOCENTRY:
POST_MEM_WRITE(ARG3, sizeof(struct vki_cdrom_tocentry));
break;
+ case VKI_CDROMEJECT:
+ break;
case VKI_CDROMMULTISESSION:
POST_MEM_WRITE(ARG3, sizeof(struct vki_cdrom_multisession));
break;