CS350 COS
COS
Loading...
Searching...
No Matches
crt1.c File Reference
#include <stdlib.h>
#include <sys/cdefs.h>
Include dependency graph for crt1.c:

Go to the source code of this file.

Functions

int main (int, char **)
 
static void handle_static_init (int argc, char **argv, char **env)
 
static void handle_argv (int argc, char *argv[], char **env)
 
void _start (char **ap)
 

Variables

void(* __preinit_array_start [])(int, extern void *char **, extern void *char **)
 

Function Documentation

◆ _start()

void _start ( char **  ap)

Definition at line 101 of file crt1.c.

102{
103 int status;
104 int argc = 0;
105 char **argv = NULL;
106 char **env = NULL;
107
108 argc = *(long *)(void *)ap;
109 argv = ap + 1;
110 //env = ap + 2 + argc;
111 handle_argv(argc, argv, env);
112
113 handle_static_init(argc, argv, env);
114
115 status = main(argc, argv);
116
117 finalizer();
118
119 exit(status);
120}
static void handle_argv(int argc, char *argv[], char **env)
Definition: crt1.c:85
int main(int, char **)
static void handle_static_init(int argc, char **argv, char **env)
Definition: crt1.c:62
#define NULL
Definition: stddef.h:6
void exit(int status)
Definition: exit.c:36
Here is the call graph for this function:

◆ handle_argv()

static void handle_argv ( int  argc,
char *  argv[],
char **  env 
)
inlinestatic

Definition at line 85 of file crt1.c.

86{
87 const char *s;
88
89 if (environ == NULL)
90 environ = env;
91 if (argc > 0 && argv[0] != NULL) {
92 __progname = argv[0];
93 for (s = __progname; *s != '\0'; s++) {
94 if (*s == '/')
95 __progname = s + 1;
96 }
97 }
98}
Here is the caller graph for this function:

◆ handle_static_init()

static void handle_static_init ( int  argc,
char **  argv,
char **  env 
)
inlinestatic

Definition at line 62 of file crt1.c.

63{
64 void (*fn)(int, char **, char **);
65 size_t array_size, n;
66
67 atexit(finalizer);
68
69 array_size = __preinit_array_end - __preinit_array_start;
70 for (n = 0; n < array_size; n++) {
72 if ((uintptr_t)fn != 0 && (uintptr_t)fn != 1)
73 fn(argc, argv, env);
74 }
75 _init();
76 array_size = __init_array_end - __init_array_start;
77 for (n = 0; n < array_size; n++) {
78 fn = __init_array_start[n];
79 if ((uintptr_t)fn != 0 && (uintptr_t)fn != 1)
80 fn(argc, argv, env);
81 }
82}
void(* __preinit_array_start[])(int, extern void *char **, extern void *char **)
int atexit(void(*function)(void))
Definition: exit.c:17
uint64_t uintptr_t
Definition: types.h:16
Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

int main ( int  ,
char **   
)
Here is the caller graph for this function:

Variable Documentation

◆ __preinit_array_start

void(* __preinit_array_start[])(int, extern void *char **, extern void *char **) ( int  ,
extern void *  char **,
extern void *  char ** 
)
extern