This is the mail archive of the libc-ports@sources.redhat.com mailing list for the libc-ports project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Questions about hppa *context functions.


Helge,

On December 15th, 2009 an additional *context test was added to glibc,
see stdlib/tst-makecontext3.c.

This test fails on hppa with:
~~~
makecontext: does not know how to handle more than 8 arguments
~~~

I have a couple of questions and comments about hppa's *context implementation:

1. Why limit the number of input arguments to 8?

The ABI should allow an unlimited number of arguments to be placed on
the stack. It is up to the caller to make sure that
ucp->uc_stack.ss_sp points to enough space to hold all of the
additional arguments.

2. It doesn't appear that the current implementation transfers
ucp->uc_stack.ss_sp to the stack pointer when makecontext() is called.

Take a look at:
http://www.opengroup.org/onlinepubs/009695399/functions/makecontext.html

The caller can set an alternate stack by setting ucp->uc_stack.ss_sp,
and makecontext should likely do:
ucp->uc_mcontext.sc_gr[30] = ucp->uc_stack.ss_sp + <space required by args>;

3. POSIX says that all the arguments must be of type int, but in a
comment you write "XXX: This implementation only handles integer
arguments."

Is there any reason this comment should stay there?

To give you an example, I'm attaching a modified makecontext.diff for
you to comment on.

Cheers,
Carlos.

Attachment: makecontext.diff
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]