]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Solaris: Further refinement of r15882 for Solaris versions
authorIvo Raisr <ivosh@ivosh.net>
Sun, 29 May 2016 12:10:58 +0000 (12:10 +0000)
committerIvo Raisr <ivosh@ivosh.net>
Sun, 29 May 2016 12:10:58 +0000 (12:10 +0000)
which do not have <sys/sysnvl.h> header file.
n-i-bz

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

coregrind/m_syswrap/syswrap-solaris.c
include/vki/vki-solaris.h
memcheck/tests/solaris/scalar_modctl_modnvl.c
memcheck/tests/solaris/scalar_modctl_modnvl.stderr.exp
memcheck/tests/solaris/scalar_modctl_modnvl.vgtest

index 4976f33d5badcfcad667dd257a4e460bc76367a7..84c9ff2f5eec66ff22cba78154725005e82332cc 100644 (file)
@@ -6679,18 +6679,26 @@ PRE(sys_modctl)
       break;
    }
 
-#if defined(SOLARIS_MODCTL_MODNVL)
+#  if defined(SOLARIS_MODCTL_MODNVL)
    case VKI_MODNVL_DEVLINKSYNC:
       /* int modnvl_devlinksync(sysnvl_op_t a1, uintptr_t a2, uintptr_t a3,
                                 uintptr_t a4); */
       switch (ARG2 /*op*/) {
+
+#     if defined(HAVE_SYS_SYSNVL_H)
       case VKI_SYSNVL_OP_GET:
-         PRINT("sys_modctl ( %ld, %lu, %#lx, %#lx, %#lx )",
-               SARG1, ARG2, ARG3, ARG4, ARG5);
          PRE_REG_READ5(long, SC3("modctl", "modnvl_devlinksync", "get"),
                        int, cmd, sysnvl_op_t, a1, char *, bufp,
                        uint64_t *, buflenp, uint64_t *, genp);
+#     else
+      case VKI_MODCTL_NVL_OP_GET:
+         PRE_REG_READ5(long, SC3("modctl", "modnvl_devlinksync", "get"),
+                       int, cmd, modctl_nvl_op_t, a1, char *, bufp,
+                       uint64_t *, buflenp, uint64_t *, genp);
+#     endif /* HAVE_SYS_SYSNVL_H */
 
+         PRINT("sys_modctl ( %ld, %lu, %#lx, %#lx, %#lx )",
+               SARG1, ARG2, ARG3, ARG4, ARG5);
          PRE_MEM_WRITE("modctl(buflenp)", ARG4, sizeof(vki_uint64_t));
          if (ML_(safe_to_deref)((vki_uint64_t *) ARG4, sizeof(vki_uint64_t))) {
             if (ARG3 != 0) {
@@ -6701,17 +6709,26 @@ PRE(sys_modctl)
             PRE_MEM_WRITE("modctl(genp)", ARG5, sizeof(vki_uint64_t));
          }
          break;
+
+#     if defined(HAVE_SYS_SYSNVL_H)
       case VKI_SYSNVL_OP_UPDATE:
-         PRINT("sys_modctl ( %ld, %lu, %#lx, %#lx )", SARG1, ARG2, ARG3, ARG4);
          PRE_REG_READ4(long, SC3("modctl", "modnvl_devlinksync", "update"),
                        int, cmd, sysnvl_op_t, a1, char *, bufp,
                        uint64_t *, buflenp);
+#     else
+      case VKI_MODCTL_NVL_OP_UPDATE:
+         PRE_REG_READ4(long, SC3("modctl", "modnvl_devlinksync", "update"),
+                       int, cmd, modctl_nvl_op_t, a1, char *, bufp,
+                       uint64_t *, buflenp);
+#     endif /* HAVE_SYS_SYSNVL_H */
 
+         PRINT("sys_modctl ( %ld, %lu, %#lx, %#lx )", SARG1, ARG2, ARG3, ARG4);
          PRE_MEM_READ("modctl(buflenp)", ARG4, sizeof(vki_uint64_t));
          if (ML_(safe_to_deref)((vki_uint64_t *) ARG4, sizeof(vki_uint64_t))) {
             PRE_MEM_READ("modctl(bufp)", ARG3, *(vki_uint64_t *) ARG4);
          }
          break;
+
       default:
          VG_(unimplemented)("Syswrap of the modctl call with command "
                             "MODNVL_DEVLINKSYNC and op %ld.", ARG2);
@@ -6727,7 +6744,7 @@ PRE(sys_modctl)
                     int, cmd, uint64_t *, utsp);
       PRE_MEM_WRITE("modctl(utsp)", ARG2, sizeof(vki_uint64_t));
       break;
-#endif /* SOLARIS_MODCTL_MODNVL */
+#  endif /* SOLARIS_MODCTL_MODNVL */
 
    default:
       VG_(unimplemented)("Syswrap of the modctl call with command %ld.", SARG1);
@@ -6749,10 +6766,16 @@ POST(sys_modctl)
    case VKI_MODINFO:
       POST_MEM_WRITE(ARG3, sizeof(struct vki_modinfo));
       break;
-#if defined(SOLARIS_MODCTL_MODNVL)
+#  if defined(SOLARIS_MODCTL_MODNVL)
    case VKI_MODNVL_DEVLINKSYNC:
       switch (ARG2 /*op*/) {
+
+#     if defined(HAVE_SYS_SYSNVL_H)
       case VKI_SYSNVL_OP_GET:
+#     else
+      case VKI_MODCTL_NVL_OP_GET:
+#     endif /* HAVE_SYS_SYSNVL_H */
+
          POST_MEM_WRITE(ARG4, sizeof(vki_uint64_t));
          if (ARG3 != 0) {
             POST_MEM_WRITE(ARG3, *(vki_uint64_t *) ARG4);
@@ -6761,8 +6784,14 @@ POST(sys_modctl)
             POST_MEM_WRITE(ARG5, sizeof(vki_uint64_t));
          }
          break;
+
+#     if defined(HAVE_SYS_SYSNVL_H)
       case VKI_SYSNVL_OP_UPDATE:
+#     else
+      case VKI_MODCTL_NVL_OP_UPDATE:
+#     endif /* HAVE_SYS_SYSNVL_H */
          break;
+
       default:
          vg_assert(0);
          break;
@@ -6771,7 +6800,8 @@ POST(sys_modctl)
    case VKI_MODDEVINFO_CACHE_TS:
       POST_MEM_WRITE(ARG2, sizeof(vki_uint64_t));
       break;
-#endif /* SOLARIS_MODCTL_MODNVL */
+#  endif /* SOLARIS_MODCTL_MODNVL */
+
    default:
       vg_assert(0);
       break;
index 6db5246a28571d7a5497f46d2b26a64524636f95..14a6a40b3be56fa27a5d47d97f3d8e625d6090ad 100644 (file)
@@ -652,10 +652,16 @@ typedef struct vki_kcf_door_arg_s {
 #define VKI_MODLOAD MODLOAD
 #define VKI_MODUNLOAD MODUNLOAD
 #define VKI_MODINFO MODINFO
+
 #if defined(SOLARIS_MODCTL_MODNVL)
 #define VKI_MODNVL_DEVLINKSYNC MODNVL_DEVLINKSYNC
 #define VKI_MODDEVINFO_CACHE_TS MODDEVINFO_CACHE_TS
+#if !defined(HAVE_SYS_SYSNVL_H)
+#define VKI_MODCTL_NVL_OP_GET MODCTL_NVL_OP_GET
+#define VKI_MODCTL_NVL_OP_UPDATE MODCTL_NVL_OP_UPDATE
+#endif /* !HAVE_SYS_SYSNVL_H */
 #endif /* SOLARIS_MODCTL_MODNVL */
+
 #define vki_modid_t int
 #define vki_modinfo modinfo
 
@@ -665,13 +671,6 @@ typedef struct vki_kcf_door_arg_s {
 #define        VKI_MS_OPTIONSTR MS_OPTIONSTR
 
 
-#if defined(HAVE_SYS_SYSNVL_H)
-#include <sys/sysnvl.h>
-#define VKI_SYSNVL_OP_GET SYSNVL_OP_GET
-#define VKI_SYSNVL_OP_UPDATE SYSNVL_OP_UPDATE
-#endif /* HAVE_SYS_SYSNVL_H */
-
-
 #include <sys/poll.h>
 #define vki_pollfd pollfd
 #define vki_pollfd_t pollfd_t
@@ -1248,6 +1247,13 @@ typedef struct sigaction vki_sigaction_fromK_t;
 #define VKI_SI86FPSTART SI86FPSTART
 
 
+#if defined(HAVE_SYS_SYSNVL_H)
+#include <sys/sysnvl.h>
+#define VKI_SYSNVL_OP_GET SYSNVL_OP_GET
+#define VKI_SYSNVL_OP_UPDATE SYSNVL_OP_UPDATE
+#endif /* HAVE_SYS_SYSNVL_H */
+
+
 #include <sys/systeminfo.h>
 #define VKI_SI_SYSNAME SI_SYSNAME
 #define VKI_SI_HOSTNAME SI_HOSTNAME
index 180cdbaa866c1969ed89fa2be031d78cf800c0ed..ce6505b6ba7e49b7afd7d76b4cc49112168aa6cf 100644 (file)
@@ -1,15 +1,23 @@
 /* Scalar test for new modctl syscall commands available on newer Solaris. */
 
 #include "scalar.h"
+#include "../../../config.h"
 
 #include <sys/modctl.h>
+#if defined(HAVE_SYS_SYSNVL_H)
 #include <sys/sysnvl.h>
+#endif /* HAVE_SYS_SYSNVL_H */
 
 __attribute__((noinline))
 static void sys_modctl(void)
 {
    GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, GET) 5s 1m");
-   SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC, x0 + SYSNVL_OP_GET,
+   SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
+#     if defined(HAVE_SYS_SYSNVL_H)
+      x0 + SYSNVL_OP_GET,
+#     else
+      x0 + MODCTL_NVL_OP_GET,
+#     endif /* HAVE_SYS_SYSNVL_H */
       x0, x0 + 1, x0); FAIL;
 }
 
@@ -19,7 +27,12 @@ static void sys_modctl2(void)
    uint64_t buflen = x0 + 10;
 
    GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, GET) 4s 2m");
-   SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC, x0 + SYSNVL_OP_GET,
+   SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
+#     if defined(HAVE_SYS_SYSNVL_H)
+      x0 + SYSNVL_OP_GET,
+#     else
+      x0 + MODCTL_NVL_OP_GET,
+#     endif /* HAVE_SYS_SYSNVL_H */
       x0 + 1, &buflen, x0 + 1); FAIL;
 }
 
