Remove getresuid and getresgid.
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / linux / sparc / sparc64 / init-first.h
1 /* Prepare arguments for library initialization function.
2    Copyright (C) 1997 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Library General Public License as
7    published by the Free Software Foundation; either version 2 of the
8    License, or (at your option) any later version.
9
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    Library General Public License for more details.
14
15    You should have received a copy of the GNU Library General Public
16    License along with the GNU C Library; see the file COPYING.LIB.  If not,
17    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18    Boston, MA 02111-1307, USA.  */
19
20 /* The job of this fragment it to find argc and friends for INIT.
21    This is done in one of two ways: either in the stack context
22    of program start, or having dlopen pass them in.  */
23
24 #include <sysdep.h>
25
26 #define __S1(x) #x
27 #define __S(x) __S1(x)
28
29 #ifdef PIC
30
31 #define SYSDEP_CALL_INIT(NAME, INIT) asm("\
32         .weak _dl_starting_up
33         .global " #NAME "
34         .type " #NAME ",@function
35 " #NAME ":
36         save    %sp, -192, %sp
37 1:      call    11f
38         sethi   %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
39 11:     or      %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
40         add     %l7, %o7, %l7
41         /* Are we a dynamic libc being loaded into a static program?  */
42         sethi   %hi(_dl_starting_up), %l2
43         or      %l2, %lo(_dl_starting_up), %l2
44         ldx     [%l7+%l2], %l2
45         brz,pn  %l2, 3f
46          sethi  %hi(__libc_multiple_libcs), %l3
47         ld      [%l2], %l4
48         mov     %g0, %l2
49         movrz   %l4, 1, %l2
50 3:      or      %l3, %lo(__libc_multiple_libcs), %l3
51         ldx     [%l7+%l3], %l3
52         st      %l2, [%l3]
53         /* If so, argc et al are in %o0-%o2 already.  Otherwise, load them.  */
54         brnz,pn %l2, " #INIT "
55          restore
56         ldx     [%sp+" __S(STACK_BIAS) "+22*8], %o0
57         add     %sp, " __S(STACK_BIAS) "+23*8, %o1
58         sllx    %o0, 3, %o2
59         add     %o2, %o1, %o2
60         ba      " #INIT "
61          add    %o2, 8, %o2
62         .size "#NAME ", .-" #NAME);
63
64 #else
65
66 #define SYSDEP_CALL_INIT(NAME, INIT) asm("\
67         .weak _dl_starting_up
68         .global " #NAME "
69         .type " #NAME ",@function
70 " #NAME ":
71         /* Are we a dynamic libc being loaded into a static program?  */
72         sethi   %hi(_dl_starting_up), %g2
73         or      %g2, %lo(_dl_starting_up), %g2
74         brz,pt  %g2, 3f
75          sethi  %hi(__libc_multiple_libcs), %g3
76         ld      [%g2], %g1
77         mov     %g0, %g2
78         movrz   %g1, 1, %g2
79 3:      st      %g2, [%g3 + %lo(__libc_multiple_libcs)]
80         /* If so, argc et al are in %o0-%o2 already.  Otherwise, load them.  */
81         brnz,pn %g2, " #INIT "
82          nop
83         ldx     [%sp+" __S(STACK_BIAS) "+22*8], %o0
84         add     %sp, " __S(STACK_BIAS) "+23*8, %o1
85         sllx    %o0, 3, %o2
86         add     %o2, %o1, %o2
87         ba      " #INIT "
88          add    %o2, 8, %o2
89         .size "#NAME ", .-" #NAME);
90
91 #endif