1109905Smarkm/* LINTLIBRARY */
234198Sjdp/*-
334198Sjdp * Copyright 1996-1998 John D. Polstra.
434198Sjdp * All rights reserved.
534198Sjdp *
634198Sjdp * Redistribution and use in source and binary forms, with or without
734198Sjdp * modification, are permitted provided that the following conditions
834198Sjdp * are met:
934198Sjdp * 1. Redistributions of source code must retain the above copyright
1034198Sjdp *    notice, this list of conditions and the following disclaimer.
1134198Sjdp * 2. Redistributions in binary form must reproduce the above copyright
1234198Sjdp *    notice, this list of conditions and the following disclaimer in the
1334198Sjdp *    documentation and/or other materials provided with the distribution.
1434198Sjdp *
1534198Sjdp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1634198Sjdp * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1734198Sjdp * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1834198Sjdp * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
1934198Sjdp * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2034198Sjdp * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2134198Sjdp * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2234198Sjdp * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2334198Sjdp * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2434198Sjdp * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25200038Skib *
26200038Skib * $FreeBSD: releng/11.0/lib/csu/i386/crt1_c.c 292000 2015-12-08 19:32:58Z emaste $
2734198Sjdp */
2834198Sjdp
29216338Sdim#include <sys/cdefs.h>
30216338Sdim__FBSDID("$FreeBSD: releng/11.0/lib/csu/i386/crt1_c.c 292000 2015-12-08 19:32:58Z emaste $");
31216338Sdim
3234198Sjdp#include <stdlib.h>
3399354Smarkm
3493399Smarkm#include "libc_private.h"
3567811Sobrien#include "crtbrand.c"
36232832Skib#include "ignore_init.c"
3734198Sjdp
3834198Sjdptypedef void (*fptr)(void);
3934198Sjdp
40100167Smarkmextern void _start(char *, ...);
4134198Sjdp
4238928Sjdp#ifdef GCRT
4338928Sjdpextern void _mcleanup(void);
4438928Sjdpextern void monstartup(void *, void *);
4538928Sjdpextern int eprol;
4638928Sjdpextern int etext;
4738928Sjdp#endif
4838928Sjdp
49200038Skibvoid _start1(fptr, int, char *[]) __dead2;
50100167Smarkm
51200038Skib/* The entry function, C part. */
5234198Sjdpvoid
53200038Skib_start1(fptr cleanup, int argc, char *argv[])
5434198Sjdp{
5599354Smarkm	char **env;
5634198Sjdp
5799354Smarkm	env = argv + argc + 1;
58245133Skib	handle_argv(argc, argv, env);
5999354Smarkm	if (&_DYNAMIC != NULL)
60100167Smarkm		atexit(cleanup);
61133754Sdfr	else
62133754Sdfr		_init_tls();
6334198Sjdp
6438928Sjdp#ifdef GCRT
6599354Smarkm	atexit(_mcleanup);
6699354Smarkm	monstartup(&eprol, &etext);
67151072Sbde__asm__("eprol:");
6838928Sjdp#endif
69232832Skib
70232832Skib	handle_static_init(argc, argv, env);
71232832Skib	exit(main(argc, argv, env));
7234198Sjdp}
7338928Sjdp
74200038Skib__asm(".hidden	_start1");
75