@@ -167,11 +167,21 @@ pub unsafe fn trace(cb: &mut dyn FnMut(&super::Frame) -> bool) {
167
167
Some ( StackWalkEx ) => {
168
168
let mut stack_frame_ex: STACKFRAME_EX = mem:: zeroed ( ) ;
169
169
stack_frame_ex. StackFrameSize = mem:: size_of :: < STACKFRAME_EX > ( ) as DWORD ;
170
- stack_frame_ex. AddrPC . Offset = context. 0 . Eip as u64 ;
170
+
171
+ cfg_if:: cfg_if! {
172
+ if #[ cfg( target_arch = "x86" ) ] {
173
+ stack_frame_ex. AddrPC . Offset = context. 0 . Eip as u64 ;
174
+ stack_frame_ex. AddrStack . Offset = context. 0 . Esp as u64 ;
175
+ stack_frame_ex. AddrFrame . Offset = context. 0 . Ebp as u64 ;
176
+ } else {
177
+ stack_frame_ex. AddrPC . Offset = context. 0 . Pc as u64 ;
178
+ stack_frame_ex. AddrStack . Offset = context. 0 . Sp as u64 ;
179
+ stack_frame_ex. AddrFrame . Offset = context. 0 . R11 as u64 ;
180
+ }
181
+ }
182
+
171
183
stack_frame_ex. AddrPC . Mode = AddrModeFlat ;
172
- stack_frame_ex. AddrStack . Offset = context. 0 . Esp as u64 ;
173
184
stack_frame_ex. AddrStack . Mode = AddrModeFlat ;
174
- stack_frame_ex. AddrFrame . Offset = context. 0 . Ebp as u64 ;
175
185
stack_frame_ex. AddrFrame . Mode = AddrModeFlat ;
176
186
177
187
while StackWalkEx (
@@ -205,11 +215,21 @@ pub unsafe fn trace(cb: &mut dyn FnMut(&super::Frame) -> bool) {
205
215
}
206
216
None => {
207
217
let mut stack_frame64: STACKFRAME64 = mem:: zeroed ( ) ;
208
- stack_frame64. AddrPC . Offset = context. 0 . Eip as u64 ;
218
+
219
+ cfg_if:: cfg_if! {
220
+ if #[ cfg( target_arch = "x86" ) ] {
221
+ stack_frame64. AddrPC . Offset = context. 0 . Eip as u64 ;
222
+ stack_frame64. AddrStack . Offset = context. 0 . Esp as u64 ;
223
+ stack_frame64. AddrFrame . Offset = context. 0 . Ebp as u64 ;
224
+ } else {
225
+ stack_frame64. AddrPC . Offset = context. 0 . Pc as u64 ;
226
+ stack_frame64. AddrStack . Offset = context. 0 . Sp as u64 ;
227
+ stack_frame64. AddrFrame . Offset = context. 0 . R11 as u64 ;
228
+ }
229
+ }
230
+
209
231
stack_frame64. AddrPC . Mode = AddrModeFlat ;
210
- stack_frame64. AddrStack . Offset = context. 0 . Esp as u64 ;
211
232
stack_frame64. AddrStack . Mode = AddrModeFlat ;
212
- stack_frame64. AddrFrame . Offset = context. 0 . Ebp as u64 ;
213
233
stack_frame64. AddrFrame . Mode = AddrModeFlat ;
214
234
215
235
while dbghelp. StackWalk64 ( ) (
0 commit comments