(root)/
strace-6.5/
src/
linux/
x86_64/
arch_prstatus_regset.c
       1  /*
       2   * Copyright (c) 2021 The strace developers.
       3   * All rights reserved.
       4   *
       5   * SPDX-License-Identifier: LGPL-2.1-or-later
       6   */
       7  
       8  #ifdef MPERS_IS_m32
       9  # include "../i386/arch_prstatus_regset.c"
      10  #else
      11  
      12  static void
      13  arch_decode_prstatus_regset(struct tcb *const tcp,
      14  			    const kernel_ulong_t addr,
      15  			    const kernel_ulong_t size)
      16  {
      17  	struct_prstatus_regset regs;
      18  	const size_t fetch_size = MIN(sizeof(regs), size);
      19  
      20  	if (!size || size & 7) {
      21  		printaddr(addr);
      22  	} else if (!umoven_or_printaddr(tcp, addr, fetch_size, &regs)) {
      23  		tprint_struct_begin();
      24  		PRINT_FIELD_X(regs, r15);
      25  		if (fetch_size > offsetof(struct_prstatus_regset, r14)) {
      26  			tprint_struct_next();
      27  			PRINT_FIELD_X(regs, r14);
      28  		}
      29  		if (fetch_size > offsetof(struct_prstatus_regset, r13)) {
      30  			tprint_struct_next();
      31  			PRINT_FIELD_X(regs, r13);
      32  		}
      33  		if (fetch_size > offsetof(struct_prstatus_regset, r12)) {
      34  			tprint_struct_next();
      35  			PRINT_FIELD_X(regs, r12);
      36  		}
      37  		if (fetch_size > offsetof(struct_prstatus_regset, rbp)) {
      38  			tprint_struct_next();
      39  			PRINT_FIELD_X(regs, rbp);
      40  		}
      41  		if (fetch_size > offsetof(struct_prstatus_regset, rbx)) {
      42  			tprint_struct_next();
      43  			PRINT_FIELD_X(regs, rbx);
      44  		}
      45  		if (fetch_size > offsetof(struct_prstatus_regset, r11)) {
      46  			tprint_struct_next();
      47  			PRINT_FIELD_X(regs, r11);
      48  		}
      49  		if (fetch_size > offsetof(struct_prstatus_regset, r10)) {
      50  			tprint_struct_next();
      51  			PRINT_FIELD_X(regs, r10);
      52  		}
      53  		if (fetch_size > offsetof(struct_prstatus_regset, r9)) {
      54  			tprint_struct_next();
      55  			PRINT_FIELD_X(regs, r9);
      56  		}
      57  		if (fetch_size > offsetof(struct_prstatus_regset, r8)) {
      58  			tprint_struct_next();
      59  			PRINT_FIELD_X(regs, r8);
      60  		}
      61  		if (fetch_size > offsetof(struct_prstatus_regset, rax)) {
      62  			tprint_struct_next();
      63  			PRINT_FIELD_X(regs, rax);
      64  		}
      65  		if (fetch_size > offsetof(struct_prstatus_regset, rcx)) {
      66  			tprint_struct_next();
      67  			PRINT_FIELD_X(regs, rcx);
      68  		}
      69  		if (fetch_size > offsetof(struct_prstatus_regset, rdx)) {
      70  			tprint_struct_next();
      71  			PRINT_FIELD_X(regs, rdx);
      72  		}
      73  		if (fetch_size > offsetof(struct_prstatus_regset, rsi)) {
      74  			tprint_struct_next();
      75  			PRINT_FIELD_X(regs, rsi);
      76  		}
      77  		if (fetch_size > offsetof(struct_prstatus_regset, rdi)) {
      78  			tprint_struct_next();
      79  			PRINT_FIELD_X(regs, rdi);
      80  		}
      81  		if (fetch_size > offsetof(struct_prstatus_regset, orig_rax)) {
      82  			tprint_struct_next();
      83  			PRINT_FIELD_X(regs, orig_rax);
      84  		}
      85  		if (fetch_size > offsetof(struct_prstatus_regset, rip)) {
      86  			tprint_struct_next();
      87  			PRINT_FIELD_X(regs, rip);
      88  		}
      89  		if (fetch_size > offsetof(struct_prstatus_regset, cs)) {
      90  			tprint_struct_next();
      91  			PRINT_FIELD_X(regs, cs);
      92  		}
      93  		if (fetch_size > offsetof(struct_prstatus_regset, eflags)) {
      94  			tprint_struct_next();
      95  			PRINT_FIELD_X(regs, eflags);
      96  		}
      97  		if (fetch_size > offsetof(struct_prstatus_regset, rsp)) {
      98  			tprint_struct_next();
      99  			PRINT_FIELD_X(regs, rsp);
     100  		}
     101  		if (fetch_size > offsetof(struct_prstatus_regset, ss)) {
     102  			tprint_struct_next();
     103  			PRINT_FIELD_X(regs, ss);
     104  		}
     105  		if (fetch_size > offsetof(struct_prstatus_regset, fs_base)) {
     106  			tprint_struct_next();
     107  			PRINT_FIELD_X(regs, fs_base);
     108  		}
     109  		if (fetch_size > offsetof(struct_prstatus_regset, gs_base)) {
     110  			tprint_struct_next();
     111  			PRINT_FIELD_X(regs, gs_base);
     112  		}
     113  		if (fetch_size > offsetof(struct_prstatus_regset, ds)) {
     114  			tprint_struct_next();
     115  			PRINT_FIELD_X(regs, ds);
     116  		}
     117  		if (fetch_size > offsetof(struct_prstatus_regset, es)) {
     118  			tprint_struct_next();
     119  			PRINT_FIELD_X(regs, es);
     120  		}
     121  		if (fetch_size > offsetof(struct_prstatus_regset, fs)) {
     122  			tprint_struct_next();
     123  			PRINT_FIELD_X(regs, fs);
     124  		}
     125  		if (fetch_size > offsetof(struct_prstatus_regset, gs)) {
     126  			tprint_struct_next();
     127  			PRINT_FIELD_X(regs, gs);
     128  		}
     129  		if (size > sizeof(regs)) {
     130  			tprint_struct_next();
     131  			tprint_more_data_follows();
     132  		}
     133  		tprint_struct_end();
     134  	}
     135  }
     136  
     137  #endif /* !MPERS_IS_m32 */