hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/arch/s390/kernel/ptrace.c
....@@ -24,10 +24,7 @@
2424 #include <linux/seccomp.h>
2525 #include <linux/compat.h>
2626 #include <trace/syscall.h>
27
-#include <asm/segment.h>
2827 #include <asm/page.h>
29
-#include <asm/pgtable.h>
30
-#include <asm/pgalloc.h>
3128 #include <linux/uaccess.h>
3229 #include <asm/unistd.h>
3330 #include <asm/switch_to.h>
....@@ -503,9 +500,7 @@
503500 }
504501 return 0;
505502 case PTRACE_GET_LAST_BREAK:
506
- put_user(child->thread.last_break,
507
- (unsigned long __user *) data);
508
- return 0;
503
+ return put_user(child->thread.last_break, (unsigned long __user *)data);
509504 case PTRACE_ENABLE_TE:
510505 if (!MACHINE_HAS_TE)
511506 return -EIO;
....@@ -857,9 +852,7 @@
857852 }
858853 return 0;
859854 case PTRACE_GET_LAST_BREAK:
860
- put_user(child->thread.last_break,
861
- (unsigned int __user *) data);
862
- return 0;
855
+ return put_user(child->thread.last_break, (unsigned int __user *)data);
863856 }
864857 return compat_ptrace_request(child, request, addr, data);
865858 }
....@@ -868,40 +861,66 @@
868861 asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
869862 {
870863 unsigned long mask = -1UL;
864
+ long ret = -1;
865
+
866
+ if (is_compat_task())
867
+ mask = 0xffffffff;
871868
872869 /*
873870 * The sysc_tracesys code in entry.S stored the system
874871 * call number to gprs[2].
875872 */
876873 if (test_thread_flag(TIF_SYSCALL_TRACE) &&
877
- (tracehook_report_syscall_entry(regs) ||
878
- regs->gprs[2] >= NR_syscalls)) {
874
+ tracehook_report_syscall_entry(regs)) {
879875 /*
880
- * Tracing decided this syscall should not happen or the
881
- * debugger stored an invalid system call number. Skip
876
+ * Tracing decided this syscall should not happen. Skip
882877 * the system call and the system call restart handling.
883878 */
884
- clear_pt_regs_flag(regs, PIF_SYSCALL);
885
- return -1;
879
+ goto skip;
886880 }
887881
882
+#ifdef CONFIG_SECCOMP
888883 /* Do the secure computing check after ptrace. */
889
- if (secure_computing(NULL)) {
890
- /* seccomp failures shouldn't expose any additional code. */
891
- return -1;
884
+ if (unlikely(test_thread_flag(TIF_SECCOMP))) {
885
+ struct seccomp_data sd;
886
+
887
+ if (is_compat_task()) {
888
+ sd.instruction_pointer = regs->psw.addr & 0x7fffffff;
889
+ sd.arch = AUDIT_ARCH_S390;
890
+ } else {
891
+ sd.instruction_pointer = regs->psw.addr;
892
+ sd.arch = AUDIT_ARCH_S390X;
893
+ }
894
+
895
+ sd.nr = regs->int_code & 0xffff;
896
+ sd.args[0] = regs->orig_gpr2 & mask;
897
+ sd.args[1] = regs->gprs[3] & mask;
898
+ sd.args[2] = regs->gprs[4] & mask;
899
+ sd.args[3] = regs->gprs[5] & mask;
900
+ sd.args[4] = regs->gprs[6] & mask;
901
+ sd.args[5] = regs->gprs[7] & mask;
902
+
903
+ if (__secure_computing(&sd) == -1)
904
+ goto skip;
892905 }
906
+#endif /* CONFIG_SECCOMP */
893907
894908 if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
895
- trace_sys_enter(regs, regs->gprs[2]);
909
+ trace_sys_enter(regs, regs->int_code & 0xffff);
896910
897
- if (is_compat_task())
898
- mask = 0xffffffff;
899911
900
- audit_syscall_entry(regs->gprs[2], regs->orig_gpr2 & mask,
912
+ audit_syscall_entry(regs->int_code & 0xffff, regs->orig_gpr2 & mask,
901913 regs->gprs[3] &mask, regs->gprs[4] &mask,
902914 regs->gprs[5] &mask);
903915
916
+ if ((signed long)regs->gprs[2] >= NR_syscalls) {
917
+ regs->gprs[2] = -ENOSYS;
918
+ ret = -ENOSYS;
919
+ }
904920 return regs->gprs[2];
921
+skip:
922
+ clear_pt_regs_flag(regs, PIF_SYSCALL);
923
+ return ret;
905924 }
906925
907926 asmlinkage void do_syscall_trace_exit(struct pt_regs *regs)
....@@ -921,28 +940,14 @@
921940
922941 static int s390_regs_get(struct task_struct *target,
923942 const struct user_regset *regset,
924
- unsigned int pos, unsigned int count,
925
- void *kbuf, void __user *ubuf)
943
+ struct membuf to)
926944 {
945
+ unsigned pos;
927946 if (target == current)
928947 save_access_regs(target->thread.acrs);
929948
930
- if (kbuf) {
931
- unsigned long *k = kbuf;
932
- while (count > 0) {
933
- *k++ = __peek_user(target, pos);
934
- count -= sizeof(*k);
935
- pos += sizeof(*k);
936
- }
937
- } else {
938
- unsigned long __user *u = ubuf;
939
- while (count > 0) {
940
- if (__put_user(__peek_user(target, pos), u++))
941
- return -EFAULT;
942
- count -= sizeof(*u);
943
- pos += sizeof(*u);
944
- }
945
- }
949
+ for (pos = 0; pos < sizeof(s390_regs); pos += sizeof(long))
950
+ membuf_store(&to, __peek_user(target, pos));
946951 return 0;
947952 }
948953
....@@ -983,8 +988,8 @@
983988 }
984989
985990 static int s390_fpregs_get(struct task_struct *target,
986
- const struct user_regset *regset, unsigned int pos,
987
- unsigned int count, void *kbuf, void __user *ubuf)
991
+ const struct user_regset *regset,
992
+ struct membuf to)
988993 {
989994 _s390_fp_regs fp_regs;
990995
....@@ -994,8 +999,7 @@
994999 fp_regs.fpc = target->thread.fpu.fpc;
9951000 fpregs_store(&fp_regs, &target->thread.fpu);
9961001
997
- return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
998
- &fp_regs, 0, -1);
1002
+ return membuf_write(&to, &fp_regs, sizeof(fp_regs));
9991003 }
10001004
10011005 static int s390_fpregs_set(struct task_struct *target,
....@@ -1042,20 +1046,9 @@
10421046
10431047 static int s390_last_break_get(struct task_struct *target,
10441048 const struct user_regset *regset,
1045
- unsigned int pos, unsigned int count,
1046
- void *kbuf, void __user *ubuf)
1049
+ struct membuf to)
10471050 {
1048
- if (count > 0) {
1049
- if (kbuf) {
1050
- unsigned long *k = kbuf;
1051
- *k = target->thread.last_break;
1052
- } else {
1053
- unsigned long __user *u = ubuf;
1054
- if (__put_user(target->thread.last_break, u))
1055
- return -EFAULT;
1056
- }
1057
- }
1058
- return 0;
1051
+ return membuf_store(&to, target->thread.last_break);
10591052 }
10601053
10611054 static int s390_last_break_set(struct task_struct *target,
....@@ -1068,16 +1061,13 @@
10681061
10691062 static int s390_tdb_get(struct task_struct *target,
10701063 const struct user_regset *regset,
1071
- unsigned int pos, unsigned int count,
1072
- void *kbuf, void __user *ubuf)
1064
+ struct membuf to)
10731065 {
10741066 struct pt_regs *regs = task_pt_regs(target);
1075
- unsigned char *data;
10761067
10771068 if (!(regs->int_code & 0x200))
10781069 return -ENODATA;
1079
- data = target->thread.trap_tdb;
1080
- return user_regset_copyout(&pos, &count, &kbuf, &ubuf, data, 0, 256);
1070
+ return membuf_write(&to, target->thread.trap_tdb, 256);
10811071 }
10821072
10831073 static int s390_tdb_set(struct task_struct *target,
....@@ -1090,8 +1080,7 @@
10901080
10911081 static int s390_vxrs_low_get(struct task_struct *target,
10921082 const struct user_regset *regset,
1093
- unsigned int pos, unsigned int count,
1094
- void *kbuf, void __user *ubuf)
1083
+ struct membuf to)
10951084 {
10961085 __u64 vxrs[__NUM_VXRS_LOW];
10971086 int i;
....@@ -1102,7 +1091,7 @@
11021091 save_fpu_regs();
11031092 for (i = 0; i < __NUM_VXRS_LOW; i++)
11041093 vxrs[i] = *((__u64 *)(target->thread.fpu.vxrs + i) + 1);
1105
- return user_regset_copyout(&pos, &count, &kbuf, &ubuf, vxrs, 0, -1);
1094
+ return membuf_write(&to, vxrs, sizeof(vxrs));
11061095 }
11071096
11081097 static int s390_vxrs_low_set(struct task_struct *target,
....@@ -1131,18 +1120,14 @@
11311120
11321121 static int s390_vxrs_high_get(struct task_struct *target,
11331122 const struct user_regset *regset,
1134
- unsigned int pos, unsigned int count,
1135
- void *kbuf, void __user *ubuf)
1123
+ struct membuf to)
11361124 {
1137
- __vector128 vxrs[__NUM_VXRS_HIGH];
1138
-
11391125 if (!MACHINE_HAS_VX)
11401126 return -ENODEV;
11411127 if (target == current)
11421128 save_fpu_regs();
1143
- memcpy(vxrs, target->thread.fpu.vxrs + __NUM_VXRS_LOW, sizeof(vxrs));
1144
-
1145
- return user_regset_copyout(&pos, &count, &kbuf, &ubuf, vxrs, 0, -1);
1129
+ return membuf_write(&to, target->thread.fpu.vxrs + __NUM_VXRS_LOW,
1130
+ __NUM_VXRS_HIGH * sizeof(__vector128));
11461131 }
11471132
11481133 static int s390_vxrs_high_set(struct task_struct *target,
....@@ -1164,12 +1149,9 @@
11641149
11651150 static int s390_system_call_get(struct task_struct *target,
11661151 const struct user_regset *regset,
1167
- unsigned int pos, unsigned int count,
1168
- void *kbuf, void __user *ubuf)
1152
+ struct membuf to)
11691153 {
1170
- unsigned int *data = &target->thread.system_call;
1171
- return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1172
- data, 0, sizeof(unsigned int));
1154
+ return membuf_store(&to, target->thread.system_call);
11731155 }
11741156
11751157 static int s390_system_call_set(struct task_struct *target,
....@@ -1184,8 +1166,7 @@
11841166
11851167 static int s390_gs_cb_get(struct task_struct *target,
11861168 const struct user_regset *regset,
1187
- unsigned int pos, unsigned int count,
1188
- void *kbuf, void __user *ubuf)
1169
+ struct membuf to)
11891170 {
11901171 struct gs_cb *data = target->thread.gs_cb;
11911172
....@@ -1195,8 +1176,7 @@
11951176 return -ENODATA;
11961177 if (target == current)
11971178 save_gs_cb(data);
1198
- return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1199
- data, 0, sizeof(struct gs_cb));
1179
+ return membuf_write(&to, data, sizeof(struct gs_cb));
12001180 }
12011181
12021182 static int s390_gs_cb_set(struct task_struct *target,
....@@ -1240,8 +1220,7 @@
12401220
12411221 static int s390_gs_bc_get(struct task_struct *target,
12421222 const struct user_regset *regset,
1243
- unsigned int pos, unsigned int count,
1244
- void *kbuf, void __user *ubuf)
1223
+ struct membuf to)
12451224 {
12461225 struct gs_cb *data = target->thread.gs_bc_cb;
12471226
....@@ -1249,8 +1228,7 @@
12491228 return -ENODEV;
12501229 if (!data)
12511230 return -ENODATA;
1252
- return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1253
- data, 0, sizeof(struct gs_cb));
1231
+ return membuf_write(&to, data, sizeof(struct gs_cb));
12541232 }
12551233
12561234 static int s390_gs_bc_set(struct task_struct *target,
....@@ -1300,8 +1278,7 @@
13001278
13011279 static int s390_runtime_instr_get(struct task_struct *target,
13021280 const struct user_regset *regset,
1303
- unsigned int pos, unsigned int count,
1304
- void *kbuf, void __user *ubuf)
1281
+ struct membuf to)
13051282 {
13061283 struct runtime_instr_cb *data = target->thread.ri_cb;
13071284
....@@ -1310,8 +1287,7 @@
13101287 if (!data)
13111288 return -ENODATA;
13121289
1313
- return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
1314
- data, 0, sizeof(struct runtime_instr_cb));
1290
+ return membuf_write(&to, data, sizeof(struct runtime_instr_cb));
13151291 }
13161292
13171293 static int s390_runtime_instr_set(struct task_struct *target,
....@@ -1371,7 +1347,7 @@
13711347 .n = sizeof(s390_regs) / sizeof(long),
13721348 .size = sizeof(long),
13731349 .align = sizeof(long),
1374
- .get = s390_regs_get,
1350
+ .regset_get = s390_regs_get,
13751351 .set = s390_regs_set,
13761352 },
13771353 {
....@@ -1379,7 +1355,7 @@
13791355 .n = sizeof(s390_fp_regs) / sizeof(long),
13801356 .size = sizeof(long),
13811357 .align = sizeof(long),
1382
- .get = s390_fpregs_get,
1358
+ .regset_get = s390_fpregs_get,
13831359 .set = s390_fpregs_set,
13841360 },
13851361 {
....@@ -1387,7 +1363,7 @@
13871363 .n = 1,
13881364 .size = sizeof(unsigned int),
13891365 .align = sizeof(unsigned int),
1390
- .get = s390_system_call_get,
1366
+ .regset_get = s390_system_call_get,
13911367 .set = s390_system_call_set,
13921368 },
13931369 {
....@@ -1395,7 +1371,7 @@
13951371 .n = 1,
13961372 .size = sizeof(long),
13971373 .align = sizeof(long),
1398
- .get = s390_last_break_get,
1374
+ .regset_get = s390_last_break_get,
13991375 .set = s390_last_break_set,
14001376 },
14011377 {
....@@ -1403,7 +1379,7 @@
14031379 .n = 1,
14041380 .size = 256,
14051381 .align = 1,
1406
- .get = s390_tdb_get,
1382
+ .regset_get = s390_tdb_get,
14071383 .set = s390_tdb_set,
14081384 },
14091385 {
....@@ -1411,7 +1387,7 @@
14111387 .n = __NUM_VXRS_LOW,
14121388 .size = sizeof(__u64),
14131389 .align = sizeof(__u64),
1414
- .get = s390_vxrs_low_get,
1390
+ .regset_get = s390_vxrs_low_get,
14151391 .set = s390_vxrs_low_set,
14161392 },
14171393 {
....@@ -1419,7 +1395,7 @@
14191395 .n = __NUM_VXRS_HIGH,
14201396 .size = sizeof(__vector128),
14211397 .align = sizeof(__vector128),
1422
- .get = s390_vxrs_high_get,
1398
+ .regset_get = s390_vxrs_high_get,
14231399 .set = s390_vxrs_high_set,
14241400 },
14251401 {
....@@ -1427,7 +1403,7 @@
14271403 .n = sizeof(struct gs_cb) / sizeof(__u64),
14281404 .size = sizeof(__u64),
14291405 .align = sizeof(__u64),
1430
- .get = s390_gs_cb_get,
1406
+ .regset_get = s390_gs_cb_get,
14311407 .set = s390_gs_cb_set,
14321408 },
14331409 {
....@@ -1435,7 +1411,7 @@
14351411 .n = sizeof(struct gs_cb) / sizeof(__u64),
14361412 .size = sizeof(__u64),
14371413 .align = sizeof(__u64),
1438
- .get = s390_gs_bc_get,
1414
+ .regset_get = s390_gs_bc_get,
14391415 .set = s390_gs_bc_set,
14401416 },
14411417 {
....@@ -1443,13 +1419,13 @@
14431419 .n = sizeof(struct runtime_instr_cb) / sizeof(__u64),
14441420 .size = sizeof(__u64),
14451421 .align = sizeof(__u64),
1446
- .get = s390_runtime_instr_get,
1422
+ .regset_get = s390_runtime_instr_get,
14471423 .set = s390_runtime_instr_set,
14481424 },
14491425 };
14501426
14511427 static const struct user_regset_view user_s390_view = {
1452
- .name = UTS_MACHINE,
1428
+ .name = "s390x",
14531429 .e_machine = EM_S390,
14541430 .regsets = s390_regsets,
14551431 .n = ARRAY_SIZE(s390_regsets)
....@@ -1458,28 +1434,15 @@
14581434 #ifdef CONFIG_COMPAT
14591435 static int s390_compat_regs_get(struct task_struct *target,
14601436 const struct user_regset *regset,
1461
- unsigned int pos, unsigned int count,
1462
- void *kbuf, void __user *ubuf)
1437
+ struct membuf to)
14631438 {
1439
+ unsigned n;
1440
+
14641441 if (target == current)
14651442 save_access_regs(target->thread.acrs);
14661443
1467
- if (kbuf) {
1468
- compat_ulong_t *k = kbuf;
1469
- while (count > 0) {
1470
- *k++ = __peek_user_compat(target, pos);
1471
- count -= sizeof(*k);
1472
- pos += sizeof(*k);
1473
- }
1474
- } else {
1475
- compat_ulong_t __user *u = ubuf;
1476
- while (count > 0) {
1477
- if (__put_user(__peek_user_compat(target, pos), u++))
1478
- return -EFAULT;
1479
- count -= sizeof(*u);
1480
- pos += sizeof(*u);
1481
- }
1482
- }
1444
+ for (n = 0; n < sizeof(s390_compat_regs); n += sizeof(compat_ulong_t))
1445
+ membuf_store(&to, __peek_user_compat(target, n));
14831446 return 0;
14841447 }
14851448
....@@ -1521,29 +1484,14 @@
15211484
15221485 static int s390_compat_regs_high_get(struct task_struct *target,
15231486 const struct user_regset *regset,
1524
- unsigned int pos, unsigned int count,
1525
- void *kbuf, void __user *ubuf)
1487
+ struct membuf to)
15261488 {
15271489 compat_ulong_t *gprs_high;
1490
+ int i;
15281491
1529
- gprs_high = (compat_ulong_t *)
1530
- &task_pt_regs(target)->gprs[pos / sizeof(compat_ulong_t)];
1531
- if (kbuf) {
1532
- compat_ulong_t *k = kbuf;
1533
- while (count > 0) {
1534
- *k++ = *gprs_high;
1535
- gprs_high += 2;
1536
- count -= sizeof(*k);
1537
- }
1538
- } else {
1539
- compat_ulong_t __user *u = ubuf;
1540
- while (count > 0) {
1541
- if (__put_user(*gprs_high, u++))
1542
- return -EFAULT;
1543
- gprs_high += 2;
1544
- count -= sizeof(*u);
1545
- }
1546
- }
1492
+ gprs_high = (compat_ulong_t *)task_pt_regs(target)->gprs;
1493
+ for (i = 0; i < NUM_GPRS; i++, gprs_high += 2)
1494
+ membuf_store(&to, *gprs_high);
15471495 return 0;
15481496 }
15491497
....@@ -1582,23 +1530,11 @@
15821530
15831531 static int s390_compat_last_break_get(struct task_struct *target,
15841532 const struct user_regset *regset,
1585
- unsigned int pos, unsigned int count,
1586
- void *kbuf, void __user *ubuf)
1533
+ struct membuf to)
15871534 {
1588
- compat_ulong_t last_break;
1535
+ compat_ulong_t last_break = target->thread.last_break;
15891536
1590
- if (count > 0) {
1591
- last_break = target->thread.last_break;
1592
- if (kbuf) {
1593
- unsigned long *k = kbuf;
1594
- *k = last_break;
1595
- } else {
1596
- unsigned long __user *u = ubuf;
1597
- if (__put_user(last_break, u))
1598
- return -EFAULT;
1599
- }
1600
- }
1601
- return 0;
1537
+ return membuf_store(&to, (unsigned long)last_break);
16021538 }
16031539
16041540 static int s390_compat_last_break_set(struct task_struct *target,
....@@ -1615,7 +1551,7 @@
16151551 .n = sizeof(s390_compat_regs) / sizeof(compat_long_t),
16161552 .size = sizeof(compat_long_t),
16171553 .align = sizeof(compat_long_t),
1618
- .get = s390_compat_regs_get,
1554
+ .regset_get = s390_compat_regs_get,
16191555 .set = s390_compat_regs_set,
16201556 },
16211557 {
....@@ -1623,7 +1559,7 @@
16231559 .n = sizeof(s390_fp_regs) / sizeof(compat_long_t),
16241560 .size = sizeof(compat_long_t),
16251561 .align = sizeof(compat_long_t),
1626
- .get = s390_fpregs_get,
1562
+ .regset_get = s390_fpregs_get,
16271563 .set = s390_fpregs_set,
16281564 },
16291565 {
....@@ -1631,7 +1567,7 @@
16311567 .n = 1,
16321568 .size = sizeof(compat_uint_t),
16331569 .align = sizeof(compat_uint_t),
1634
- .get = s390_system_call_get,
1570
+ .regset_get = s390_system_call_get,
16351571 .set = s390_system_call_set,
16361572 },
16371573 {
....@@ -1639,7 +1575,7 @@
16391575 .n = 1,
16401576 .size = sizeof(long),
16411577 .align = sizeof(long),
1642
- .get = s390_compat_last_break_get,
1578
+ .regset_get = s390_compat_last_break_get,
16431579 .set = s390_compat_last_break_set,
16441580 },
16451581 {
....@@ -1647,7 +1583,7 @@
16471583 .n = 1,
16481584 .size = 256,
16491585 .align = 1,
1650
- .get = s390_tdb_get,
1586
+ .regset_get = s390_tdb_get,
16511587 .set = s390_tdb_set,
16521588 },
16531589 {
....@@ -1655,7 +1591,7 @@
16551591 .n = __NUM_VXRS_LOW,
16561592 .size = sizeof(__u64),
16571593 .align = sizeof(__u64),
1658
- .get = s390_vxrs_low_get,
1594
+ .regset_get = s390_vxrs_low_get,
16591595 .set = s390_vxrs_low_set,
16601596 },
16611597 {
....@@ -1663,7 +1599,7 @@
16631599 .n = __NUM_VXRS_HIGH,
16641600 .size = sizeof(__vector128),
16651601 .align = sizeof(__vector128),
1666
- .get = s390_vxrs_high_get,
1602
+ .regset_get = s390_vxrs_high_get,
16671603 .set = s390_vxrs_high_set,
16681604 },
16691605 {
....@@ -1671,7 +1607,7 @@
16711607 .n = sizeof(s390_compat_regs_high) / sizeof(compat_long_t),
16721608 .size = sizeof(compat_long_t),
16731609 .align = sizeof(compat_long_t),
1674
- .get = s390_compat_regs_high_get,
1610
+ .regset_get = s390_compat_regs_high_get,
16751611 .set = s390_compat_regs_high_set,
16761612 },
16771613 {
....@@ -1679,7 +1615,7 @@
16791615 .n = sizeof(struct gs_cb) / sizeof(__u64),
16801616 .size = sizeof(__u64),
16811617 .align = sizeof(__u64),
1682
- .get = s390_gs_cb_get,
1618
+ .regset_get = s390_gs_cb_get,
16831619 .set = s390_gs_cb_set,
16841620 },
16851621 {
....@@ -1687,7 +1623,7 @@
16871623 .n = sizeof(struct gs_cb) / sizeof(__u64),
16881624 .size = sizeof(__u64),
16891625 .align = sizeof(__u64),
1690
- .get = s390_gs_bc_get,
1626
+ .regset_get = s390_gs_bc_get,
16911627 .set = s390_gs_bc_set,
16921628 },
16931629 {
....@@ -1695,7 +1631,7 @@
16951631 .n = sizeof(struct runtime_instr_cb) / sizeof(__u64),
16961632 .size = sizeof(__u64),
16971633 .align = sizeof(__u64),
1698
- .get = s390_runtime_instr_get,
1634
+ .regset_get = s390_runtime_instr_get,
16991635 .set = s390_runtime_instr_set,
17001636 },
17011637 };