@@ -27,7 +40,12 @@ __attribute__((noinline))
 static void sys_modctl3(void)
 {
    GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, UPDATE) 4s 1m");
-   SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC, x0 + SYSNVL_OP_UPDATE,
+   SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
+#     if defined(HAVE_SYS_SYSNVL_H)
+      x0 + SYSNVL_OP_UPDATE,
+#     else
+      x0 + MODCTL_NVL_OP_UPDATE,
+#     endif /* HAVE_SYS_SYSNVL_H */
       x0, x0 + 1); FAIL;
 }
 
@@ -37,7 +55,12 @@ static void sys_modctl4(void)
    uint64_t buflen = x0 + 10;
 
    GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, UPDATE) 4s 1m");
-   SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC, x0 + SYSNVL_OP_UPDATE,
+   SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
+#     if defined(HAVE_SYS_SYSNVL_H)
+      x0 + SYSNVL_OP_UPDATE,
+#     else
+      x0 + MODCTL_NVL_OP_UPDATE,
+#     endif /* HAVE_SYS_SYSNVL_H */
       x0 + 1, &buflen); FAIL;
 }
 
index 639ee9be5a263dc57da9ae45bea41cf8e7197dba..59973262b5d1f8275962841fcaddbb5b815204fd 100644 (file)
@@ -77,7 +77,6 @@ Syscall param modctl_modnvl_devlinksync_update(bufp) contains uninitialised byte
 Syscall param modctl(buflenp) points to uninitialised byte(s)
    ...
  Address 0x........ is on thread 1's stack
- in frame #1, created by sys_modctl4 (scalar_modctl_modnvl.c:36)
 
 Syscall param modctl(bufp) points to unaddressable byte(s)
    ...
index 68d527efb82850b1f9de16395c567b94d140eab6..7d686bf705018001d759967fc44c384e96e10cfe 100644 (file)
@@ -1,4 +1,5 @@
 prereq: test -e scalar_modctl_modnvl
 prog: scalar_modctl_modnvl
 vgopts: -q
+stderr_filter: filter_scalar
 stderr_filter_args: