| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "platform/heap/StackFrameDepth.h" | 6 #include "platform/heap/StackFrameDepth.h" |
| 7 | 7 |
| 8 #include "public/platform/Platform.h" | 8 #include "public/platform/Platform.h" |
| 9 | 9 |
| 10 #if OS(WIN) | 10 #if OS(WIN) |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 #if OS(FREEBSD) | 91 #if OS(FREEBSD) |
| 92 pthread_attr_destroy(&attr); | 92 pthread_attr_destroy(&attr); |
| 93 #endif | 93 #endif |
| 94 | 94 |
| 95 return 0; | 95 return 0; |
| 96 #elif OS(MACOSX) | 96 #elif OS(MACOSX) |
| 97 // FIXME: pthread_get_stacksize_np() returns shorter size than actual stack | 97 // FIXME: pthread_get_stacksize_np() returns shorter size than actual stack |
| 98 // size for the main thread on Mavericks(10.9). | 98 // size for the main thread on Mavericks(10.9). |
| 99 return 0; | 99 return 0; |
| 100 #elif OS(WIN) && COMPILER(MSVC) | 100 #elif OS(WIN) && COMPILER(MSVC) |
| 101 // On Windows stack limits for the current thread are available in | 101 return ThreadState::current()->threadStackSize(); |
| 102 // the thread information block (TIB). Its fields can be accessed through | |
| 103 // FS segment register on x86 and GS segment register on x86_64. | |
| 104 #ifdef _WIN64 | |
| 105 return __readgsqword(offsetof(NT_TIB64, StackBase)) - __readgsqword(offsetof
(NT_TIB64, StackLimit)); | |
| 106 #else | |
| 107 return __readfsdword(offsetof(NT_TIB, StackBase)) - __readfsdword(offsetof(N
T_TIB, StackLimit)); | |
| 108 #endif | |
| 109 #else | 102 #else |
| 110 #error "Stack frame size estimation not supported on this platform." | 103 #error "Stack frame size estimation not supported on this platform." |
| 111 return 0; | 104 return 0; |
| 112 #endif | 105 #endif |
| 113 } | 106 } |
| 114 | 107 |
| 115 void* StackFrameDepth::getStackStart() | 108 void* StackFrameDepth::getStackStart() |
| 116 { | 109 { |
| 117 #if defined(__GLIBC__) || OS(ANDROID) || OS(FREEBSD) | 110 #if defined(__GLIBC__) || OS(ANDROID) || OS(FREEBSD) |
| 118 pthread_attr_t attr; | 111 pthread_attr_t attr; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 return reinterpret_cast<void*>(__readgsqword(offsetof(NT_TIB64, StackBase)))
; | 147 return reinterpret_cast<void*>(__readgsqword(offsetof(NT_TIB64, StackBase)))
; |
| 155 #else | 148 #else |
| 156 return reinterpret_cast<void*>(__readfsdword(offsetof(NT_TIB, StackBase))); | 149 return reinterpret_cast<void*>(__readfsdword(offsetof(NT_TIB, StackBase))); |
| 157 #endif | 150 #endif |
| 158 #else | 151 #else |
| 159 #error Unsupported getStackStart on this platform. | 152 #error Unsupported getStackStart on this platform. |
| 160 #endif | 153 #endif |
| 161 } | 154 } |
| 162 | 155 |
| 163 } // namespace blink | 156 } // namespace blink |
| OLD | NEW |