18eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/* Test for syscalls that are available on illumos but are removed on
28eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   Solaris 11.  This test is compiled only on illumos. */
38eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
48eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#include "../solaris/scalar.h"
58eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
68eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#include <sys/fcntl.h>
78eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
88eb8bab992e3998c33770b0cdb16059a8b918a06sewardj/* Helper functions.  These are necessary if we've got two tests for a single
98eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   syscall.  In that case, Memcheck can sometimes merge error messages.  Doing
108eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   each test in its own function prevents that. */
118eb8bab992e3998c33770b0cdb16059a8b918a06sewardj__attribute__((noinline))
128eb8bab992e3998c33770b0cdb16059a8b918a06sewardjstatic void sys_open64(void)
138eb8bab992e3998c33770b0cdb16059a8b918a06sewardj{
148eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   GO(SYS_open64, "(2-args) 2s 1m");
158eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   SY(SYS_open64, x0, x0); FAIL;
168eb8bab992e3998c33770b0cdb16059a8b918a06sewardj}
178eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
188eb8bab992e3998c33770b0cdb16059a8b918a06sewardj__attribute__((noinline))
198eb8bab992e3998c33770b0cdb16059a8b918a06sewardjstatic void sys_open642(void)
208eb8bab992e3998c33770b0cdb16059a8b918a06sewardj{
218eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   GO(SYS_open64, "(3-args) 3s 1m");
228eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   SY(SYS_open64, x0, x0 | O_CREAT, x0); FAIL;
238eb8bab992e3998c33770b0cdb16059a8b918a06sewardj}
248eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
258eb8bab992e3998c33770b0cdb16059a8b918a06sewardjint main(void)
268eb8bab992e3998c33770b0cdb16059a8b918a06sewardj{
278eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   /* Uninitialised, but we know px[0] is 0x0. */
288eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   long *px = malloc(sizeof(long));
298eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   x0 = px[0];
308eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
318eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   /* SYS_stat64                215 */
328eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   GO(SYS_stat64, "2s 2m");
338eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   SY(SYS_stat64, x0, x0); FAIL;
348eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
358eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   /* SYS_lstat64               216 */
368eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   GO(SYS_lstat64, "2s 2m");
378eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   SY(SYS_lstat64, x0, x0); FAIL;
388eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
398eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   /* SYS_fstat64               217 */
408eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   GO(SYS_fstat64, "2s 1m");
418eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   SY(SYS_fstat64, x0, x0); FAIL;
428eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
438eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   /* SYS_open64                225 */
448eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   sys_open64();
458eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   sys_open642();
468eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
478eb8bab992e3998c33770b0cdb16059a8b918a06sewardj   return 0;
488eb8bab992e3998c33770b0cdb16059a8b918a06sewardj}
498eb8bab992e3998c33770b0cdb16059a8b918a06sewardj
50