The api-3 testcase devotes most of its available stack space to a test
buffer, leaving only a small amount (COROUTINE_MIN_STKSZ) for the actual
stack usage of the coroutine.
It turns out that the ccan/tap diag() function can - depending on compiler
version and flags, and on whether diagnostics are enabled - exceed that
limited stack space. That leads to a stack overrun, and in turn corruption
of the parent routine's stack, generating unpredictable and hard to debug
SEGVs.
At present, this bug seems to be tripped by clang-3.8 when diagnostic
messages are printed.
This removes the troublesome diag() call.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
buf[i] = random() & 0xff;
}
buf[i] = random() & 0xff;
}
- diag("Wrote random to buffer\n");
-
s->total = 0;
for (i = 0; i < sizeof(buf); i++) {
s->total += buf[i];
s->total = 0;
for (i = 0; i < sizeof(buf); i++) {
s->total += buf[i];