1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
.include "asm/macros.inc"
.include "global.inc"
.bss
.global __console_exit
__console_exit: ; 0x021D6F78
.space 0x4
.size __console_exit,.-__console_exit
.global __stdio_exit
__stdio_exit: ; 0x021D6F7C
.space 0x4
.size __stdio_exit,.-__stdio_exit
.global __atexit_curr_func
__atexit_curr_func: ; 0x021D6F80
.space 0x4
.size __atexit_curr_func,.-__atexit_curr_func
.global __aborting
__aborting: ; 0x021D6F84
.space 0x4
.size __aborting,.-__aborting
.global __atexit_funcs
__atexit_funcs: ; 0x021D6F88
.space 0x100
.size __atexit_funcs,.-__atexit_funcs
.text
arm_func_start abort
abort: ; 0x020DE14C
stmdb sp!, {r3,lr}
mov r0, #0x1
bl raise
ldr r1, _020DE16C ; =__aborting - 0xC
mov r0, #0x1
str r0, [r1, #0xc]
bl exit
ldmia sp!, {r3,pc}
.balign 4
_020DE16C: .word __aborting - 0xC
arm_func_end abort
arm_func_start exit
exit: ; 0x020DE170
stmdb sp!, {r4,lr}
ldr r1, _020DE1B8 ; =__aborting - 0xC
mov r4, r0
ldr r0, [r1, #0xc]
cmp r0, #0x0
bne _020DE1AC
bl __destroy_global_chain
ldr r0, _020DE1B8 ; =__stdio_exit - 0x4
ldr r0, [r0, #0x4]
cmp r0, #0x0
beq _020DE1AC
blx r0
ldr r0, _020DE1B8 ; =__stdio_exit - 0x4
mov r1, #0x0
str r1, [r0, #0x4]
_020DE1AC:
mov r0, r4
bl __exit
ldmia sp!, {r4,pc}
.balign 4
_020DE1B8: .word __console_exit
arm_func_end exit
arm_func_start __exit
__exit: ; 0x020DE1BC
stmdb sp!, {r3-r5,lr}
ldr r0, _020DE2CC ; =__cs
bl OS_TryLockMutex
cmp r0, #0x0
bne _020DE1F4
ldr r0, _020DE2D0 ; =OSi_ThreadInfo
ldr r1, _020DE2D4 ; =__cs_id
ldr r2, [r0, #0x4]
ldr r0, _020DE2D8 ; =__cs_ref
ldr r3, [r2, #0x6c]
mov r2, #0x1
str r3, [r1, #0x0]
str r2, [r0, #0x0]
b _020DE24C
_020DE1F4:
ldr r0, _020DE2D0 ; =OSi_ThreadInfo
ldr r1, _020DE2D4 ; =__cs_id
ldr r0, [r0, #0x4]
ldr r1, [r1, #0x0]
ldr r0, [r0, #0x6c]
cmp r1, r0
bne _020DE224
ldr r0, _020DE2D8 ; =__cs_ref
ldr r1, [r0, #0x0]
add r1, r1, #0x1
str r1, [r0, #0x0]
b _020DE24C
_020DE224:
ldr r0, _020DE2CC ; =__cs
bl OS_LockMutex
ldr r0, _020DE2D0 ; =OSi_ThreadInfo
ldr r1, _020DE2D4 ; =__cs_id
ldr r2, [r0, #0x4]
ldr r0, _020DE2D8 ; =__cs_ref
ldr r3, [r2, #0x6c]
mov r2, #0x1
str r3, [r1, #0x0]
str r2, [r0, #0x0]
_020DE24C:
ldr r4, _020DE2DC ; =__console_exit
ldr r0, [r4, #0x8]
cmp r0, #0x0
ble _020DE280
ldr r5, _020DE2E0 ; =__atexit_funcs
_020DE260:
ldr r0, [r4, #0x8]
sub r1, r0, #0x1
ldr r0, [r5, r1, lsl #0x2]
str r1, [r4, #0x8]
blx r0
ldr r0, [r4, #0x8]
cmp r0, #0x0
bgt _020DE260
_020DE280:
ldr r0, _020DE2D8 ; =__cs_ref
ldr r1, [r0, #0x0]
subs r1, r1, #0x1
str r1, [r0, #0x0]
bne _020DE29C
ldr r0, _020DE2CC ; =__cs
bl OS_UnlockMutex
_020DE29C:
ldr r0, _020DE2DC ; =__console_exit
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _020DE2BC
blx r0
ldr r0, _020DE2DC ; =__console_exit
mov r1, #0x0
str r1, [r0, #0x0]
_020DE2BC:
mov r0, #0x0
bl fflush
bl _ExitProcess
ldmia sp!, {r3-r5,pc}
.balign 4
_020DE2CC: .word __cs
_020DE2D0: .word OSi_ThreadInfo
_020DE2D4: .word __cs_id
_020DE2D8: .word __cs_ref
_020DE2DC: .word __console_exit
_020DE2E0: .word __atexit_funcs
arm_func_end __exit
exception abort, 37, 0x00100000
exception exit, 77, 0x00100100
exception __exit, 297, 0x00200300
|