X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Faltstack%2Ftest%2Frun.c;h=61710fda3b9c8dbddab5318ad55caf8aa7d023f6;hb=029a45b84fe60f8012dc1c740709db2c2e620d38;hp=389ecb916b2f9d5089ab8fefa1e1ae951ee4c322;hpb=c9b3a91ce2d91f92054f22131ced091d6bcf836e;p=ccan diff --git a/ccan/altstack/test/run.c b/ccan/altstack/test/run.c index 389ecb91..61710fda 100644 --- a/ccan/altstack/test/run.c +++ b/ccan/altstack/test/run.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -24,7 +25,7 @@ char *m_; rlim_t msz_; #define e(x) (900+(x)) #define seterr(x) (errno = e(x)) -#define setcall(x) ((call1 |= !errno ? (x) : 0), (call2 |= errno || out_ ? (x) : 0)) +#define setcall(x) ((call1 |= !errno ? (x) : 0), (call2 |= errno || state.out ? (x) : 0)) #define getrlimit(...) (fail&getrlimit_ ? (seterr(getrlimit_), -1) : (setcall(getrlimit_), getrlimit(__VA_ARGS__))) #define mmap(...) (fail&mmap_ ? (seterr(mmap_), (void *)-1) : (setcall(mmap_), mmap(__VA_ARGS__))) #define munmap(a, b) (fail&munmap_ ? (seterr(munmap_), -1) : (setcall(munmap_), munmap(m_=(a), msz_=(b)))) @@ -53,56 +54,76 @@ static void __attribute__((optimize("O0"))) dn(unsigned long i) } static void *wrap(void *i) { - dn((unsigned long) i); + dn(ptr2int(i)); return wrap; } +#define chkfail(x, y, z, c1, c2) \ + do { \ + call1 = 0; \ + call2 = 0; \ + errno = 0; \ + ok1((fail = x) && (y)); \ + ok1(errno == (z)); \ + ok1(call1 == (c1)); \ + ok1(call2 == (c2)); \ + } while (0); + +#define chkok(y, z, c1, c2) \ + do { \ + call1 = 0; \ + call2 = 0; \ + errno = 0; \ + fail = 0; \ + ok1((y)); \ + ok1(errno == (z)); \ + ok1(call1 == (c1)); \ + ok1(call2 == (c2)); \ + } while (0) + int main(void) { long pgsz = sysconf(_SC_PAGESIZE); - plan_tests(17); - -#define chkfail(x, y, z, c1, c2) (call1 = 0, call2 = 0, errno = 0, ok1((fail = x) && (y) && errno == (z) && call1 == (c1) && call2 == (c2))); -#define chkok( y, z, c1, c2) (call1 = 0, call2 = 0, errno = 0, fail = 0, ok1((y) && errno == (z) && call1 == (c1) && call2 == (c2))); + plan_tests(50); - chkfail(getrlimit_, altstack(8*MiB, wrap, 0, 0) == -1, e(getrlimit_), + chkfail(getrlimit_, altstack(8*MiB, wrap, int2ptr(0), 0) == -1, e(getrlimit_), 0, 0); - chkfail(setrlimit_, altstack(8*MiB, wrap, 0, 0) == -1, e(setrlimit_), + chkfail(setrlimit_, altstack(8*MiB, wrap, int2ptr(0), 0) == -1, e(setrlimit_), getrlimit_, 0); - chkfail(mmap_, altstack(8*MiB, wrap, 0, 0) == -1, e(mmap_), + chkfail(mmap_, altstack(8*MiB, wrap, int2ptr(0), 0) == -1, e(mmap_), getrlimit_|setrlimit_, setrlimit_); - chkfail(sigaltstack_, altstack(8*MiB, wrap, 0, 0) == -1, e(sigaltstack_), + chkfail(sigaltstack_, altstack(8*MiB, wrap, int2ptr(0), 0) == -1, e(sigaltstack_), getrlimit_|setrlimit_|mmap_, setrlimit_|munmap_); - chkfail(sigaction_, altstack(8*MiB, wrap, 0, 0) == -1, e(sigaction_), + chkfail(sigaction_, altstack(8*MiB, wrap, int2ptr(0), 0) == -1, e(sigaction_), getrlimit_|setrlimit_|mmap_|sigaltstack_, setrlimit_|munmap_|sigaltstack_); - chkfail(munmap_, altstack(8*MiB, wrap, 0, 0) == 1, e(munmap_), + chkfail(munmap_, altstack(8*MiB, wrap, int2ptr(0), 0) == 1, e(munmap_), getrlimit_|setrlimit_|mmap_|sigaltstack_|sigaction_, setrlimit_|sigaltstack_|sigaction_); if (fail = 0, munmap(m_, msz_) == -1) err(1, "munmap"); - chkok( altstack(1*MiB, wrap, (void *) 1000000, 0) == -1, EOVERFLOW, + chkok( altstack(1*MiB, wrap, int2ptr(1000000), 0) == -1, EOVERFLOW, getrlimit_|setrlimit_|mmap_|sigaltstack_|sigaction_, setrlimit_|munmap_|sigaltstack_|sigaction_); // be sure segv catch is repeatable (SA_NODEFER) - chkok( altstack(1*MiB, wrap, (void *) 1000000, 0) == -1, EOVERFLOW, + chkok( altstack(1*MiB, wrap, int2ptr(1000000), 0) == -1, EOVERFLOW, getrlimit_|setrlimit_|mmap_|sigaltstack_|sigaction_, setrlimit_|munmap_|sigaltstack_|sigaction_); used = 1; - chkfail(munmap_, altstack(1*MiB, wrap, (void *) 1000000, 0) == -1, EOVERFLOW, + chkfail(munmap_, altstack(1*MiB, wrap, int2ptr(1000000), 0) == -1, EOVERFLOW, getrlimit_|setrlimit_|mmap_|sigaltstack_|sigaction_, setrlimit_|sigaltstack_|sigaction_); if (fail = 0, munmap(m_, msz_) == -1) @@ -129,7 +150,7 @@ int main(void) ok1(strcmp(buf, estr "\n") == 0); used = 1; - chkok( altstack(8*MiB, wrap, (void *) 1000000, 0) == -1, EOVERFLOW, + chkok( altstack(8*MiB, wrap, int2ptr(1000000), 0) == -1, EOVERFLOW, getrlimit_|setrlimit_|mmap_|sigaltstack_|sigaction_, setrlimit_|munmap_|sigaltstack_|sigaction_); @@ -137,7 +158,7 @@ int main(void) ok1(used >= 8*MiB - pgsz && used <= 8*MiB + pgsz); used = 0; - chkok( altstack(8*MiB, wrap, (void *) 100000, 0) == 0, 0, + chkok( altstack(8*MiB, wrap, int2ptr(100000), 0) == 0, 0, getrlimit_|setrlimit_|mmap_|sigaltstack_|sigaction_|munmap_, setrlimit_|munmap_|sigaltstack_|sigaction_);