This is an automated email from the ASF dual-hosted git repository.

archer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 41da7121bd9 arch/x64: interrupt add CFI info
41da7121bd9 is described below

commit 41da7121bd927fcb88496e3e3fd4f414425bbacc
Author: liwenxiang1 <[email protected]>
AuthorDate: Thu Feb 27 21:14:23 2025 +0800

    arch/x64: interrupt add CFI info
    
    interrupt add CFI info
    
    Signed-off-by: liwenxiang1 <[email protected]>
---
 arch/x86_64/src/intel64/intel64_vectors.S | 35 +++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/arch/x86_64/src/intel64/intel64_vectors.S 
b/arch/x86_64/src/intel64/intel64_vectors.S
index b3aaefe285d..573f94a2041 100644
--- a/arch/x86_64/src/intel64/intel64_vectors.S
+++ b/arch/x86_64/src/intel64/intel64_vectors.S
@@ -51,6 +51,33 @@
  * Macros
  ****************************************************************************/
 
+#define CFI_UNWIND_REGS(reg, offst)             \
+       .cfi_def_cfa    %##reg, (offst);            \
+       .cfi_rel_offset %rip, (REG_RIP * 8);        \
+       .cfi_rel_offset %rsp, (REG_RSP * 8);        \
+       .cfi_rel_offset %rbp, (REG_RBP * 8);        \
+       .cfi_rel_offset %rsi, (REG_RSI * 8);        \
+       .cfi_rel_offset %rdi, (REG_RDI * 8);        \
+       .cfi_rel_offset %rdx, (REG_RDX * 8);        \
+       .cfi_rel_offset %rcx, (REG_RCX * 8);        \
+       .cfi_rel_offset %r8, (REG_R8 * 8);          \
+       .cfi_rel_offset %r9, (REG_R9 * 8);          \
+       .cfi_rel_offset %r15, (REG_R15 * 8);        \
+       .cfi_rel_offset %r14, (REG_R14 * 8);        \
+       .cfi_rel_offset %r13, (REG_R13 * 8);        \
+       .cfi_rel_offset %r12, (REG_R12 * 8);        \
+       .cfi_rel_offset %r11, (REG_R11 * 8);        \
+       .cfi_rel_offset %r10, (REG_R10 * 8);        \
+       .cfi_rel_offset %rbx, (REG_RBX * 8);        \
+       .cfi_rel_offset %rax, (REG_RAX * 8);        \
+       .cfi_rel_offset %rflags, (REG_RFLAGS * 8);  \
+       .cfi_rel_offset %cs, (REG_CS * 8);          \
+       .cfi_rel_offset %ss, (REG_SS * 8);          \
+       .cfi_rel_offset %ds, (REG_DS * 8);          \
+       .cfi_rel_offset %es, (REG_ES * 8);          \
+       .cfi_rel_offset %fs, (REG_FS * 8);          \
+       .cfi_rel_offset %gs, (REG_GS * 8);
+
        /* This macro creates a stub for an ISR which does NOT pass it's own
         * error code (adds a dummy errcode byte).
         */
@@ -701,6 +728,8 @@ vector_isr\intno:
  *
  ****************************************************************************/
 
+.cfi_sections .debug_frame
+
        .type   irq_common, @function
 irq_common:
        /* Already swap to the interrupt stack
@@ -711,6 +740,8 @@ irq_common:
         * corrupts only RAX, RDI and RDX registers.
         */
 
+       .cfi_startproc
+
        pushq   %rax
        pushq   %rdx
        call    irq_xcp_regs
@@ -785,12 +816,16 @@ irq_common:
         * that we don't lose the correct stack alignment for vector operations
         */
 
+       CFI_UNWIND_REGS(rdi, 0)
+
        pushq   %rdi
        pushq   $0
        call    irq_handler
        add     $8, %rsp
        popq    %rdi
 
+       .cfi_endproc
+
        /* The common return point for irq_handler */
 
 .Lreturn:

Reply via email to