On Tue, Apr 23, 2013 at 08:57:31AM -0400, Kenneth R Westerback wrote:
> On Tue, Apr 23, 2013 at 03:40:58AM -0600, Landry Breuil wrote:
> > CVSROOT: /cvs
> > Module name: ports
> > Changes by: [email protected] 2013/04/23 03:40:58
> >
> > Modified files:
> > www/webkit : Makefile
> > Added files:
> > www/webkit/patches: patch-Source_WTF_wtf_StackBounds_cpp
> >
> > Log message:
> > Add a patch to fix stack bounds computation, from David Hill (also
> > pushed upstream as https://bugs.webkit.org/show_bug.cgi?id=114978)
> >
> > Seems to fix xombrero/surf crashes on amd64, and seems to magically make
> > webkit sort-of usable (ie dead-slow, but js seems to work) on powerpc.
> > (symptom : ** Message: console message: undefined @0: RangeError: Maximum
> > call stack size exceeded.)
> >
> > Note : webkit still fails to build on mips64* and hppa. sigh.
> >
> > ok jasper@
> >
>
> So the logic was not checked/fixed where the bounds are actually
> checked on architectures that have upward growing stacks? Where
> m_bound and m_origin have their meanings swapped?
The previous logic was doing (note the lovely FIXME) :
67 // FIXME: remove this! - this code unsafely guesses at stack sizes!
68 static const ptrdiff_t estimatedStackSize = 128 * sizeof(void*) * 1024;
69 // This method assumes the stack is growing downwards.
70 static void* estimateStackBound(void* origin)
71 {
72 return static_cast<char*>(origin) - estimatedStackSize;
73 }
122 void StackBounds::initialize()
123 {
124 pthread_t thread = pthread_self();
125 stack_t stack;
126 pthread_stackseg_np(thread, &stack);
127 m_origin = stack.ss_sp;
128 m_bound = estimateStackBound(m_origin);
129 }
The new logic does :
122 void StackBounds::initialize()
123 {
124 pthread_t thread = pthread_self();
125 stack_t stack;
126 pthread_stackseg_np(thread, &stack);
127 m_origin = stack.ss_sp;
128 #if defined(__hppa__) || defined(__hppa64__)
129 // hppa's stack grows up
130 m_bound = static_cast<char*>(m_origin) + stack.ss_size;
131 #else
132 m_bound = static_cast<char*>(m_origin) - stack.ss_size;
133 #endif
134 }
> I only see MACHINE_STACK_GROWS_UP defined on hppa and hppa64. Are
> these really the only archs with upward growing stacks?
It seems so. Do you mean we should pull that #define from a header
instead of hardcoding hppa* here ?
Landry