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
18static void sigusr1_handler(int signo, siginfo_t *info, void *ptr)
19{
20 ucontext_t *uc = ptr;
21
22 UCONTEXT_NIA(uc) |= 3;
23}
24
25static 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
40int main(void)
41{
42 return test_harness(test_sigreturn_unaligned, "sigreturn_unaligned");
43}
44

source code of linux/tools/testing/selftests/powerpc/signal/sigreturn_unaligned.c