summaryrefslogtreecommitdiff
path: root/www/mozilla/patches/patch-ad
blob: 14d820e8008a43cbc6c0626d8034c7217f30349e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
$NetBSD: patch-ad,v 1.13 2000/10/27 04:38:27 mycroft Exp $

--- nsprpub/pr/include/md/_netbsd.h.orig	Thu Jul  6 20:46:02 2000
+++ nsprpub/pr/include/md/_netbsd.h	Thu Oct 26 07:32:35 2000
@@ -70,39 +70,87 @@
 
 #define CONTEXT(_th) ((_th)->md.context)
 
-#if defined(__i386__) || defined(__sparc__) || defined(__m68k__) || defined(__powerpc__)
-#define JB_SP_INDEX 2
-#elif defined(__mips__)
-#define JB_SP_INDEX 4
-#elif defined(__alpha__)
-#define JB_SP_INDEX 34
-#elif defined(__arm32__)
 /*
- * On the arm32, the jmpbuf regs underwent a name change after NetBSD 1.3.
- */
-#ifdef JMPBUF_REG_R13
-#define JB_SP_INDEX JMPBUF_REG_R13
-#else
-#define JB_SP_INDEX _JB_REG_R13
+** Initialize a thread context to run "_main()" when started
+*/
+#ifdef __i386__
+#define _MD_INIT_CONTEXT(_thread, _sp, _main, status)			\
+{									\
+    sigsetjmp(CONTEXT(_thread), 1);					\
+    CONTEXT(_thread)[2] = (unsigned char*) ((_sp) - 128);		\
+    CONTEXT(_thread)[0] = (int) _main;					\
+    *status = PR_TRUE;							\
+}
+#define	_MD_GET_SP(_thread)	CONTEXT(_thread)[2]
+#endif
+#ifdef __sparc__
+#define _MD_INIT_CONTEXT(_thread, _sp, _main, status)			\
+{									\
+    sigsetjmp(CONTEXT(_thread), 1);					\
+    CONTEXT(_thread)[2] = (unsigned char*) ((_sp) - 128);		\
+    CONTEXT(_thread)[3] = (int) _main;					\
+    CONTEXT(_thread)[4] = (int) _main + 4;				\
+    *status = PR_TRUE;							\
+}
+#define	_MD_GET_SP(_thread)	CONTEXT(_thread)[2]
+#endif
+#ifdef __powerpc__
+#define _MD_INIT_CONTEXT(_thread, _sp, _main, status)			\
+{									\
+    sigsetjmp(CONTEXT(_thread), 1);					\
+    CONTEXT(_thread)[3] = (unsigned char*) ((_sp) - 128);		\
+    CONTEXT(_thread)[4] = (int) _main;					\
+    *status = PR_TRUE;							\
+}
+#define	_MD_GET_SP(_thread)	CONTEXT(_thread)[3]
+#endif
+#ifdef __m68k__	/* XXX UNTESTED */
+#define _MD_INIT_CONTEXT(_thread, _sp, _main, status)			\
+{									\
+    sigsetjmp(CONTEXT(_thread), 1);					\
+    CONTEXT(_thread)[2] = (unsigned char*) ((_sp) - 128);		\
+    CONTEXT(_thread)[5] = (int) _main;					\
+    *status = PR_TRUE;							\
+}
+#define	_MD_GET_SP(_thread)	CONTEXT(_thread)[2]
+#endif
+#ifdef __mips__	/* XXX UNTESTED */
+#define _MD_INIT_CONTEXT(_thread, _sp, _main, status)			\
+{									\
+    sigsetjmp(CONTEXT(_thread), 1);					\
+    CONTEXT(_thread)[32] = (unsigned char*) ((_sp) - 128);		\
+    CONTEXT(_thread)[2] = (int) _main;					\
+    *status = PR_TRUE;							\
+}
+#define	_MD_GET_SP(_thread)	CONTEXT(_thread)[32]
+#endif
+#ifdef __arm32__	/* XXX UNTESTED */
+#define _MD_INIT_CONTEXT(_thread, _sp, _main, status)			\
+{									\
+    sigsetjmp(CONTEXT(_thread), 1);					\
+    CONTEXT(_thread)[23] = (unsigned char*) ((_sp) - 128);		\
+    CONTEXT(_thread)[24] = (int) _main;					\
+    *status = PR_TRUE;							\
+}
+#define	_MD_GET_SP(_thread)	CONTEXT(_thread)[23]
+#endif
+#ifdef __alpha__
+#define _MD_INIT_CONTEXT(_thread, _sp, _main, status)			\
+{									\
+    sigsetjmp(CONTEXT(_thread), 1);					\
+    CONTEXT(_thread)[34] = (unsigned char*) ((_sp) - 128);		\
+    CONTEXT(_thread)[2] = (long) _main;					\
+    CONTEXT(_thread)[30] = (long) _main;				\
+    CONTEXT(_thread)[31] = (long) _main;				\
+    *status = PR_TRUE;							\
+}
+#define	_MD_GET_SP(_thread)	CONTEXT(_thread)[34]
 #endif
-#else
-#error "Need to define SP index in jmp_buf here"
+#ifndef _MD_INIT_CONTEXT
+#error "Need to define _MD_INIT_CONTEXT for this platform"
 #endif
-#define _MD_GET_SP(_th)    (_th)->md.context[JB_SP_INDEX]
 
 #define PR_NUM_GCREGS	_JBLEN
-
-/*
-** Initialize a thread context to run "_main()" when started
-*/
-#define _MD_INIT_CONTEXT(_thread, _sp, _main, status)  \
-{  \
-    *status = PR_TRUE;  \
-    if (sigsetjmp(CONTEXT(_thread), 1)) {  \
-        _main();  \
-    }  \
-    _MD_GET_SP(_thread) = (unsigned char*) ((_sp) - 64); \
-}
 
 #define _MD_SWITCH_CONTEXT(_thread)  \
     if (!sigsetjmp(CONTEXT(_thread), 1)) {  \