new syscall-stub support now in CVS glibc

From: David Mosberger <davidm_at_napali.hpl.hp.com>
Date: 2003-12-11 13:00:27
The latest CVS tree of glibc now sports official support for the new
syscall-stubs (which enable EPC-based kernel entry and light-weight
system call handlers).  For backwards-compatibility reasons, the new
stubs will only be used for NPTL/TLS-enabled versions of libc, but
that should be the normal case for most distros already (or it will be
the normal case soon).

Compared to the stubs which we discussed earlier on this list, there
was one small change: the kernel entry point is now being stored at
offset 8 instead of -8 of the thread-pointer (register r13).  It turns
out that was easier to support in NPTL and since that word is
thread-library-specific anyhow, there was no reason not to use it.  In
other words, the latest new syscall-stubs look like this:

	adds r2 = 8, r13;;
	ld8 r2 = [r2]
	.save ar.pfs, r11
	mov r11 = ar.pfs;;
	.body
	mov r15 = SYSCALLNUMBER
	mov b7 = r2
	br.call.sptk.many b6 = b7
	.restore sp
	mov ar.pfs = r11

Of course, no application should rely on this (they should use
syscall() instead, if necessary), but I just mention it for
completeness.

If you want to play with the new syscall-stubs, you'll need to update
GCC first because the existing GCCs have unwinders that aren't
sufficiently capable of supporting the new syscall-stubs.  Jakub
Jelinek submitted a patch [1] for this already.  The alternative (and
recommended) way to get GCC updated is to install libunwind v0.96 [2]
first and then to build GCC v3.3.x or newer.  GCC will automatically
detect the presence of libunwind and use it as the unwinder in that
case.

Enjoy,

	--david

[1] http://gcc.gnu.org/ml/gcc-patches/2003-12/msg00940.html
[2] http://www.hpl.hp.com/research/linux/libunwind/
-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Wed Dec 10 21:08:15 2003

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:20 EST