(root)/
strace-6.5/
src/
linux/
loongarch64/
arch_prstatus_regset.c
       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_prstatus_regset(struct tcb *const tcp,
      10  			    const kernel_ulong_t addr,
      11  			    const kernel_ulong_t size)
      12  {
      13  	struct_prstatus_regset 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, &regs)) {
      19  		tprint_struct_begin();
      20  		PRINT_FIELD_ARRAY_UPTO(regs, regs,
      21  				       fetch_size / 8, tcp,
      22  				       print_xint_array_member);
      23  		if (fetch_size > offsetof(struct_prstatus_regset, orig_a0)) {
      24  			tprint_struct_next();
      25  			PRINT_FIELD_X(regs, orig_a0);
      26  		}
      27  		if (fetch_size > offsetof(struct_prstatus_regset, csr_era)) {
      28  			tprint_struct_next();
      29  			PRINT_FIELD_X(regs, csr_era);
      30  		}
      31  		if (fetch_size > offsetof(struct_prstatus_regset, csr_badv)) {
      32  			tprint_struct_next();
      33  			PRINT_FIELD_X(regs, csr_badv);
      34  		}
      35  		const size_t offset_of_reserved =
      36  			offsetof(struct_prstatus_regset, reserved);
      37  		if (fetch_size > offset_of_reserved) {
      38  			tprint_struct_next();
      39  			PRINT_FIELD_ARRAY_UPTO(regs, reserved,
      40  					       (fetch_size - offset_of_reserved) / 8,
      41  					       tcp, print_xint_array_member);
      42  		}
      43  		if (size > sizeof(regs)) {
      44  			tprint_struct_next();
      45  			tprint_more_data_follows();
      46  		}
      47  		tprint_struct_end();
      48  	}
      49  }