summary refs log tree commit diff
path: root/src/libstd/sys
diff options
context:
space:
mode:
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2018-12-31 21:48:06 +0100
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2018-12-31 22:07:28 +0100
commitf4826abf6d04d3c468e37c3e7b670d35030ef0e0 (patch)
tree3c33c13b5b40f639ed08c0e52a657f1e576ad382 /src/libstd/sys
parent6efaef61899f6551914156f69809aa7d5854399d (diff)
downloadrust-f4826abf6d04d3c468e37c3e7b670d35030ef0e0.tar.gz
rust-f4826abf6d04d3c468e37c3e7b670d35030ef0e0.zip
Fix backtraces on Windows
Diffstat (limited to 'src/libstd/sys')
-rw-r--r--src/libstd/sys/windows/backtrace/mod.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/libstd/sys/windows/backtrace/mod.rs b/src/libstd/sys/windows/backtrace/mod.rs
index a6bd8f8cc51..4bda8ac91da 100644
--- a/src/libstd/sys/windows/backtrace/mod.rs
+++ b/src/libstd/sys/windows/backtrace/mod.rs
@@ -103,7 +103,7 @@ fn set_frames<W: StackWalker>(StackWalk: W, frames: &mut [Frame]) -> io::Result<
         frames[i] = Frame {
             symbol_addr: addr,
             exact_position: addr,
-            inline_context: 0,
+            inline_context: frame.get_inline_context(),
         };
 
         i += 1
@@ -209,6 +209,7 @@ trait StackFrame {
     fn new() -> Self;
     fn init(&mut self, ctx: &c::CONTEXT) -> c::DWORD;
     fn get_addr(&self) -> *const u8;
+    fn get_inline_context(&self) -> u32;
 }
 
 impl StackFrame for c::STACKFRAME_EX {
@@ -263,6 +264,10 @@ impl StackFrame for c::STACKFRAME_EX {
     fn get_addr(&self) -> *const u8 {
         (self.AddrPC.Offset - 1) as *const u8
     }
+
+    fn get_inline_context(&self) -> u32 {
+        self.InlineFrameContext
+    }
 }
 
 impl StackFrame for c::STACKFRAME64 {
@@ -317,6 +322,10 @@ impl StackFrame for c::STACKFRAME64 {
     fn get_addr(&self) -> *const u8 {
         (self.AddrPC.Offset - 1) as *const u8
     }
+
+    fn get_inline_context(&self) -> u32 {
+        0
+    }
 }
 
 enum StackWalkVariant {