Deleted Added
full compact
signalcontext.c (129202) signalcontext.c (137286)
1/*-
2 * Copyright (c) 2004 Olivier Houchard
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2004 Olivier Houchard
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/lib/libc/arm/gen/signalcontext.c 129202 2004-05-14 12:04:31Z cognet $");
28__FBSDID("$FreeBSD: head/lib/libc/arm/gen/signalcontext.c 137286 2004-11-05 23:53:02Z cognet $");
29
30#include <sys/param.h>
31#include <sys/signal.h>
32#include <sys/ucontext.h>
33
34#include <machine/frame.h>
35#include <machine/sigframe.h>
36

--- 9 unchanged lines hidden (view full) ---

46extern void _ctx_start(void);
47
48int
49__signalcontext(ucontext_t *ucp, int sig, __sighandler_t *func)
50{
51 struct sigframe *sfp;
52 __greg_t *gr = ucp->uc_mcontext.__gregs;
53 unsigned int *sp;
29
30#include <sys/param.h>
31#include <sys/signal.h>
32#include <sys/ucontext.h>
33
34#include <machine/frame.h>
35#include <machine/sigframe.h>
36

--- 9 unchanged lines hidden (view full) ---

46extern void _ctx_start(void);
47
48int
49__signalcontext(ucontext_t *ucp, int sig, __sighandler_t *func)
50{
51 struct sigframe *sfp;
52 __greg_t *gr = ucp->uc_mcontext.__gregs;
53 unsigned int *sp;
54 mcontext_t *mc;
55
54
56 mc = &ucp->uc_mcontext;
57 sp = (unsigned int *)
58 (((uintptr_t)ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size) & ~7);
55 sp = (unsigned int *)gr[_REG_SP];
59
60 sfp = (struct sigframe *)sp - 1;
61
62 bzero(sfp, sizeof(*sfp));
63 bcopy(ucp, &sfp->sf_uc, sizeof(*ucp));
64 sfp->sf_si.si_signo = sig;
65
56
57 sfp = (struct sigframe *)sp - 1;
58
59 bzero(sfp, sizeof(*sfp));
60 bcopy(ucp, &sfp->sf_uc, sizeof(*ucp));
61 sfp->sf_si.si_signo = sig;
62
66 gr[_REG_SP] = (__greg_t)sp;
63 gr[_REG_SP] = (__greg_t)sfp;
67 /* Wipe out frame pointer. */
68 gr[_REG_FP] = 0;
69 /* Arrange for return via the trampoline code. */
64 /* Wipe out frame pointer. */
65 gr[_REG_FP] = 0;
66 /* Arrange for return via the trampoline code. */
70 gr[_REG_LR] = (__greg_t)_ctx_start;
71 gr[_REG_PC] = (__greg_t)func;
72 gr[_REG_R0] = (__greg_t)ucp;
67 gr[_REG_PC] = (__greg_t)_ctx_start;
68 gr[_REG_R4] = (__greg_t)func;
69 gr[_REG_R5] = (__greg_t)ucp;
70 gr[_REG_R0] = (__greg_t)sig;
71 gr[_REG_R1] = (__greg_t)&sfp->sf_si;
72 gr[_REG_R2] = (__greg_t)&sfp->sf_uc;
73
74 ucp->uc_link = &sfp->sf_uc;
75 sigdelset(&ucp->uc_sigmask, sig);
76
77 return (0);
78}
73
74 ucp->uc_link = &sfp->sf_uc;
75 sigdelset(&ucp->uc_sigmask, sig);
76
77 return (0);
78}