Add tests for sigsetjmp/siglongjmp
This commit is contained in:
		
							parent
							
								
									a316221fbf
								
							
						
					
					
						commit
						483160f3d4
					
				| @ -56,6 +56,8 @@ _PROTOTYPE(void test37l, (void)); | |||||||
| _PROTOTYPE(void func_m1, (void)); | _PROTOTYPE(void func_m1, (void)); | ||||||
| _PROTOTYPE(void func_m2, (void)); | _PROTOTYPE(void func_m2, (void)); | ||||||
| _PROTOTYPE(void test37m, (void)); | _PROTOTYPE(void test37m, (void)); | ||||||
|  | _PROTOTYPE(void test37p, (void)); | ||||||
|  | _PROTOTYPE(void test37q, (void)); | ||||||
| _PROTOTYPE(void longjerr, (void)); | _PROTOTYPE(void longjerr, (void)); | ||||||
| _PROTOTYPE(void catch14, (int signo, int code, struct sigcontext * scp)); | _PROTOTYPE(void catch14, (int signo, int code, struct sigcontext * scp)); | ||||||
| _PROTOTYPE(void test37n, (void)); | _PROTOTYPE(void test37n, (void)); | ||||||
| @ -70,7 +72,7 @@ int main(argc, argv) | |||||||
| int argc; | int argc; | ||||||
| char *argv[]; | char *argv[]; | ||||||
| { | { | ||||||
|   int i, m = 0xFFFF; |   int i, m = 0377777; | ||||||
| 
 | 
 | ||||||
|   sync(); |   sync(); | ||||||
| 
 | 
 | ||||||
| @ -99,6 +101,8 @@ char *argv[]; | |||||||
| 	if (m & 0010000) test37m(); | 	if (m & 0010000) test37m(); | ||||||
| 	if (m & 0020000) test37n(); | 	if (m & 0020000) test37n(); | ||||||
| 	if (m & 0040000) test37o(); | 	if (m & 0040000) test37o(); | ||||||
|  | 	if (m & 0100000) test37p(); | ||||||
|  | 	if (m & 0200000) test37q(); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   quit(); |   quit(); | ||||||
| @ -871,26 +875,32 @@ void test37l() | |||||||
| * signal mask is properly restored. | * signal mask is properly restored. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| void test37m() | #define TEST_SETJMP(_name, _subtest, _type, _setjmp, _longjmp, _save)	\ | ||||||
| { | void _name(void)							\ | ||||||
|   jmp_buf jb; | {									\ | ||||||
|   sigset_t ss; |   _type jb;								\ | ||||||
| 
 |   sigset_t ss, ssexp;							\ | ||||||
|   subtest = 13; | 									\ | ||||||
|   clearsigstate(); |   subtest = _subtest;							\ | ||||||
| 
 |   clearsigstate();							\ | ||||||
|   ss = 0x32; | 									\ | ||||||
|   if (sigprocmask(SIG_SETMASK, &ss, (sigset_t *)NULL) == -1) e(1); |   ss = 0x32;								\ | ||||||
|   if (setjmp(jb)) { |   if (sigprocmask(SIG_SETMASK, &ss, (sigset_t *)NULL) == -1) e(1);	\ | ||||||
| 	if (sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &ss) == -1) e(2); |   if (_setjmp) {							\ | ||||||
| 	if (ss != 0x32) e(388); | 	if (sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &ss) == -1) e(2);	\ | ||||||
| 	return; | 	ssexp = _save ? 0x32 : 0x3abc;					\ | ||||||
|   } | 	if ((ss ^ ssexp) & ~(1 << SIGKILL)) e(388);			\ | ||||||
|   ss = 0x3abc; | 	return;								\ | ||||||
|   if (sigprocmask(SIG_SETMASK, &ss, (sigset_t *)NULL) == -1) e(4); |   }									\ | ||||||
|   longjmp(jb, 1); |   ss = 0x3abc;								\ | ||||||
|  |   if (sigprocmask(SIG_SETMASK, &ss, (sigset_t *)NULL) == -1) e(4);	\ | ||||||
|  |   _longjmp;								\ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | TEST_SETJMP(test37m, 13, jmp_buf,    setjmp(jb),       longjmp(jb, 1),    1) | ||||||
|  | TEST_SETJMP(test37p, 16, sigjmp_buf, sigsetjmp(jb, 0), siglongjmp(jb, 1), 0) | ||||||
|  | TEST_SETJMP(test37q, 17, sigjmp_buf, sigsetjmp(jb, 1), siglongjmp(jb, 1), 1) | ||||||
|  | 
 | ||||||
| void longjerr() | void longjerr() | ||||||
| { | { | ||||||
|   e(5); |   e(5); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Erik van der Kouwe
						Erik van der Kouwe