|  | @@ -10,8 +10,13 @@
 | 
	
		
			
				|  |  |  #include <sys/syscall.h>
 | 
	
		
			
				|  |  |  #include <bits/kernel_sigaction.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -extern void __default_rt_sa_restorer(void);
 | 
	
		
			
				|  |  | -//libc_hidden_proto(__default_rt_sa_restorer);
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + * Default sigretrun stub if user doesn't specify SA_RESTORER
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +static void __default_rt_sa_restorer(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	INTERNAL_SYSCALL_NCS(__NR_rt_sigreturn, , 0);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #define SA_RESTORER	0x04000000
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -25,11 +30,6 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
 | 
	
		
			
				|  |  |  	/*
 | 
	
		
			
				|  |  |  	 * SA_RESTORER is only relevant for act != NULL case
 | 
	
		
			
				|  |  |  	 * (!act means caller only wants to know @oact)
 | 
	
		
			
				|  |  | -	 *
 | 
	
		
			
				|  |  | -	 * For the normal/default cases (user not providing SA_RESTORER) use
 | 
	
		
			
				|  |  | -	 * a real sigreturn stub to avoid kernel synthesizing one on user stack
 | 
	
		
			
				|  |  | -	 * at runtime, which needs PTE permissions update (hence TLB entry
 | 
	
		
			
				|  |  | -	 * update) and costly cache line flushes for code modification
 | 
	
		
			
				|  |  |  	 */
 | 
	
		
			
				|  |  |  	if (act && !(act->sa_flags & SA_RESTORER)) {
 | 
	
		
			
				|  |  |  		kact.sa_restorer = __default_rt_sa_restorer;
 |