VirtualBox

source: vbox/trunk/src/VBox/Runtime/common/dbg/dbgstackdumpself-amd64-x86.asm@ 76408

Last change on this file since 76408 was 75235, checked in by vboxsync, 6 years ago

IPRT: Starting to get somewhere with DWARF unwinding. bugref:3897

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.6 KB
Line 
1; $Id: dbgstackdumpself-amd64-x86.asm 75235 2018-11-02 21:01:36Z vboxsync $
2;; @file
3; IPRT - RTDbgStackDumpSelf assembly wrapper calling rtDbgStackDumpSelfWorker.
4;
5
6;
7; Copyright (C) 2006-2018 Oracle Corporation
8;
9; This file is part of VirtualBox Open Source Edition (OSE), as
10; available from http://www.virtualbox.org. This file is free software;
11; you can redistribute it and/or modify it under the terms of the GNU
12; General Public License (GPL) as published by the Free Software
13; Foundation, in version 2 as it comes in the "COPYING" file of the
14; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16;
17; The contents of this file may alternatively be used under the terms
18; of the Common Development and Distribution License Version 1.0
19; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20; VirtualBox OSE distribution, in which case the provisions of the
21; CDDL are applicable instead of those of the GPL.
22;
23; You may elect to license modified versions of this file under the
24; terms and conditions of either the GPL or the CDDL or both.
25;
26
27
28;*********************************************************************************************************************************
29;* Header Files *
30;*********************************************************************************************************************************
31%define RT_ASM_WITH_SEH64
32%include "iprt/asmdefs.mac"
33
34
35;*********************************************************************************************************************************
36;* Extern Symbols *
37;*********************************************************************************************************************************
38extern NAME(rtDbgStackDumpSelfWorker)
39
40
41BEGINCODE
42
43;;
44; Collects register state and calls C worker.
45;
46BEGINPROC_EXPORTED RTDbgStackDumpSelf
47 push xBP
48 SEH64_PUSH_xBP
49 mov xBP, xSP
50 SEH64_SET_FRAME_xBP 0
51
52 ;
53 ; Push all GPRS in reserve order...
54 ;
55%ifdef RT_ARCH_AMD64
56 push r15
57 SEH64_PUSH_GREG r15
58 push r14
59 SEH64_PUSH_GREG r14
60 push r13
61 SEH64_PUSH_GREG r13
62 push r12
63 SEH64_PUSH_GREG r12
64 push r13
65 SEH64_PUSH_GREG r13
66 push r12
67 SEH64_PUSH_GREG r12
68 push r11
69 SEH64_PUSH_GREG r11
70 push r10
71 SEH64_PUSH_GREG r10
72 push r9
73 SEH64_PUSH_GREG r9
74 push r8
75 SEH64_PUSH_GREG r8
76%endif
77 push xDI
78 SEH64_PUSH_GREG xDI
79 push xSI
80 SEH64_PUSH_GREG xSI
81%ifdef RT_ARCH_AMD64
82 mov r10, [xBP] ; Caller RBP.
83 push r10
84 lea r10, [xBP + xCB * 2] ; Caller RSP.
85 push r10
86%else
87 push dword [xBP] ; Caller EBP
88 push xAX
89 lea xAX, [xBP + xCB * 2] ; Caller ESP.
90 xchg xAX, [xSP]
91%endif
92 push xBX
93 SEH64_PUSH_GREG xBX
94 push xDX
95 SEH64_PUSH_GREG xDX
96 push xCX
97 SEH64_PUSH_GREG xCX
98 push xAX
99 SEH64_PUSH_GREG xAX
100
101 ;
102 ; ... preceeded by the EIP/RIP.
103 ;
104%ifdef RT_ARCH_AMD64
105 mov r10, [xBP + xCB]
106 push r10
107%else
108 push dword [xBP + xCB]
109%endif
110
111 ;
112 ; Call the worker function passing the register array as the fourth argument.
113 ;
114%ifdef ASM_CALL64_GCC
115 mov rcx, rsp ; 4th parameter = register array.
116 sub rsp, 8h ; Align stack.
117 SEH64_ALLOCATE_STACK 28h
118%elifdef ASM_CALL64_MSC
119 mov r9, rsp ; 4th parameter = register array.
120 sub rsp, 28h ; Aling stack and allocate spill area.
121 SEH64_ALLOCATE_STACK 28h
122%else
123 mov eax, esp ; Save register array location
124 and xSP, ~15 ; Align the stack.
125%endif
126SEH64_END_PROLOGUE
127
128%ifndef RT_ARCH_AMD64
129 push eax
130 push dword [xBP + xCB * 4]
131 push dword [xBP + xCB * 3]
132 push dword [xBP + xCB * 2]
133%endif
134%ifdef ASM_FORMAT_ELF
135 %ifdef PIC
136 call NAME(rtDbgStackDumpSelfWorker) wrt ..plt
137 %else
138 call NAME(rtDbgStackDumpSelfWorker)
139 %endif
140%else
141 call NAME(rtDbgStackDumpSelfWorker)
142%endif
143
144 leave
145 ret
146ENDPROC RTDbgStackDumpSelf
147
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette