diff -cbrN openafs-1.0.2-orig/src/config/Makefile.s390_linux22 openafs-1.0.2/src/config/Makefile.s390_linux22 *** openafs-1.0.2-orig/src/config/Makefile.s390_linux22 Fri Jan 19 03:33:38 2001 --- openafs-1.0.2/src/config/Makefile.s390_linux22 Mon Feb 19 13:58:10 2001 *************** *** 15,24 **** # # compilation and link editor flags DBG=-g ! OPTMZ=-O2 ! PAM_CFLAGS = -O2 -Dlinux -DLINUX_PAM -fPIC # Put -O2 here to _ensure_ all Makefiles pick it up. ! XCFLAGS= -O2 MT_CFLAGS=-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS} XLDFLAGS= SHARE_LDFLAGS = -shared -Xlinker -x --- 15,27 ---- # # compilation and link editor flags DBG=-g ! #OPTMZ=-O2 ! OPTMZ=-O ! #PAM_CFLAGS = -O2 -Dlinux -DLINUX_PAM -fPIC ! PAM_CFLAGS= -O -Dlinux -DLINUX_PAM -fPIC # Put -O2 here to _ensure_ all Makefiles pick it up. ! #XCFLAGS= -O2 ! XCFLAGS= -O -g MT_CFLAGS=-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS} XLDFLAGS= SHARE_LDFLAGS = -shared -Xlinker -x diff -cbrN openafs-1.0.2-orig/src/libafs/MakefileProto.LINUX openafs-1.0.2/src/libafs/MakefileProto.LINUX *** openafs-1.0.2-orig/src/libafs/MakefileProto.LINUX Fri Jan 19 03:53:12 2001 --- openafs-1.0.2/src/libafs/MakefileProto.LINUX Fri Feb 16 20:34:46 2001 *************** *** 43,50 **** DEFINES = -D__KERNEL__ -DCPU=586 -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} CCFLAGS = -O2 -fomit-frame-pointer -fno-strength-reduce \ ! -fno-strict-aliasing -fsigned-char -pipe \ ! -fno-builtin DEFINES = -D__KERNEL__ -D__s390__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} LD = ld -m elf32_sparc --- 43,49 ---- DEFINES = -D__KERNEL__ -DCPU=586 -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} CCFLAGS = -O2 -fomit-frame-pointer -fno-strength-reduce \ ! -fno-strict-aliasing -fsigned-char -pipe DEFINES = -D__KERNEL__ -D__s390__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} LD = ld -m elf32_sparc diff -cbrN openafs-1.0.2-orig/src/lwp/Makefile openafs-1.0.2/src/lwp/Makefile *** openafs-1.0.2-orig/src/lwp/Makefile Sun Nov 5 14:03:34 2000 --- openafs-1.0.2/src/lwp/Makefile Wed Feb 7 18:34:03 2001 *************** *** 66,71 **** --- 66,75 ---- $(CC) -c -I${SRCDIR}include -KPIC -G0 process.s;; \ sgi_61 | sgi_62 | sgi_63 ) \ $(CC) -c ${XCFLAGS} -I${SRCDIR}include -KPIC -G0 process.s;; \ + s390*) \ + /lib/cpp -P -I${SRCDIR}include process.s >process.ss; \ + ${AS} -ahlns process.ss -o process.o >process.lst; \ + rm process.ss ;; \ hp* | *_linux* | sgi_64 | sgi_65) \ ${CC} ${CFLAGS} -c process.c;; \ ncrx86_*) \ diff -cbrN openafs-1.0.2-orig/src/lwp/lwp.c openafs-1.0.2/src/lwp/lwp.c *** openafs-1.0.2-orig/src/lwp/lwp.c Fri Jan 19 03:29:57 2001 --- openafs-1.0.2/src/lwp/lwp.c Wed Feb 7 18:45:38 2001 *************** *** 38,43 **** --- 38,45 ---- #ifdef AFS_OSF_ENV extern void *malloc(int size); extern void *realloc(void *ptr, int size); + #endif + #if defined(AFS_OSF_ENV) || defined(AFS_LINUX_20_ENV) extern int PRE_Block; /* from preempt.c */ #else extern char PRE_Block; /* from preempt.c */ *************** *** 55,61 **** #define MINSTACK 44 #ifdef __hp9000s800 ! #define MINFRAME 128 #endif /* Debugging macro */ --- 57,69 ---- #define MINSTACK 44 #ifdef __hp9000s800 ! # define MINFRAME 128 ! # define STACK_ALIGN 8 ! #elif __s390__ ! # define MINFRAME 96 ! # define STACK_ALIGN 8 ! #else ! # define STACK_ALIGN 4 #endif /* Debugging macro */ *************** *** 269,279 **** if (stacksize < MINSTACK) stacksize = 1000; else ! #ifdef __hp9000s800 ! stacksize = 8 * ((stacksize+7) / 8); ! #else ! stacksize = 4 * ((stacksize+3) / 4); ! #endif #ifdef AFS_AIX32_ENV if (!stackptr) { /* --- 277,283 ---- if (stacksize < MINSTACK) stacksize = 1000; else ! stacksize = STACK_ALIGN * ((stacksize+STACK_ALIGN-1) / STACK_ALIGN); #ifdef AFS_AIX32_ENV if (!stackptr) { /* *************** *** 337,356 **** #ifdef __hp9000s800 savecontext(Create_Process_Part2, &temp2->context, stackptr+MINFRAME); #else ! #ifdef AFS_SGI62_ENV /* Need to have the sp on an 8-byte boundary for storing doubles. */ savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-16); /* 16 = 2 * jmp_buf_type*/ ! #else ! #if defined(AFS_SPARC64_LINUX20_ENV) || defined(AFS_SPARC_LINUX20_ENV) savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-0x40); /* lomgjmp does something with %fp + 0x38 */ ! #else savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-sizeof(void *)); ! #endif ! #endif #endif /* End of gross hack */ --- 341,365 ---- #ifdef __hp9000s800 savecontext(Create_Process_Part2, &temp2->context, stackptr+MINFRAME); #else ! # ifdef AFS_SGI62_ENV /* Need to have the sp on an 8-byte boundary for storing doubles. */ savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-16); /* 16 = 2 * jmp_buf_type*/ ! # else ! # if defined(AFS_SPARC64_LINUX20_ENV) || defined(AFS_SPARC_LINUX20_ENV) savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-0x40); /* lomgjmp does something with %fp + 0x38 */ ! # else ! # if defined(AFS_S390_LINUX20_ENV) ! savecontext(Create_Process_Part2, &temp2->context, ! stackptr+stacksize-MINFRAME); ! # else savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-sizeof(void *)); ! # endif ! # endif ! # endif #endif /* End of gross hack */ *************** *** 397,407 **** if (stacksize < MINSTACK) stacksize = 1000; else ! #ifdef __hp9000s800 ! stacksize = 8 * ((stacksize+7) / 8); ! #else ! stacksize = 4 * ((stacksize+3) / 4); ! #endif if ((stackptr = (char *) malloc(stacksize)) == NULL) { Set_LWP_RC(); return LWP_ENOMEM; --- 406,412 ---- if (stacksize < MINSTACK) stacksize = 1000; else ! stacksize = STACK_ALIGN * ((stacksize+STACK_ALIGN-1) / STACK_ALIGN); if ((stackptr = (char *) malloc(stacksize)) == NULL) { Set_LWP_RC(); return LWP_ENOMEM; *************** *** 422,428 **** --- 427,437 ---- #ifdef __hp9000s800 savecontext(Create_Process_Part2, &temp2->context, stackptr+MINFRAME); #else + #if defined(AFS_S390_LINUX20_ENV) + savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-MINFRAME); + # else savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-sizeof(void *)); + # endif #endif /* End of gross hack */ *************** *** 465,482 **** savecontext(Dispatcher, &(temp -> context), &(LWPANCHOR.dsptchstack[MINFRAME])); #else ! #ifdef AFS_SGI62_ENV savecontext(Dispatcher, &(temp -> context), &(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-8])); ! #else ! #if defined(AFS_SPARC64_LINUX20_ENV) || defined(AFS_SPARC_LINUX20_ENV) savecontext(Dispatcher, &(temp -> context), &(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-0x40])); ! #else savecontext(Dispatcher, &(temp -> context), &(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-sizeof(void *)])); ! #endif ! #endif #endif } return LWP_SUCCESS; --- 474,496 ---- savecontext(Dispatcher, &(temp -> context), &(LWPANCHOR.dsptchstack[MINFRAME])); #else ! # ifdef AFS_SGI62_ENV savecontext(Dispatcher, &(temp -> context), &(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-8])); ! # else ! # if defined(AFS_SPARC64_LINUX20_ENV) || defined(AFS_SPARC_LINUX20_ENV) savecontext(Dispatcher, &(temp -> context), &(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-0x40])); ! # else ! # if defined(AFS_S390_LINUX20_ENV) ! savecontext(Dispatcher, &(temp -> context), ! &(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-MINFRAME])); ! # else savecontext(Dispatcher, &(temp -> context), &(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-sizeof(void *)])); ! # endif ! # endif ! # endif #endif } return LWP_SUCCESS; diff -cbrN openafs-1.0.2-orig/src/lwp/preempt.c openafs-1.0.2/src/lwp/preempt.c *** openafs-1.0.2-orig/src/lwp/preempt.c Fri Jan 19 03:29:58 2001 --- openafs-1.0.2/src/lwp/preempt.c Wed Feb 7 18:34:03 2001 *************** *** 26,32 **** #include "lwp.h" #include "preempt.h" ! #ifdef AFS_OSF_ENV int PRE_Block = 0; /* used in lwp.c and process.s */ #else char PRE_Block = 0; /* used in lwp.c and process.s */ --- 26,32 ---- #include "lwp.h" #include "preempt.h" ! #if defined(AFS_OSF_ENV) || defined(AFS_S390_LINUX20_ENV) int PRE_Block = 0; /* used in lwp.c and process.s */ #else char PRE_Block = 0; /* used in lwp.c and process.s */ diff -cbrN openafs-1.0.2-orig/src/lwp/process.c openafs-1.0.2/src/lwp/process.c *** openafs-1.0.2-orig/src/lwp/process.c Fri Jan 19 03:29:58 2001 --- openafs-1.0.2/src/lwp/process.c Wed Feb 7 18:34:04 2001 *************** *** 13,19 **** #include #include "lwp.h" ! #ifdef AFS_OSF_ENV extern int PRE_Block; /* used in lwp.c and process.s */ #else extern char PRE_Block; /* used in lwp.c and process.s */ --- 13,19 ---- #include #include "lwp.h" ! #if defined(AFS_OSF_ENV) || defined(AFS_S390_LINUX20_ENV) extern int PRE_Block; /* used in lwp.c and process.s */ #else extern char PRE_Block; /* used in lwp.c and process.s */ *************** *** 35,40 **** --- 35,44 ---- #define LWP_SP 0 #elif defined(AFS_I386_LINUX20_ENV) #define LWP_SP 4 + #elif defined(AFS_S390_LINUX20_ENV) + #define LWP_SP 9 + #define LWP_FP 5 + #define DEBUG 1 #elif defined(AFS_SPARC_LINUX20_ENV) #define LWP_SP 0 #define LWP_FP 1 *************** *** 85,97 **** #if defined(DEBUG) { int i, *ptr = (int*)savearea->setjmp_buffer; ! printf("savecontext\n"); for ( i=0; i < 5; i++) ! printf("(%d) 0x%x ",i, ptr[i]); ! printf("\n"); for ( i=5; i < 10; i++) ! printf("(%d) 0x%x ",i, ptr[i]); ! printf("\n"); } #endif switch ( code ) --- 89,101 ---- #if defined(DEBUG) { int i, *ptr = (int*)savearea->setjmp_buffer; ! fprintf(stderr,"savecontext\n"); for ( i=0; i < 5; i++) ! fprintf(stderr,"(%d) 0x%x ",i, ptr[i]); ! fprintf(stderr,"\n"); for ( i=5; i < 10; i++) ! fprintf(stderr,"(%d) 0x%x ",i, ptr[i]); ! fprintf(stderr,"\n"); } #endif switch ( code ) *************** *** 105,111 **** { case 0: jmpBuffer = (jmp_buf_type *)jmp_tmp; jmpBuffer[LWP_SP] = (jmp_buf_type)sp; ! #if defined(AFS_SPARC_LINUX20_ENV) || (defined(AFS_SPARC64_LINUX20_ENV) && defined(AFS_32BIT_USR_ENV)) jmpBuffer[LWP_FP] = (jmp_buf_type)sp; #endif longjmp(jmp_tmp,1); --- 109,115 ---- { case 0: jmpBuffer = (jmp_buf_type *)jmp_tmp; jmpBuffer[LWP_SP] = (jmp_buf_type)sp; ! #if defined(AFS_S390_LINUX20_ENV) || defined(AFS_SPARC_LINUX20_ENV) || (defined(AFS_SPARC64_LINUX20_ENV) && defined(AFS_32BIT_USR_ENV)) jmpBuffer[LWP_FP] = (jmp_buf_type)sp; #endif longjmp(jmp_tmp,1); *************** *** 134,146 **** #if defined(DEBUG) int i, *ptr = savearea->setjmp_buffer; ! printf("Returning to \n"); for ( i=0; i < 5; i++) ! printf("(%d) 0x%x ",i, ptr[i]); ! printf("\n"); for ( i=5; i < 10; i++) ! printf("(%d) 0x%x ",i, ptr[i]); ! printf("\n"); #endif PRE_Block = 0; longjmp(savearea->setjmp_buffer, 2); --- 138,150 ---- #if defined(DEBUG) int i, *ptr = savearea->setjmp_buffer; ! fprintf(stderr,"Returning to \n"); for ( i=0; i < 5; i++) ! fprintf(stderr,"(%d) 0x%x ",i, ptr[i]); ! fprintf(stderr,"\n"); for ( i=5; i < 10; i++) ! fprintf(stderr,"(%d) 0x%x ",i, ptr[i]); ! fprintf(stderr,"\n"); #endif PRE_Block = 0; longjmp(savearea->setjmp_buffer, 2); diff -cbrN openafs-1.0.2-orig/src/lwp/process.s openafs-1.0.2/src/lwp/process.s *** openafs-1.0.2-orig/src/lwp/process.s Sat Nov 4 04:05:12 2000 --- openafs-1.0.2/src/lwp/process.s Wed Feb 7 19:04:19 2001 *************** *** 165,170 **** --- 165,261 ---- .extern PRE_Block[ua] #endif /* RIOS */ + #if defined(AFS_S390_LINUX20_ENV) + /* 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 %r6,%r15,24(%r15) /* Save our registers */ + lr %r1,%r15 + ahi %r15,-96 /* Move out of harm's way */ + st %r1,0(%r15) + 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 */ + lr %r6,%r3 /* Get base of savearea */ + 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....*/ + + bras %r5,.L2 + .long abort + .L2: + l %r5,0(%r5) + balr %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*/ + bras %r5,.L3 /* Get A(A(PRE_Block)) + */ + .long PRE_Block + .L3: + l %r5,0(%r5) /* Get A(PRE_Block) */ + xc 0(4,%r5),0(%r5) /* Clear it */ + l %r15,0(%r15) + lm %r6,%r15,24(%r15) /* Restore registers */ + br %r14 /* Return */ + + /* Can't happen */ + + la %r2,1234 + bras %r5,.L4 + .long abort + .L4: + l %r5,0(%r5) + basr %r14,%r5 + + .returnto_end: + .size returnto,.returnto_end-returnto + #endif /* AFS_S390_LINUX20_ENV */ #ifdef mc68000 /*