Linux current_stack_region()

David Holmes - Sun Microsystems David.Holmes at Sun.COM
Mon Mar 10 17:52:10 PDT 2008

Note also that pthread_attr_setguardsize may internally round-up the 
guardsize to a multiple of page-size; but pthread_attr_getguardsize 
returns the original supplied value not the rounded one. So you would 
have a problem trying to adjust for the true guardsize in a portable way.


David Holmes - Sun Microsystems said the following on 11/03/08 10:34 AM:
> Hi Gary,
> Disclaimer: this isn't code I've worked with - though I did review the 
> most recent changes - and stack management is a particularly confusing 
> area. :)
> Gary Benson said the following on 11/03/08 01:06 AM:
>> The first thing I discovered is that the current linux code is wrong
>> when there are guard pages.  The comment above current_stack_region
>> in os_linux_{i486,amd64,x86}.cpp puts the guard page outside the
>> region reported by pthread_attr_getstack(), which is not the case.
> Reading the POSIX specification I don't see anything that explicitly 
> states this, but I would infer that the guard pages are not part of the 
> region reported by pthread_attr_getstack from the statement:
> "The stack attributes specify the area of storage to be used for the 
> created thread's stack."
> i.e. getstack reports the _usable_ stack for the thread. Hence any guard 
> region is outside that.
>> I started modifying current_stack_region to do just that, but its
>> comments contain warnings that pthread_getattr_np() returns bogus
>> values for initial threads.  os::Linux::capture_initial_stack()
>> has more such warnings, though neither mentions exactly _what_ was
>> bogus.  Does anyone know?  Without a working pthread_getattr_np()
>> you can't use pthread_attr_getguardsize(), and without that it's
>> not possible to implement current_stack_region() in the form it's
>> currently defined.
> The comment re pthread_getattr_np is about 5 years old and I couldn't 
> find anything more specific than the inference that they discovered that 
> it returned the wrong values on the initial thread on the distributions 
> of the day (whatever they may have been). Hotspot is full of this kind 
> of historical baggage with workarounds for a range of now defunct linux 
> systems (and old Solaris versions too).
> Cheers,
> David Holmes

More information about the hotspot-dev mailing list