Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 176050 | Differences between
and this patch

Collapse All | Expand All

(-)src/lwp/process.c~ (-3 / +28 lines)
Lines 142-147 Link Here
142
static int rc;
142
static int rc;
143
static jmp_buf_type *jmpBuffer;
143
static jmp_buf_type *jmpBuffer;
144
144
145
/** Starting with Glibc 2.4 pointers in jmp_buf are mangled (XOR) for "protection".
146
  * On Sparc ucontext functions are not implemented.
147
  */
148
#define ptr_mangle(x) (x)
149
#ifdef AFS_LINUX20_ENV
150
151
#ifdef __GLIBC__
152
#if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 3)
153
154
#ifdef AFS_SPARC64_LINUX24_ENV
155
#undef ptr_mangle
156
static int ptr_mangle(int p)
157
{   
158
    register char *tls_ptr __asm__("%g7");
159
    return p ^ *(int*)(tls_ptr + 0x18);
160
}
161
#else
162
#error need ptr_mangle support or use UCONTEXT
163
#endif
164
165
#endif
166
#endif
167
#endif
168
169
145
afs_int32
170
afs_int32
146
savecontext(ep, savearea, sp)
171
savecontext(ep, savearea, sp)
147
     char (*ep) ();
172
     char (*ep) ();
Lines 155-161 Link Here
155
180
156
    code = setjmp(savearea->setjmp_buffer);
181
    code = setjmp(savearea->setjmp_buffer);
157
    jmpBuffer = (jmp_buf_type *) savearea->setjmp_buffer;
182
    jmpBuffer = (jmp_buf_type *) savearea->setjmp_buffer;
158
    savearea->topstack = (char *)jmpBuffer[LWP_SP];
183
    savearea->topstack = (char *) ptr_mangle(jmpBuffer[LWP_SP]);
159
184
160
#if	defined(DEBUG)
185
#if	defined(DEBUG)
161
    {
186
    {
Lines 178-186 Link Here
178
	    switch (rc) {
203
	    switch (rc) {
179
	    case 0:
204
	    case 0:
180
		jmpBuffer = (jmp_buf_type *) jmp_tmp;
205
		jmpBuffer = (jmp_buf_type *) jmp_tmp;
181
		jmpBuffer[LWP_SP] = (jmp_buf_type) sp;
206
		jmpBuffer[LWP_SP] = ptr_mangle((jmp_buf_type) sp);
182
#if defined(AFS_S390_LINUX20_ENV) || defined(AFS_SPARC_LINUX20_ENV) || (defined(AFS_SPARC64_LINUX20_ENV) && defined(AFS_32BIT_USR_ENV))
207
#if defined(AFS_S390_LINUX20_ENV) || defined(AFS_SPARC_LINUX20_ENV) || (defined(AFS_SPARC64_LINUX20_ENV) && defined(AFS_32BIT_USR_ENV))
183
		jmpBuffer[LWP_FP] = (jmp_buf_type) sp;
208
		jmpBuffer[LWP_FP] = ptr_mangle((jmp_buf_type) sp);
184
#endif
209
#endif
185
		longjmp(jmp_tmp, 1);
210
		longjmp(jmp_tmp, 1);
186
		break;
211
		break;

Return to bug 176050