]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Beef up VG_(strerror) to provide correct messages for the
authorFlorian Krohm <florian@eich-krohm.de>
Sat, 24 Dec 2011 21:50:53 +0000 (21:50 +0000)
committerFlorian Krohm <florian@eich-krohm.de>
Sat, 24 Dec 2011 21:50:53 +0000 (21:50 +0000)
errno codes in asm-generic/errno-base.h (on linux).
The error strings were obtained by calling strerror natively in
Linux.
Extend vki-linux.h accordingly. vki-darwin.h already had
those errno codes.
Add testcase. This fixes #287858.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12316

NEWS
coregrind/m_syscall.c
include/vki/vki-linux.h
none/tests/Makefile.am
none/tests/nodir.stderr.exp [new file with mode: 0644]
none/tests/nodir.vgtest [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index b5eb516a49d3573efffbf30bdabf228e1da445f4..0d907b542a63919da505a8da77f099c8044dcd46 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -28,7 +28,7 @@ where XXXXXX is the bug number as listed below.
 283413  Fix wrong sanity check
 286270  vgpreload is not friendly to 64->32 bit execs, gives ld.so warnings
 286374  Running cachegrind with --branch-sim=yes on 64-bit PowerPC program fails
-
+287858  VG_(strerror): unknown error 
 
 
 Release 3.7.0 (5 November 2011)
index fc06c25ab85330838350935bfc998a8580a269e3..ae9630f7a7c0777e0b5a65bfc230fce65836506b 100644 (file)
@@ -695,28 +695,51 @@ SysRes VG_(do_syscall) ( UWord sysno, UWord a1, UWord a2, UWord a3,
 const HChar* VG_(strerror) ( UWord errnum )
 {
    switch (errnum) {
-      case VKI_EPERM:       return "Operation not permitted";
-      case VKI_ENOENT:      return "No such file or directory";
-      case VKI_ESRCH:       return "No such process";
-      case VKI_EINTR:       return "Interrupted system call";
-      case VKI_EBADF:       return "Bad file number";
-      case VKI_EAGAIN:      return "Try again";
-      case VKI_ENOMEM:      return "Out of memory";
-      case VKI_EACCES:      return "Permission denied";
-      case VKI_EFAULT:      return "Bad address";
-      case VKI_EEXIST:      return "File exists";
-      case VKI_EINVAL:      return "Invalid argument";
-      case VKI_EMFILE:      return "Too many open files";
-      case VKI_ENOSYS:      return "Function not implemented";
-      case VKI_EOVERFLOW:   return "Value too large for defined data type";
+   case VKI_EPERM:       return "Operation not permitted";
+   case VKI_ENOENT:      return "No such file or directory";
+   case VKI_ESRCH:       return "No such process";
+   case VKI_EINTR:       return "Interrupted system call";
+   case VKI_EIO:         return "Input/output error";
+   case VKI_ENXIO:       return "No such device or address";
+   case VKI_E2BIG:       return "Argument list too long";
+   case VKI_ENOEXEC:     return "Exec format error";
+   case VKI_EBADF:       return "Bad file descriptor";
+   case VKI_ECHILD:      return "No child processes";
+   case VKI_EAGAIN:      return "Resource temporarily unavailable";
+   case VKI_ENOMEM:      return "Cannot allocate memory";
+   case VKI_EACCES:      return "Permission denied";
+   case VKI_EFAULT:      return "Bad address";
+   case VKI_ENOTBLK:     return "Block device required";
+   case VKI_EBUSY:       return "Device or resource busy";
+   case VKI_EEXIST:      return "File exists";
+   case VKI_EXDEV:       return "Invalid cross-device link";
+   case VKI_ENODEV:      return "No such device";
+   case VKI_ENOTDIR:     return "Not a directory";
+   case VKI_EISDIR:      return "Is a directory";
+   case VKI_EINVAL:      return "Invalid argument";
+   case VKI_ENFILE:      return "Too many open files in system";
+   case VKI_EMFILE:      return "Too many open files";
+   case VKI_ENOTTY:      return "Inappropriate ioctl for device";
+   case VKI_ETXTBSY:     return "Text file busy";
+   case VKI_EFBIG:       return "File too large";
+   case VKI_ENOSPC:      return "No space left on device";
+   case VKI_ESPIPE:      return "Illegal seek";
+   case VKI_EROFS:       return "Read-only file system";
+   case VKI_EMLINK:      return "Too many links";
+   case VKI_EPIPE:       return "Broken pipe";
+   case VKI_EDOM:        return "Numerical argument out of domain";
+   case VKI_ERANGE:      return "Numerical result out of range";
+
+   case VKI_ENOSYS:      return "Function not implemented";
+   case VKI_EOVERFLOW:   return "Value too large for defined data type";
 #     if defined(VKI_ERESTARTSYS)
       case VKI_ERESTARTSYS: return "ERESTARTSYS";
 #     endif
-      default:              return "VG_(strerror): unknown error";
+   default:              return "VG_(strerror): unknown error";
    }
 }
 
 
 /*--------------------------------------------------------------------*/
-/*--- end                                                        ---*/
+/*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/
index a53d523f716387088a1256bd4c7c180b6b37005b..6763b13a6e3aa7e229b9d092470566a0424fa951 100644 (file)
@@ -1158,22 +1158,43 @@ struct  vki_seminfo {
 #define        VKI_ENOENT               2      /* No such file or directory */
 #define        VKI_ESRCH                3      /* No such process */
 #define        VKI_EINTR                4      /* Interrupted system call */
-#define VKI_ENOEXEC              8      /* Exec format error */
+#define        VKI_EIO                  5      /* I/O error */
+#define        VKI_ENXIO                6      /* No such device or address */
+#define        VKI_E2BIG                7      /* Argument list too long */
+#define        VKI_ENOEXEC              8      /* Exec format error */
 #define        VKI_EBADF                9      /* Bad file number */
-#define VKI_ECHILD              10      /* No child processes */
-#define VKI_EAGAIN             11      /* Try again */
-#define VKI_EWOULDBLOCK                VKI_EAGAIN
+#define        VKI_ECHILD              10      /* No child processes */
+#define        VKI_EAGAIN              11      /* Try again */
 #define        VKI_ENOMEM              12      /* Out of memory */
 #define        VKI_EACCES              13      /* Permission denied */
 #define        VKI_EFAULT              14      /* Bad address */
+#define        VKI_ENOTBLK             15      /* Block device required */
+#define        VKI_EBUSY               16      /* Device or resource busy */
 #define        VKI_EEXIST              17      /* File exists */
+#define        VKI_EXDEV               18      /* Cross-device link */
+#define        VKI_ENODEV              19      /* No such device */
+#define        VKI_ENOTDIR             20      /* Not a directory */
+#define        VKI_EISDIR              21      /* Is a directory */
 #define        VKI_EINVAL              22      /* Invalid argument */
+#define        VKI_ENFILE              23      /* File table overflow */
 #define        VKI_EMFILE              24      /* Too many open files */
+#define        VKI_ENOTTY              25      /* Not a typewriter */
+#define        VKI_ETXTBSY             26      /* Text file busy */
+#define        VKI_EFBIG               27      /* File too large */
+#define        VKI_ENOSPC              28      /* No space left on device */
+#define        VKI_ESPIPE              29      /* Illegal seek */
+#define        VKI_EROFS               30      /* Read-only file system */
+#define        VKI_EMLINK              31      /* Too many links */
+#define        VKI_EPIPE               32      /* Broken pipe */
+#define        VKI_EDOM                33      /* Math argument out of domain of func */
+#define        VKI_ERANGE              34      /* Math result not representable */
 
 //----------------------------------------------------------------------
 // From linux-2.6.8.1/include/asm-generic/errno.h
 //----------------------------------------------------------------------
 
+#define VKI_EWOULDBLOCK                VKI_EAGAIN
+
 #define        VKI_ENOSYS              38      /* Function not implemented */
 #define        VKI_EOVERFLOW           75      /* Value too large for defined data type */
 
index 13e8892121a8eac6851670db07e09dc0737c02dc..49350c7630bd65a8ff9af66d5b44082f4788763a 100644 (file)
@@ -99,6 +99,7 @@ EXTRA_DIST = \
        mq.stderr.exp mq.vgtest \
        munmap_exe.stderr.exp munmap_exe.vgtest \
        nestedfns.stderr.exp nestedfns.stdout.exp nestedfns.vgtest \
+       nodir.stderr.exp nodir.vgtest \
        pending.stdout.exp pending.stderr.exp pending.vgtest \
        procfs-linux.stderr.exp-with-readlinkat \
        procfs-linux.stderr.exp-without-readlinkat \
diff --git a/none/tests/nodir.stderr.exp b/none/tests/nodir.stderr.exp
new file mode 100644 (file)
index 0000000..d700ddb
--- /dev/null
@@ -0,0 +1 @@
+valgrind: ./nodir.vgtest/foobar: Not a directory
diff --git a/none/tests/nodir.vgtest b/none/tests/nodir.vgtest
new file mode 100644 (file)
index 0000000..57f36bc
--- /dev/null
@@ -0,0 +1 @@
+prog: nodir.vgtest/foobar