dyld-750.6.tar.gz
[apple/dyld.git] / src / start_glue.s
1 /*
2  * Copyright (c) 2011 Apple Inc. All rights reserved.
3  *
4  * @APPLE_LICENSE_HEADER_START@
5  * 
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. Please obtain a copy of the License at
10  * http://www.opensource.apple.com/apsl/ and read it before using this
11  * file.
12  * 
13  * The Original Code and all software distributed under the License are
14  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18  * Please see the License for the specific language governing rights and
19  * limitations under the License.
20  * 
21  * @APPLE_LICENSE_HEADER_END@
22  */
23  
24  
25
26 #ifdef __i386__
27
28     .align 2
29     .globl _start
30     .private_extern _start
31 _start:
32         nop             # <rdar://problem/10753356> backtraces of LC_MAIN binaries don't end in "start"
33 Lstart:
34         movl    %eax,(%esp)         # pass result from main() to exit() 
35         call    _exit
36         hlt
37         
38 #endif /* __i386__ */
39
40
41 #if __x86_64__
42
43     .align 2
44     .globl _start
45     .private_extern _start
46 _start:
47         nop             # <rdar://problem/10753356> backtraces of LC_MAIN binaries don't end in "start"
48 Lstart:
49         movl    %eax,%edi           # pass result from main() to exit() 
50         call    _exit
51         hlt
52
53 #endif
54
55
56 #if __arm__
57  
58     .align 2
59         .code   16  
60     .globl _start
61     .private_extern _start
62         .thumb_func     _start
63 _start:
64         nop                                     // <rdar://problem/10753356> backtraces of LC_MAIN binaries don't end in "start"
65 Lstart:
66         bl      _exit                   // result in r0 already in param reg r0
67         trap
68  
69 #endif /* __arm__ */
70
71
72 #if __arm64__
73  
74     .align 2
75     .globl _start
76     .private_extern _start
77 _start:
78         nop
79 Lstart:
80         bl      _exit                   // result in x0 already in param reg x0
81         brk     #3
82
83 #endif /* __arm64__ */
84
85         .subsections_via_symbols
86