Since the update to Go 1.13beta1 the kdsaQuery function is expected to
be present. However, it is not with GCCGO since the assembler file
from GOLANG cannot be understood by gas.  This patch adds an inline
assembly implementation to cpu_gccgo.c.

2019-10-14  Andreas Krebbel  <kreb...@linux.ibm.com>

        * libgo/go/internal/cpu/cpu_gccgo.c:
---
 libgo/go/internal/cpu/cpu_gccgo.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/libgo/go/internal/cpu/cpu_gccgo.c 
b/libgo/go/internal/cpu/cpu_gccgo.c
index ed0e7bff8cd..76b99cb00a0 100644
--- a/libgo/go/internal/cpu/cpu_gccgo.c
+++ b/libgo/go/internal/cpu/cpu_gccgo.c
@@ -184,4 +184,19 @@ struct queryResult klmdQuery() {
     return ret;
 }
 
+struct queryResult kdsaQuery(void)
+  __asm__(GOSYM_PREFIX "internal..z2fcpu.kdsaQuery")
+  __attribute__((no_split_stack));
+
+struct queryResult kdsaQuery() {
+    struct queryResult ret;
+
+    __asm__ ("lghi   %%r0, 0\t\n"  // set function code to 0 (KDSA-Query)
+            "la     %%r1, %[ret]\t\n"
+            ".long  0xb93a0024\t\n"  // kdsa
+            :[ret] "=QRST" (ret) : : "r0", "r1", "cc");
+
+    return ret;
+}
+
 #endif /* defined(__s390x__)  */
-- 
2.23.0

Reply via email to