Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/lib/csu/aarch64/crt1_s.S
39478 views
1
/* LINTLIBRARY */
2
/*-
3
* Copyright 1996-1998 John D. Polstra.
4
* Copyright 2014 Andrew Turner.
5
* Copyright 2014-2015 The FreeBSD Foundation.
6
* All rights reserved.
7
*
8
* Portions of this software were developed by Andrew Turner
9
* under sponsorship from the FreeBSD Foundation.
10
*
11
* Redistribution and use in source and binary forms, with or without
12
* modification, are permitted provided that the following conditions
13
* are met:
14
* 1. Redistributions of source code must retain the above copyright
15
* notice, this list of conditions and the following disclaimer.
16
* 2. Redistributions in binary form must reproduce the above copyright
17
* notice, this list of conditions and the following disclaimer in the
18
* documentation and/or other materials provided with the distribution.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
*/
31
32
#include <machine/asm.h>
33
#include <sys/elf_common.h>
34
35
/*
36
* The program entry point
37
* void _start(char **ap, void (*cleanup)(void)) __dead2
38
*/
39
ENTRY(_start)
40
.cfi_undefined x30
41
mov x3, x2 /* cleanup */
42
add x1, x0, #8 /* load argv */
43
ldr x0, [x0] /* load argc */
44
add x2, x1, x0, lsl #3 /* env is after argv */
45
add x2, x2, #8 /* argv is null terminated */
46
#ifdef PIC
47
adrp x4, :got:main
48
ldr x4, [x4, :got_lo12:main]
49
#else
50
ldr x4, =main
51
#endif
52
#ifdef GCRT
53
ldr x5, =eprol
54
ldr x6, =etext
55
/*
56
* __libc_start1_gcrt(argc, argv, env, cleanup, main, &eprol, &etext)
57
*/
58
bl __libc_start1_gcrt
59
eprol:
60
#else
61
/* __libc_start1(argc, argv, env, cleanup, main) */
62
bl __libc_start1
63
#endif
64
END(_start)
65
66
.section .note.GNU-stack,"",@progbits
67
68
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
69
70