fd5592d
--- cjdns-cjdns-v20.2/node_build/dependencies/cnacl/cpucycles/osfreq.c.s390x	2018-05-31 12:03:56.321045469 +0200
fd5592d
+++ cjdns-cjdns-v20.2/node_build/dependencies/cnacl/cpucycles/osfreq.c	2018-05-31 12:04:07.901045469 +0200
fd5592d
@@ -33,6 +33,18 @@ static double osfreq(void)
fd5592d
   f = fopen("/proc/cpuinfo","r");
fd5592d
   if (f) {
fd5592d
     for (;;) {
fd5592d
+      s = fscanf(f,"cpu MHz dynamic : %lf",&result);
fd5592d
+      if (s > 0) break;
fd5592d
+      if (s == 0) s = fscanf(f,"%*[^\n]\n");
fd5592d
+      if (s < 0) { result = 0; break; }
fd5592d
+    }
fd5592d
+    fclose(f);
fd5592d
+    if (result) return 1000000.0 * result;
fd5592d
+  }
fd5592d
+
fd5592d
+  f = fopen("/proc/cpuinfo","r");
fd5592d
+  if (f) {
fd5592d
+    for (;;) {
fd5592d
       s = fscanf(f,"clock : %lf",&result);
fd5592d
       if (s > 0) break;
fd5592d
       if (s == 0) s = fscanf(f,"%*[^\n]\n");
fd5592d
--- cjdns-cjdns-v20.2/node_build/dependencies/cnacl/do.s390x	2018-04-18 09:35:41.000000000 +0200
fd5592d
+++ cjdns-cjdns-v20.2/node_build/dependencies/cnacl/do	2018-05-31 11:56:41.881045469 +0200
fd5592d
@@ -418,7 +418,7 @@ echo "=== `date` === starting curvecp"
fd5592d
 
fd5592d
 okabi \
fd5592d
 | awk '
fd5592d
-  { if ($1=="amd64" || $1=="ia64" || $1=="ppc64" || $1=="sparcv9" || $1=="mips64") print 1,$1
fd5592d
+  { if ($1=="amd64" || $1=="ia64" || $1=="ppc64" || $1=="sparcv9" || $1=="mips64" || $1=="s390x") print 1,$1
fd5592d
     else if ($1 == "mips32") print 2,$1
fd5592d
     else print 3,$1
fd5592d
   }
fd5592d
--- cjdns-cjdns-v20.2/node_build/dependencies/cnacl/node_build/plans/s390x_plan.json.s390x	2018-05-31 11:56:41.881045469 +0200
fd5592d
+++ cjdns-cjdns-v20.2/node_build/dependencies/cnacl/node_build/plans/s390x_plan.json	2018-05-31 11:56:41.881045469 +0200
fd5592d
@@ -0,0 +1,124 @@ 
fd5592d
+{
fd5592d
+  "PLAN_IMPLEMENTATIONS": [
fd5592d
+    [
fd5592d
+      "crypto_sign",
fd5592d
+      "ed25519",
fd5592d
+      "ref10"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_stream",
fd5592d
+      "aes128ctr",
fd5592d
+      "portable"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_auth",
fd5592d
+      "hmacsha256",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_core",
fd5592d
+      "hsalsa20",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_scalarmult",
fd5592d
+      "curve25519",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_core",
fd5592d
+      "salsa20",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_verify",
fd5592d
+      "16",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_onetimeauth",
fd5592d
+      "poly1305",
fd5592d
+      "donna"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_core",
fd5592d
+      "salsa208",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_hashblocks",
fd5592d
+      "sha512",
fd5592d
+      "inplace"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_stream",
fd5592d
+      "salsa2012",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_stream",
fd5592d
+      "xsalsa20",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_secretbox",
fd5592d
+      "xsalsa20poly1305",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_core",
fd5592d
+      "salsa2012",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_verify",
fd5592d
+      "32",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_stream",
fd5592d
+      "salsa208",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_hash",
fd5592d
+      "sha256",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_hashblocks",
fd5592d
+      "sha256",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_hash",
fd5592d
+      "sha512",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_box",
fd5592d
+      "curve25519xsalsa20poly1305",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_auth",
fd5592d
+      "hmacsha512256",
fd5592d
+      "ref"
fd5592d
+    ],
fd5592d
+    [
fd5592d
+      "crypto_stream",
fd5592d
+      "salsa20",
fd5592d
+      "ref"
fd5592d
+    ]
fd5592d
+  ],
fd5592d
+  "PLAN_TYPES": [
fd5592d
+    "typedef short crypto_int16;",
fd5592d
+    "typedef unsigned int crypto_uint32;",
fd5592d
+    "typedef unsigned short crypto_uint16;",
fd5592d
+    "typedef long long crypto_int64;",
fd5592d
+    "typedef int crypto_int32;",
fd5592d
+    "typedef unsigned char crypto_uint8;",
fd5592d
+    "typedef signed char crypto_int8;",
fd5592d
+    "typedef unsigned long long crypto_uint64;"
fd5592d
+  ]
fd5592d
+}
fd5592d
--- cjdns-cjdns-v20.2/node_build/dependencies/cnacl/okcompilers/abiname.c.s390x	2018-04-18 09:35:41.000000000 +0200
fd5592d
+++ cjdns-cjdns-v20.2/node_build/dependencies/cnacl/okcompilers/abiname.c	2018-05-31 11:56:41.881045469 +0200
fd5592d
@@ -14,6 +14,8 @@ const char *abi(void)
fd5592d
    return "ppc64";
fd5592d
 #elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC)
fd5592d
    return "ppc32";
fd5592d
+#elif defined(__s390x__)
fd5592d
+   return "s390x"
fd5592d
 #elif defined(__sparcv9__) || defined(__sparcv9)
fd5592d
    return "sparcv9";
fd5592d
 #elif defined(__sparc_v8__)
fd5592d
--- cjdns-cjdns-v20.2/node_build/dependencies/cnacl/okcompilers/abiname_xcompile.c.s390x	2018-04-18 09:35:41.000000000 +0200
fd5592d
+++ cjdns-cjdns-v20.2/node_build/dependencies/cnacl/okcompilers/abiname_xcompile.c	2018-05-31 11:56:41.881045469 +0200
fd5592d
@@ -20,6 +20,8 @@ 
fd5592d
     #error ABI_IS_ppc64__
fd5592d
 #elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC)
fd5592d
     #error ABI_IS_ppc32__
fd5592d
+#elif defined(__s390x__)
fd5592d
+    #error ABI_IS_s390x__
fd5592d
 #elif defined(__sparcv9__) || defined(__sparcv9)
fd5592d
     #error ABI_IS_sparcv9__
fd5592d
 #elif defined(__sparc_v8__)
fd5592d