X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Faltstack%2Ftest%2Frun.c;fp=ccan%2Faltstack%2Ftest%2Frun.c;h=de94887284703977946feca870e07ce4bd9aee42;hb=141e582ead507103a5f8860a3ec8c0f237d2690a;hp=adc1020eb0a12cf4019c9593cb7aa9ff0a9392c7;hpb=9a8344b2cd849a5506ca5e93bfc30665fb35acab;p=ccan diff --git a/ccan/altstack/test/run.c b/ccan/altstack/test/run.c index adc1020e..de948872 100644 --- a/ccan/altstack/test/run.c +++ b/ccan/altstack/test/run.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -20,13 +21,13 @@ enum { }; int fail, call1, call2; char *m_; -rlim_t max_; +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 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), max_=(b)))) +#define munmap(a, b) (fail&munmap_ ? (seterr(munmap_), -1) : (setcall(munmap_), munmap(m_=(a), msz_=(b)))) #define setrlimit(...) (fail&setrlimit_ ? (seterr(setrlimit_), -1) : (setcall(setrlimit_), setrlimit(__VA_ARGS__))) #define sigaltstack(...) (fail&sigaltstack_ ? (seterr(sigaltstack_), -1) : (setcall(sigaltstack_), sigaltstack(__VA_ARGS__))) #define sigaction(...) (fail&sigaction_ ? (seterr(sigaction_), -1) : (setcall(sigaction_), sigaction(__VA_ARGS__))) @@ -58,7 +59,9 @@ static void *wrap(void *i) int main(void) { - plan_tests(16); + 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))); @@ -86,7 +89,7 @@ int main(void) chkfail(munmap_, altstack(8*MiB, wrap, 0, 0) == 1, e(munmap_), getrlimit_|setrlimit_|mmap_|sigaltstack_|sigaction_, setrlimit_|sigaltstack_|sigaction_); - if (fail = 0, munmap(m_, max_) == -1) + if (fail = 0, munmap(m_, msz_) == -1) err(1, "munmap"); chkok( altstack(1*MiB, wrap, (void *) 1000000, 0) == -1, EOVERFLOW, @@ -102,10 +105,12 @@ int main(void) chkfail(munmap_, altstack(1*MiB, wrap, (void *) 1000000, 0) == -1, EOVERFLOW, getrlimit_|setrlimit_|mmap_|sigaltstack_|sigaction_, setrlimit_|sigaltstack_|sigaction_); - if (fail = 0, munmap(m_, max_) == -1) + if (fail = 0, munmap(m_, msz_) == -1) err(1, "munmap"); - ok1(used > 1*MiB-1*KiB && used < 1*MiB); + ok1(altstack_max() == 1*MiB); + diag("used: %lu", used); + ok1(used >= 1*MiB - pgsz && used <= 1*MiB + pgsz); char *p; for(p = altstack_geterr(); *p; p++) @@ -128,7 +133,8 @@ int main(void) getrlimit_|setrlimit_|mmap_|sigaltstack_|sigaction_, setrlimit_|munmap_|sigaltstack_|sigaction_); - ok1(used > 8*MiB-8*KiB && used < 8*MiB); + diag("used: %lu", used); + ok1(used >= 8*MiB - pgsz && used <= 8*MiB + pgsz); used = 0; chkok( altstack(8*MiB, wrap, (void *) 100000, 0) == 0, 0, @@ -138,7 +144,8 @@ int main(void) used = 1; altstack_rsp_save(); dn(0); - ok1(used == 32); + diag("used: %lu", used); + ok1(used == 32 || used == 40); return exit_status(); }