1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Test sigreturn to an unaligned address, ie. low 2 bits set. 4 * Nothing bad should happen. 5 * This was able to trigger warnings with CONFIG_PPC_RFI_SRR_DEBUG=y. 6 */ 7 8 #include <signal.h> 9 #include <stdio.h> 10 #include <stdlib.h> 11 #include <string.h> 12 #include <ucontext.h> 13 #include <unistd.h> 14 15 #include "utils.h" 16 17 18 static void sigusr1_handler(int signo, siginfo_t *info, void *ptr) 19 { 20 ucontext_t *uc = ptr; 21 22 UCONTEXT_NIA(uc) |= 3; 23 } 24 25 static int test_sigreturn_unaligned(void) 26 { 27 struct sigaction action; 28 29 memset(&action, 0, sizeof(action)); 30 action.sa_sigaction = sigusr1_handler; 31 action.sa_flags = SA_SIGINFO; 32 33 FAIL_IF(sigaction(SIGUSR1, &action, NULL) == -1); 34 35 raise(SIGUSR1); 36 37 return 0; 38 } 39 40 int main(void) 41 { 42 return test_harness(test_sigreturn_unaligned, "sigreturn_unaligned"); 43 } 44