From aeba9785a6e2e8dca120bb0b62b74ea1eda0a4a8 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 16 Mar 2001 21:07:22 +0000 Subject: Update. 2001-03-16 David Mosberger * sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h (struct sigcontext): Drop hack that was needed for 2.1.1 kernel headers. * sysdeps/unix/sysv/linux/ia64/ucontext_i.h: New file. * sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Rewrite to make it overlay with kernel's "struct sigcontext". * sysdeps/unix/sysv/linux/ia64/Makefile (sysdep_headers): Add sys/rse.h for "misc" subdir. (sysdep_routines): Add __start_context for "stdlib" subdir. * sysdeps/unix/sysv/linux/ia64/sys/rse.h: New file (based on kernel file of the same name). * stdlib/Makefile (tests): Add tst-setcontext. * stdlib/tst-setcontext.c: New file (based on a sample program by Uli Drepper). * sysdeps/unix/sysv/linux/ia64/setcontext.S: New file. * sysdeps/unix/sysv/linux/ia64/getcontext.S: New file. * sysdeps/unix/sysv/linux/ia64/__start_context.S: New file. * sysdeps/unix/sysv/linux/ia64/makecontext.c: New file. * sysdeps/unix/sysv/linux/ia64/__longjmp.S (__longjmp): Use extr.u instead of shift & and. --- sysdeps/unix/sysv/linux/ia64/__start_context.S | 51 ++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 sysdeps/unix/sysv/linux/ia64/__start_context.S (limited to 'sysdeps/unix/sysv/linux/ia64/__start_context.S') diff --git a/sysdeps/unix/sysv/linux/ia64/__start_context.S b/sysdeps/unix/sysv/linux/ia64/__start_context.S new file mode 100644 index 0000000000..c21b4cf33a --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/__start_context.S @@ -0,0 +1,51 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If + not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include +#include + +/* When a context set up by __makecontext() is activated, control + transfers to __start_context. When we get here: + + b1 = entry point of function to call + in0 = address of UCP to resume after function returns + in1 = global pointer for __start_context + out0 .. outN = arguments for function */ + +ENTRY(__start_context) + .prologue + alloc r2 = ar.pfs, 2, 0, 8, 0 + + .save rp, r4 // terminate call chain with a NULL rp + mov r4 = r0 + ;; + + .body + br.call.sptk rp = b1 +1: + mov gp = in1 // restore gp + cmp.ne p6,p0 = in0, r0 // uc_link != 0 ? + ;; +(p6) mov out0 = in0 +(p6) br.call.sptk rp = __setcontext +.Lexit: + mov out0 = 0 + br.call.sptk rp = exit + +1: br.cond.sptk .Lexit +END(__start_context) -- cgit 1.4.1