mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-07 11:50:24 +00:00
base: add 'Thread::mystack() function
The static 'Thread::mystack()' function returns the stack boundaries of the calling thread. It is useful when a thread uses a diffent stack than the primary one. Fixes #2037
This commit is contained in:
parent
bea48b636e
commit
29a12ab9a2
@ -51,6 +51,8 @@ class Genode::Thread
|
|||||||
typedef Cpu_session::Name Name;
|
typedef Cpu_session::Name Name;
|
||||||
typedef Cpu_session::Weight Weight;
|
typedef Cpu_session::Weight Weight;
|
||||||
|
|
||||||
|
struct Stack_info { addr_t base; addr_t top; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -319,14 +321,14 @@ class Genode::Thread
|
|||||||
Native_thread &native_thread();
|
Native_thread &native_thread();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return top of stack
|
* Return top of primary stack
|
||||||
*
|
*
|
||||||
* \return pointer just after first stack element
|
* \return pointer just after first stack element
|
||||||
*/
|
*/
|
||||||
void *stack_top() const;
|
void *stack_top() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return base of stack
|
* Return base of primary stack
|
||||||
*
|
*
|
||||||
* \return pointer to last stack element
|
* \return pointer to last stack element
|
||||||
*/
|
*/
|
||||||
@ -354,6 +356,11 @@ class Genode::Thread
|
|||||||
*/
|
*/
|
||||||
static Thread *myself();
|
static Thread *myself();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return information about the current stack
|
||||||
|
*/
|
||||||
|
static Stack_info mystack();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure that the stack has a given size at the minimum
|
* Ensure that the stack has a given size at the minimum
|
||||||
*
|
*
|
||||||
|
@ -190,6 +190,14 @@ void *Thread::stack_base() const { return (void*)_stack->base(); }
|
|||||||
void Thread::stack_size(size_t const size) { _stack->size(size); }
|
void Thread::stack_size(size_t const size) { _stack->size(size); }
|
||||||
|
|
||||||
|
|
||||||
|
Thread::Stack_info Thread::mystack()
|
||||||
|
{
|
||||||
|
addr_t base = Stack_allocator::addr_to_base(&base);
|
||||||
|
Stack *stack = Stack_allocator::base_to_stack(base);
|
||||||
|
return { stack->base(), stack->top() };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t Thread::stack_virtual_size()
|
size_t Thread::stack_virtual_size()
|
||||||
{
|
{
|
||||||
return Genode::stack_virtual_size();
|
return Genode::stack_virtual_size();
|
||||||
|
@ -1 +1 @@
|
|||||||
9ad059d85f8ad1282da3e939b5f187173b580ab2
|
2db8119ea245fc40501d00968f364e0092a7f090
|
||||||
|
@ -12,10 +12,10 @@ From: Christian Prochaska <christian.prochaska@genode-labs.com>
|
|||||||
qtwebkit/Source/WTF/wtf/OSAllocatorPosix.cpp | 13 ++++++++++++
|
qtwebkit/Source/WTF/wtf/OSAllocatorPosix.cpp | 13 ++++++++++++
|
||||||
qtwebkit/Source/WTF/wtf/OSRandomSource.cpp | 8 ++++++++
|
qtwebkit/Source/WTF/wtf/OSRandomSource.cpp | 8 ++++++++
|
||||||
qtwebkit/Source/WTF/wtf/Platform.h | 19 +++++++++++++++---
|
qtwebkit/Source/WTF/wtf/Platform.h | 19 +++++++++++++++---
|
||||||
qtwebkit/Source/WTF/wtf/StackBounds.cpp | 12 +++++++++++
|
qtwebkit/Source/WTF/wtf/StackBounds.cpp | 13 ++++++++++++
|
||||||
qtwebkit/Source/WTF/wtf/TCSystemAlloc.cpp | 21 ++++++++++++++++++++
|
qtwebkit/Source/WTF/wtf/TCSystemAlloc.cpp | 21 ++++++++++++++++++++
|
||||||
.../platform/graphics/qt/MediaPlayerPrivateQt.cpp | 3 +++
|
.../platform/graphics/qt/MediaPlayerPrivateQt.cpp | 3 +++
|
||||||
11 files changed, 96 insertions(+), 6 deletions(-)
|
11 files changed, 97 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
diff --git a/qtwebkit/Source/JavaScriptCore/dfg/DFGOperations.cpp b/qtwebkit/Source/JavaScriptCore/dfg/DFGOperations.cpp
|
diff --git a/qtwebkit/Source/JavaScriptCore/dfg/DFGOperations.cpp b/qtwebkit/Source/JavaScriptCore/dfg/DFGOperations.cpp
|
||||||
index bb9ccc3..077cbed 100644
|
index bb9ccc3..077cbed 100644
|
||||||
@ -236,7 +236,7 @@ index 35fa7e3..89e6205 100644
|
|||||||
|
|
||||||
/* Setting this flag compares JIT results with interpreter results. */
|
/* Setting this flag compares JIT results with interpreter results. */
|
||||||
diff --git a/qtwebkit/Source/WTF/wtf/StackBounds.cpp b/qtwebkit/Source/WTF/wtf/StackBounds.cpp
|
diff --git a/qtwebkit/Source/WTF/wtf/StackBounds.cpp b/qtwebkit/Source/WTF/wtf/StackBounds.cpp
|
||||||
index a272ce3..a2e7484 100644
|
index a272ce3..65a5a1f 100644
|
||||||
--- a/qtwebkit/Source/WTF/wtf/StackBounds.cpp
|
--- a/qtwebkit/Source/WTF/wtf/StackBounds.cpp
|
||||||
+++ b/qtwebkit/Source/WTF/wtf/StackBounds.cpp
|
+++ b/qtwebkit/Source/WTF/wtf/StackBounds.cpp
|
||||||
@@ -44,6 +44,10 @@
|
@@ -44,6 +44,10 @@
|
||||||
@ -250,7 +250,7 @@ index a272ce3..a2e7484 100644
|
|||||||
#elif OS(UNIX)
|
#elif OS(UNIX)
|
||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
@@ -128,6 +132,14 @@ void StackBounds::initialize()
|
@@ -128,6 +132,15 @@ void StackBounds::initialize()
|
||||||
m_bound = estimateStackBound(m_origin);
|
m_bound = estimateStackBound(m_origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,8 +258,9 @@ index a272ce3..a2e7484 100644
|
|||||||
+
|
+
|
||||||
+void StackBounds::initialize()
|
+void StackBounds::initialize()
|
||||||
+{
|
+{
|
||||||
+ m_bound = Genode::Thread::myself()->stack_base();
|
+ Genode::Thread::Stack_info stack_info = Genode::Thread::mystack();
|
||||||
+ m_origin = Genode::Thread::myself()->stack_top();
|
+ m_bound = (void*)stack_info.base;
|
||||||
|
+ m_origin = (void*)stack_info.top;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
#elif OS(UNIX)
|
#elif OS(UNIX)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user