1 /*
2 * Copyright (c) 2021-2022 The strace developers.
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: LGPL-2.1-or-later
6 */
7
8 static void
9 arch_decode_fpregset(struct tcb *const tcp,
10 const kernel_ulong_t addr,
11 const kernel_ulong_t size)
12 {
13 struct_fpregset regs;
14 const size_t fetch_size = MIN(sizeof(regs), size);
15
16 if (!size || size & 7) {
17 printaddr(addr);
18 } else if (!umoven_or_printaddr(tcp, addr, fetch_size, ®s)) {
19 tprint_struct_begin();
20 PRINT_FIELD_ARRAY_UPTO(regs, fpr, fetch_size / 8, tcp,
21 print_xint_array_member);
22 if (fetch_size > offsetof(struct_fpregset, fcc)) {
23 tprint_struct_next();
24 PRINT_FIELD_X(regs, fcc);
25 }
26 if (fetch_size > offsetof(struct_fpregset, fcsr)) {
27 tprint_struct_next();
28 PRINT_FIELD_X(regs, fcsr);
29 }
30 if (size > sizeof(regs)) {
31 tprint_struct_next();
32 tprint_more_data_follows();
33 }
34 tprint_struct_end();
35 }
36 }