Skip to content

Commit e9fa745

Browse files
committed
!signal: move signal handling to kernel
JIRA: RTOS-736 * remove default handlers, signal_common and _signals_init from libphoenix * switch from signalHandle syscall to signalAction * add handler address argument to signal_trampoline * remove phx-posix signal numbers translation
1 parent 911306b commit e9fa745

File tree

7 files changed

+35
-391
lines changed

7 files changed

+35
-391
lines changed

arch/arm/signal.S

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,11 @@
2020
.globl _signal_trampoline
2121
.type _signal_trampoline, %function
2222
_signal_trampoline:
23-
/* Signal number, oldmask - keep stack aligned to 8 */
24-
pop {r0,r4}
25-
blx _signal_handler
23+
/* Signal number, handler */
24+
pop {r0, r1}
25+
blx r1
2626

27-
mov r0, r4 /* move oldmask to r0 */
28-
pop {r1,r2,r3,r4} /* cpu_context_t *, pc, psp, psr */
29-
30-
/* put psr back on stack, keep aligned to 8 (r5 as padding value) */
31-
push {r4,r5}
27+
pop {r0,r1,r2,r3} /* oldmask, cpu_context_t *, pc, psp */
28+
/* psr on stack */
3229
bl sigreturn
3330
.size _signal_trampoline, .-_signal_trampoline

include/signal.h

Lines changed: 1 addition & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
#define _LIBPHOENIX_SIGNAL_H_
1818

1919

20-
#include <sys/types.h>
21-
#include <time.h>
20+
#include <phoenix/signal.h>
2221

2322

2423
#ifdef __cplusplus
@@ -28,87 +27,6 @@ extern "C" {
2827

2928
typedef void (*sighandler_t)(int);
3029

31-
#define SIGHUP 1
32-
#define SIGINT 2
33-
#define SIGQUIT 3
34-
#define SIGILL 4
35-
#define SIGTRAP 5
36-
#define SIGABRT 6
37-
#define SIGIOT SIGABRT
38-
#define SIGEMT 7
39-
#define SIGFPE 8
40-
#define SIGKILL 9
41-
#define SIGBUS 10
42-
#define SIGSEGV 11
43-
#define SIGSYS 12
44-
#define SIGPIPE 13
45-
#define SIGALRM 14
46-
#define SIGTERM 15
47-
#define SIGURG 16
48-
#define SIGSTOP 17
49-
#define SIGTSTP 18
50-
#define SIGCONT 19
51-
#define SIGCHLD 20
52-
#define SIGTTIN 21
53-
#define SIGTTOU 22
54-
#define SIGIO 23
55-
#define SIGXCPU 24
56-
#define SIGXFSZ 25
57-
#define SIGVTALRM 26
58-
#define SIGPROF 27
59-
#define SIGWINCH 28
60-
#define SIGINFO 29
61-
#define SIGUSR1 30
62-
#define SIGUSR2 31
63-
64-
#define NSIG 32
65-
66-
#define SIG_ERR ((sighandler_t)-1)
67-
#define SIG_DFL ((sighandler_t)-2)
68-
#define SIG_IGN ((sighandler_t)-3)
69-
70-
71-
enum { SIG_BLOCK, SIG_SETMASK, SIG_UNBLOCK };
72-
73-
74-
#define SA_NOCLDSTOP 1 << 0
75-
#define SA_NOCLDWAIT 1 << 1
76-
#define SA_NODEFER 1 << 2
77-
#define SA_ONSTACK 1 << 3
78-
#define SA_RESETHAND 1 << 4
79-
#define SA_RESTART 1 << 5
80-
#define SA_RESTORER 1 << 6
81-
#define SA_SIGINFO 1 << 7
82-
83-
84-
typedef int sigset_t;
85-
typedef int sig_atomic_t;
86-
87-
88-
union sigval {
89-
int sival_int;
90-
void *sival_ptr;
91-
};
92-
93-
94-
typedef struct {
95-
int si_signo;
96-
int si_code;
97-
pid_t si_pid;
98-
uid_t si_uid;
99-
void *si_addr;
100-
int si_status;
101-
union sigval si_value;
102-
} siginfo_t;
103-
104-
105-
struct sigaction {
106-
void (*sa_handler) (int);
107-
sigset_t sa_mask;
108-
int sa_flags;
109-
void (*sa_sigaction) (int, siginfo_t *, void *);
110-
};
111-
11230

11331
extern void (*bsd_signal(int, void (*)(int)))(int);
11432

@@ -173,9 +91,6 @@ extern int sigsuspend(const sigset_t *);
17391
extern int sigwait(const sigset_t *, int *);
17492

17593

176-
extern int signalPostPosix(int pid, int tid, int signal);
177-
178-
17994
#ifdef __cplusplus
18095
}
18196
#endif

