Thread stack pointers

Delvin Defoe
Wed Mar 21 21:33:00 GMT 2007

Does this mean if I define sigaction act, set the handler as follows,
 // for stack processing
 act.sa_handler = _otf_process_stack;
 act.sa_flags = 0;

signal the thread in the following manner
  if (tkill(m->_tid,i+1) == -1)
	 fprintf (stderr, "***** tikll failed for thread  %d \n. *****", m->_tid);

define the sa_handler function accordingly

_otf_process_stack (int signo)

the stack top for the thread that receives the signal can be give by
something like
stack_top = &signo + sizeOf(pointer)?


Sorry about my previous imcomplete post.

On 3/21/07, David Daney <> wrote:
> Delvin Defoe wrote:
> > Hi:
> >
> > I am implementing a multi-thread, multiprocessor garbage collection
> > system for Java in gcc.  In the runtime system I need to determine the
> > stack base and stack top pointers for each mutator in order to scan
> > the stack for each mutator for pointers to live heap objects.   Any
> > idea how I can determine or compute these pointers?
> >
> Generic answer:
> How about doing the same thing boehm-gc does?
> For linux, you would have each thread is register with the GC when it is
> started.  In this registration function you find the address of
> something on the stack of that thread, then look in /proc/self/maps to
> see what memory range contains that address.  That range will be your
> stack bounds.
> To find the stack top, send a signal to a thread, and then the stack top
> will be slightly above the address of an automatic variable of the
> signal handler function.
> David Daney

Delvin Defoe
Doctoral Candidate
Department of Computer Science
Washington University in Saint Louis

More information about the Java mailing list