]> sourceware.org Git - glibc.git/blame - sysdeps/unix/sysv/linux/init-first.c
Another correction.
[glibc.git] / sysdeps / unix / sysv / linux / init-first.c
CommitLineData
2a072de4
RM
1/* Initialization code run first thing by the ELF startup code. Linux version.
2Copyright (C) 1995, 1996 Free Software Foundation, Inc.
0324daa0
RM
3This file is part of the GNU C Library.
4
5The GNU C Library is free software; you can redistribute it and/or
6modify it under the terms of the GNU Library General Public License as
7published by the Free Software Foundation; either version 2 of the
8License, or (at your option) any later version.
9
10The GNU C Library is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13Library General Public License for more details.
14
15You should have received a copy of the GNU Library General Public
16License along with the GNU C Library; see the file COPYING.LIB. If
17not, write to the Free Software Foundation, Inc., 675 Mass Ave,
18Cambridge, MA 02139, USA. */
19
20#include <unistd.h>
41cfadd6 21#include <sysdep.h>
3776d592
RM
22#include <fpu_control.h>
23#include "init-first.h"
2a072de4 24
0324daa0
RM
25extern void __libc_init (int, char **, char **);
26extern void __libc_global_ctors (void);
27
3776d592
RM
28/* The function is called from assembly stubs the compiler can't see. */
29static void init (void *) __attribute__ ((unused));
0324daa0
RM
30
31static void
3776d592 32init (void *data)
0324daa0 33{
8d71c7b0
RM
34 extern int __personality (int);
35
3776d592
RM
36 int argc = *(long *)data;
37 char **argv = (char **)data + 1;
0324daa0
RM
38 char **envp = &argv[argc + 1];
39
8d71c7b0
RM
40 /* The `personality' system call takes one argument that chooses the
41 "personality", i.e. the set of system calls and such. Zero is the
42 native Linux value; we must make this call first thing to disable
43 emulation of some other system that might have been enabled by default
44 based on the executable format. */
45 __personality (0);
0324daa0
RM
46
47 /* Set the FPU control word to the proper default value. */
42d2676e 48 __setfpucw (__fpu_control);
0324daa0
RM
49
50 __environ = envp;
51 __libc_init (argc, argv, envp);
3776d592
RM
52
53#ifdef PIC
54 __libc_global_ctors ();
55#endif
0324daa0
RM
56}
57
58#ifdef PIC
0324daa0 59
3776d592 60SYSDEP_CALL_INIT(_init, init);
0324daa0
RM
61
62void
3776d592 63__libc_init_first (void)
0324daa0 64{
0324daa0 65}
0324daa0 66
3776d592
RM
67#else
68
69SYSDEP_CALL_INIT(__libc_init_first, init);
0324daa0 70
0324daa0 71#endif
This page took 0.062054 seconds and 5 git commands to generate.