Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Side by Side Diff: Source/wtf/StackBounds.cpp

Issue 14482004: Remove OS(QNX) support. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/wtf/Platform.h ('k') | Source/wtf/ThreadingPthreads.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 3 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public 6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 17 matching lines...) Expand all
28 #include <pthread.h> 28 #include <pthread.h>
29 29
30 #elif OS(WINDOWS) 30 #elif OS(WINDOWS)
31 31
32 #include <windows.h> 32 #include <windows.h>
33 33
34 #elif OS(SOLARIS) 34 #elif OS(SOLARIS)
35 35
36 #include <thread.h> 36 #include <thread.h>
37 37
38 #elif OS(QNX)
39
40 #include <errno.h>
41 #include <fcntl.h>
42 #include <pthread.h>
43 #include <stdio.h>
44 #include <string.h>
45 #include <sys/procfs.h>
46
47 #elif OS(UNIX) 38 #elif OS(UNIX)
48 39
49 #include <pthread.h> 40 #include <pthread.h>
50 #if HAVE(PTHREAD_NP_H) 41 #if HAVE(PTHREAD_NP_H)
51 #include <pthread_np.h> 42 #include <pthread_np.h>
52 #endif 43 #endif
53 44
54 #endif 45 #endif
55 46
56 namespace WTF { 47 namespace WTF {
57 48
58 // Bug 26276 - Need a mechanism to determine stack extent 49 // Bug 26276 - Need a mechanism to determine stack extent
59 // 50 //
60 // These platforms should now be working correctly: 51 // These platforms should now be working correctly:
61 // DARWIN, QNX, UNIX 52 // DARWIN, UNIX
62 // These platforms are not: 53 // These platforms are not:
63 // WINDOWS, SOLARIS, OPENBSD 54 // WINDOWS, SOLARIS, OPENBSD
64 // 55 //
65 // FIXME: remove this! - this code unsafely guesses at stack sizes! 56 // FIXME: remove this! - this code unsafely guesses at stack sizes!
66 #if OS(WINDOWS) || OS(SOLARIS) || OS(OPENBSD) 57 #if OS(WINDOWS) || OS(SOLARIS) || OS(OPENBSD)
67 // Based on the current limit used by the JSC parser, guess the stack size. 58 // Based on the current limit used by the JSC parser, guess the stack size.
68 static const ptrdiff_t estimatedStackSize = 128 * sizeof(void*) * 1024; 59 static const ptrdiff_t estimatedStackSize = 128 * sizeof(void*) * 1024;
69 // This method assumes the stack is growing downwards. 60 // This method assumes the stack is growing downwards.
70 static void* estimateStackBound(void* origin) 61 static void* estimateStackBound(void* origin)
71 { 62 {
72 return static_cast<char*>(origin) - estimatedStackSize; 63 return static_cast<char*>(origin) - estimatedStackSize;
73 } 64 }
74 #endif 65 #endif
75 66
76 #if OS(DARWIN) 67 #if OS(DARWIN)
77 68
78 void StackBounds::initialize() 69 void StackBounds::initialize()
79 { 70 {
80 pthread_t thread = pthread_self(); 71 pthread_t thread = pthread_self();
81 m_origin = pthread_get_stackaddr_np(thread); 72 m_origin = pthread_get_stackaddr_np(thread);
82 m_bound = static_cast<char*>(m_origin) - pthread_get_stacksize_np(thread); 73 m_bound = static_cast<char*>(m_origin) - pthread_get_stacksize_np(thread);
83 } 74 }
84 75
85 #elif OS(QNX)
86
87 void StackBounds::initialize()
88 {
89 void* stackBase = 0;
90 size_t stackSize = 0;
91
92 struct _debug_thread_info threadInfo;
93 memset(&threadInfo, 0, sizeof(threadInfo));
94 threadInfo.tid = pthread_self();
95 int fd = open("/proc/self", O_RDONLY);
96 if (fd == -1) {
97 LOG_ERROR("Unable to open /proc/self (errno: %d)", errno);
98 CRASH();
99 }
100 devctl(fd, DCMD_PROC_TIDSTATUS, &threadInfo, sizeof(threadInfo), 0);
101 close(fd);
102 stackBase = reinterpret_cast<void*>(threadInfo.stkbase);
103 stackSize = threadInfo.stksize;
104 ASSERT(stackBase);
105
106 m_bound = static_cast<char*>(stackBase) + 0x1000; // 4kb guard page
107 m_origin = static_cast<char*>(stackBase) + stackSize;
108 }
109
110 #elif OS(SOLARIS) 76 #elif OS(SOLARIS)
111 77
112 void StackBounds::initialize() 78 void StackBounds::initialize()
113 { 79 {
114 stack_t s; 80 stack_t s;
115 thr_stksegment(&s); 81 thr_stksegment(&s);
116 m_origin = s.ss_sp; 82 m_origin = s.ss_sp;
117 m_bound = estimateStackBound(m_origin); 83 m_bound = estimateStackBound(m_origin);
118 } 84 }
119 85
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 #endif 148 #endif
183 // Looks like we should be able to get pTib->StackLimit 149 // Looks like we should be able to get pTib->StackLimit
184 m_bound = estimateStackBound(m_origin); 150 m_bound = estimateStackBound(m_origin);
185 } 151 }
186 152
187 #else 153 #else
188 #error Need a way to get the stack bounds on this platform 154 #error Need a way to get the stack bounds on this platform
189 #endif 155 #endif
190 156
191 } // namespace WTF 157 } // namespace WTF
OLDNEW
« no previous file with comments | « Source/wtf/Platform.h ('k') | Source/wtf/ThreadingPthreads.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698