Call exit directly in clone (BZ #21512)
[glibc.git] / sysdeps / unix / sysv / linux / alpha / swapcontext.S
blob31a0babfb1dca46d1d8c880105e4f93c676e0eb5
1 /* Save current context and install the given one.
2    Copyright (C) 2004-2017 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library.  If not, see
17    <http://www.gnu.org/licenses/>.  */
19 #include <sysdep.h>
20 #include <ucontext-offsets.h>
22 ENTRY(__swapcontext)
24 #ifdef PROF
25         ldgp    $29, 0($27)
26         .set noat
27         lda     AT, _mcount
28         jsr     AT, (AT), _mcount
29         .set at
30         .prologue 1
31 #elif defined PIC
32         .prologue 0
33 #else
34         ldgp    $29, 0($27)
35         .prologue 1
36 #endif
38 #ifdef PIC
39         unop
40         bsr     $0, __getcontext_x      !samegp
41         mov     $17, $16
42         br      $31, __setcontext       !samegp
43 #else
44         jsr     $0, __getcontext_x
45         mov     $17, $16
46         jmp     $31, __setcontext
47 #endif
49 END(__swapcontext)
50 weak_alias (__swapcontext, swapcontext)