is stdlib/tst-setcontext7 a bad test?

Florian Weimer fw@deneb.enyo.de
Fri Mar 27 10:10:49 GMT 2020


* Szabolcs Nagy:

> i'm planing to change swapcontext on aarch64 and i see
>
> FAIL: stdlib/tst-setcontext7
>
> that test case seems wrong to me, a simplified version is
>
> #include <ucontext.h>
> #include <stdio.h>
>
> ucontext_t uc[2];
> volatile int count = 0;
>
> int main ()
> {
> 	getcontext (uc+0);
> 	printf ("%d\n", count);
> 	if (count)
> 		setcontext (uc+1);
> 	count++;
> 	swapcontext (uc+1, uc+0);
> 	printf ("done\n");
> 	return 0;
> }
>
> this seems to work today and prints
>
> 0
> 1
> done
>
> but i don't think we can guarantee that after a
> swapcontext to a getcontext on the same stack frame
> resuming the context works: if swapcontext uses the
> stack (which is what i plan to do) then that stack
> will be corrupted.
>
> does glibc plan to support this usage?

I think it's expected to work.  This seems to be one of the more
harmless cases.

> i.e. should i ensure swapcontext does not use the stack? (and should
> gcc ensure no stack is used in the example between getcontext and
> swapcontext?)

Does the test case pass if you add the returns_twice attribute (or
__INDIRECT_RETURN) to getcontext as well (swapcontext already has it)?


More information about the Libc-alpha mailing list