include/sys/threads.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ extern int condBroadcast(handle_t h);
155155
extern int resourceDestroy(handle_t h);
156156

157157

158-
extern int signalHandle(void (*handler)(void), unsigned mask, unsigned mmask);
158+
extern int signalAction(int signal, const struct sigaction *act, struct sigaction *oact, void (*trampoline)(void));
159159

160160

161161
extern int signalPost(int pid, int tid, int signal);

include/sys/wait.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,10 @@ enum {
3030
};
3131

3232

33-
extern const int _signals_phx2posix[];
34-
35-
36-
#define WTERMSIG(stat_val) (_signals_phx2posix[(stat_val >> 8) & 0x7f])
37-
#define WEXITSTATUS(stat_val) ((stat_val) & 0xff)
38-
#define WIFEXITED(stat_val) (WTERMSIG(stat_val) == 0)
39-
#define WIFSIGNALED(stat_val) (WTERMSIG(stat_val) != 0)
33+
#define WTERMSIG(stat_val) ((stat_val >> 8) & 0x7f)
34+
#define WEXITSTATUS(stat_val) ((stat_val) & 0xff)
35+
#define WIFEXITED(stat_val) (WTERMSIG(stat_val) == 0)
36+
#define WIFSIGNALED(stat_val) (WTERMSIG(stat_val) != 0)
4037
#define WIFSTOPPED(stat_val) 0
4138
#define WSTOPSIG(stat_val) 0
4239
#define WIFCONTINUED(stat_val) 0

misc/init.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
extern void _malloc_init(void);
1818
extern int _env_init(void);
19-
extern void _signals_init(void);
2019
extern void _file_init(void);
2120
extern void _errno_init(void);
2221
extern void _atexit_init(void);
@@ -30,7 +29,6 @@ void _libc_init(void)
3029
_errno_init();
3130
_malloc_init();
3231
_env_init();
33-
_signals_init();
3432
_file_init();
3533
_pthread_init();
3634
}

pthread/pthread.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ int pthread_cancel(pthread_t thread)
455455
mutexUnlock(pthread_common.pthread_list_lock);
456456
pthread_key_cleanup(ctx);
457457
pthread_ctx_put(ctx);
458-
err = signalPost(getpid(), id, signal_cancel);
458+
err = signalPost(getpid(), id, PH_SIGCANCEL);
459459
}
460460
else {
461461
_pthread_ctx_put(ctx);
@@ -1070,7 +1070,7 @@ int pthread_sigmask(int how, const sigset_t *__restrict__ set, sigset_t *__restr
10701070
int pthread_kill(pthread_t thread, int sig)
10711071
{
10721072
pthread_ctx *ctx = (pthread_ctx *)thread;
1073-
int ret = -signalPostPosix(getpid(), ctx->id, sig);
1073+
int ret = -signalPost(getpid(), ctx->id, sig);
10741074
return ret;
10751075
}
10761076

0 commit comments

Comments
 (0)