xref: /kvm-unit-tests/x86/setjmp.c (revision 6f6a3713888144c9ac51e0438aa54bb1c5f3af45)
18bf2b755SAndrew Jones #include "libcflat.h"
29dde4243SPaolo Bonzini #include "setjmp.h"
39dde4243SPaolo Bonzini 
4*6f6a3713SBill Wendling static const int expected[] = {
5*6f6a3713SBill Wendling 	0, 1, 2, 3, 4, 5, 6, 7, 8, 9
6*6f6a3713SBill Wendling };
7*6f6a3713SBill Wendling 
8*6f6a3713SBill Wendling #define NUM_LONGJMPS ARRAY_SIZE(expected)
9*6f6a3713SBill Wendling 
107db17e21SThomas Huth int main(void)
119dde4243SPaolo Bonzini {
12*6f6a3713SBill Wendling     volatile int index = 0;
139dde4243SPaolo Bonzini     jmp_buf j;
14*6f6a3713SBill Wendling     int i;
159dde4243SPaolo Bonzini 
16*6f6a3713SBill Wendling     i = setjmp(j);
17*6f6a3713SBill Wendling     if (expected[index] != i) {
18*6f6a3713SBill Wendling 	    printf("FAIL: actual %d / expected %d\n", i, expected[index]);
19*6f6a3713SBill Wendling 	    return -1;
209dde4243SPaolo Bonzini     }
21*6f6a3713SBill Wendling     index++;
22*6f6a3713SBill Wendling     if (i + 1 < NUM_LONGJMPS)
23*6f6a3713SBill Wendling 	    longjmp(j, i + 1);
249dde4243SPaolo Bonzini 
259dde4243SPaolo Bonzini     return 0;
269dde4243SPaolo Bonzini }
27