diff -cbNr arla-0.35.2-orig/lwp/lwp_asm.c arla-0.35.2/lwp/lwp_asm.c *** arla-0.35.2-orig/lwp/lwp_asm.c Sat Oct 14 11:39:30 2000 --- arla-0.35.2/lwp/lwp_asm.c Thu Feb 8 11:25:08 2001 *************** *** 79,84 **** --- 79,86 ---- #ifdef __hp9000s800 #define STACK_HEADROOM 16 + #elif defined(__s390__) + #define STACK_HEADROOM 24 #else #define STACK_HEADROOM 5 #endif *************** *** 286,292 **** /* Throw away all dead process control blocks */ purge_dead_pcbs(); if (lwp_init) { ! temp = (PROCESS) malloc (sizeof (struct lwp_pcb)); if (temp == NULL) { Set_LWP_RC(); return LWP_ENOMEM; --- 288,294 ---- /* Throw away all dead process control blocks */ purge_dead_pcbs(); if (lwp_init) { ! temp = (PROCESS) malloc(sizeof(struct lwp_pcb)); if (temp == NULL) { Set_LWP_RC(); return LWP_ENOMEM; diff -cbNr arla-0.35.2-orig/lwp/make-process.o.sh.in arla-0.35.2/lwp/make-process.o.sh.in *** arla-0.35.2-orig/lwp/make-process.o.sh.in Mon Nov 27 07:22:44 2000 --- arla-0.35.2/lwp/make-process.o.sh.in Sun Feb 4 14:50:26 2001 *************** *** 54,59 **** --- 54,60 ---- powerpc) PROCESS_S="process.ppc.S" ;; rs6000) PROCESS_S="process.rios.S" ;; vax) PROCESS_S="process.vax.S" ;; + s390*) PROCESS_S="process.s390.S" ;; f301) ;; *) echo "Unknown host_cpu, good luck" ;; esac diff -cbNr arla-0.35.2-orig/lwp/preempt.c arla-0.35.2/lwp/preempt.c *** arla-0.35.2-orig/lwp/preempt.c Sat Feb 19 22:15:37 2000 --- arla-0.35.2/lwp/preempt.c Mon Feb 5 18:39:58 2001 *************** *** 34,39 **** --- 34,40 ---- RCSID("$Id: preempt.c,v 1.7 2000/02/20 04:15:37 assar Exp $"); + char PRE_Block = 0; /* used in lwp.c and process.s */ #ifdef HAVE_GETITIMER diff -cbNr arla-0.35.2-orig/lwp/process.s390.S arla-0.35.2/lwp/process.s390.S *** arla-0.35.2-orig/lwp/process.s390.S Wed Dec 31 18:00:00 1969 --- arla-0.35.2/lwp/process.s390.S Wed Feb 7 16:27:44 2001 *************** *** 0 **** --- 1,103 ---- + /* + * Copyright 2000, International Business Machines Corporation and others. + * All Rights Reserved. + * + * This software has been released under the terms of the IBM Public + * License. For details, see the LICENSE file in the top-level source + * directory or online at http: //www.openafs.org/dl/license10.html + */ + + /* Linux for S/390 (31 bit) + * + * Written by Neale Ferguson + * + * additional munging by Adam Thornton + */ + .file "process.s" + + .globl savecontext + .type savecontext,%function + /* + * savecontext(f, area1, newsp) + * int (*f)() ; struct savearea *area1; char *newsp; + * f - r2 + * area1 - r3 + * newsp - r4 + */ + + /* + * struct savearea { + * char *topstack; + * } + */ + + P_PRE: .long PRE_Block + P_ABORT: .long abort + + savecontext: + stm %r7,%r15,28(%r15) /* Save our registers */ + lr %r1,%r15 + ahi %r15,-96 + st %r1,0(%r15) + + /* larl %r5,P_PRE /* Get A((PRE_Block)) */ + bras %r5,.L0 /* Get A(A(PRE_Block)) */ + .long PRE_Block + .L0: + l %r5,0(%r5) /* Get A(PRE_Block) */ + mvi 0(%r5),1 /* Set it */ + st %r15,0(%r3) /* Save stack pointer */ + ltr %r4,%r4 /* If new sp is 0 */ + jz .L1 /* ... don't change sp */ + lr %r15,%r4 /* Set new stack pointer */ + .L1: + br %r2 /* Call the routine */ + + /* Can't get here....*/ + + /* larl %r5,P_ABORT */ + bras %r5,.L2 + .long abort + .L2: + l %r5,0(%r5) + basr %r14,%r5 + + .savecontext_end: + .size savecontext,.savecontext_end-savecontext + + /* + * returnto(area2) + * struct savearea *area2; + * + * area2 - r2 + */ + + .globl returnto + .type returnto,%function + + returnto: + l %r15,0(%r2) /* New frame, to get correct pointer + */ + /* larl %r5,P_PRE /* Get A((PRE_Block)) */ + bras %r5,.L3 /* Get A(A(PRE_Block)) */ + .long PRE_Block + .L3: + l %r5,0(%r5) /* Get A(PRE_Block) */ + mvi 0(%r5),0 /* Clear it */ + l %r15,0(%r15) /* Point to next stack frame */ + lm %r7,%r15,28(%r15) /* Restore registers */ + br %r14 /* Return */ + + /* Can't happen */ + + la %r2,1234 + /* larl %r9,P_ABORT */ + bras %r9,.L4 + .long abort + .L4: + l %r9,0(%r9) + basr %r14,%r9 + + .returnto_end: + .size returnto,.returnto_end-returnto + \ No newline at end of file