cb74f3b
diff -ur mozilla/xpcom/reflect/xptcall/src/md/unix/Makefile.in mozilla-xx/xpcom/reflect/xptcall/src/md/unix/Makefile.in
cb74f3b
--- mozilla/xpcom/reflect/xptcall/src/md/unix/Makefile.in	2004-04-22 22:50:05.000000000 +0200
cb74f3b
+++ mozilla-xx/xpcom/reflect/xptcall/src/md/unix/Makefile.in	2004-12-03 11:19:41.560694658 +0100
cb74f3b
@@ -341,10 +341,12 @@
cb74f3b
 #
cb74f3b
 ifeq ($(OS_ARCH)$(OS_TEST),Linuxs390)
cb74f3b
 CPPSRCS		:= xptcinvoke_linux_s390.cpp xptcstubs_linux_s390.cpp
cb74f3b
+CXXFLAGS	+= -fno-strict-aliasing -fno-inline -fomit-frame-pointer -mbackchain
cb74f3b
 endif
cb74f3b
 
cb74f3b
 ifeq ($(OS_ARCH)$(OS_TEST),Linuxs390x)
cb74f3b
 CPPSRCS		:= xptcinvoke_linux_s390x.cpp xptcstubs_linux_s390x.cpp
cb74f3b
+CXXFLAGS	+= -fno-strict-aliasing -fno-inline -fomit-frame-pointer -mbackchain
cb74f3b
 endif
cb74f3b
 
cb74f3b
 
cb74f3b
diff -ur mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_s390.cpp mozilla-xx/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_s390.cpp
cb74f3b
--- mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_s390.cpp	2004-12-03 12:18:27.110694658 +0100
cb74f3b
+++ mozilla-xx/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_s390.cpp	2004-12-03 12:27:05.100694658 +0100
cb74f3b
@@ -184,8 +184,6 @@
cb74f3b
     }
cb74f3b
 }
cb74f3b
 
cb74f3b
-volatile register void* r14 asm("r14");
cb74f3b
-
cb74f3b
 XPTC_PUBLIC_API(nsresult)
cb74f3b
 XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
cb74f3b
                    PRUint32 paramCount, nsXPTCVariant* params)
cb74f3b
@@ -199,8 +197,6 @@
cb74f3b
     PRUint32 overflow = invoke_count_words (paramCount, params);
cb74f3b
     PRUint32 result;
cb74f3b
 
cb74f3b
-    volatile void* sav_r14 = r14;
cb74f3b
-
cb74f3b
     __asm__ __volatile__
cb74f3b
     (
cb74f3b
         "lr    7,15\n\t"
cb74f3b
@@ -235,10 +231,8 @@
cb74f3b
           "a" (invoke_copy_to_stack),
cb74f3b
           "a" (that),
cb74f3b
           "a" (method)
cb74f3b
-        : "2", "3", "4", "5", "6", "7", "memory"
cb74f3b
+        : "2", "3", "4", "5", "6", "7", "14", "cc", "memory", "%f0", "%f2"
cb74f3b
     );
cb74f3b
-
cb74f3b
-    r14 = sav_r14;
cb74f3b
   
cb74f3b
     return result;
cb74f3b
 }    
cb74f3b
diff -ur mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_s390x.cpp mozilla-xx/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_s390x.cpp
cb74f3b
--- mozilla/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_s390x.cpp	2004-12-03 12:18:27.110694658 +0100
cb74f3b
+++ mozilla-xx/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_s390x.cpp	2004-12-03 12:26:44.500694658 +0100
cb74f3b
@@ -178,8 +178,6 @@
cb74f3b
     }
cb74f3b
 }
cb74f3b
 
cb74f3b
-volatile register void* r14 asm("r14");
cb74f3b
-
cb74f3b
 XPTC_PUBLIC_API(nsresult)
cb74f3b
 XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
cb74f3b
                    PRUint32 paramCount, nsXPTCVariant* params)
cb74f3b
@@ -193,8 +191,6 @@
cb74f3b
     PRUint64 overflow = invoke_count_words (paramCount, params);
cb74f3b
     PRUint64 result;
cb74f3b
 
cb74f3b
-    volatile void* sav_r14 = r14;
cb74f3b
-
cb74f3b
     __asm__ __volatile__
cb74f3b
     (
cb74f3b
         "lgr    7,15\n\t"
cb74f3b
@@ -231,10 +227,9 @@
cb74f3b
           "a" (invoke_copy_to_stack),
cb74f3b
           "a" (that),
cb74f3b
           "a" (method)
cb74f3b
-        : "2", "3", "4", "5", "6", "7", "memory"
cb74f3b
+        : "2", "3", "4", "5", "6", "7", "14", "cc", "memory",
cb74f3b
+	  "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7"
cb74f3b
     );
cb74f3b
-
cb74f3b
-    r14 = sav_r14;
cb74f3b
   
cb74f3b
     return result;
cb74f3b
 }    
cb74f3b
diff -ur mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_s390.cpp mozilla-xx/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_s390.cpp
cb74f3b
--- mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_s390.cpp	2004-12-03 12:18:27.110694658 +0100
cb74f3b
+++ mozilla-xx/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_s390.cpp	2004-12-03 11:16:55.400694658 +0100
cb74f3b
@@ -177,7 +177,7 @@
cb74f3b
                               \
cb74f3b
     __asm__ __volatile__      \
cb74f3b
     (                         \
cb74f3b
-        "lr    %0,15\n\t"     \
cb74f3b
+        "l     %0,0(15)\n\t"  \
cb74f3b
         "ahi   %0,96\n\t"     \
cb74f3b
         "stm   3,6,0(%3)\n\t" \
cb74f3b
         "std   0,%1\n\t"      \
cb74f3b
diff -ur mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_s390x.cpp mozilla-xx/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_s390x.cpp
cb74f3b
--- mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_s390x.cpp	2004-12-03 12:18:27.110694658 +0100
cb74f3b
+++ mozilla-xx/xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_s390x.cpp	2004-12-03 11:17:16.360694658 +0100
cb74f3b
@@ -177,7 +177,7 @@
cb74f3b
                               \
cb74f3b
     __asm__ __volatile__      \
cb74f3b
     (                         \
cb74f3b
-        "lgr    %0,15\n\t"    \
cb74f3b
+        "lg     %0,0(15)\n\t" \
cb74f3b
         "aghi   %0,160\n\t"   \
cb74f3b
         "stmg   3,6,0(%5)\n\t"\
cb74f3b
         "std    0,%1\n\t"     \