TARGETS=uclibc_toolchain
endif
-TARGETS+=user-mode-linux busybox tinylogin ncurses gdb strace valgrind db
+TARGETS+=user-mode-linux busybox tinylogin ncurses gdb strace valgrind db openssl zlib openssh #stlport
# Pick your root filesystem type.
TARGETS+=ext2root
Please feed suggestions, bug reports, insults, and bribes back to:
Erik Andersen <andersen@codepoet.org>
+
+
+
+NOTE:
+
+ For './configure' to behave itself with certain applications, you may need
+ to create a symlink under "/lib" on your system that points to the uClibc
+ shared library loader in the staging directory. For example, on my system
+
+ $ cd /lib
+ $ sudo ln -s /home/andersen/buildroot/build/staging_dir/lib/ld-uClibc.so.0 ld-uClibc.so.0
+
+ If you don't use sudo, run 'su -' to become root when making the link. If
+ you aren't root it won't work. The reason for this symlink, is it allows
+ './configure' to actually execute the test applications it compiles against
+ uClibc during the configuration process....
+
--- /dev/null
+#############################################################
+#
+# openssh
+#
+#############################################################
+
+OPENSSH_SITE:=ftp://mirror.cs.wisc.edu/pub/mirrors/OpenBSD/OpenSSH/portable/
+OPENSSH_DIR:=$(BUILD_DIR)/openssh-3.4p1
+OPENSSH_SOURCE:=openssh-3.4p1.tar.gz
+OPENSSH_PATCH:=$(SOURCE_DIR)/openssh_3.4p1-4.diff.gz
+
+$(DL_DIR)/$(OPENSSH_SOURCE):
+ wget -P $(DL_DIR) --passive-ftp $(OPENSSH_SITE)/$(OPENSSH_SOURCE)
+
+$(OPENSSH_DIR)/.unpacked: $(DL_DIR)/$(OPENSSH_SOURCE)
+ zcat $(DL_DIR)/$(OPENSSH_SOURCE) | tar -C $(BUILD_DIR) -xvf -
+ touch $(OPENSSH_DIR)/.unpacked
+
+$(OPENSSH_DIR)/.patched: $(OPENSSH_DIR)/.unpacked
+ zcat $(OPENSSH_PATCH) | patch -d $(OPENSSH_DIR) -p1
+ touch $(OPENSSH_DIR)/.patched
+
+$(OPENSSH_DIR)/.configured: $(OPENSSH_DIR)/.patched
+ (cd $(OPENSSH_DIR); rm -rf config.cache; CC=$(TARGET_CC1) \
+ ./configure --prefix=/usr \
+ --includedir=$(STAGING_DIR)/include \
+ --disable-lastlog --disable-utmp --disable-utmpx --disable-wtmp --disable-wtmpx \
+ --disable-nls --without-x);
+ touch $(OPENSSH_DIR)/.configured
+
+$(OPENSSH_DIR)/openssh: $(OPENSSH_DIR)/.configured
+ make CC=$(TARGET_CC1) -C $(OPENSSH_DIR)
+ -$(STRIP) --strip-unneeded $(OPENSSH_DIR)/*.so*
+
+$(TARGET_DIR)/usr/bin/openssh: $(OPENSSH_DIR)/openssh
+ make CC=$(TARGET_CC1) DESTDIR=$(TARGET_DIR) -C $(OPENSSH_DIR) install
+ rm -rf $(TARGET_DIR)/usr/share/doc/openssh
+
+openssh: $(TARGET_DIR)/usr/bin/openssh
+
+openssh-clean:
+ make -C $(OPENSSH_DIR) clean
+
+openssh-dirclean:
+ rm -rf $(OPENSSH_DIR)
+
--- /dev/null
+#############################################################
+#
+# openssl
+#
+#############################################################
+
+# TARGETS
+OPENSSL_SITE:=http://www.openssl.org/source
+OPENSSL_SOURCE:=openssl-0.9.6g.tar.gz
+OPENSSL_DIR:=$(BUILD_DIR)/openssl-0.9.6g
+
+
+$(DL_DIR)/$(OPENSSL_SOURCE):
+ wget -P $(DL_DIR) --passive-ftp $(OPENSSL_SITE)/$(OPENSSL_SOURCE)
+
+$(OPENSSL_DIR)/.unpacked: $(DL_DIR)/$(OPENSSL_SOURCE)
+ gunzip -c $(DL_DIR)/$(OPENSSL_SOURCE) | tar -C $(BUILD_DIR) -xvf -
+ touch $(OPENSSL_DIR)/.unpacked
+
+$(OPENSSL_DIR)/Makefile: $(OPENSSL_DIR)/.unpacked
+ (cd $(OPENSSL_DIR); \
+ PATH=$(TARGET_PATH) ./Configure linux-elf --prefix=$(STAGING_DIR) \
+ --openssldir=$(STAGING_DIR) -L$(STAGING_DIR)/lib -ldl \
+ -I$(STAGING_DIR)/include no-threads shared no-asm)
+
+$(OPENSSL_DIR)/apps/openssl: $(OPENSSL_DIR)/Makefile
+ make CC=$(TARGET_CC1) -C $(OPENSSL_DIR)
+
+$(STAGING_DIR)/bin/openssl: $(OPENSSL_DIR)/apps/openssl
+ make CC=$(TARGET_CC1) -C $(OPENSSL_DIR) install
+
+$(TARGET_DIR)/bin/openssl: $(STAGING_DIR)/bin/openssl
+ cp -fa $(STAGING_DIR)/bin/openssl $(TARGET_DIR)/bin/
+ cp -fa $(STAGING_DIR)/lib/libcrypto.so* $(TARGET_DIR)/lib/
+ cp -fa $(STAGING_DIR)/lib/libssl.so* $(TARGET_DIR)/lib/
+
+openssl-clean:
+ rm -f $(STAGING_DIR)/bin/openssl $(TARGET_DIR)/bin/openssl
+ rm -f $(STAGING_DIR)/lib/libcrypto.so* $(TARGET_DIR)/lib/libcrypto.so*
+ rm -f $(STAGING_DIR)/lib/libssl.so* $(TARGET_DIR)/lib/libssl.so*
+ $(MAKE) -C $(OPENSSL_DIR) clean
+
+openssl-dirclean:
+ rm -rf $(OPENSSL_DIR)
+
+openssl: uclibc $(TARGET_DIR)/bin/openssl
+
+#EOF
+
# Linux kernel targets
#
#############################################################
-UMLINUX_DIR=$(BUILD_DIR)/linux
+UMLINUX_DIR=$(BUILD_DIR)/linux-2.4.19
UMLINUX_SOURCE=linux-2.4.19.tar.bz2
UMLINUX_SITE=http://ftp.us.kernel.org/pub/linux/kernel/v2.4
UMLINUX_PATCH_1:=uml-patch-2.4.19-5.bz2
---- busybox/Config.h 6 Apr 2002 04:22:15 -0000 1.116
-+++ busybox/Config.h 30 May 2002 05:10:32 -0000
-@@ -7,8 +7,8 @@
- //
+--- busybox/Config.h 17 Sep 2002 22:04:28 -0000 1.118
++++ busybox/Config.h 17 Sep 2002 23:43:54 -0000
+@@ -8,7 +8,7 @@
//
// BusyBox Applications
--//#define BB_ADJTIMEX
+ //#define BB_ADJTIMEX
-//#define BB_AR
-+#define BB_ADJTIMEX
+#define BB_AR
#define BB_ASH
#define BB_BASENAME
#define BB_CAT
+@@ -18,14 +18,14 @@
+ #define BB_CHROOT
+ #define BB_CHVT
+ #define BB_CLEAR
+-//#define BB_CMP
++#define BB_CMP
+ #define BB_CP
+-//#define BB_CPIO
++#define BB_CPIO
+ #define BB_CUT
+ #define BB_DATE
+-//#define BB_DC
++#define BB_DC
+ #define BB_DD
+-//#define BB_DEALLOCVT
++#define BB_DEALLOCVT
+ #define BB_DF
+ #define BB_DIRNAME
+ #define BB_DMESG
@@ -37,12 +37,12 @@
//#define BB_DUMPKMAP
#define BB_ECHO
#define BB_ENV
-//#define BB_EXPR
+-//#define BB_FBSET
+#define BB_EXPR
- //#define BB_FBSET
++#define BB_FBSET
//#define BB_FDFLUSH
#define BB_FIND
#define BB_FREE
//#define BB_FSCK_MINIX
//#define BB_GETOPT
#define BB_GREP
-@@ -51,12 +51,12 @@
+@@ -50,13 +50,13 @@
+ #define BB_GZIP
#define BB_HALT
#define BB_HEAD
- //#define BB_HOSTID
+-//#define BB_HOSTID
-//#define BB_HOSTNAME
++#define BB_HOSTID
+#define BB_HOSTNAME
//#define BB_HUSH
#define BB_ID
#define BB_KILL
#define BB_KILLALL
#define BB_KLOGD
-@@ -68,11 +68,11 @@
+@@ -67,77 +67,77 @@
+ //#define BB_LOADFONT
//#define BB_LOADKMAP
#define BB_LOGGER
- //#define BB_LOGNAME
+-//#define BB_LOGNAME
-//#define BB_LOSETUP
++#define BB_LOGNAME
+#define BB_LOSETUP
#define BB_LS
#define BB_LSMOD
#define BB_MKDIR
//#define BB_MKFIFO
//#define BB_MKFS_MINIX
-@@ -85,11 +85,11 @@
+ #define BB_MKNOD
+ #define BB_MKSWAP
+-//#define BB_MKTEMP
++#define BB_MKTEMP
+ #define BB_MODPROBE
+ #define BB_MORE
+ #define BB_MOUNT
//#define BB_MSH
//#define BB_MT
#define BB_MV
+#define BB_PING
+#define BB_PIVOT_ROOT
#define BB_POWEROFF
- //#define BB_PRINTF
+-//#define BB_PRINTF
++#define BB_PRINTF
#define BB_PS
-@@ -101,8 +101,8 @@
+ #define BB_PWD
+-//#define BB_RDATE
+-//#define BB_READLINK
++#define BB_RDATE
++#define BB_READLINK
+ #define BB_REBOOT
+ //#define BB_RENICE
#define BB_RESET
#define BB_RM
#define BB_RMDIR
//#define BB_RPM2CPIO
#define BB_SED
//#define BB_SETKEYCODES
-@@ -115,13 +115,13 @@
+ #define BB_SLEEP
+ #define BB_SORT
+-//#define BB_STTY
++#define BB_STTY
+ #define BB_SWAPONOFF
+ #define BB_SYNC
+ #define BB_SYSLOGD
#define BB_TAIL
#define BB_TAR
- //#define BB_TEE
+-//#define BB_TEE
-//#define BB_TEST
+-//#define BB_TELNET
++#define BB_TEE
+#define BB_TEST
- //#define BB_TELNET
++#define BB_TELNET
//#define BB_TFTP
-//#define BB_TIME
+-//#define BB_TOP
+#define BB_TIME
++#define BB_TOP
#define BB_TOUCH
- //#define BB_TR
+-//#define BB_TR
-//#define BB_TRACEROUTE
++#define BB_TR
+#define BB_TRACEROUTE
#define BB_TRUE_FALSE
#define BB_TTY
//#define BB_UNIX2DOS
-@@ -133,10 +133,10 @@
+-//#define BB_UUENCODE
+-//#define BB_UUDECODE
++#define BB_UUENCODE
++#define BB_UUDECODE
+ #define BB_UMOUNT
+ #define BB_UNIQ
+ #define BB_UNAME
//#define BB_UPDATE
#define BB_UPTIME
- //#define BB_USLEEP
+-//#define BB_USLEEP
-//#define BB_VI
++#define BB_USLEEP
+#define BB_VI
//#define BB_WATCHDOG
#define BB_WC
#define BB_WHICH
#define BB_WHOAMI
#define BB_XARGS
-@@ -217,7 +217,7 @@
- #define BB_FEATURE_USE_INITTAB
+@@ -185,7 +185,7 @@
+ #define BB_FEATURE_VERBOSE_USAGE
//
- //Enable init being called as /linuxrc
--#define BB_FEATURE_LINUXRC
-+//#define BB_FEATURE_LINUXRC
+ // Use termios to manipulate the screen ('more' is prettier with this on)
+-//#define BB_FEATURE_USE_TERMIOS
++#define BB_FEATURE_USE_TERMIOS
//
- //Have init enable core dumping for child processes (for debugging only)
+ // calculate terminal & column widths (for more, ls, and telnet)
+ #define BB_FEATURE_AUTOWIDTH
+@@ -224,10 +224,10 @@
//#define BB_FEATURE_INIT_COREDUMPS
-@@ -226,7 +226,7 @@
- //#define BB_FEATURE_EXTRA_QUIET
+ //
+ //Make sure nothing is printed to the console on boot
+-//#define BB_FEATURE_EXTRA_QUIET
++#define BB_FEATURE_EXTRA_QUIET
//
// enable syslogd -R remotehost
-#define BB_FEATURE_REMOTE_LOG
//
// enable syslogd -C
//#define BB_FEATURE_IPC_SYSLOG
-@@ -277,7 +277,7 @@
+@@ -248,7 +248,7 @@
+ //
+ // If you are using uClibc, be sure that you've already compiled
+ // uClibc with INCLUDE_RPC=true (contained in the Config file)
+-//#define BB_FEATURE_NFSMOUNT
++#define BB_FEATURE_NFSMOUNT
+ //
+ // Enable support forced filesystem unmounting
+ // (i.e., in case of an unreachable NFS system).
+@@ -278,7 +278,7 @@
#define BB_FEATURE_COMMAND_TAB_COMPLETION
//
// Attempts to match usernames in a ~-prefixed path
//
//Allow the shell to invoke all the compiled in BusyBox applets as if they
//were shell builtins. Nice for staticly linking an emergency rescue shell,
-@@ -298,7 +298,7 @@
+@@ -299,7 +299,7 @@
// current username and hostname. On systems that don't have usernames
// or hostnames, this can look hideous.
// Only relevant if a shell is enabled.
//
// Uncomment this option to disable job control. Job control lets you
// run jobs in the background (which completely useless for is all you
-@@ -314,7 +314,7 @@
- //#define BB_FEATURE_FBSET_READMODE
- //
- // Support insmod/lsmod/rmmod for post 2.1 kernels
--//#define BB_FEATURE_NEW_MODULE_INTERFACE
-+#define BB_FEATURE_NEW_MODULE_INTERFACE
- //
- // Support insmod/lsmod/rmmod for pre 2.1 kernels
- //#define BB_FEATURE_OLD_MODULE_INTERFACE
-@@ -332,16 +332,16 @@
+@@ -333,16 +333,16 @@
//#define BB_FEATURE_MINIX2
//
// Enable ifconfig status reporting output -- this feature adds 7k.
+#define BB_FEATURE_IFCONFIG_STATUS
//
// Enable ifconfig slip-specific options "keepalive" and "outfill"
--//#define BB_FEATURE_IFCONFIG_SLIP
-+#define BB_FEATURE_IFCONFIG_SLIP
+ //#define BB_FEATURE_IFCONFIG_SLIP
//
// Enable ifconfig options "mem_start", "io_addr", and "irq".
-//#define BB_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
//
// Allows "broadcast +" to set broadcast automatically based on hostaddr
// and netmask, at a cost of about 100 bytes of code (i386).
-@@ -379,7 +379,7 @@
+@@ -380,7 +380,7 @@
#define BB_FEATURE_FIND_NEWER
//
// Support for the -A -B and -C context flags in grep
#
-# Automatically generated by make menuconfig: don't edit
+# Automatically generated make config: don't edit
#
CONFIG_USERMODE=y
# CONFIG_ISA is not set
#
# General Setup
#
-CONFIG_STDIO_CONSOLE=y
CONFIG_NET=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_BINFMT_AOUT is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
-CONFIG_SSL=y
CONFIG_HOSTFS=y
+# CONFIG_HPPFS is not set
CONFIG_MCONSOLE=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_HOST_2G_2G is not set
# CONFIG_UML_SMP is not set
# CONFIG_SMP is not set
-CONFIG_CON_ZERO_CHAN="fd:0,fd:1"
-CONFIG_CON_CHAN="xterm"
-CONFIG_SSL_CHAN="pty"
+CONFIG_NEST_LEVEL=0
+CONFIG_KERNEL_HALF_GIGS=1
#
# Loadable module support
CONFIG_KMOD=y
#
-# Devices
+# Character Devices
+#
+CONFIG_STDIO_CONSOLE=y
+CONFIG_SSL=y
+CONFIG_FD_CHAN=y
+CONFIG_NULL_CHAN=y
+CONFIG_PORT_CHAN=y
+CONFIG_PTY_CHAN=y
+CONFIG_TTY_CHAN=y
+CONFIG_XTERM_CHAN=y
+CONFIG_CON_ZERO_CHAN="fd:0,fd:1"
+CONFIG_CON_CHAN="xterm"
+CONFIG_SSL_CHAN="pty"
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+# CONFIG_WATCHDOG is not set
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+# CONFIG_SOFT_WATCHDOG is not set
+# CONFIG_UML_WATCHDOG is not set
+# CONFIG_UML_SOUND is not set
+# CONFIG_SOUND is not set
+# CONFIG_HOSTAUDIO is not set
+# CONFIG_TTY_LOG is not set
+
+#
+# Block Devices
#
CONFIG_BLK_DEV_UBD=y
CONFIG_BLK_DEV_UBD_SYNC=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
# CONFIG_MMAPPER is not set
-# CONFIG_UML_SOUND is not set
-# CONFIG_SOUND is not set
-# CONFIG_HOSTAUDIO is not set
-CONFIG_FD_CHAN=y
-CONFIG_NULL_CHAN=y
-CONFIG_PORT_CHAN=y
-CONFIG_PTY_CHAN=y
-CONFIG_TTY_CHAN=y
-CONFIG_XTERM_CHAN=y
+CONFIG_NETDEVICES=y
+
+#
+# Network Devices
+#
+CONFIG_UML_NET=y
+CONFIG_UML_NET_ETHERTAP=y
+CONFIG_UML_NET_TUNTAP=y
+CONFIG_UML_NET_SLIP=y
+CONFIG_UML_NET_DAEMON=y
+CONFIG_UML_NET_MCAST=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=y
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+# CONFIG_PPP_ASYNC is not set
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_PPPOE is not set
+CONFIG_SLIP=y
+# CONFIG_SLIP_COMPRESSED is not set
+# CONFIG_SLIP_SMART is not set
+# CONFIG_SLIP_MODE_SLIP6 is not set
#
# Networking options
# CONFIG_KHTTPD is not set
# CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set
+
+#
+#
+#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
+
+#
+# Appletalk devices
+#
+# CONFIG_DEV_APPLETALK is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_NET_SCHED is not set
#
-# Network device support
-#
-CONFIG_UML_NET=y
-CONFIG_UML_NET_ETHERTAP=y
-CONFIG_UML_NET_TUNTAP=y
-CONFIG_UML_NET_SLIP=y
-CONFIG_UML_NET_DAEMON=y
-CONFIG_UML_NET_MCAST=y
-CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
+# Network testing
#
-# CONFIG_ARCNET is not set
-CONFIG_DUMMY=y
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=y
-CONFIG_ETHERTAP=y
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=y
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-# CONFIG_PPP_ASYNC is not set
-# CONFIG_PPP_SYNC_TTY is not set
-# CONFIG_PPP_DEFLATE is not set
-# CONFIG_PPP_BSDCOMP is not set
-# CONFIG_PPPOE is not set
-CONFIG_SLIP=y
-# CONFIG_SLIP_COMPRESSED is not set
-# CONFIG_SLIP_SMART is not set
-# CONFIG_SLIP_MODE_SLIP6 is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
+# CONFIG_NET_PKTGEN is not set
#
# File systems
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=m
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
#
# Multi-device support (RAID and LVM)
#
}
+--- valgrind-1.0pre6.orig/vg_unsafe.h Thu Jun 13 10:02:37 2002
++++ valgrind-1.0pre6/vg_unsafe.h Tue Jul 23 23:36:45 2002
+@@ -51,9 +51,13 @@
+
+ #include <linux/isdn.h> /* for ISDN ioctls */
+ #include <scsi/sg.h> /* for the SG_* ioctls */
++#include <scsi/scsi.h> /* for a few SCSI ioctls */
++#include <scsi/scsi_ioctl.h>/* for even more SCSI ioctls */
+ #include <sched.h> /* for struct sched_param */
+ #include <linux/sysctl.h> /* for struct __sysctl_args */
+ #include <linux/cdrom.h> /* for cd-rom ioctls */
++#include <linux/hdreg.h> /* for ide ioctls */
++#include <sys/mtio.h> /* for tape drive junk */
+
+ #define __USE_LARGEFILE64
+ #include <sys/stat.h> /* for struct stat */
+--- valgrind-1.0pre6.orig/vg_syscall_mem.c Sat Jul 13 06:44:39 2002
++++ valgrind-1.0pre6/vg_syscall_mem.c Tue Jul 23 23:44:39 2002
+@@ -2050,6 +2050,99 @@
+ sizeof(struct cdrom_msf));
+ KERNEL_DO_SYSCALL(tid,res);
+ break;
++
++ /* Stuff added by Erik Andersen for general device probing/handling */
++ case CDROM_DRIVE_STATUS:
++ KERNEL_DO_SYSCALL(tid,res);
++ break;
++#define BLKSSZGET _IO(0x12,104)
++ case BLKSSZGET:
++ must_be_writable(tst, "ioctl(BLKSSZGET)", arg3, sizeof(int));
++ KERNEL_DO_SYSCALL(tid,res);
++ if (!VG_(is_kerror)(res) && res == 0)
++ make_readable (arg3, sizeof(int));
++ break;
++#define BLKGETSIZE64 _IOR(0x12,114,sizeof(unsigned long long*))
++ case BLKGETSIZE64:
++ must_be_writable(tst, "ioctl(BLKGETSIZE64)", arg3, sizeof(unsigned long long));
++ KERNEL_DO_SYSCALL(tid,res);
++ if (!VG_(is_kerror)(res) && res == 0)
++ make_readable (arg3, sizeof(unsigned long long));
++ break;
++ case HDIO_GETGEO:
++ {
++ struct hd_geometry {
++ unsigned char heads;
++ unsigned char sectors;
++ unsigned short cylinders;
++ unsigned long start;
++ };
++
++ must_be_writable(tst, "ioctl(HDIO_GETGEO)", arg3, sizeof(struct hd_geometry));
++ KERNEL_DO_SYSCALL(tid,res);
++ if (!VG_(is_kerror)(res) && res == 0)
++ make_readable (arg3, sizeof(struct hd_geometry));
++ }
++ break;
++ case HDIO_GET_IDENTITY:
++ must_be_writable(tst, "ioctl(HDIO_GET_IDENTITY)", arg3, sizeof(struct hd_driveid));
++ KERNEL_DO_SYSCALL(tid,res);
++ if (!VG_(is_kerror)(res) && res == 0)
++ make_readable (arg3, sizeof(struct hd_driveid));
++ break;
++ case SCSI_IOCTL_GET_IDLUN:
++ {
++ struct scsi_idlun
++ {
++ int mux4;
++ int host_unique_id;
++
++ };
++ must_be_writable(tst, "ioctl(SCSI_IOCTL_GET_IDLUN)", arg3, sizeof(struct scsi_idlun));
++ KERNEL_DO_SYSCALL(tid,res);
++ if (!VG_(is_kerror)(res) && res == 0)
++ make_readable (arg3, sizeof(struct scsi_idlun));
++ }
++ break;
++ case SCSI_IOCTL_SEND_COMMAND:
++ must_be_writable(tst, "ioctl(SCSI_IOCTL_SEND_COMMAND)", arg3,
++ ((2 * sizeof(unsigned int)) + 6 + 512));
++ KERNEL_DO_SYSCALL(tid,res);
++ if (!VG_(is_kerror)(res) && res == 0)
++ make_readable (arg3, ((2 * sizeof(unsigned int)) + 6 + 512));
++ break;
++ case SCSI_IOCTL_GET_BUS_NUMBER:
++ must_be_writable(tst, "ioctl(SCSI_IOCTL_GET_BUS_NUMBER)", arg3, sizeof(int));
++ KERNEL_DO_SYSCALL(tid,res);
++ if (!VG_(is_kerror)(res) && res == 0)
++ make_readable (arg3, sizeof(int));
++ break;
++ case SCSI_IOCTL_PROBE_HOST:
++ {
++ int xxxx;
++ char *array = (char*)arg3;
++ xxxx = array[0] + (array[1]<<8) + (array[2]<<16) + (array[3]<<24);
++ must_be_writable(tst, "ioctl(SCSI_IOCTL_PROBE_HOST)", arg3, xxxx);
++ KERNEL_DO_SYSCALL(tid,res);
++ if (!VG_(is_kerror)(res) && res == 0)
++ make_readable (arg3, xxxx);
++ }
++ break;
++#define BLKFLSBUF _IO(0x12,97)
++ case BLKFLSBUF:
++ KERNEL_DO_SYSCALL(tid,res);
++ break;
++#define BLKRRPART _IO(0x12,95)
++ case BLKRRPART:
++ KERNEL_DO_SYSCALL(tid,res);
++ break;
++ case MTIOCTOP:
++ must_be_writable(tst, "ioctl(MTIOCTOP)", arg3, sizeof(struct mtop));
++ KERNEL_DO_SYSCALL(tid,res);
++ if (!VG_(is_kerror)(res) && res == 0)
++ make_readable (arg3, sizeof(struct mtop));
++ break;
++
+ /* We don't have any specific information on it, so
+ try to do something reasonable based on direction and
+ size bits. The encoding scheme is described in