LCOV - code coverage report
Current view: top level - atrace/utrace/stacktrace/stacktrace_dumper - scd_regs_x86_64.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 30 30
Test Date: 2026-07-28 10:53:44 Functions: 100.0 % 8 8

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2025 Huawei Technologies Co., Ltd.
       3              :  * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
       4              :  * CANN Open Software License Agreement Version 2.0 (the "License").
       5              :  * Please refer to the License for details. You may not use this file except in compliance with the License.
       6              :  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
       7              :  * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
       8              :  * See LICENSE in the root of the software repository for the full text of the License.
       9              :  */
      10              : 
      11              : #include "scd_regs.h"
      12              : #include "securec.h"
      13              : 
      14              : #ifdef __x86_64__
      15              : 
      16              : #define SCD_REGS_SP  SCD_REGS_RSP
      17              : #define SCD_REGS_PC  SCD_REGS_RIP
      18              : 
      19          240 : void ScdRegsLoadFromUcontext(ScdRegs *regs, ucontext_t *uc)
      20              : {
      21          240 :     GET_REGISTER_FROM_CONTEXT(regs->r, &uc->uc_mcontext);
      22          240 : }
      23              : 
      24           15 : uintptr_t ScdRegsGetPc(ScdRegs *regs)
      25              : {
      26           15 :     return regs->r[SCD_REGS_PC];
      27              : }
      28              : 
      29           15 : void ScdRegsSetPc(ScdRegs *regs, uintptr_t pc)
      30              : {
      31           15 :     regs->r[SCD_REGS_PC] = pc;
      32           15 : }
      33              : 
      34           15 : uintptr_t ScdRegsGetSp(ScdRegs *regs)
      35              : {
      36           15 :     return regs->r[SCD_REGS_SP];
      37              : }
      38              : 
      39           15 : void ScdRegsSetSp(ScdRegs *regs, uintptr_t sp)
      40              : {
      41           15 :     regs->r[SCD_REGS_SP] = sp;
      42           15 : }
      43              : 
      44           15 : uintptr_t ScdRegsGetFp(ScdRegs *regs)
      45              : {
      46           15 :     return regs->r[SCD_REGS_RBP];
      47              : }
      48              : 
      49           15 : void ScdRegsSetFp(ScdRegs *regs, uintptr_t fp)
      50              : {
      51           15 :     regs->r[SCD_REGS_RBP] = fp;
      52           15 : }
      53              : 
      54          315 : TraStatus ScdRegsGetString(const ScdRegs *regs, char *buf, size_t bufSize)
      55              : {
      56          315 :     if (regs == NULL || buf == NULL || bufSize == 0) {
      57           45 :         return TRACE_INVALID_PARAM;
      58              :     }
      59          270 :     int32_t ret = snprintf_s(buf, bufSize, bufSize - 1U,
      60              :         "crash registers:\n"
      61              :         "    rax 0x%016lx  rbx 0x%016lx  rcx 0x%016lx  rdx 0x%016lx\n"
      62              :         "    r8  0x%016lx  r9  0x%016lx  r10 0x%016lx  r11 0x%016lx\n"
      63              :         "    r12 0x%016lx  r13 0x%016lx  r14 0x%016lx  r15 0x%016lx\n"
      64              :         "    rdi 0x%016lx  rsi 0x%016lx\n"
      65              :         "    rbp 0x%016lx  rsp 0x%016lx  rip 0x%016lx\n\n",
      66          270 :         regs->r[SCD_REGS_RAX], regs->r[SCD_REGS_RBX], regs->r[SCD_REGS_RCX], regs->r[SCD_REGS_RDX],
      67          270 :         regs->r[SCD_REGS_R8],  regs->r[SCD_REGS_R9],  regs->r[SCD_REGS_R10], regs->r[SCD_REGS_R11],
      68          270 :         regs->r[SCD_REGS_R12], regs->r[SCD_REGS_R13], regs->r[SCD_REGS_R14], regs->r[SCD_REGS_R15],
      69          270 :         regs->r[SCD_REGS_RDI], regs->r[SCD_REGS_RSI],
      70          270 :         regs->r[SCD_REGS_RBP], regs->r[SCD_REGS_RSP], regs->r[SCD_REGS_RIP]);
      71          270 :     if (ret == -1) {
      72          105 :         return TRACE_FAILURE;
      73              :     }
      74          165 :     return TRACE_SUCCESS;
      75              : }
      76              : 
      77              : #endif
        

Generated by: LCOV version 2.0-1