[ros-diffs] [tkreuzer] 37469: Some asm macros for x64. They allow creating unwind info in a MASM like way, As a general rule for all asm functions changing the stack pointer, use ".proc FunctionName" (without '_' prefix) before the function and ".endproc" after the function and use .allocstack, .pushreg, etc. after the corresponding opcode.

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Wed Nov 19 22:24:52 CET 2008


Author: tkreuzer
Date: Wed Nov 19 15:24:52 2008
New Revision: 37469

URL: http://svn.reactos.org/svn/reactos?rev=37469&view=rev
Log:
Some asm macros for x64. They allow creating unwind info in a MASM like way, As a general rule for all asm functions changing the stack pointer, use ".proc FunctionName" (without '_' prefix) before the function and ".endproc" after the function and use .allocstack, .pushreg, etc. after the corresponding opcode.

Added:
    branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S   (with props)

Added: branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S?rev=37469&view=auto
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S (added)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S [iso-8859-1] Wed Nov 19 15:24:52 2008
@@ -1,0 +1,81 @@
+/*
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS Kernel
+ * FILE:            ntoskrnl/include/amd64/asmmacro.S
+ * PURPOSE:         Macros for x64 assembly
+ * PROGRAMMERS:     Timo Kreuzer (timo.kreuzer at reactos.org)
+ */
+
+.intel_syntax noprefix
+.code64
+
+/* Macros for x64 stack unwind OPs */
+
+.macro .proc name
+    .func name
+    .global _\name
+    _\name:
+    .cfi_startproc
+    .equ cfa_current_offset, -8
+.endm
+
+.macro .endproc
+    .cfi_endproc
+    .endfunc
+.endm
+
+.macro .allocstack size
+    .cfi_adjust_cfa_offset \size
+    .set cfa_current_offset, cfa_current_offset - \size
+.endm
+
+.macro .pushframe code
+    .if (\code == 0)
+        .cfi_adjust_cfa_offset 0x28
+        .set cfa_current_offset, cfa_current_offset - 0x28
+    .else
+        .cfi_adjust_cfa_offset 0x30
+        .set cfa_current_offset, cfa_current_offset - 0x30
+    .endif
+.endm
+
+.macro .pushreg reg
+    .cfi_adjust_cfa_offset 8
+    .equ cfa_current_offset, cfa_current_offset - 8
+    .cfi_offset \reg, cfa_current_offset
+.endm
+
+.macro .savereg reg, offset
+    // checkme!!!
+    .cfi_offset \reg, \offset
+.endm
+
+.macro .savexmm128 reg, offset
+    // checkme!!!
+    .cfi_offset \reg, \offset
+.endm
+
+.macro .setframe reg, offset
+    .cfi_def_cfa reg, \offset
+    .equ cfa_current_offset, \offset
+.endm
+
+.macro .endprolog
+.endm
+
+.macro UNIMPLEMENTED2 line, func
+    jmp 3f
+    .equ expr, 12
+1:  .asciz "\func"
+2:  .asciz __FILE__
+3:
+    sub rsp, 0x20
+    lea rcx, _MsgUnimplemented[rip]
+    lea rdx, 1b[rip]
+    lea r8, 2b[rip]
+    mov r9, \line
+    call _DbgPrint
+    add rsp, 0x20
+.endm
+#define UNIMPLEMENTED UNIMPLEMENTED2 __LINE__,
+

Propchange: branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S
------------------------------------------------------------------------------
    svn:eol-style = native



More information about the Ros-diffs mailing list